<?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>171471</bug_id>
          
          <creation_ts>2017-04-28 18:56:11 -0700</creation_ts>
          <short_desc>Speedometer: Update the Flight.js implementation to a more recent library version</short_desc>
          <delta_ts>2017-05-13 17:40:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=172077</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Addy Osmani">addyo</reporter>
          <assigned_to name="Addy Osmani">addyo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302947</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 18:56:11 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), this brings an up to date Flight TodoMVC implementation to the benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302949</commentid>
    <comment_count>1</comment_count>
      <attachid>308648</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 18:59:51 -0700</bug_when>
    <thetext>Created attachment 308648
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306252</commentid>
    <comment_count>2</comment_count>
      <attachid>308648</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-08 21:55:24 -0700</bug_when>
    <thetext>Comment on attachment 308648
Patch

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

&gt; PerformanceTests/ChangeLog:22


Please remove these per-rule comments throughout your change log since they don&apos;t add any meaningful value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307525</commentid>
    <comment_count>3</comment_count>
      <attachid>309801</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 15:40:32 -0700</bug_when>
    <thetext>Created attachment 309801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307562</commentid>
    <comment_count>4</comment_count>
      <attachid>309816</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 16:28:50 -0700</bug_when>
    <thetext>Created attachment 309816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307564</commentid>
    <comment_count>5</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 16:29:38 -0700</bug_when>
    <thetext>Removed per-rule comments throughout the changelog. Let me know if I missed anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307565</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 16:30:32 -0700</bug_when>
    <thetext>Nice! Let&apos;s start landing these!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307621</commentid>
    <comment_count>7</comment_count>
      <attachid>309816</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 17:15:28 -0700</bug_when>
    <thetext>Comment on attachment 309816
Patch

Clearing flags on attachment: 309816

Committed r216708: &lt;http://trac.webkit.org/changeset/216708&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307622</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 17:15:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308648</attachid>
            <date>2017-04-28 18:59:51 -0700</date>
            <delta_ts>2017-05-11 15:40:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171471-20170428185950.patch</filename>
            <type>text/plain</type>
            <size>1484529</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTY1CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLjQwODY5NTRmMmFkMWZhM2M2M2MwNjJjMjEz
ZjgxM2Y4YmQ3MWM4MDcgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjgxIEBACisyMDE3LTA0
LTI4ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBVcGRhdGUgdGhlIEZsaWdodC5qcyBpbXBsZW1lbnRhdGlvbiB0byBhIG1vcmUgcmVj
ZW50IGxpYnJhcnkgdmVyc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTcxNDcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIFNwZWVkb21ldGVyOiBVcGRhdGUgRmxpZ2h0SlMgVG9kb01WQyBpbXBsZW1lbnRh
dGlvbgorCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvLmdpdGlnbm9yZTogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uanNoaW50
cmM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL21haW4uanM6IFJlbW92ZWQuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvYXBwL2pzL3N0b3JlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyLmpzb246IFJlbW92
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5qczogUmVt
b3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvY29tcG9zZS5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvaW5kZXguanM6
IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2xvZ2dlci5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanM6
IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNl
LmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9u
L2JnLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanM6
IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9kYXRhL3N0YXRzLmpzLgorICAg
ICAgICAoc3RhdHMudGhpcy5yZWNvdW50KToKKyAgICAgICAgKHN0YXRzKToKKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2FwcC9qcy9kYXRhL3RvZG9zLmpzLgorICAgICAgICAodG9kb3MudGhpcy5sb2FkKToKKyAgICAg
ICAgKHRvZG9zLnRoaXMuZmlsdGVyKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL21haW4uanM6
IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvcGFnZS9hcHAuanM6IFJlbmFtZWQgZnJv
bSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9hcHAuanMuCisgICAgICAgIChpbml0aWFsaXplKToK
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3N0b3JlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL3VpL21haW5fc2VsZWN0b3IuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2FwcC9qcy91aS9tYWluX3NlbGVjdG9yLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMv
dWkvbmV3X2l0ZW0uanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9u
ZXdfaXRlbS5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3N0YXRzLmpzOiBSZW5hbWVk
IGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L2FwcC9qcy91aS90b2RvX2xpc3QuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2FwcC9qcy91aS90b2RvX2xpc3QuanMuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS90b2dn
bGVfYWxsLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvdG9nZ2xl
X2FsbC5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5qczogUmVu
YW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5qcy4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvYXBwL2pzL3V0aWxzLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9hcHAvanMvdXRpbHMuanMuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvc3Rh
dHMuaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0
cy5odG1sLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbDogUmVuYW1l
ZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L2luZGV4Lmh0bWw6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2luZGV4
Lmh0bWwuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9SRUFETUUubWQ6IEFk
ZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZGVwb3QvZGVwb3QuanM6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZGVwb3QvZGVwb3QuanMu
CisgICAgICAgIChhcGkuc2F2ZSk6CisgICAgICAgIChhcGkuZmluZCk6CisgICAgICAgIChhcGku
YWxsKToKKyAgICAgICAgKGFwaS5kZXN0cm95QWxsKToKKyAgICAgICAgKGFwaS5zaXplKToKKyAg
ICAgICAgKGFwaS5yZWZyZXNoKToKKyAgICAgICAgKGRlcG90KToKKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL2RlcG90L2RlcG90Lm1pbi5qczogQWRkZWQuCisgICAgICAgIChmKToKKyAg
ICAgICAgKGgpOgorICAgICAgICAoZCk6CisgICAgICAgIChnKToKKyAgICAgICAgKGouc2F2ZSk6
CisgICAgICAgIChqLnVwZGF0ZSk6CisgICAgICAgIChqLnVwZGF0ZUFsbCk6CisgICAgICAgIChq
LmZpbmQpOgorICAgICAgICAoai5hbGwpOgorICAgICAgICAoai5kZXN0cm95KToKKyAgICAgICAg
KGouZGVzdHJveUFsbCk6CisgICAgICAgIChqLnNpemUpOgorICAgICAgICAoai5nZXQgcmV0dXJu
KToKKyAgICAgICAgKGopOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZGVwb3QvcGFj
a2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGlt
L0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0v
ZXM1LXNoYW0uanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVu
dHMvZXM1LXNoaW0vZXM1LXNoYW0uanMuCisgICAgICAgIChzdXBwb3J0c0FjY2Vzc29ycy5vd25z
KToKKyAgICAgICAgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRmFsbGJhY2suT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgIChPYmplY3QuY3JlYXRlLnN1cHBvcnRzUHJvdG8udHlwZW9mLmRvY3VtZW50LnN0cmlu
Z19hcHBlYXJlZF9oZXJlLmNyZWF0ZUVtcHR5KToKKyAgICAgICAgKE9iamVjdC5jcmVhdGUuZWxz
ZS5FbXB0eSk6CisgICAgICAgIChPYmplY3QuY3JlYXRlLmVsc2UuY3JlYXRlRW1wdHkpOgorICAg
ICAgICAoT2JqZWN0LmNyZWF0ZS5UeXBlKToKKyAgICAgICAgKE9iamVjdC5jcmVhdGUuT2JqZWN0
LmNyZWF0ZSk6CisgICAgICAgIChPYmplY3QuZGVmaW5lUHJvcGVydGllcy5kZWZpbmVQcm9wZXJ0
aWVzRmFsbGJhY2suT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpOgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoYW0ubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKGVs
c2UpOgorICAgICAgICAoc3VwcG9ydHNBY2Nlc3NvcnMub3ducyk6CisgICAgICAgIChPYmplY3Qu
Z2V0UHJvdG90eXBlT2YuT2JqZWN0LmdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRmFsbGJhY2su
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChPYmplY3QuZ2V0T3du
UHJvcGVydHlOYW1lcy5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChPYmpl
Y3QuY3JlYXRlLnN1cHBvcnRzUHJvdG8udHlwZW9mLmRvY3VtZW50LnN0cmluZ19hcHBlYXJlZF9o
ZXJlLmNyZWF0ZUVtcHR5KToKKyAgICAgICAgKE9iamVjdC5jcmVhdGUuZWxzZS5FbXB0eSk6Cisg
ICAgICAgIChPYmplY3QuY3JlYXRlLmVsc2UuY3JlYXRlRW1wdHkpOgorICAgICAgICAoT2JqZWN0
LmNyZWF0ZS5UeXBlKToKKyAgICAgICAgKE9iamVjdC5jcmVhdGUuT2JqZWN0LmNyZWF0ZSk6Cisg
ICAgICAgIChkb2VzRGVmaW5lUHJvcGVydHlXb3JrKToKKyAgICAgICAgKE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eS5kZWZpbmVQcm9wZXJ0eUZhbGxiYWNrLk9iamVjdC5kZWZpbmVQcm9wZXJ0eSk6Cisg
ICAgICAgIChPYmplY3QuZGVmaW5lUHJvcGVydGllcy5kZWZpbmVQcm9wZXJ0aWVzRmFsbGJhY2su
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMpOgorICAgICAgICAoT2JqZWN0LnNlYWwuT2JqZWN0LnNl
YWwpOgorICAgICAgICAoT2JqZWN0LmZyZWV6ZS5PYmplY3QuZnJlZXplKToKKyAgICAgICAgKHRy
eS5PYmplY3QuZnJlZXplKToKKyAgICAgICAgKGNhdGNoLk9iamVjdC5mcmVlemUuZnJlZXplLnJl
dHVybi5mcmVlemUpOgorICAgICAgICAoY2F0Y2guT2JqZWN0LmZyZWV6ZSk6CisgICAgICAgIChj
YXRjaCk6CisgICAgICAgIChPYmplY3QucHJldmVudEV4dGVuc2lvbnMuT2JqZWN0LnByZXZlbnRF
eHRlbnNpb25zKToKKyAgICAgICAgKE9iamVjdC5pc1NlYWxlZC5PYmplY3QuaXNTZWFsZWQpOgor
ICAgICAgICAoT2JqZWN0LmlzRnJvemVuLk9iamVjdC5pc0Zyb3plbik6CisgICAgICAgIChPYmpl
Y3QuaXNFeHRlbnNpYmxlLk9iamVjdC5pc0V4dGVuc2libGUpOgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoaW0uanM6IEFkZGVkLgorICAgICAgICAoZWxzZSk6
CisgICAgICAgIChwYXJzZUludC4pOgorICAgICAgICAocGFyc2VJbnQucGFyc2VJbnQpOgorICAg
ICAgICAocGFyc2VJbnQpOgorICAgICAgICAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuRnVuY3Rp
b24ucHJvdG90eXBlLmJpbmQuYmluZC5iaW5kZXIpOgorICAgICAgICAoRnVuY3Rpb24ucHJvdG90
eXBlLmJpbmQuRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpOgorICAgICAgICAoc3VwcG9ydHNBY2Nl
c3NvcnMub3ducyk6CisgICAgICAgICgyLnNwbGljZS5BcnJheS5wcm90b3R5cGUuc3BsaWNlKToK
KyAgICAgICAgKDIuc3BsaWNlLmVsc2UuQXJyYXkucHJvdG90eXBlLnNwbGljZSk6CisgICAgICAg
ICgyLnNwbGljZSk6CisgICAgICAgICh1bnNoaWZ0LkFycmF5LnByb3RvdHlwZS51bnNoaWZ0KToK
KyAgICAgICAgKHVuc2hpZnQpOgorICAgICAgICAoQXJyYXkuaXNBcnJheS5BcnJheS5pc0FycmF5
KToKKyAgICAgICAgKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmJveGVkRm9yRWFjaC5BcnJheS5w
cm90b3R5cGUuZm9yRWFjaCk6CisgICAgICAgIChBcnJheS5wcm90b3R5cGUubWFwLkFycmF5LnBy
b3RvdHlwZS5tYXApOgorICAgICAgICAoQXJyYXkucHJvdG90eXBlLmZpbHRlci5BcnJheS5wcm90
b3R5cGUuZmlsdGVyKToKKyAgICAgICAgKEFycmF5LnByb3RvdHlwZS5ldmVyeS5BcnJheS5wcm90
b3R5cGUuZXZlcnkpOgorICAgICAgICAoQXJyYXkucHJvdG90eXBlLnNvbWUuQXJyYXkucHJvdG90
eXBlLnNvbWUpOgorICAgICAgICAoQXJyYXkucHJvdG90eXBlLnJlZHVjZS5BcnJheS5wcm90b3R5
cGUucmVkdWNlKToKKyAgICAgICAgKEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodC5BcnJheS5w
cm90b3R5cGUucmVkdWNlUmlnaHQpOgorICAgICAgICAoMS5pbmRleE9mLkFycmF5LnByb3RvdHlw
ZS5pbmRleE9mKToKKyAgICAgICAgKDEuaW5kZXhPZik6CisgICAgICAgICgxLmxhc3RJbmRleE9m
LkFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZik6CisgICAgICAgICgxLmxhc3RJbmRleE9mKToK
KyAgICAgICAgKE9iamVjdC5rZXlzLk9iamVjdC5rZXlzKToKKyAgICAgICAgKERhdGUucHJvdG90
eXBlLnRvSVNPU3RyaW5nLm5ldy5EYXRlLm5lZ2F0aXZlRGF0ZS50b0lTT1N0cmluZy5pbmRleE9m
LkRhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKToKKyAgICAgICAgKERhdGUucHJvdG90eXBlLnRv
SVNPU3RyaW5nLm5ldy5EYXRlLm5lZ2F0aXZlRGF0ZS50b0lTT1N0cmluZy5pbmRleE9mKToKKyAg
ICAgICAgKHRyeS5kYXRlVG9KU09OSXNTdXBwb3J0ZWQuRGF0ZS5wcm90b3R5cGUudG9KU09OLm5l
dy5EYXRlLk5hTi50b0pTT04ubnVsbC5uZXcuRGF0ZS5uZWdhdGl2ZURhdGUudG9KU09OLmluZGV4
T2YubmVnYXRpdmVZZWFyU3RyaW5nLjEuRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwudG9JU09T
dHJpbmcpOgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAoZGF0ZVRvSlNPTklzU3VwcG9ydGVk
LkRhdGUucHJvdG90eXBlLnRvSlNPTik6CisgICAgICAgIChEYXRlLnBhcnNlLnN0cmluZ19hcHBl
YXJlZF9oZXJlLik6CisgICAgICAgIChEYXRlLnBhcnNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLmRh
eUZyb21Nb250aCk6CisgICAgICAgIChEYXRlLnBhcnNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLnRv
VVRDKToKKyAgICAgICAgKERhdGUucGFyc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUuRGF0ZS5wYXJz
ZSk6CisgICAgICAgIChEYXRlLnBhcnNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLkRhdGUpOgorICAg
ICAgICAoRGF0ZS5ub3cuRGF0ZS5ub3cpOgorICAgICAgICAoTnVtYmVyLnByb3RvdHlwZS50b0Zp
eGVkLjAuMDAwMDgudG9GaXhlZC4zLnN0cmluZ19hcHBlYXJlZF9oZXJlLjAuOS50b0ZpeGVkLjAu
c3RyaW5nX2FwcGVhcmVkX2hlcmUuMS4yNTUudG9GaXhlZC4yLnN0cmluZ19hcHBlYXJlZF9oZXJl
LjEwMDAwMDAwMDAwMDAwMDAxMjgudG9GaXhlZC4pOgorICAgICAgICAoTnVtYmVyLnByb3RvdHlw
ZS50b0ZpeGVkLjAuMDAwMDgudG9GaXhlZC4zLnN0cmluZ19hcHBlYXJlZF9oZXJlLjAuOS50b0Zp
eGVkLjAuc3RyaW5nX2FwcGVhcmVkX2hlcmUuMS4yNTUudG9GaXhlZC4yLnN0cmluZ19hcHBlYXJl
ZF9oZXJlLjEwMDAwMDAwMDAwMDAwMDAxMjgudG9GaXhlZCk6CisgICAgICAgIChzdHJpbmdfYXBw
ZWFyZWRfaGVyZS5zcGxpdC5hYi5sZW5ndGguMi5zdHJpbmdfYXBwZWFyZWRfaGVyZS5zcGxpdC5s
ZW5ndGguNC5zdHJpbmdfYXBwZWFyZWRfaGVyZS5zcGxpdC5zLjEuc3RyaW5nX2FwcGVhcmVkX2hl
cmUuc3RyaW5nX2FwcGVhcmVkX2hlcmUuc3BsaXQubGVuZ3RoLnN0cmluZ19hcHBlYXJlZF9oZXJl
LnNwbGl0Lik6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5zcGxpdC5hYi5sZW5ndGgu
Mi5zdHJpbmdfYXBwZWFyZWRfaGVyZS5zcGxpdC5sZW5ndGguNC5zdHJpbmdfYXBwZWFyZWRfaGVy
ZS5zcGxpdC5zLjEuc3RyaW5nX2FwcGVhcmVkX2hlcmUuc3RyaW5nX2FwcGVhcmVkX2hlcmUuc3Bs
aXQubGVuZ3RoLnN0cmluZ19hcHBlYXJlZF9oZXJlLnNwbGl0KToKKyAgICAgICAgKGVsc2Uuc3Ry
aW5nX2FwcGVhcmVkX2hlcmUuc3BsaXQuU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk6CisgICAgICAg
IChlbHNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLnNwbGl0KToKKyAgICAgICAgKHN0cmluZ19hcHBl
YXJlZF9oZXJlLnN1YnN0ci5zdHJpbmdfYXBwZWFyZWRfaGVyZS5zdWJzdHIuU3RyaW5nLnByb3Rv
dHlwZS5zdWJzdHIpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuc3Vic3RyLnN0cmlu
Z19hcHBlYXJlZF9oZXJlLnN1YnN0cik6CisgICAgICAgIChTdHJpbmcucHJvdG90eXBlLnRyaW0u
d3MudHJpbS5TdHJpbmcucHJvdG90eXBlLnRyaW0pOgorICAgICAgICAoU3RyaW5nLnByb3RvdHlw
ZS50cmltLndzLnRyaW0pOgorICAgICAgICAodG9JbnRlZ2VyKToKKyAgICAgICAgKGlzUHJpbWl0
aXZlKToKKyAgICAgICAgKHRvT2JqZWN0KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVz
L2VzNS1zaGltL2VzNS1zaGltLm1pbi5qczogQWRkZWQuCisgICAgICAgIChlbHNlKToKKyAgICAg
ICAgKHBhcnNlSW50LnJldHVybi5wYXJzZUludEVTNSk6CisgICAgICAgIChwYXJzZUludC5wYXJz
ZUludCk6CisgICAgICAgIChwYXJzZUludCk6CisgICAgICAgIChFbXB0eSk6CisgICAgICAgIChG
dW5jdGlvbi5wcm90b3R5cGUuYmluZC5GdW5jdGlvbi5wcm90b3R5cGUuYmluZC5iaW5kLmJpbmRl
cik6CisgICAgICAgIChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5GdW5jdGlvbi5wcm90b3R5cGUu
YmluZCk6CisgICAgICAgIChzdXBwb3J0c0FjY2Vzc29ycy5vd25zKToKKyAgICAgICAgKDIuc3Bs
aWNlLkFycmF5LnByb3RvdHlwZS5zcGxpY2UpOgorICAgICAgICAoMi5zcGxpY2UuZWxzZS5BcnJh
eS5wcm90b3R5cGUuc3BsaWNlKToKKyAgICAgICAgKDIuc3BsaWNlKToKKyAgICAgICAgKHVuc2hp
ZnQuQXJyYXkucHJvdG90eXBlLnVuc2hpZnQpOgorICAgICAgICAodW5zaGlmdCk6CisgICAgICAg
IChBcnJheS5pc0FycmF5LkFycmF5LmlzQXJyYXkpOgorICAgICAgICAoQXJyYXkucHJvdG90eXBl
LmZvckVhY2guYm94ZWRGb3JFYWNoLkFycmF5LnByb3RvdHlwZS5mb3JFYWNoKToKKyAgICAgICAg
KEFycmF5LnByb3RvdHlwZS5tYXAuQXJyYXkucHJvdG90eXBlLm1hcCk6CisgICAgICAgIChBcnJh
eS5wcm90b3R5cGUuZmlsdGVyLkFycmF5LnByb3RvdHlwZS5maWx0ZXIpOgorICAgICAgICAoQXJy
YXkucHJvdG90eXBlLmV2ZXJ5LkFycmF5LnByb3RvdHlwZS5ldmVyeSk6CisgICAgICAgIChBcnJh
eS5wcm90b3R5cGUuc29tZS5BcnJheS5wcm90b3R5cGUuc29tZSk6CisgICAgICAgIChBcnJheS5w
cm90b3R5cGUucmVkdWNlLkFycmF5LnByb3RvdHlwZS5yZWR1Y2UpOgorICAgICAgICAoQXJyYXku
cHJvdG90eXBlLnJlZHVjZVJpZ2h0LkFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCk6CisgICAg
ICAgICgxLmluZGV4T2YuQXJyYXkucHJvdG90eXBlLmluZGV4T2YpOgorICAgICAgICAoMS5pbmRl
eE9mKToKKyAgICAgICAgKDEubGFzdEluZGV4T2YuQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9m
KToKKyAgICAgICAgKDEubGFzdEluZGV4T2YpOgorICAgICAgICAoT2JqZWN0LmtleXMuT2JqZWN0
LmtleXMpOgorICAgICAgICAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcubmV3LkRhdGUubmVn
YXRpdmVEYXRlLnRvSVNPU3RyaW5nLmluZGV4T2YuRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcp
OgorICAgICAgICAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcubmV3LkRhdGUubmVnYXRpdmVE
YXRlLnRvSVNPU3RyaW5nLmluZGV4T2YpOgorICAgICAgICAodHJ5LmRhdGVUb0pTT05Jc1N1cHBv
cnRlZC5EYXRlLnByb3RvdHlwZS50b0pTT04ubmV3LkRhdGUuTmFOLnRvSlNPTi5udWxsLm5ldy5E
YXRlLm5lZ2F0aXZlRGF0ZS50b0pTT04uaW5kZXhPZi5uZWdhdGl2ZVllYXJTdHJpbmcuMS5EYXRl
LnByb3RvdHlwZS50b0pTT04uY2FsbC50b0lTT1N0cmluZyk6CisgICAgICAgIChjYXRjaCk6Cisg
ICAgICAgIChkYXRlVG9KU09OSXNTdXBwb3J0ZWQuRGF0ZS5wcm90b3R5cGUudG9KU09OKToKKyAg
ICAgICAgKERhdGUucGFyc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUuKToKKyAgICAgICAgKERhdGUu
cGFyc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUuZGF5RnJvbU1vbnRoKToKKyAgICAgICAgKERhdGUu
cGFyc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudG9VVEMpOgorICAgICAgICAoRGF0ZS5wYXJzZS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5EYXRlLnBhcnNlKToKKyAgICAgICAgKERhdGUucGFyc2Uuc3Ry
aW5nX2FwcGVhcmVkX2hlcmUuRGF0ZSk6CisgICAgICAgIChEYXRlLm5vdy5EYXRlLm5vdyk6Cisg
ICAgICAgIChOdW1iZXIucHJvdG90eXBlLnRvRml4ZWQuOGUuNS50b0ZpeGVkLjMuc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuOS50b0ZpeGVkLjAuc3RyaW5nX2FwcGVhcmVkX2hlcmUuMS4yNTUudG9GaXhl
ZC4yLnN0cmluZ19hcHBlYXJlZF9oZXJlLjB4ZGUwYjZiM2E3NjQwMDgwLnRvRml4ZWQuKToKKyAg
ICAgICAgKE51bWJlci5wcm90b3R5cGUudG9GaXhlZC44ZS41LnRvRml4ZWQuMy5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS45LnRvRml4ZWQuMC5zdHJpbmdfYXBwZWFyZWRfaGVyZS4xLjI1NS50b0ZpeGVk
LjIuc3RyaW5nX2FwcGVhcmVkX2hlcmUuMHhkZTBiNmIzYTc2NDAwODAudG9GaXhlZCk6CisgICAg
ICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5zcGxpdC5hYi5sZW5ndGguMi5zdHJpbmdfYXBwZWFy
ZWRfaGVyZS5zcGxpdC5sZW5ndGguNC5zdHJpbmdfYXBwZWFyZWRfaGVyZS5zcGxpdC5zLjEuc3Ry
aW5nX2FwcGVhcmVkX2hlcmUuc3RyaW5nX2FwcGVhcmVkX2hlcmUuc3BsaXQubGVuZ3RoLnN0cmlu
Z19hcHBlYXJlZF9oZXJlLnNwbGl0Lik6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5z
cGxpdC5hYi5sZW5ndGguMi5zdHJpbmdfYXBwZWFyZWRfaGVyZS5zcGxpdC5sZW5ndGguNC5zdHJp
bmdfYXBwZWFyZWRfaGVyZS5zcGxpdC5zLjEuc3RyaW5nX2FwcGVhcmVkX2hlcmUuc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuc3BsaXQubGVuZ3RoLnN0cmluZ19hcHBlYXJlZF9oZXJlLnNwbGl0KToKKyAg
ICAgICAgKGVsc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUuc3BsaXQuU3RyaW5nLnByb3RvdHlwZS5z
cGxpdCk6CisgICAgICAgIChlbHNlLnN0cmluZ19hcHBlYXJlZF9oZXJlLnNwbGl0KToKKyAgICAg
ICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLnN1YnN0ci5zdHJpbmdfYXBwZWFyZWRfaGVyZS5zdWJz
dHIuU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hl
cmUuc3Vic3RyLnN0cmluZ19hcHBlYXJlZF9oZXJlLnN1YnN0cik6CisgICAgICAgIChTdHJpbmcu
cHJvdG90eXBlLnRyaW0ud3MudHJpbS5TdHJpbmcucHJvdG90eXBlLnRyaW0pOgorICAgICAgICAo
U3RyaW5nLnByb3RvdHlwZS50cmltLndzLnRyaW0pOgorICAgICAgICAodG9JbnRlZ2VyKToKKyAg
ICAgICAgKGlzUHJpbWl0aXZlKToKKyAgICAgICAgKHRvUHJpbWl0aXZlKToKKyAgICAgICAgKHRv
T2JqZWN0KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9MSUNFTlNFOiBB
ZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9pbmRleC5qczogQWRk
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2FkdmljZS5qczog
UmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGli
L2FkdmljZS5qcy4KKyAgICAgICAgKGFkdmljZS5yZXR1cm4uY29tcG9zZWRBcm91bmQpOgorICAg
ICAgICAoYWR2aWNlLmFyb3VuZCk6CisgICAgICAgIChhZHZpY2UuKToKKyAgICAgICAgKGFkdmlj
ZS53aXRoQWR2aWNlKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIv
YmFzZS5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9m
bGlnaHQvbGliL2Jhc2UuanMuCisgICAgICAgICh0ZWFyZG93bkluc3RhbmNlKToKKyAgICAgICAg
KGluaXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKGluaXREZXByZWNhdGVkQXR0cmlidXRlcyk6Cisg
ICAgICAgICh3aXRoQmFzZS50aGlzLnRyaWdnZXIpOgorICAgICAgICAod2l0aEJhc2UudGhpcy5v
bik6CisgICAgICAgICh3aXRoQmFzZS50aGlzLm9mZik6CisgICAgICAgICh3aXRoQmFzZS50aGlz
LnJlc29sdmVEZWxlZ2F0ZVJ1bGVzKToKKyAgICAgICAgKHdpdGhCYXNlLkF0dHJpYnV0ZXMpOgor
ICAgICAgICAod2l0aEJhc2UudGhpcy5hdHRyaWJ1dGVzKToKKyAgICAgICAgKHdpdGhCYXNlLnRo
aXMuZGVmYXVsdEF0dHJzKToKKyAgICAgICAgKHdpdGhCYXNlLnRoaXMuaW5pdGlhbGl6ZSk6Cisg
ICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2NvbXBvbmVudC5qczogUmVu
YW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2Nv
bXBvbmVudC5qcy4KKyAgICAgICAgKGZ1bmN0aW9uTmFtZVJlZ0V4KToKKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvY29tcG9zZS5qczogQWRkZWQuCisgICAgICAgIChz
ZXRXcml0YWJpbGl0eSk6CisgICAgICAgIChtaXhpbik6CisgICAgICAgICogU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVf
bW9kdWxlcy9mbGlnaHQvbGliL2RlYnVnLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvZGVidWcuanMuCisgICAgICAgICh0cmF2ZXJz
ZSk6CisgICAgICAgIChzYXZlTG9nRmlsdGVyKToKKyAgICAgICAgKHJldHJpZXZlTG9nRmlsdGVy
KToKKyAgICAgICAgKHJldHVybi5lbmFibGUpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvZmxpZ2h0L2xpYi9sb2dnZXIuanM6IEFkZGVkLgorICAgICAgICAoZWxlbVRvU3RyaW5nKToK
KyAgICAgICAgKHRvUmVnRXhwKToKKyAgICAgICAgKGxvZyk6CisgICAgICAgICh3aXRoTG9nZ2lu
Zyk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL3JlZ2lzdHJ5Lmpz
OiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9s
aWIvcmVnaXN0cnkuanMuCisgICAgICAgIChSZWdpc3RyeS50aGlzLnJlbW92ZUluc3RhbmNlKToK
KyAgICAgICAgKFJlZ2lzdHJ5LnRoaXMuZ2V0Qm91bmRFdmVudE5hbWVzKToKKyAgICAgICAgKFJl
Z2lzdHJ5LnRoaXMub24pOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xp
Yi91dGlscy5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50
cy9mbGlnaHQvbGliL3V0aWxzLmpzLgorICAgICAgICAoY2FuV3JpdGVQcm90ZWN0KToKKyAgICAg
ICAgKHV0aWxzLnRvQXJyYXkpOgorICAgICAgICAodXRpbHMubWVyZ2UpOgorICAgICAgICAodXRp
bHMuZ2V0RW51bWVyYWJsZVByb3BlcnR5KToKKyAgICAgICAgKHV0aWxzLmNvbXBvc2UpOgorICAg
ICAgICAodXRpbHMuZGVib3VuY2UpOgorICAgICAgICAodXRpbHMuZGVsZWdhdGUpOgorICAgICAg
ICAodXRpbHMub25jZSk6CisgICAgICAgICh1dGlscy5wcm9wZXJ0eVdyaXRhYmlsaXR5KToKKyAg
ICAgICAgKHV0aWxzLm11dGF0ZVByb3BlcnR5KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL2pxdWVyeS9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKHR5cGVvZi5tb2R1bGUu
c3RyaW5nX2FwcGVhcmVkX2hlcmUudHlwZW9mLm1vZHVsZS5leHBvcnRzLnN0cmluZ19hcHBlYXJl
ZF9oZXJlLnRydWUpOgorICAgICAgICAoalF1ZXJ5KToKKyAgICAgICAgKGZjYW1lbENhc2UpOgor
ICAgICAgICAoalF1ZXJ5LmZuLmpRdWVyeS5wcm90b3R5cGUudG9BcnJheSk6CisgICAgICAgIChq
UXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS5wdXNoU3RhY2spOgorICAgICAgICAoalF1ZXJ5LmZu
LmpRdWVyeS5wcm90b3R5cGUuZWFjaCk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3Rv
dHlwZS5tYXApOgorICAgICAgICAoalF1ZXJ5LmZuLmpRdWVyeS5wcm90b3R5cGUuc2xpY2UpOgor
ICAgICAgICAoalF1ZXJ5LmZuLmpRdWVyeS5wcm90b3R5cGUuZmlyc3QpOgorICAgICAgICAoalF1
ZXJ5LmZuLmpRdWVyeS5wcm90b3R5cGUubGFzdCk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5
LnByb3RvdHlwZS5lcSk6CisgICAgICAgIChqUXVlcnkuZm4ualF1ZXJ5LnByb3RvdHlwZS5lbmQp
OgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC5qUXVlcnkuZm4uZXh0ZW5kKToKKyAgICAgICAgKGpR
dWVyeS5leHRlbmQpOgorICAgICAgICAoalF1ZXJ5LmV4dGVuZC4pOgorICAgICAgICAoZGlyKToK
KyAgICAgICAgKHNpYmxpbmdzKToKKyAgICAgICAgKGpRdWVyeS5maWx0ZXIpOgorICAgICAgICAo
alF1ZXJ5LmZuLmV4dGVuZC4pOgorICAgICAgICAoalF1ZXJ5LmZuLmV4dGVuZCk6CisgICAgICAg
IChpbml0LmpRdWVyeS5mbi5pbml0KToKKyAgICAgICAgKGpRdWVyeS5lYWNoKToKKyAgICAgICAg
KGZpcmUpOgorICAgICAgICAoc2VsZi5hZGQpOgorICAgICAgICAoc2VsZi5yZW1vdmUpOgorICAg
ICAgICAoc2VsZi5oYXMpOgorICAgICAgICAoc2VsZi5lbXB0eSk6CisgICAgICAgIChzZWxmLmRp
c2FibGUpOgorICAgICAgICAoc2VsZi5kaXNhYmxlZCk6CisgICAgICAgIChzZWxmLmxvY2spOgor
ICAgICAgICAoc2VsZi5sb2NrZWQpOgorICAgICAgICAoc2VsZi5maXJlV2l0aCk6CisgICAgICAg
IChzZWxmLmZpcmUpOgorICAgICAgICAoc2VsZi5maXJlZCk6CisgICAgICAgIChqUXVlcnkuQ2Fs
bGJhY2tzKToKKyAgICAgICAgKGpRdWVyeS5mbi5yZWFkeSk6CisgICAgICAgIChqUXVlcnkucmVh
ZHkucHJvbWlzZSk6CisgICAgICAgIChlbHNlLmVsc2UuZm4pOgorICAgICAgICAoYWNjZXNzKToK
KyAgICAgICAgKGFjY2VwdERhdGEpOgorICAgICAgICAoRGF0YSk6CisgICAgICAgIChEYXRhLnBy
b3RvdHlwZS5yZWdpc3Rlcik6CisgICAgICAgIChEYXRhLnByb3RvdHlwZS5jYWNoZSk6CisgICAg
ICAgIChEYXRhLnByb3RvdHlwZS5zZXQgdmFyKToKKyAgICAgICAgKERhdGEucHJvdG90eXBlKToK
KyAgICAgICAgKERhdGEucHJvdG90eXBlLmFjY2Vzcyk6CisgICAgICAgIChEYXRhLnByb3RvdHlw
ZS5yZW1vdmUpOgorICAgICAgICAoRGF0YS5wcm90b3R5cGUuaGFzRGF0YSk6CisgICAgICAgIChk
YXRhQXR0cik6CisgICAgICAgIChpc0hpZGRlbik6CisgICAgICAgIChhZGp1c3RDU1MpOgorICAg
ICAgICAoZ2V0QWxsKToKKyAgICAgICAgKHNldEdsb2JhbEV2YWwpOgorICAgICAgICAoYnVpbGRG
cmFnbWVudCk6CisgICAgICAgIChyZXR1cm5GYWxzZSk6CisgICAgICAgIChzYWZlQWN0aXZlRWxl
bWVudCk6CisgICAgICAgIChmbik6CisgICAgICAgIChvbik6CisgICAgICAgIChqUXVlcnkuZXZl
bnQuZXZlbnRIYW5kbGUuZWxlbURhdGEuaGFuZGxlKToKKyAgICAgICAgKGpRdWVyeS5ldmVudC5h
ZGQpOgorICAgICAgICAoalF1ZXJ5LmV2ZW50LnJlbW92ZSk6CisgICAgICAgIChqUXVlcnkuZXZl
bnQuZGlzcGF0Y2gpOgorICAgICAgICAoalF1ZXJ5LmV2ZW50LmhhbmRsZXJzKToKKyAgICAgICAg
KGpRdWVyeS5ldmVudC5rZXlIb29rcy5maWx0ZXIpOgorICAgICAgICAoalF1ZXJ5LmV2ZW50Lm1v
dXNlSG9va3MuZmlsdGVyKToKKyAgICAgICAgKGpRdWVyeS5ldmVudC5maXgpOgorICAgICAgICAo
RGF0YS5wcm90b3R5cGUuZ2V0IHJldHVybik6CisgICAgICAgIChqUXVlcnkuZXZlbnQuc3BlY2lh
bC5mb2N1cy50cmlnZ2VyKToKKyAgICAgICAgKGpRdWVyeS5ldmVudC5zcGVjaWFsLmJsdXIudHJp
Z2dlcik6CisgICAgICAgIChqUXVlcnkuZXZlbnQuc3BlY2lhbC5jbGljay50cmlnZ2VyKToKKyAg
ICAgICAgKGpRdWVyeS5ldmVudC5zcGVjaWFsLmNsaWNrLl9kZWZhdWx0KToKKyAgICAgICAgKGpR
dWVyeS5ldmVudC5zcGVjaWFsLmJlZm9yZXVubG9hZC5wb3N0RGlzcGF0Y2gpOgorICAgICAgICAo
alF1ZXJ5LnJlbW92ZUV2ZW50KToKKyAgICAgICAgKGpRdWVyeS5FdmVudCk6CisgICAgICAgIChq
UXVlcnkuRXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0KToKKyAgICAgICAgKGpRdWVyeS5F
dmVudC5wcm90b3R5cGUuc3RvcFByb3BhZ2F0aW9uKToKKyAgICAgICAgKGpRdWVyeS5FdmVudC5w
cm90b3R5cGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKToKKyAgICAgICAgKG1hbmlwdWxhdGlv
blRhcmdldCk6CisgICAgICAgIChkaXNhYmxlU2NyaXB0KToKKyAgICAgICAgKHJlc3RvcmVTY3Jp
cHQpOgorICAgICAgICAoY2xvbmVDb3B5RXZlbnQpOgorICAgICAgICAoZml4SW5wdXQpOgorICAg
ICAgICAoZG9tTWFuaXApOgorICAgICAgICAocmVtb3ZlKToKKyAgICAgICAgKGFjdHVhbERpc3Bs
YXkpOgorICAgICAgICAoZGVmYXVsdERpc3BsYXkpOgorICAgICAgICAoZ2V0U3R5bGVzKToKKyAg
ICAgICAgKHN3YXApOgorICAgICAgICAocmV0dXJuLmdldCBpZik6CisgICAgICAgIChyZXR1cm4p
OgorICAgICAgICAoYWRkR2V0SG9va0lmKToKKyAgICAgICAgKHZlbmRvclByb3BOYW1lKToKKyAg
ICAgICAgKHNldFBvc2l0aXZlTnVtYmVyKToKKyAgICAgICAgKGF1Z21lbnRXaWR0aE9ySGVpZ2h0
KToKKyAgICAgICAgKGdldFdpZHRoT3JIZWlnaHQpOgorICAgICAgICAoc2hvd0hpZGUpOgorICAg
ICAgICAoZ2V0IGpRdWVyeSk6CisgICAgICAgIChzZXQgZ2V0IGpRdWVyeSk6CisgICAgICAgIChU
d2Vlbi5wcm90b3R5cGUuaW5pdCk6CisgICAgICAgIChUd2Vlbi5wcm90b3R5cGUuY3VyKToKKyAg
ICAgICAgKFR3ZWVuLnByb3RvdHlwZS5ydW4pOgorICAgICAgICAoVHdlZW4ucHJvcEhvb2tzLl9k
ZWZhdWx0LmdldCB2YXIpOgorICAgICAgICAoVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0KToKKyAg
ICAgICAgKFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQgaWYpOgorICAgICAgICAoVHdlZW4u
cHJvcEhvb2tzLnNjcm9sbFRvcC5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdC5zZXQgaWYpOgor
ICAgICAgICAoVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcC5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xs
TGVmdCk6CisgICAgICAgIChqUXVlcnkuZWFzaW5nLmxpbmVhcik6CisgICAgICAgIChqUXVlcnku
ZWFzaW5nLnN3aW5nKToKKyAgICAgICAgKGNyZWF0ZUZ4Tm93KToKKyAgICAgICAgKGNyZWF0ZVR3
ZWVuKToKKyAgICAgICAgKGhvb2tzLmVtcHR5LmZpcmUpOgorICAgICAgICAoZGVmYXVsdFByZWZp
bHRlcik6CisgICAgICAgIChwcm9wRmlsdGVyKToKKyAgICAgICAgKHRpY2spOgorICAgICAgICAo
YW5pbWF0aW9uLmRlZmVycmVkLnByb21pc2UpOgorICAgICAgICAoQW5pbWF0aW9uKToKKyAgICAg
ICAgKG9wdC5jb21wbGV0ZSk6CisgICAgICAgIChqUXVlcnkuc3BlZWQpOgorICAgICAgICAoalF1
ZXJ5LmZ4LnRpY2spOgorICAgICAgICAoalF1ZXJ5LmZ4LnRpbWVyKToKKyAgICAgICAgKGpRdWVy
eS5meC5zdGFydCk6CisgICAgICAgIChqUXVlcnkuZnguc3RvcCk6CisgICAgICAgIChqUXVlcnku
Zm4uZGVsYXkpOgorICAgICAgICAoc2V0IGJvb2xIb29rLnNldCBpZik6CisgICAgICAgIChzZXQg
Ym9vbEhvb2spOgorICAgICAgICAoZ2V0IGlmLmpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQuZ2V0
IHZhcik6CisgICAgICAgIChnZXQgaWYualF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCk6CisgICAg
ICAgIChnZXQgaWYualF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZC5zZXQgdmFyKToKKyAgICAgICAg
KGdldCBpZik6CisgICAgICAgIChnZXRDbGFzcyk6CisgICAgICAgIChzZXQgdmFyKToKKyAgICAg
ICAgKGpRdWVyeS5wYXJzZUpTT04pOgorICAgICAgICAoalF1ZXJ5LnBhcnNlWE1MKToKKyAgICAg
ICAgKGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyk6CisgICAgICAgIChpbnNwZWN0UHJlZmls
dGVyc09yVHJhbnNwb3J0cyk6CisgICAgICAgIChhamF4RXh0ZW5kKToKKyAgICAgICAgKGFqYXhI
YW5kbGVSZXNwb25zZXMpOgorICAgICAgICAoYWpheENvbnZlcnQpOgorICAgICAgICAoalF1ZXJ5
Ll9ldmFsVXJsKToKKyAgICAgICAgKGpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuKToKKyAgICAg
ICAgKGpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSk6CisgICAgICAgIChidWlsZFBhcmFtcyk6
CisgICAgICAgIChhZGQpOgorICAgICAgICAoalF1ZXJ5LnBhcmFtKToKKyAgICAgICAgKGpRdWVy
eS5hamF4U2V0dGluZ3MueGhyKToKKyAgICAgICAgKGpRdWVyeS5hamF4U2V0dXAuKToKKyAgICAg
ICAgKGpRdWVyeS5hamF4U2V0dXApOgorICAgICAgICAoalF1ZXJ5LnBhcnNlSFRNTCk6CisgICAg
ICAgIChqUXVlcnkuZm4ubG9hZCk6CisgICAgICAgIChqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1h
dGVkKToKKyAgICAgICAgKGdldFdpbmRvdyk6CisgICAgICAgIChqUXVlcnkub2Zmc2V0LnNldE9m
ZnNldCk6CisgICAgICAgIChqUXVlcnkubm9Db25mbGljdCk6CisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25v
ZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKG4p
OgorICAgICAgICAocik6CisgICAgICAgIChuLmZuLm4ucHJvdG90eXBlLnRvQXJyYXkpOgorICAg
ICAgICAobi5mbi5uLnByb3RvdHlwZS5wdXNoU3RhY2spOgorICAgICAgICAobi5mbi5uLnByb3Rv
dHlwZS5lYWNoKToKKyAgICAgICAgKG4uZm4ubi5wcm90b3R5cGUubWFwKToKKyAgICAgICAgKG4u
Zm4ubi5wcm90b3R5cGUuc2xpY2UpOgorICAgICAgICAobi5mbi5uLnByb3RvdHlwZS5maXJzdCk6
CisgICAgICAgIChuLmZuLm4ucHJvdG90eXBlLmxhc3QpOgorICAgICAgICAobi5mbi5uLnByb3Rv
dHlwZS5lcSk6CisgICAgICAgIChuLmZuLm4ucHJvdG90eXBlLmVuZCk6CisgICAgICAgIChuLmV4
dGVuZC5uLmZuLmV4dGVuZCk6CisgICAgICAgIChuLmV4dGVuZCk6CisgICAgICAgIChuLmV4dGVu
ZC4pOgorICAgICAgICAoQik6CisgICAgICAgIChKKToKKyAgICAgICAgKHQpOgorICAgICAgICAo
bi5mbi5leHRlbmQuKToKKyAgICAgICAgKG4uZm4uZXh0ZW5kKToKKyAgICAgICAgKFYpOgorICAg
ICAgICAoVyk6CisgICAgICAgIChfKToKKyAgICAgICAgKGFhKToKKyAgICAgICAgKGNhKToKKyAg
ICAgICAgKGhhKToKKyAgICAgICAgKGlhKToKKyAgICAgICAgKGphKToKKyAgICAgICAgKG4uZXZl
bnQuKToKKyAgICAgICAgKG4uZXZlbnQuYWRkKToKKyAgICAgICAgKG4uZXZlbnQucmVtb3ZlKToK
KyAgICAgICAgKG4uZXZlbnQuZGlzcGF0Y2gpOgorICAgICAgICAobi5ldmVudC5oYW5kbGVycyk6
CisgICAgICAgIChuLmV2ZW50LmtleUhvb2tzLmZpbHRlcik6CisgICAgICAgIChuLmV2ZW50Lm1v
dXNlSG9va3MuZmlsdGVyKToKKyAgICAgICAgKG4uZXZlbnQuZml4KToKKyAgICAgICAgKG4uZm4u
bi5wcm90b3R5cGUuZ2V0IHJldHVybik6CisgICAgICAgIChuLmV2ZW50LnNwZWNpYWwuZm9jdXMu
dHJpZ2dlcik6CisgICAgICAgIChuLmV2ZW50LnNwZWNpYWwuYmx1ci50cmlnZ2VyKToKKyAgICAg
ICAgKG4uZXZlbnQuc3BlY2lhbC5jbGljay50cmlnZ2VyKToKKyAgICAgICAgKG4uZXZlbnQuc3Bl
Y2lhbC5jbGljay5fZGVmYXVsdCk6CisgICAgICAgIChuLmV2ZW50LnNwZWNpYWwuYmVmb3JldW5s
b2FkLnBvc3REaXNwYXRjaCk6CisgICAgICAgIChuLmZuLm4ucHJvdG90eXBlKToKKyAgICAgICAg
KG4ucmVtb3ZlRXZlbnQpOgorICAgICAgICAobi5FdmVudCk6CisgICAgICAgIChuLkV2ZW50LnBy
b3RvdHlwZS5wcmV2ZW50RGVmYXVsdCk6CisgICAgICAgIChuLkV2ZW50LnByb3RvdHlwZS5zdG9w
UHJvcGFnYXRpb24pOgorICAgICAgICAobi5FdmVudC5wcm90b3R5cGUuc3RvcEltbWVkaWF0ZVBy
b3BhZ2F0aW9uKToKKyAgICAgICAgKG4uZXZlbnQuc3BlY2lhbC5hLmhhbmRsZSk6CisgICAgICAg
IChuLmZuLmV4dGVuZC5vbik6CisgICAgICAgIChuLmZuLmV4dGVuZC5vbmUpOgorICAgICAgICAo
bi5mbi5leHRlbmQub2ZmKToKKyAgICAgICAgKHBhKToKKyAgICAgICAgKHFhKToKKyAgICAgICAg
KHJhKToKKyAgICAgICAgKHNhKToKKyAgICAgICAgKHZhKToKKyAgICAgICAgKG4uZXh0ZW5kLmh0
bWxQcmVmaWx0ZXIpOgorICAgICAgICAobi5leHRlbmQuY2xvbmUpOgorICAgICAgICAobi5leHRl
bmQuY2xlYW5EYXRhKToKKyAgICAgICAgKG4uZm4uZXh0ZW5kLmRldGFjaCk6CisgICAgICAgIChu
LmZuLmV4dGVuZC5yZW1vdmUpOgorICAgICAgICAobi5mbi5leHRlbmQudGV4dCk6CisgICAgICAg
IChuLmZuLmV4dGVuZC5hcHBlbmQpOgorICAgICAgICAobi5mbi5leHRlbmQucHJlcGVuZCk6Cisg
ICAgICAgIChuLmZuLmV4dGVuZC5iZWZvcmUpOgorICAgICAgICAobi5mbi5leHRlbmQuYWZ0ZXIp
OgorICAgICAgICAobi5mbi5leHRlbmQuZW1wdHkpOgorICAgICAgICAobi5mbi5leHRlbmQuY2xv
bmUpOgorICAgICAgICAobi5mbi5leHRlbmQuaHRtbCk6CisgICAgICAgIChuLmZuLmV4dGVuZC5y
ZXBsYWNlV2l0aCk6CisgICAgICAgIChuLmZuLmEpOgorICAgICAgICAoeWEpOgorICAgICAgICAo
emEpOgorICAgICAgICAoQ2EpOgorICAgICAgICAoRGEpOgorICAgICAgICAoaC5zdHlsZS5pKToK
KyAgICAgICAgKGguc3R5bGUucGl4ZWxQb3NpdGlvbik6CisgICAgICAgIChoLnN0eWxlLmJveFNp
emluZ1JlbGlhYmxlKToKKyAgICAgICAgKGguc3R5bGUucGl4ZWxNYXJnaW5SaWdodCk6CisgICAg
ICAgIChoLnN0eWxlLnJlbGlhYmxlTWFyZ2luTGVmdCk6CisgICAgICAgIChoLnN0eWxlLnJlbGlh
YmxlTWFyZ2luUmlnaHQpOgorICAgICAgICAoRmEpOgorICAgICAgICAoTWEpOgorICAgICAgICAo
TmEpOgorICAgICAgICAoT2EpOgorICAgICAgICAoUGEpOgorICAgICAgICAoUWEpOgorICAgICAg
ICAoZ2V0IG4pOgorICAgICAgICAoc2V0IGdldCBuKToKKyAgICAgICAgKFJhLnByb3RvdHlwZS5p
bml0KToKKyAgICAgICAgKFJhLnByb3RvdHlwZS5jdXIpOgorICAgICAgICAoUmEucHJvdG90eXBl
LnJ1bik6CisgICAgICAgIChuLmVhc2luZy5saW5lYXIpOgorICAgICAgICAobi5lYXNpbmcuc3dp
bmcpOgorICAgICAgICAoV2EpOgorICAgICAgICAoWGEpOgorICAgICAgICAoWWEpOgorICAgICAg
ICAoWmEpOgorICAgICAgICAoaSk6CisgICAgICAgIChqLmgucHJvbWlzZSk6CisgICAgICAgIChf
YSk6CisgICAgICAgIChkLmNvbXBsZXRlKToKKyAgICAgICAgKG4uc3BlZWQpOgorICAgICAgICAo
bi5meC50aWNrKToKKyAgICAgICAgKG4uZngudGltZXIpOgorICAgICAgICAobi5meC5zdGFydCk6
CisgICAgICAgIChuLmZ4LnN0b3ApOgorICAgICAgICAobi5mbi5kZWxheSk6CisgICAgICAgIChS
YS5wcm9wSG9va3Muc2Nyb2xsVG9wLlJhLnByb3BIb29rcy5zY3JvbGxMZWZ0LnNldCBhKToKKyAg
ICAgICAgKFJhLnByb3BIb29rcy5zY3JvbGxUb3AuUmEucHJvcEhvb2tzLnNjcm9sbExlZnQpOgor
ICAgICAgICAoc2V0IGFiLnNldCByZXR1cm4pOgorICAgICAgICAoc2V0IGFiKToKKyAgICAgICAg
KGdldCBsLm9wdFNlbGVjdGVkKToKKyAgICAgICAgKGdldCBsKToKKyAgICAgICAgKGZiKToKKyAg
ICAgICAgKHNldCB2YXIpOgorICAgICAgICAobi5wYXJzZUpTT04pOgorICAgICAgICAobi5wYXJz
ZVhNTCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvcGFja2FnZS5qc29u
OiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL21lbW9yeXN0b3JhZ2UvbWVt
b3J5c3RvcmFnZS5qczogQWRkZWQuCisgICAgICAgIChNZW1vcnlTdG9yYWdlLmUpOgorICAgICAg
ICAoTWVtb3J5U3RvcmFnZS5mKToKKyAgICAgICAgKE1lbW9yeVN0b3JhZ2UuZyk6CisgICAgICAg
IChNZW1vcnlTdG9yYWdlLik6CisgICAgICAgIChNZW1vcnlTdG9yYWdlLmdldCBoLmdldEl0ZW0p
OgorICAgICAgICAoTWVtb3J5U3RvcmFnZS5oLnNldEl0ZW0pOgorICAgICAgICAoTWVtb3J5U3Rv
cmFnZS5oLnJlbW92ZUl0ZW0pOgorICAgICAgICAoTWVtb3J5U3RvcmFnZS5oLmtleSk6CisgICAg
ICAgIChNZW1vcnlTdG9yYWdlLmguY2xlYXIpOgorICAgICAgICAoTWVtb3J5U3RvcmFnZS5nZXQg
aCk6CisgICAgICAgIChNZW1vcnlTdG9yYWdlKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL3JlcXVpcmVqcy10ZXh0L0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2Rl
X21vZHVsZXMvcmVxdWlyZWpzLXRleHQvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L2Jvd2VyLmpzb246IEFkZGVkLgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvcGFja2FnZS5qc29uOiBBZGRl
ZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3RleHQuanM6
IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpz
LXRleHQvdGV4dC5qcy4KKyAgICAgICAgKHVzZURlZmF1bHQpOgorICAgICAgICAoaXNTYW1lUG9y
dCk6CisgICAgICAgICh0ZXh0KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVp
cmVqcy9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVx
dWlyZWpzL3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9yZXF1aXJlanMvcmVxdWlyZS5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9yZXF1aXJlanMvcmVxdWlyZS5qcy4KKyAgICAgICAgKGNvbW1lbnRSZXBs
YWNlKToKKyAgICAgICAgKG1peGluKToKKyAgICAgICAgKHR5cGVvZi5yZXF1aXJlanMuc3RyaW5n
X2FwcGVhcmVkX2hlcmUuaXNGdW5jdGlvbik6CisgICAgICAgIChuZXdDb250ZXh0LnRyaW1Eb3Rz
KToKKyAgICAgICAgKG5ld0NvbnRleHQubm9ybWFsaXplKToKKyAgICAgICAgKG5ld0NvbnRleHQp
OgorICAgICAgICAobmV3Q29udGV4dC5tYWtlTW9kdWxlTWFwKToKKyAgICAgICAgKG5ld0NvbnRl
eHQudGFrZUdsb2JhbFF1ZXVlKToKKyAgICAgICAgKG5ld0NvbnRleHQuaGFuZGxlcnMuc3RyaW5n
X2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAobmV3Q29udGV4dC5oYW5kbGVycy5lbHNlLnJldHVy
bik6CisgICAgICAgIChuZXdDb250ZXh0LmNoZWNrTG9hZGVkKToKKyAgICAgICAgKG5ld0NvbnRl
eHQuTW9kdWxlLnByb3RvdHlwZS5jaGVjayk6CisgICAgICAgIChuZXdDb250ZXh0Lk1vZHVsZS5w
cm90b3R5cGUuKToKKyAgICAgICAgKG5ld0NvbnRleHQuTW9kdWxlLnByb3RvdHlwZS5lbmFibGUp
OgorICAgICAgICAobmV3Q29udGV4dC5pbnRha2VEZWZpbmVzKToKKyAgICAgICAgKG5ld0NvbnRl
eHQuY29udGV4dC5jZmcudXJsQXJncyk6CisgICAgICAgIChuZXdDb250ZXh0LmNvbnRleHQuY29u
ZmlndXJlKToKKyAgICAgICAgKG5ld0NvbnRleHQuY29udGV4dC5sb2NhbFJlcXVpcmUudW5kZWYp
OgorICAgICAgICAobmV3Q29udGV4dC5jb250ZXh0Lm1ha2VSZXF1aXJlKToKKyAgICAgICAgKG5l
d0NvbnRleHQuY29udGV4dC5jb21wbGV0ZUxvYWQpOgorICAgICAgICAobmV3Q29udGV4dC5jb250
ZXh0Lm5hbWVUb1VybCk6CisgICAgICAgIChuZXdDb250ZXh0LmNvbnRleHQuKToKKyAgICAgICAg
KG5ld0NvbnRleHQuY29udGV4dC5vblNjcmlwdEVycm9yKToKKyAgICAgICAgKHJlcS5sb2FkKToK
KyAgICAgICAgKGlzQnJvd3Nlci5jZmcuc2tpcERhdGFNYWluLmRhdGFNYWluLmNmZy5iYXNlVXJs
Lm1haW5TY3JpcHQuaW5kZXhPZik6CisgICAgICAgIChkZWZpbmUpOgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzczogQWRkZWQuCisgICAgICAg
IChodG1sLCk6CisgICAgICAgIChidXR0b24pOgorICAgICAgICAoYm9keSk6CisgICAgICAgIChi
dXR0b24sKToKKyAgICAgICAgKC5oaWRkZW4pOgorICAgICAgICAoI3RvZG9hcHApOgorICAgICAg
ICAoI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIpOgorICAgICAgICAo
I3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIpOgorICAgICAgICAoI3RvZG9hcHAgaW5w
dXQ6OmlucHV0LXBsYWNlaG9sZGVyKToKKyAgICAgICAgKCN0b2RvYXBwIGgxKToKKyAgICAgICAg
KCNuZXctdG9kbywpOgorICAgICAgICAoI25ldy10b2RvKToKKyAgICAgICAgKCNtYWluKToKKyAg
ICAgICAgKGxhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddKToKKyAgICAgICAgKCN0b2dnbGUtYWxsKToK
KyAgICAgICAgKCN0b2dnbGUtYWxsOmJlZm9yZSk6CisgICAgICAgICgjdG9nZ2xlLWFsbDpjaGVj
a2VkOmJlZm9yZSk6CisgICAgICAgICgjdG9kby1saXN0KToKKyAgICAgICAgKCN0b2RvLWxpc3Qg
bGkpOgorICAgICAgICAoI3RvZG8tbGlzdCBsaTpsYXN0LWNoaWxkKToKKyAgICAgICAgKCN0b2Rv
LWxpc3QgbGkuZWRpdGluZyk6CisgICAgICAgICgjdG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQp
OgorICAgICAgICAoI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3KToKKyAgICAgICAgKCN0b2Rv
LWxpc3QgbGkgLnRvZ2dsZSk6CisgICAgICAgICgjdG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIp
OgorICAgICAgICAoI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIpOgorICAgICAg
ICAoI3RvZG8tbGlzdCBsaSBsYWJlbCk6CisgICAgICAgICgjdG9kby1saXN0IGxpLmNvbXBsZXRl
ZCBsYWJlbCk6CisgICAgICAgICgjdG9kby1saXN0IGxpIC5kZXN0cm95KToKKyAgICAgICAgKCN0
b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIpOgorICAgICAgICAoI3RvZG8tbGlzdCBsaSAuZGVz
dHJveTphZnRlcik6CisgICAgICAgICgjdG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95KToKKyAg
ICAgICAgKCN0b2RvLWxpc3QgbGkgLmVkaXQpOgorICAgICAgICAoI3RvZG8tbGlzdCBsaS5lZGl0
aW5nOmxhc3QtY2hpbGQpOgorICAgICAgICAoI2Zvb3Rlcik6CisgICAgICAgICgjZm9vdGVyOmJl
Zm9yZSk6CisgICAgICAgICgjdG9kby1jb3VudCk6CisgICAgICAgICgjdG9kby1jb3VudCBzdHJv
bmcpOgorICAgICAgICAoI2ZpbHRlcnMpOgorICAgICAgICAoI2ZpbHRlcnMgbGkpOgorICAgICAg
ICAoI2ZpbHRlcnMgbGkgYSk6CisgICAgICAgICgjZmlsdGVycyBsaSBhLnNlbGVjdGVkLCk6Cisg
ICAgICAgICgjZmlsdGVycyBsaSBhLnNlbGVjdGVkKToKKyAgICAgICAgKCNjbGVhci1jb21wbGV0
ZWQsKToKKyAgICAgICAgKCNjbGVhci1jb21wbGV0ZWQ6aG92ZXIpOgorICAgICAgICAoI2luZm8p
OgorICAgICAgICAoI2luZm8gcCk6CisgICAgICAgICgjaW5mbyBhKToKKyAgICAgICAgKCNpbmZv
IGE6aG92ZXIpOgorICAgICAgICAoQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmlj
ZS1waXhlbC1yYXRpbzowKSk6CisgICAgICAgICgjdG9nZ2xlLWFsbCwpOgorICAgICAgICAoQG1l
ZGlhIChtYXgtd2lkdGg6IDQzMHB4KSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90
b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9k
ZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQ6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3M6IEFkZGVkLgorICAgICAg
ICAoaHIpOgorICAgICAgICAoLmxlYXJuIGEpOgorICAgICAgICAoLmxlYXJuIGE6aG92ZXIpOgor
ICAgICAgICAoLmxlYXJuIGgzLCk6CisgICAgICAgICgubGVhcm4gaDMpOgorICAgICAgICAoLmxl
YXJuIGg0KToKKyAgICAgICAgKC5sZWFybiBoNSk6CisgICAgICAgICgubGVhcm4gdWwpOgorICAg
ICAgICAoLmxlYXJuIGxpKToKKyAgICAgICAgKC5sZWFybiBwKToKKyAgICAgICAgKCNpc3N1ZS1j
b3VudCk6CisgICAgICAgICgucXVvdGUpOgorICAgICAgICAoLnF1b3RlIHApOgorICAgICAgICAo
LnF1b3RlIHA6YmVmb3JlKToKKyAgICAgICAgKC5xdW90ZSBwOmFmdGVyKToKKyAgICAgICAgKC5x
dW90ZSBmb290ZXIpOgorICAgICAgICAoLnF1b3RlIGZvb3RlciBpbWcpOgorICAgICAgICAoLnF1
b3RlIGZvb3RlciBhKToKKyAgICAgICAgKC5zcGVlY2gtYnViYmxlKToKKyAgICAgICAgKC5zcGVl
Y2gtYnViYmxlOmFmdGVyKToKKyAgICAgICAgKC5sZWFybi1iYXIgPiAubGVhcm4pOgorICAgICAg
ICAoQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSk6CisgICAgICAgICgubGVhcm4tYmFyKToKKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanM6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24v
YmFzZS5qcy4KKyAgICAgICAgKGxvY2F0aW9uLmhvc3RuYW1lLnN0cmluZ19hcHBlYXJlZF9oZXJl
Lmkuci5pLnIpOgorICAgICAgICAoZmluZFJvb3QpOgorICAgICAgICAoTGVhcm4pOgorICAgICAg
ICAoTGVhcm4ucHJvdG90eXBlLmFwcGVuZCk6CisgICAgICAgICh4aHIub25sb2FkKToKKyAgICAg
ICAgKExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQpOgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5tZDogQWRkZWQuCisg
ICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQva2FybWEuY29u
Zi5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9wYWNrYWdlLmpzb246IFJlbW92ZWQuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvcmVhZG1lLm1kOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvLmpzaGludHJjOiBSZW1vdmVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L3Rlc3QvZml4dHVyZS9mb290ZXIuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC90ZXN0L2ZpeHR1cmUvbmV3X3RvZG8uaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2Zp
eHR1cmUvdG9nZ2xlX2FsbC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvbW9jay9kYXRh
c3RvcmUuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEvc3RhdHNfc3BlYy5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvZGF0YS90b2Rvc19zcGVjLmpzOiBSZW1v
dmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS9uZXdfaXRlbV9zcGVjLmpzOiBSZW1vdmVkLgor
ICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS9zdGF0c19zcGVjLmpzOiBSZW1vdmVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L3Rlc3Qvc3BlYy91aS90b2dnbGVfYWxsX3NwZWMuanM6IFJlbW92ZWQuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVz
dC90ZXN0LW1haW4uanM6IFJlbW92ZWQuCisKIDIwMTctMDQtMjcgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgdGVzdHMgaW5hZHZlcnRlbnRs
eSBkZWxldGVkIGluIHIyMDUwMzIuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0Ly5naXRp
Z25vcmUgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0Ly5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGMyNjU4ZDdkMWIzMTg0OGMzYjcxOTYwNTQzY2IwMzY4ZTU2Y2Q0YzcuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotbm9kZV9tb2R1bGVzLwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uanNoaW50cmMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
Ly5qc2hpbnRyYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIwYjA0ZGY0ODg2NjRi
NmJjNDc3ZGM5NDk3ZTQwM2RhMjVjMjUyMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0Ly5qc2hpbnRyYworKysgL2Rldi9udWxs
CkBAIC0xLDIzICswLDAgQEAKLXsKLQkibm9kZSI6IHRydWUsCi0JImJyb3dzZXIiOiB0cnVlLAot
CSJlc25leHQiOiB0cnVlLAotCSJiaXR3aXNlIjogdHJ1ZSwKLQkiY2FtZWxjYXNlIjogdHJ1ZSwK
LQkiY3VybHkiOiB0cnVlLAotCSJlcWVxZXEiOiB0cnVlLAotCSJpbW1lZCI6IHRydWUsCi0JImlu
ZGVudCI6IDQsCi0JImxhdGVkZWYiOiB0cnVlLAotCSJuZXdjYXAiOiB0cnVlLAotCSJub2FyZyI6
IHRydWUsCi0JInF1b3RtYXJrIjogInNpbmdsZSIsCi0JInJlZ2V4cCI6IHRydWUsCi0JInVuZGVm
IjogdHJ1ZSwKLQkidW51c2VkIjogdHJ1ZSwKLQkic3RyaWN0IjogdHJ1ZSwKLQkidHJhaWxpbmci
OiB0cnVlLAotCSJzbWFydHRhYnMiOiB0cnVlLAotCSJ3aGl0ZSI6IHRydWUsCi0JInZhbGlkdGhp
cyI6IHRydWUKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2FwcC5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2FwcC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzE0YTFlM2E0MmYzZDZjZWZlOTg4ZTU1YWI0NDMxYjk1MDgwMmQyZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Fw
cC9qcy9hcHAuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKmdsb2JhbCBkZWZp
bmUgKi8KLSd1c2Ugc3RyaWN0JzsKLQotZGVmaW5lKFsKLSAgICAnLi9kYXRhL3RvZG9zJywKLSAg
ICAnLi9kYXRhL3N0YXRzJywKLSAgICAnLi91aS9uZXdfaXRlbScsCi0gICAgJy4vdWkvdG9kb19s
aXN0JywKLSAgICAnLi91aS9zdGF0cycsCi0gICAgJy4vdWkvbWFpbl9zZWxlY3RvcicsCi0gICAg
Jy4vdWkvdG9nZ2xlX2FsbCcKLV0sIGZ1bmN0aW9uIChUb2Rvc0RhdGEsIFN0YXRzRGF0YSwgTmV3
SXRlbVVJLCBUb2RvTGlzdFVJLCBTdGF0c1VJLCBNYWluU2VsZWN0b3JVSSwgVG9nZ2xlQWxsVUkp
IHsKLSAgICB2YXIgaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgU3RhdHNEYXRh
LmF0dGFjaFRvKGRvY3VtZW50KTsKLSAgICAgICAgVG9kb3NEYXRhLmF0dGFjaFRvKGRvY3VtZW50
KTsKLSAgICAgICAgTmV3SXRlbVVJLmF0dGFjaFRvKCcjbmV3LXRvZG8nKTsKLSAgICAgICAgTWFp
blNlbGVjdG9yVUkuYXR0YWNoVG8oJyNtYWluJyk7Ci0gICAgICAgIFN0YXRzVUkuYXR0YWNoVG8o
JyNmb290ZXInKTsKLSAgICAgICAgVG9nZ2xlQWxsVUkuYXR0YWNoVG8oJyN0b2dnbGUtYWxsJyk7
Ci0gICAgICAgIFRvZG9MaXN0VUkuYXR0YWNoVG8oJyN0b2RvLWxpc3QnKTsKLQotICAgICAgICB2
YXIgZHVtbXlOb2RlVG9Ob3RpZnlBcHBJc1JlYWR5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7Ci0gICAgICAgIGR1bW15Tm9kZVRvTm90aWZ5QXBwSXNSZWFkeS5pZCA9ICdhcHBJc1Jl
YWR5JzsKLSAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkdW1teU5vZGVUb05vdGlm
eUFwcElzUmVhZHkpOwotICAgIH07Ci0KLSAgICByZXR1cm4gewotICAgICAgICBpbml0aWFsaXpl
OiBpbml0aWFsaXplCi0gICAgfTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9h
cHAvanMvZGF0YS9zdGF0cy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2OTdjMDBjMmFiOWNhM2JmYmEyNDVl
OGI5OTE0NjhiYmYxMzU3NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvZGF0YS9zdGF0cy5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qZ2xvYmFsIGRlZmluZSAqLwotJ3VzZSBzdHJpY3QnOwot
Ci1kZWZpbmUoWwotICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCi0gICAgJy4uL3N0b3JlJwot
XSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCwgZGF0YVN0b3JlKSB7Ci0gICAgZnVuY3Rpb24g
c3RhdHMoKSB7Ci0gICAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsKLSAgICAgICAgICAgIGRhdGFT
dG9yZTogZGF0YVN0b3JlCi0gICAgICAgIH0pOwotCi0gICAgICAgIHRoaXMucmVjb3VudCA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciB0b2RvcyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUu
YWxsKCk7Ci0gICAgICAgICAgICB2YXIgYWxsID0gdG9kb3MubGVuZ3RoOwotICAgICAgICAgICAg
dmFyIHJlbWFpbmluZyA9IHRvZG9zLnJlZHVjZShmdW5jdGlvbiAobWVtbywgZWFjaCkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBtZW1vICs9IGVhY2guY29tcGxldGVkID8gMCA6IDE7Ci0gICAg
ICAgICAgICB9LCAwKTsKLQotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhU3RhdHNDb3Vu
dGVkJywgewotICAgICAgICAgICAgICAgIGFsbDogYWxsLAotICAgICAgICAgICAgICAgIHJlbWFp
bmluZzogcmVtYWluaW5nLAotICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogYWxsIC0gcmVtYWlu
aW5nLAotICAgICAgICAgICAgICAgIGZpbHRlcjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2ZpbHRl
cicpIHx8ICcnCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLmFm
dGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5vbihkb2N1
bWVudCwgJ2RhdGFUb2Rvc0xvYWRlZCcsIHRoaXMucmVjb3VudCk7Ci0gICAgICAgICAgICB0aGlz
Lm9uKGRvY3VtZW50LCAnZGF0YVRvZG9BZGRlZCcsIHRoaXMucmVjb3VudCk7Ci0gICAgICAgICAg
ICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9SZW1vdmVkJywgdGhpcy5yZWNvdW50KTsKLSAg
ICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb1RvZ2dsZWQnLCB0aGlzLnJlY291
bnQpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFDbGVhcmVkQ29tcGxldGVk
JywgdGhpcy5yZWNvdW50KTsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9k
b1RvZ2dsZWRBbGwnLCB0aGlzLnJlY291bnQpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZGVmaW5lQ29tcG9uZW50KHN0YXRzKTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9hcHAvanMvZGF0YS90b2Rvcy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2Rh
dGEvdG9kb3MuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjYTZmNDJhMmQ2NmM5
YzRkNjllMDNkZDJiZGEzODNiOWI3ZTQwYTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvZGF0YS90b2Rvcy5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKmdsb2JhbCBkZWZpbmUgKi8KLSd1c2Ug
c3RyaWN0JzsKLQotZGVmaW5lKFsKLSAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAotICAgICcu
Li9zdG9yZScKLV0sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQsIGRhdGFTdG9yZSkgewotICAg
IGZ1bmN0aW9uIHRvZG9zKCkgewotICAgICAgICB2YXIgZmlsdGVyOwotICAgICAgICB0aGlzLmRl
ZmF1bHRBdHRycyh7Ci0gICAgICAgICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZQotICAgICAgICB9
KTsKLQotICAgICAgICB0aGlzLmFkZCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAg
ICB2YXIgdG9kbyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuc2F2ZSh7Ci0gICAgICAgICAgICAgICAg
dGl0bGU6IGRhdGEudGl0bGUsCi0gICAgICAgICAgICAgICAgY29tcGxldGVkOiBmYWxzZQotICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YVRvZG9BZGRlZCcs
IHsgdG9kbzogdG9kbywgZmlsdGVyOiBmaWx0ZXIgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
dGhpcy5yZW1vdmUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyIHRvZG8g
PSB0aGlzLmF0dHIuZGF0YVN0b3JlLmRlc3Ryb3koZGF0YS5pZCk7Ci0KLSAgICAgICAgICAgIHRo
aXMudHJpZ2dlcignZGF0YVRvZG9SZW1vdmVkJywgdG9kbyk7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgdGhpcy5sb2FkID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHRvZG9zOwotCi0g
ICAgICAgICAgICBmaWx0ZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmlsdGVyJyk7Ci0gICAg
ICAgICAgICB0b2RvcyA9IHRoaXMuZmluZCgpOwotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdk
YXRhVG9kb3NMb2FkZWQnLCB7IHRvZG9zOiB0b2RvcyB9KTsKLSAgICAgICAgfTsKLQotICAgICAg
ICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAgICB0aGlzLmF0
dHIuZGF0YVN0b3JlLnNhdmUoZGF0YSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy50b2dn
bGVDb21wbGV0ZWQgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyIGV2ZW50
VHlwZTsKLSAgICAgICAgICAgIHZhciB0b2RvID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5nZXQoZGF0
YS5pZCk7Ci0KLSAgICAgICAgICAgIHRvZG8uY29tcGxldGVkID0gIXRvZG8uY29tcGxldGVkOwot
ICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5zYXZlKHRvZG8pOwotCi0gICAgICAgICAg
ICBldmVudFR5cGUgPSBmaWx0ZXIgPyAnZGF0YVRvZG9SZW1vdmVkJyA6ICdkYXRhVG9kb1RvZ2ds
ZWQnOwotCi0gICAgICAgICAgICB0aGlzLnRyaWdnZXIoZXZlbnRUeXBlLCB0b2RvKTsKLSAgICAg
ICAgfTsKLQotICAgICAgICB0aGlzLnRvZ2dsZUFsbENvbXBsZXRlZCA9IGZ1bmN0aW9uIChlLCBk
YXRhKSB7Ci0gICAgICAgICAgICB0aGlzLmF0dHIuZGF0YVN0b3JlLnVwZGF0ZUFsbCh7IGNvbXBs
ZXRlZDogZGF0YS5jb21wbGV0ZWQgfSk7Ci0gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFU
b2RvVG9nZ2xlZEFsbCcsIHsgdG9kb3M6IHRoaXMuZmluZChmaWx0ZXIpIH0pOwotICAgICAgICB9
OwotCi0gICAgICAgIHRoaXMuZmlsdGVyID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKLSAgICAgICAg
ICAgIHZhciB0b2RvczsKLQotICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2ZpbHRl
cicsIGRhdGEuZmlsdGVyKTsKLSAgICAgICAgICAgIGZpbHRlciA9IGRhdGEuZmlsdGVyOwotICAg
ICAgICAgICAgdG9kb3MgPSB0aGlzLmZpbmQoKTsKLQotICAgICAgICAgICAgdGhpcy50cmlnZ2Vy
KCdkYXRhVG9kb3NGaWx0ZXJlZCcsIHsgdG9kb3M6IHRvZG9zIH0pOwotICAgICAgICB9OwotCi0g
ICAgICAgIHRoaXMuZmluZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciB0b2RvczsK
LQotICAgICAgICAgICAgaWYgKGZpbHRlcikgewotICAgICAgICAgICAgICAgIHRvZG9zID0gdGhp
cy5hdHRyLmRhdGFTdG9yZS5maW5kKGZ1bmN0aW9uIChlYWNoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiAodHlwZW9mIGVhY2hbZmlsdGVyXSAhPT0gJ3VuZGVmaW5lZCcpID8gZWFjaC5j
b21wbGV0ZWQgOiAhZWFjaC5jb21wbGV0ZWQ7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRvZG9zID0gdGhpcy5hdHRyLmRhdGFTdG9y
ZS5hbGwoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRvZG9zOwotICAg
ICAgICB9OwotCi0gICAgICAgIHRoaXMuY2xlYXJDb21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgICB0aGlzLmF0dHIuZGF0YVN0b3JlLmRlc3Ryb3lBbGwoeyBjb21wbGV0ZWQ6IHRy
dWUgfSk7Ci0KLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlGaWx0ZXJSZXF1ZXN0ZWQnLCB7
IGZpbHRlcjogZmlsdGVyIH0pOwotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhQ2xlYXJl
ZENvbXBsZXRlZCcpOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxp
emUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlBZGRS
ZXF1ZXN0ZWQnLCB0aGlzLmFkZCk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlV
cGRhdGVSZXF1ZXN0ZWQnLCB0aGlzLnVwZGF0ZSk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3Vt
ZW50LCAndWlSZW1vdmVSZXF1ZXN0ZWQnLCB0aGlzLnJlbW92ZSk7Ci0gICAgICAgICAgICB0aGlz
Lm9uKGRvY3VtZW50LCAndWlMb2FkUmVxdWVzdGVkJywgdGhpcy5sb2FkKTsKLSAgICAgICAgICAg
IHRoaXMub24oZG9jdW1lbnQsICd1aVRvZ2dsZVJlcXVlc3RlZCcsIHRoaXMudG9nZ2xlQ29tcGxl
dGVkKTsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aVRvZ2dsZUFsbFJlcXVlc3Rl
ZCcsIHRoaXMudG9nZ2xlQWxsQ29tcGxldGVkKTsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1l
bnQsICd1aUNsZWFyUmVxdWVzdGVkJywgdGhpcy5jbGVhckNvbXBsZXRlZCk7Ci0gICAgICAgICAg
ICB0aGlzLm9uKGRvY3VtZW50LCAndWlGaWx0ZXJSZXF1ZXN0ZWQnLCB0aGlzLmZpbHRlcik7Ci0g
ICAgICAgIH0pOwotICAgIH0KLQotICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQodG9kb3MpOwot
fSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9tYWluLmpzIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9hcHAvanMvbWFpbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZGJhZWEwYzNiMjIyOTk1MzVlYjg5NTVjMTA3NmMxNGM4OGI1ZDNkMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9t
YWluLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotJ3VzZSBzdHJpY3QnOwotCi1y
ZXF1aXJlLmNvbmZpZyh7Ci0gICAgYmFzZVVybDogJy4vJywKLSAgICBwYXRoczogewotICAgICAg
ICBqcXVlcnk6ICdib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnknLAotICAgICAgICBlczVz
aGltOiAnYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbScsCi0gICAgICAgIGVzNXNo
YW06ICdib3dlcl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtJywKLSAgICAgICAgdGV4dDog
J2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzLXRleHQvdGV4dCcsCi0gICAgICAgIGZsaWdodDog
J2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0JywKLSAgICAgICAgZGVwb3Q6ICdib3dlcl9jb21wb25l
bnRzL2RlcG90L2RlcG90JwotICAgIH0sCi0gICAgc2hpbTogewotICAgICAgICAnYXBwL2pzL2Fw
cCc6IHsKLSAgICAgICAgICAgIGRlcHM6IFsnanF1ZXJ5JywgJ2VzNXNoaW0nLCAnZXM1c2hhbSdd
Ci0gICAgICAgIH0KLSAgICB9Ci19KTsKLQotcmVxdWlyZShbJ2FwcC9qcy9hcHAnXSwgZnVuY3Rp
b24gKEFwcCkgewotICAgIEFwcC5pbml0aWFsaXplKCk7Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYXBwL2pzL3N0b3JlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvc3Rv
cmUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMDk2ZjVjZmVmNDAxMTJlZTNm
OTc0Y2MyNDA0ODBkYmQ3OGRjY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvc3RvcmUuanMKKysrIC9kZXYvbnVs
bApAQCAtMSw5ICswLDAgQEAKLS8qZ2xvYmFsIGRlZmluZSAqLwotCi0ndXNlIHN0cmljdCc7Ci0K
LWRlZmluZShbCi0gICAgJ2RlcG90JwotXSwgZnVuY3Rpb24gKGRlcG90KSB7Ci0gICAgcmV0dXJu
IGRlcG90KCd0b2RvcycsIHsgaWRBdHRyaWJ1dGU6ICdpZCcgfSk7Ci19KTsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL21haW5fc2VsZWN0b3IuanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2FwcC9qcy91aS9tYWluX3NlbGVjdG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0ODhjMmQ0Y2UwYTkyZGUyZTRlMTIyODdmYjZlMTg4OWFmN2U3ZDMzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
YXBwL2pzL3VpL21haW5fc2VsZWN0b3IuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBA
Ci0vKmdsb2JhbCBkZWZpbmUgKi8KLSd1c2Ugc3RyaWN0JzsKLQotZGVmaW5lKFsKLSAgICAnZmxp
Z2h0L2xpYi9jb21wb25lbnQnCi1dLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50KSB7Ci0gICAg
ZnVuY3Rpb24gbWFpblNlbGVjdG9yKCkgewotICAgICAgICB0aGlzLnRvZ2dsZSA9IGZ1bmN0aW9u
IChlLCBkYXRhKSB7Ci0gICAgICAgICAgICB2YXIgdG9nZ2xlID0gZGF0YS5hbGwgPiAwOwotICAg
ICAgICAgICAgdGhpcy4kbm9kZS50b2dnbGUodG9nZ2xlKTsKLSAgICAgICAgfTsKLQotICAgICAg
ICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhp
cy4kbm9kZS5oaWRlKCk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVN0YXRz
Q291bnRlZCcsIHRoaXMudG9nZ2xlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGRlZmluZUNvbXBvbmVudChtYWluU2VsZWN0b3IpOwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2FwcC9qcy91aS9uZXdfaXRlbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pz
L3VpL25ld19pdGVtLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWQ2ZDg3ZTM0
M2I1NTgxYThhNTdhOGZhMzM5NGI2ZDNiYTQyNTBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL25ld19pdGVt
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLypnbG9iYWwgZGVmaW5lICovCi0n
dXNlIHN0cmljdCc7Ci0KLWRlZmluZShbCi0gICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JwotXSwg
ZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCkgewotICAgIGZ1bmN0aW9uIG5ld0l0ZW0oKSB7Ci0g
ICAgICAgIHZhciBFTlRFUl9LRVkgPSAxMzsKLQotICAgICAgICB0aGlzLmNyZWF0ZU9uRW50ZXIg
PSBmdW5jdGlvbiAoZSkgewotICAgICAgICAgICAgaWYgKGUud2hpY2ggIT09IEVOVEVSX0tFWSB8
fAotICAgICAgICAgICAgICAgICF0aGlzLiRub2RlLnZhbCgpLnRyaW0oKSkgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy50cmlnZ2Vy
KCd1aUFkZFJlcXVlc3RlZCcsIHsKLSAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy4kbm9kZS52
YWwoKS50cmltKCkKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICB0aGlzLiRub2RlLnZh
bCgnJyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMub24oJ2tleWRvd24nLCB0aGlzLmNyZWF0ZU9u
RW50ZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50
KG5ld0l0ZW0pOwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9z
dGF0cy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3N0YXRzLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwOGU1ZWNkZjMzYWZjMDAxMjg5YTExMzNlZTFiNjc4MGNmNmFl
M2NmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYXBwL2pzL3VpL3N0YXRzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAs
MCBAQAotLypnbG9iYWwgZGVmaW5lICovCi0ndXNlIHN0cmljdCc7Ci0KLWRlZmluZShbCi0gICAg
J2ZsaWdodC9saWIvY29tcG9uZW50JywKLSAgICAnLi93aXRoX2ZpbHRlcnMnLAotICAgICd0ZXh0
IWFwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbCcsCi0gICAgJy4uL3V0aWxzJwotXSwgZnVuY3Rpb24g
KGRlZmluZUNvbXBvbmVudCwgd2l0aEZpbHRlcnMsIHN0YXRzVG1wbCwgdXRpbHMpIHsKLSAgICBm
dW5jdGlvbiBzdGF0cygpIHsKLSAgICAgICAgdmFyIHRlbXBsYXRlID0gdXRpbHMudG1wbChzdGF0
c1RtcGwpOwotCi0gICAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsKLSAgICAgICAgICAgIGNsZWFy
Q29tcGxldGVkU2VsZWN0b3I6ICcjY2xlYXItY29tcGxldGVkJwotICAgICAgICB9KTsKLQotICAg
ICAgICB0aGlzLnJlbmRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAgICB2YXIg
dG9nZ2xlID0gZGF0YS5hbGwgPiAwOwotCi0gICAgICAgICAgICB0aGlzLiRub2RlLmh0bWwodGVt
cGxhdGUoZGF0YSkpOwotICAgICAgICAgICAgdGhpcy4kbm9kZS50b2dnbGUodG9nZ2xlKTsKLSAg
ICAgICAgICAgIHRoaXMubWFya1NlbGVjdGVkKGRhdGEuZmlsdGVyKTsKLSAgICAgICAgfTsKLQot
ICAgICAgICB0aGlzLmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dGhpcy50cmlnZ2VyKCd1aUNsZWFyUmVxdWVzdGVkJyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
dGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMu
JG5vZGUuaGlkZSgpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFTdGF0c0Nv
dW50ZWQnLCB0aGlzLnJlbmRlcik7Ci0gICAgICAgICAgICB0aGlzLm9uKCdjbGljaycsIHsgJ2Ns
ZWFyQ29tcGxldGVkU2VsZWN0b3InOiB0aGlzLmNsZWFyQ29tcGxldGVkIH0pOwotICAgICAgICB9
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHN0YXRzLCB3aXRoRmlsdGVy
cyk7Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3RvZG9fbGlz
dC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3RvZG9fbGlzdC5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOGM4MDZmYTJmOTJiZGU0NTdhM2VkNjdmMTAwMDhiMjBhMDZi
M2QxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2RvX2xpc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDggKzAsMCBAQAotLypnbG9iYWwgZGVmaW5lLCAkICovCi0ndXNlIHN0cmljdCc7Ci0KLWRlZmlu
ZShbCi0gICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywKLSAgICAndGV4dCFhcHAvdGVtcGxhdGVz
L3RvZG8uaHRtbCcsCi0gICAgJy4uL3V0aWxzJwotXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVu
dCwgdG9kb1RtcGwsIHV0aWxzKSB7Ci0gICAgZnVuY3Rpb24gdG9kb0xpc3QoKSB7Ci0gICAgICAg
IHZhciBFTlRFUl9LRVkgPSAxMzsKLSAgICAgICAgdmFyIHRlbXBsYXRlID0gdXRpbHMudG1wbCh0
b2RvVG1wbCk7Ci0KLSAgICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoewotICAgICAgICAgICAgZGVz
dHJveVNlbGVjdG9yOiAnYnV0dG9uLmRlc3Ryb3knLAotICAgICAgICAgICAgdG9nZ2xlU2VsZWN0
b3I6ICdpbnB1dC50b2dnbGUnLAotICAgICAgICAgICAgbGFiZWxTZWxlY3RvcjogJ2xhYmVsJywK
LSAgICAgICAgICAgIGVkaXRTZWxlY3RvcjogJy5lZGl0JwotICAgICAgICB9KTsKLQotICAgICAg
ICB0aGlzLnJlbmRlckFsbCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAgICB0aGlz
LiRub2RlLmh0bWwoJycpOwotICAgICAgICAgICAgZGF0YS50b2Rvcy5mb3JFYWNoKGZ1bmN0aW9u
IChlYWNoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoZSwgeyB0b2RvOiBlYWNoIH0p
OwotICAgICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5yZW5k
ZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2Rh
dGFUb2RvQWRkZWQnICYmIGRhdGEuZmlsdGVyID09PSAnY29tcGxldGVkJykgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy4kbm9kZS5h
cHBlbmQodGVtcGxhdGUoZGF0YS50b2RvKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5l
ZGl0ID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKLSAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJChk
YXRhLmVsKS5wYXJlbnRzKCdsaScpOwotCi0gICAgICAgICAgICAkdG9kb0VsLmFkZENsYXNzKCdl
ZGl0aW5nJyk7Ci0gICAgICAgICAgICB0aGlzLnNlbGVjdCgnZWRpdFNlbGVjdG9yJykuZm9jdXMo
KTsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUgPSBmdW5jdGlvbiAo
ZSkgewotICAgICAgICAgICAgdmFyICRpbnB1dEVsID0gJChlLmN1cnJlbnRUYXJnZXQpOwotICAg
ICAgICAgICAgdmFyICR0b2RvRWwgPSAkaW5wdXRFbC5wYXJlbnRzKCdsaScpOwotICAgICAgICAg
ICAgdmFyIHZhbHVlID0gJGlucHV0RWwudmFsKCkudHJpbSgpOwotICAgICAgICAgICAgdmFyIGlk
ID0gJHRvZG9FbC5hdHRyKCdpZCcpOwotCi0gICAgICAgICAgICBpZiAoISR0b2RvRWwuaGFzQ2xh
c3MoJ2VkaXRpbmcnKSkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgJHRvZG9FbC5yZW1vdmVDbGFzcygnZWRpdGluZycpOwotCi0gICAgICAg
ICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAkdG9kb0VsLmZpbmQoJ2xhYmVsJyku
aHRtbCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVVwZGF0ZVJlcXVl
c3RlZCcsICB7IGlkOiBpZCwgdGl0bGU6IHZhbHVlIH0pOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpUmVtb3ZlUmVxdWVzdGVkJywgeyBpZDog
aWQgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5yZXF1ZXN0
VXBkYXRlT25FbnRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAgICBpZiAoZS53
aGljaCA9PT0gRU5URVJfS0VZKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRl
KGUsIGRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMucmVx
dWVzdFJlbW92ZSA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAgICB2YXIgaWQgPSAk
KGRhdGEuZWwpLmF0dHIoJ2lkJykuc3BsaXQoJ18nKVsxXTsKLSAgICAgICAgICAgIHRoaXMudHJp
Z2dlcigndWlSZW1vdmVSZXF1ZXN0ZWQnLCB7IGlkOiBpZCB9KTsKLSAgICAgICAgfTsKLQotICAg
ICAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAgICB2YXIg
JHRvZG9FbCA9IHRoaXMuJG5vZGUuZmluZCgnIycgKyBkYXRhLmlkKTsKLSAgICAgICAgICAgICR0
b2RvRWwucmVtb3ZlKCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy50b2dnbGUgPSBmdW5j
dGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyICR0b2RvRWwgPSAkKGRhdGEuZWwpLnBh
cmVudHMoJ2xpJyk7Ci0KLSAgICAgICAgICAgICR0b2RvRWwudG9nZ2xlQ2xhc3MoJ2NvbXBsZXRl
ZCcpOwotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVRvZ2dsZVJlcXVlc3RlZCcsIHsgaWQ6
ICR0b2RvRWwuYXR0cignaWQnKSB9KTsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLmFmdGVy
KCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVu
dCwgJ2RhdGFUb2RvQWRkZWQnLCB0aGlzLnJlbmRlcik7Ci0gICAgICAgICAgICB0aGlzLm9uKGRv
Y3VtZW50LCAnZGF0YVRvZG9zTG9hZGVkJywgdGhpcy5yZW5kZXJBbGwpOwotICAgICAgICAgICAg
dGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2Rvc0ZpbHRlcmVkJywgdGhpcy5yZW5kZXJBbGwpOwot
ICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvVG9nZ2xlZEFsbCcsIHRoaXMu
cmVuZGVyQWxsKTsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb1JlbW92
ZWQnLCB0aGlzLnJlbW92ZSk7Ci0KLSAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeyAnZGVz
dHJveVNlbGVjdG9yJzogdGhpcy5yZXF1ZXN0UmVtb3ZlIH0pOwotICAgICAgICAgICAgdGhpcy5v
bignY2xpY2snLCB7ICd0b2dnbGVTZWxlY3Rvcic6IHRoaXMudG9nZ2xlIH0pOwotICAgICAgICAg
ICAgdGhpcy5vbignZGJsY2xpY2snLCB7ICdsYWJlbFNlbGVjdG9yJzogdGhpcy5lZGl0IH0pOwot
Ci0gICAgICAgICAgICB0aGlzLiRub2RlLm9uKCdibHVyJywgJy5lZGl0JywgdGhpcy5yZXF1ZXN0
VXBkYXRlLmJpbmQodGhpcykpOwotICAgICAgICAgICAgdGhpcy4kbm9kZS5vbigna2V5ZG93bics
ICcuZWRpdCcsIHRoaXMucmVxdWVzdFVwZGF0ZU9uRW50ZXIuYmluZCh0aGlzKSk7Ci0KLSAgICAg
ICAgICAgIC8vIHRoZXNlIGRvbid0IHdvcmsKLSAgICAgICAgICAgIC8vIHRoaXMub24odGhpcy5h
dHRyLmVkaXRTZWxlY3RvciwgJ2JsdXInLCB0aGlzLnJlcXVlc3RVcGRhdGUpOwotICAgICAgICAg
ICAgLy8gdGhpcy5vbignYmx1cicsIHsgJ2VkaXRTZWxlY3Rvcic6IHRoaXMucmVxdWVzdFVwZGF0
ZSB9KTsKLQotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aUxvYWRSZXF1ZXN0ZWQnKTsKLSAg
ICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudCh0b2RvTGlzdCk7
Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3RvZ2dsZV9hbGwu
anMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2dnbGVfYWxsLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0ZGM2OTgzYzMxYWI2ZmMxYjE3MTgwNTg1NzBkNDIzN2RmNzQ3
NDhhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYXBwL2pzL3VpL3RvZ2dsZV9hbGwuanMKKysrIC9kZXYvbnVsbApAQCAtMSwy
NSArMCwwIEBACi0vKmdsb2JhbCBkZWZpbmUgKi8KLSd1c2Ugc3RyaWN0JzsKLQotZGVmaW5lKFsK
LSAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnCi1dLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50
KSB7Ci0gICAgZnVuY3Rpb24gdG9nZ2xlQWxsKCkgewotICAgICAgICB0aGlzLnRvZ2dsZUFsbENv
bXBsZXRlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVRvZ2ds
ZUFsbFJlcXVlc3RlZCcsIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IHRoaXMuJG5vZGUu
aXMoJzpjaGVja2VkJykKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAgICAgIHRo
aXMudG9nZ2xlQ2hlY2tib3ggPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdGhp
cy5ub2RlLmNoZWNrZWQgPSAhZGF0YS5yZW1haW5pbmc7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
dGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMu
b24oJ2NsaWNrJywgdGhpcy50b2dnbGVBbGxDb21wbGV0ZSk7Ci0gICAgICAgICAgICB0aGlzLm9u
KGRvY3VtZW50LCAnZGF0YVN0YXRzQ291bnRlZCcsIHRoaXMudG9nZ2xlQ2hlY2tib3gpOwotICAg
ICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHRvZ2dsZUFsbCk7
Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVy
cy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZmMzRjOGYwN2E2MTQwODZlMDBmYjBiNTIyNTNmODIy
NGE0NGE4Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwyNiArMCwwIEBACi0vKmdsb2JhbCBkZWZpbmUsICQgKi8KLSd1c2Ugc3RyaWN0JzsKLQot
ZGVmaW5lKGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24gd2l0aEZpbHRlcnMoKSB7
Ci0gICAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsKLSAgICAgICAgICAgIGZpbHRlclNlbGVjdG9y
OiAnI2ZpbHRlcnMgYScKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5jaG9vc2VGaWx0ZXIg
PSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyIGZpbHRlciA9IGRhdGEuZWwu
aGFzaC5zbGljZSgyKTsKLQotICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2ZpbHRlclNlbGVjdG9y
JykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7Ci0gICAgICAgICAgICAkKGRhdGEuZWwpLmFkZENs
YXNzKCdzZWxlY3RlZCcpOwotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aUZpbHRlclJlcXVl
c3RlZCcsIHsgZmlsdGVyOiBmaWx0ZXIgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5t
YXJrU2VsZWN0ZWQgPSBmdW5jdGlvbiAoZmlsdGVyKSB7Ci0gICAgICAgICAgICB0aGlzLiRub2Rl
LmZpbmQoJ1tocmVmPSIjLycgKyBmaWx0ZXIgKyAnIl0nKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTsK
LSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB7IGZpbHRlclNlbGVjdG9yOiB0aGlz
LmNob29zZUZpbHRlciB9KTsKLSAgICAgICAgfSk7Ci0gICAgfTsKLX0pOwpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdXRpbHMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9q
cy91dGlscy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE4NTczMzkxYzA1NGM0
MTE4ZjQ1ODRmMDk5MGJiM2M2ZDg4M2E0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91dGlscy5qcworKysgL2Rl
di9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKmdsb2JhbCBkZWZpbmUgKi8KLSd1c2Ugc3RyaWN0
JzsKLQotLy8gdG1wbCBmdW5jdGlvbiBzY29vcGVkIGZyb20gdW5kZXJzY29yZS4KLS8vIGh0dHA6
Ly9kb2N1bWVudGNsb3VkLmdpdGh1Yi5jb20vdW5kZXJzY29yZS8jdGVtcGxhdGUKLWRlZmluZShm
dW5jdGlvbiAoKSB7Ci0gICAgdmFyIF8gPSB7fTsKLQotICAgIC8vIExpc3Qgb2YgSFRNTCBlbnRp
dGllcyBmb3IgZXNjYXBpbmcuCi0gICAgdmFyIGVudGl0eU1hcCA9IHsKLSAgICAgICAgZXNjYXBl
OiB7Ci0gICAgICAgICAgICAnJic6ICcmYW1wOycsCi0gICAgICAgICAgICAnPCc6ICcmbHQ7JywK
LSAgICAgICAgICAgICc+JzogJyZndDsnLAotICAgICAgICAgICAgJyInOiAnJnF1b3Q7JywKLSAg
ICAgICAgICAgIC8qanNoaW50IHF1b3RtYXJrOmZhbHNlICovCi0gICAgICAgICAgICAiJyI6ICcm
I3gyNzsnLAotICAgICAgICAgICAgJy8nOiAnJiN4MkY7JwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHZhciBlc2NhcGVLZXlzID0gJyY8PiJcJy8nOwotICAgIHZhciB1bmVzY2FwZUtleXMgPSAn
JmFtcDt8Jmx0O3wmZ3Q7fCZxdW90O3wmI3gyNzt8JiN4MkY7JzsKLQotICAgIC8vIFJlZ2V4ZXMg
Y29udGFpbmluZyB0aGUga2V5cyBhbmQgdmFsdWVzIGxpc3RlZCBpbW1lZGlhdGVseSBhYm92ZS4K
LSAgICB2YXIgZW50aXR5UmVnZXhlcyA9IHsKLSAgICAgICAgZXNjYXBlOiAgIG5ldyBSZWdFeHAo
J1snICsgZXNjYXBlS2V5cyArICddJywgJ2cnKSwKLSAgICAgICAgdW5lc2NhcGU6IG5ldyBSZWdF
eHAoJygnICsgdW5lc2NhcGVLZXlzICsgJyknLCAnZycpCi0gICAgfTsKLQotICAgIC8vIEZ1bmN0
aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5ncyB0by9mcm9tIEhUTUwgaW50
ZXJwb2xhdGlvbi4KLSAgICBbJ2VzY2FwZScsICd1bmVzY2FwZSddLmZvckVhY2goZnVuY3Rpb24g
KG1ldGhvZCkgewotICAgICAgICBfW21ldGhvZF0gPSBmdW5jdGlvbiAoc3RyaW5nKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gKCcnICsgc3RyaW5nKS5yZXBsYWNlKGVudGl0eVJlZ2V4ZXNbbWV0aG9kXSwgZnVuY3Rp
b24gKG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0eU1hcFttZXRob2RdW21h
dGNoXTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotICAgIH0pOwotCi0gICAgdmFyIHNl
dHRpbmdzID0gewotICAgICAgICBldmFsdWF0ZTogLzwlKFtcc1xTXSs/KSU+L2csCi0gICAgICAg
IGludGVycG9sYXRlOiAvPCU9KFtcc1xTXSs/KSU+L2csCi0gICAgICAgIGVzY2FwZTogLzwlLShb
XHNcU10rPyklPi9nCi0gICAgfTsKLQotICAgIHZhciBub01hdGNoID0gLyguKV4vOwotICAgIHZh
ciBlc2NhcGVzID0gewotICAgICAgICAvKmpzaGludCBxdW90bWFyazpmYWxzZSAqLwotICAgICAg
ICAiJyI6ICInIiwKLSAgICAgICAgJ1xcJzogJ1xcJywKLSAgICAgICAgJ1xyJzogJ3InLAotICAg
ICAgICAnXG4nOiAnbicsCi0gICAgICAgICdcdCc6ICd0JywKLSAgICAgICAgJ1x1MjAyOCc6ICd1
MjAyOCcsCi0gICAgICAgICdcdTIwMjknOiAndTIwMjknCi0gICAgfTsKLQotICAgIHZhciBlc2Nh
cGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAyOS9nOwotCi0gICAgLy8gSmF2YVNjcmlw
dCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlv
bi4KLSAgICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1p
dGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCi0gICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVz
IHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCi0gICAgdmFyIHRlbXBsYXRlID0gZnVu
Y3Rpb24gKHRleHQsIGRhdGEpIHsKLSAgICAgICAgdmFyIHJlbmRlcjsKLQotICAgICAgICAvLyBD
b21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5h
dGlvbi4KLSAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsKLSAgICAgICAgICAgIChz
ZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLAotICAgICAgICAgICAgKHNldHRpbmdz
LmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKLSAgICAgICAgICAgIChzZXR0aW5ncy5l
dmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKLSAgICAgICAgXS5qb2luKCd8JykgKyAnfCQnLCAn
ZycpOwotCi0gICAgICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcg
c3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuCi0gICAgICAgIHZhciBpbmRleCA9IDA7Ci0g
ICAgICAgIHZhciBzb3VyY2UgPSAiX19wKz0nIjsKLSAgICAgICAgdGV4dC5yZXBsYWNlKG1hdGNo
ZXIsIGZ1bmN0aW9uIChtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNl
dCkgewotICAgICAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkKLSAg
ICAgICAgICAgIC5yZXBsYWNlKGVzY2FwZXIsIGZ1bmN0aW9uIChtYXRjaCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiAnXFwnICsgZXNjYXBlc1ttYXRjaF07Ci0gICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgaWYgKGVzY2FwZSkgewotICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytc
bigoX190PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGUpIHsKLSAgICAgICAgICAg
ICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1udWxsPycn
Ol9fdCkrXG4nIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChldmFsdWF0ZSkgewot
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0
aDsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgfSk7Ci0gICAgICAgIHNvdXJj
ZSArPSAiJztcbiI7Ci0KLSAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVk
LCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KLSAgICAgICAgaWYgKCFzZXR0aW5n
cy52YXJpYWJsZSkgewotICAgICAgICAgICAgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4nICsg
c291cmNlICsgJ31cbic7Ci0gICAgICAgIH0KLQotICAgICAgICBzb3VyY2UgPSAidmFyIF9fdCxf
X3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKwotICAgICAgICAgICAgInByaW50PWZ1
bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsKLSAgICAgICAgICAg
IHNvdXJjZSArICJyZXR1cm4gX19wO1xuIjsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAg
Lypqc2hpbnQgZXZpbDp0cnVlICovCi0gICAgICAgICAgICByZW5kZXIgPSBuZXcgRnVuY3Rpb24o
c2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicsICdfJywgc291cmNlKTsKLSAgICAgICAgfSBjYXRj
aCAoZXJyKSB7Ci0gICAgICAgICAgICBlcnIuc291cmNlID0gc291cmNlOwotICAgICAgICAgICAg
dGhyb3cgZXJyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAg
IHJldHVybiByZW5kZXIoZGF0YSwgXyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdGVtcGxh
dGUgPSBmdW5jdGlvbiAoZGF0YSkgewotICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRo
aXMsIGRhdGEsIF8pOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBp
bGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4K
LSAgICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFi
bGUgfHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOwotCi0gICAgICAgIHJldHVybiB0
ZW1wbGF0ZTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgdG1wbDogdGVtcGxhdGUK
LSAgICB9OwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMv
c3RhdHMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0cy5odG1sCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWIzYjVjZjNmNjhjMDZhZTMxMzRmNDJlNGEw
OTA2YTFhNzA4YmU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0cy5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsMTcgKzAsMCBAQAotPHNwYW4gaWQ9InRvZG8tY291bnQiPgotICAgIDxzdHJvbmc+
PCU9IHJlbWFpbmluZyAlPjwvc3Ryb25nPiA8JT0gcmVtYWluaW5nID09IDEgPyAnaXRlbScgOiAn
aXRlbXMnICU+IGxlZnQKLTwvc3Bhbj4KLTx1bCBpZD0iZmlsdGVycyI+Ci0gICAgPGxpPgotICAg
ICAgICA8YSBocmVmPSIjLyI+QWxsPC9hPgotICAgIDwvbGk+Ci0gICAgPGxpPgotICAgICAgICA8
YSBocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPgotICAgIDwvbGk+Ci0gICAgPGxpPgotICAgICAg
ICA8YSBocmVmPSIjL2NvbXBsZXRlZCI+Q29tcGxldGVkPC9hPgotICAgIDwvbGk+Ci08L3VsPgot
PCUgaWYgKGNvbXBsZXRlZCkgeyAlPgotPGJ1dHRvbiBpZD0iY2xlYXItY29tcGxldGVkIj5DbGVh
ciBjb21wbGV0ZWQgKDwlPSBjb21wbGV0ZWQgJT4pPC9idXR0b24+Ci08JSB9ICU+CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvdG9kby5odG1sIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjFmZjc1Mzg5ZGY1NzAxMjYyZTFmNTI2MWVjOTQ1MzMyNGMzZWI2ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Fw
cC90ZW1wbGF0ZXMvdG9kby5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bGkg
aWQ9IjwlPSBpZCAlPiIgY2xhc3M9IjwlPSBjb21wbGV0ZWQgPyAnY29tcGxldGVkJyA6ICcnICU+
Ij4KLSAgICA8ZGl2IGNsYXNzPSJ2aWV3Ij4KLSAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUi
IHR5cGU9ImNoZWNrYm94IiA8JT0gY29tcGxldGVkID8gJ2NoZWNrZWQnIDogJycgJT4+Ci0gICAg
ICAgIDxsYWJlbD48JS0gdGl0bGUgJT48L2xhYmVsPgotICAgICAgICA8YnV0dG9uIGlkPSJkZXN0
cm95XzwlPSBpZCAlPiIgY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPgotICAgIDwvZGl2PgotICAg
IDxpbnB1dCBjbGFzcz0iZWRpdCIgdmFsdWU9IjwlLSB0aXRsZSAlPiI+Ci08L2xpPgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlci5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dl
ci5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWY1MGY0MDEzZWQzYmVhY2Y1
Zjg4ZDFjYTM5MDBkYjg5MmQ2MDU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXIuanNvbgorKysgL2Rldi9udWxsCkBA
IC0xLDE2ICswLDAgQEAKLXsKLSAgIm5hbWUiOiAiZmxpZ2h0LXRvZG9tdmMiLAotICAidmVyc2lv
biI6ICIwLjAuMCIsCi0gICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgImRlcG90IjogIn4wLjEuNCIs
Ci0gICAgImZsaWdodCI6ICJ+MS4xLjAiLAotICAgICJqcXVlcnkiOiAiMS44LjMiLAotICAgICJy
ZXF1aXJlanMiOiAifjIuMS41IiwKLSAgICAidG9kb212Yy1jb21tb24iOiAifjAuMS40IiwKLSAg
ICAicmVxdWlyZWpzLXRleHQiOiAifjIuMC4xMCIKLSAgfSwKLSAgImRldkRlcGVuZGVuY2llcyI6
IHsKLSAgICAiamFzbWluZS1mbGlnaHQiOiAifjIuMS4wIiwKLSAgICAiamFzbWluZS1qcXVlcnki
OiAifjEuNS44IgotICB9Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2Nv
bXBvbmVudHMvZGVwb3QvZGVwb3QuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVu
dHMvZGVwb3QvZGVwb3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjNzYzODQy
M2RmNGZiOGNjZDUxODNkNmJkZDRlMTY4N2FkODNkMDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRz
L2RlcG90L2RlcG90LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAgQEAKLS8vIGRlcG90
LmpzIHYwLjEuNgotCi0vLyAoYykgMjAxMyBNaWNoYWwgS3VrbGlzCi0vLyBMaWNlbnNlZCB1bmRl
ciBUaGUgTUlUIExpY2Vuc2UKLS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQK
LQotKGZ1bmN0aW9uIChuYW1lLCByb290LCBmYWN0b3J5KSB7Ci0gIGlmICh0eXBlb2YgZXhwb3J0
cyA9PSAnb2JqZWN0JykgewotICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpOwotICB9IGVs
c2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7Ci0gICAg
ZGVmaW5lKGZhY3RvcnkpOwotICB9IGVsc2UgewotICAgIHJvb3RbbmFtZV0gPSBmYWN0b3J5KCk7
Ci0gIH0KLX0oImRlcG90IiwgdGhpcywgZnVuY3Rpb24gKCkgewotCi0gICJ1c2Ugc3RyaWN0IjsK
LQotICAvLyBkZXBvdCBhcGkKLQotICB2YXIgYXBpID0gewotCi0gICAgc2F2ZTogZnVuY3Rpb24g
KHJlY29yZCkgewotICAgICAgdmFyIGlkOwotCi0gICAgICBpZiAoIXJlY29yZFt0aGlzLmlkQXR0
cmlidXRlXSkgewotICAgICAgICByZWNvcmRbdGhpcy5pZEF0dHJpYnV0ZV0gPSBndWlkKCk7Ci0g
ICAgICB9Ci0KLSAgICAgIGlkID0gcmVjb3JkW3RoaXMuaWRBdHRyaWJ1dGVdICsgJyc7Ci0KLSAg
ICAgIGlmICh0aGlzLmlkcy5pbmRleE9mKGlkKSA8IDApIHsKLSAgICAgICAgdGhpcy5pZHMucHVz
aChpZCk7Ci0gICAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3Iuc2V0SXRlbSh0aGlzLm5hbWUsIHRo
aXMuaWRzLmpvaW4oIiwiKSk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3Iu
c2V0SXRlbShnZXRLZXkodGhpcy5uYW1lLCBpZCksIEpTT04uc3RyaW5naWZ5KHJlY29yZCkpOwot
Ci0gICAgICByZXR1cm4gcmVjb3JkOwotICAgIH0sCi0KLSAgICB1cGRhdGU6IGZ1bmN0aW9uIChp
ZCwgZGF0YSkgewotICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICd1bmRlZmluZWQnKSB7Ci0gICAg
ICAgIGRhdGEgPSBpZDsKLSAgICAgICAgaWQgPSBkYXRhW3RoaXMuaWRBdHRyaWJ1dGVdOwotICAg
ICAgfQotCi0gICAgICB2YXIgcmVjb3JkID0gdGhpcy5nZXQoaWQpOwotCi0gICAgICBpZiAocmVj
b3JkKSB7Ci0gICAgICAgIHJlY29yZCA9IGV4dGVuZChyZWNvcmQsIGRhdGEpOwotICAgICAgICB0
aGlzLnNhdmUocmVjb3JkKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJlY29yZDsKLSAgICB9
LAotCi0gICAgdXBkYXRlQWxsOiBmdW5jdGlvbiAoZGF0YSkgewotICAgICAgdmFyIHJlY29yZHMg
PSB0aGlzLmFsbCgpOwotCi0gICAgICByZWNvcmRzLmZvckVhY2goZnVuY3Rpb24gKHJlY29yZCkg
ewotICAgICAgICByZWNvcmQgPSBleHRlbmQocmVjb3JkLCBkYXRhKTsKLSAgICAgICAgdGhpcy5z
YXZlKHJlY29yZCk7Ci0gICAgICB9LCB0aGlzKTsKLQotICAgICAgcmV0dXJuIHJlY29yZHM7Ci0g
ICAgfSwKLQotICAgIGZpbmQ6IGZ1bmN0aW9uIChjcml0ZXJpYSkgewotICAgICAgdmFyIGtleSwg
bWF0Y2gsIHJlY29yZDsKLSAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lOwotICAgICAgdmFyIHNl
bGYgPSB0aGlzOwotCi0gICAgICBpZiAoIWNyaXRlcmlhKSByZXR1cm4gdGhpcy5hbGwoKTsKLQot
ICAgICAgcmV0dXJuIHRoaXMuaWRzLnJlZHVjZShmdW5jdGlvbiAobWVtbywgaWQpIHsKLSAgICAg
ICAgcmVjb3JkID0ganNvbkRhdGEoc2VsZi5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGdldEtleShu
YW1lLCBpZCkpKTsKLSAgICAgICAgbWF0Y2ggPSBmaW5kTWF0Y2goY3JpdGVyaWEsIHJlY29yZCk7
Ci0KLSAgICAgICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgbWVtby5wdXNoKHJlY29yZCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWVtbzsKLSAgICAgIH0sIFtdKTsKLSAgICB9LAot
Ci0gICAgZ2V0OiBmdW5jdGlvbiAoaWQpIHsKLSAgICAgIHJldHVybiBqc29uRGF0YSh0aGlzLnN0
b3JhZ2VBZGFwdG9yLmdldEl0ZW0oZ2V0S2V5KHRoaXMubmFtZSwgaWQpKSk7Ci0gICAgfSwKLQot
ICAgIGFsbDogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIHJlY29yZCwgc2VsZiA9IHRoaXMsIG5h
bWUgPSB0aGlzLm5hbWU7Ci0KLSAgICAgIHJldHVybiB0aGlzLmlkcy5yZWR1Y2UoZnVuY3Rpb24g
KG1lbW8sIGlkKSB7Ci0gICAgICAgIHJlY29yZCA9IHNlbGYuc3RvcmFnZUFkYXB0b3IuZ2V0SXRl
bShnZXRLZXkobmFtZSwgaWQpKTsKLQotICAgICAgICBpZiAocmVjb3JkKSB7Ci0gICAgICAgICAg
bWVtby5wdXNoKGpzb25EYXRhKHJlY29yZCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IG1lbW87Ci0gICAgICB9LCBbXSk7Ci0gICAgfSwKLQotICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChy
ZWNvcmQpIHsKLSAgICAgIHZhciBpbmRleDsKLSAgICAgIHZhciBpZCA9IChyZWNvcmRbdGhpcy5p
ZEF0dHJpYnV0ZV0pID8gcmVjb3JkW3RoaXMuaWRBdHRyaWJ1dGVdIDogcmVjb3JkOwotICAgICAg
dmFyIGtleSA9IGdldEtleSh0aGlzLm5hbWUsIGlkKTsKLQotICAgICAgcmVjb3JkID0ganNvbkRh
dGEodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGtleSkpOwotICAgICAgdGhpcy5zdG9yYWdl
QWRhcHRvci5yZW1vdmVJdGVtKGtleSk7Ci0KLSAgICAgIGluZGV4ID0gdGhpcy5pZHMuaW5kZXhP
ZihpZCk7Ci0gICAgICBpZiAoaW5kZXggIT0gLTEpIHRoaXMuaWRzLnNwbGljZShpbmRleCwgMSk7
Ci0gICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnNldEl0ZW0odGhpcy5uYW1lLCB0aGlzLmlkcy5q
b2luKCIsIikpOwotCi0gICAgICByZXR1cm4gcmVjb3JkOwotICAgIH0sCi0KLSAgICBkZXN0cm95
QWxsOiBmdW5jdGlvbiAoY3JpdGVyaWEpIHsKLSAgICAgIHZhciBhdHRyLCBpZCwgbWF0Y2gsIHJl
Y29yZCwga2V5OwotCi0gICAgICBmb3IgKHZhciBpID0gdGhpcy5pZHMubGVuZ3RoIC0gMTsgaSA+
PSAwOyBpLS0pIHsKLSAgICAgICAgaWQgPSB0aGlzLmlkc1tpXTsKLSAgICAgICAga2V5ID0gZ2V0
S2V5KHRoaXMubmFtZSwgaWQpOwotCi0gICAgICAgIGlmIChjcml0ZXJpYSkgewotCi0gICAgICAg
ICAgcmVjb3JkID0ganNvbkRhdGEodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGtleSkpOwot
ICAgICAgICAgIG1hdGNoID0gZmluZE1hdGNoKGNyaXRlcmlhLCByZWNvcmQpOwotCi0gICAgICAg
ICAgaWYgKG1hdGNoKSB7Ci0gICAgICAgICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0
ZW0oa2V5KTsKLSAgICAgICAgICAgIHRoaXMuaWRzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICB9
Ci0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB0aGlzLnN0b3JhZ2VBZGFw
dG9yLnJlbW92ZUl0ZW0oa2V5KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoY3Jp
dGVyaWEpIHsKLSAgICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKHRoaXMubmFtZSwg
dGhpcy5pZHMuam9pbigiLCIpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgewotICAgICAgICB0aGlz
LnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0odGhpcy5uYW1lKTsKLSAgICAgICAgdGhpcy5pZHMg
PSBbXTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgc2l6ZTogZnVuY3Rpb24gKCkgewotICAgICAg
cmV0dXJuIHRoaXMuaWRzLmxlbmd0aDsKLSAgICB9Ci0gIH07Ci0KLSAgLy8gaGVscGVycwotCi0g
IGZ1bmN0aW9uIGpzb25EYXRhKGRhdGEpIHsKLSAgICByZXR1cm4gZGF0YSAmJiBKU09OLnBhcnNl
KGRhdGEpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0S2V5KG5hbWUsIGlkKSB7Ci0gICAgcmV0dXJu
IG5hbWUgKyAiLSIgKyBpZDsKLSAgfQotCi0gIGZ1bmN0aW9uIGZpbmRNYXRjaChjcml0ZXJpYSwg
cmVjb3JkKSB7Ci0gICAgdmFyIG1hdGNoLCBhdHRyOwotCi0gICAgaWYgKHR5cGVvZiBjcml0ZXJp
YSA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICBtYXRjaCA9IGNyaXRlcmlhKHJlY29yZCk7Ci0gICAg
fQotICAgIGVsc2UgewotICAgICAgbWF0Y2ggPSB0cnVlOwotICAgICAgZm9yIChhdHRyIGluIGNy
aXRlcmlhKSB7Ci0gICAgICAgIG1hdGNoICY9IChjcml0ZXJpYVthdHRyXSA9PT0gcmVjb3JkW2F0
dHJdKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci0gIH0KLQotICBmdW5j
dGlvbiBzNCgpIHsKLSAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICog
MHgxMDAwMCkKLSAgICAgIC50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpOwotICB9Ci0KLSAgZnVu
Y3Rpb24gZ3VpZCgpIHsKLSAgICByZXR1cm4gczQoKSArIHM0KCkgKyAnLScgKyBzNCgpICsgJy0n
ICsgczQoKSArCi0gICAgICAnLScgK3M0KCkgKyAnLScgKyBzNCgpICsgczQoKSArIHM0KCk7Ci0g
IH0KLQotICBmdW5jdGlvbiBleHRlbmQoZGVzdCwgc291cmNlKSB7Ci0gICAgZm9yICh2YXIga2V5
IGluIHNvdXJjZSkgewotICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0g
ICAgICAgIGRlc3Rba2V5XSA9IHNvdXJjZVtrZXldOwotICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBkZXN0OwotICB9Ci0KLSAgZnVuY3Rpb24gZGVwb3QobmFtZSwgb3B0aW9ucykgewotICAg
IHZhciBzdG9yZSwgaWRzOwotCi0gICAgdmFyIGRhdGEgPSB7fTsKLSAgICB2YXIgbG9jYWxTdG9y
YWdlID0gewotICAgICAgICBnZXRJdGVtOiBmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBkYXRhW2tl
eV07IH0sCi0gICAgICAgIHNldEl0ZW06IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICAg
ICAgICBpZiAoIWRhdGFba2V5XSkKLSAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCsrOwotICAg
ICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7Ci0gICAgICAgIH0sCi0gICAgICAgIHJlbW92ZUl0
ZW06IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2tleV07Ci0gICAg
ICAgICAgICB0aGlzLmxlbmd0aC0tOwotICAgICAgICB9LAotICAgICAgICBrZXk6IGZ1bmN0aW9u
IChpbmRleCkgewotICAgICAgICAgICAgdmFyIGkgPSAwOwotICAgICAgICAgICAgZm9yICh2YXIg
a2V5IGluIGRhdGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbmRleCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGtleTsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSwKLSAgICAgICAgbGVuZ3Ro
OiAwLAotICAgIH07Ci0KLSAgICBvcHRpb25zID0gZXh0ZW5kKHsKLSAgICAgIGlkQXR0cmlidXRl
OiAnX2lkJywKLSAgICAgIHN0b3JhZ2VBZGFwdG9yOiBsb2NhbFN0b3JhZ2UKLSAgICB9LCBvcHRp
b25zKTsKLQotICAgIGlmICghb3B0aW9ucy5zdG9yYWdlQWRhcHRvcikgdGhyb3cgbmV3IEVycm9y
KCJObyBzdG9yYWdlIGFkYXB0b3Igd2FzIGZvdW5kIik7Ci0KLSAgICBzdG9yZSA9IG9wdGlvbnMu
c3RvcmFnZUFkYXB0b3IuZ2V0SXRlbShuYW1lKTsKLSAgICBpZHMgPSAoc3RvcmUgJiYgc3RvcmUu
c3BsaXQoIiwiKSkgfHwgW107Ci0KLSAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZShhcGksIHsKLSAg
ICAgIG5hbWU6IHsgdmFsdWU6IG5hbWUgfSwKLSAgICAgIHN0b3JlOiB7IHZhbHVlOiBzdG9yZSB9
LAotICAgICAgaWRzOiB7IHZhbHVlOiBpZHMsIHdyaXRhYmxlOiB0cnVlIH0sCi0gICAgICBpZEF0
dHJpYnV0ZTogeyB2YWx1ZTogb3B0aW9ucy5pZEF0dHJpYnV0ZSB9LAotICAgICAgc3RvcmFnZUFk
YXB0b3I6IHsgdmFsdWU6IG9wdGlvbnMuc3RvcmFnZUFkYXB0b3IgfQotICAgIH0pOwotICB9Ci0K
LSAgcmV0dXJuIGRlcG90OwotfSkpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dl
cl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dl
cl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhMWI0NmNiYzFmYTYxZjVjYTQ0MmY0ZmQ1ZGNkNzYwNDE5NjFiZTlkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5qcworKysgL2Rldi9udWxsCkBAIC0x
LDMyNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwOS0yMDEyIGJ5IGNvbnRyaWJ1dG9ycywgTUlU
IExpY2Vuc2UKLS8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYgotCi0vLyBNb2R1bGUg
c3lzdGVtcyBtYWdpYyBkYW5jZQotKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7Ci0gICAgLy8gUmVx
dWlyZUpTCi0gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgewotICAgICAgICBk
ZWZpbmUoZGVmaW5pdGlvbik7Ci0gICAgLy8gWVVJMwotICAgIH0gZWxzZSBpZiAodHlwZW9mIFlV
SSA9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgIFlVSS5hZGQoImVzNS1zaGFtIiwgZGVmaW5pdGlv
bik7Ci0gICAgLy8gQ29tbW9uSlMgYW5kIDxzY3JpcHQ+Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
ZGVmaW5pdGlvbigpOwotICAgIH0KLX0pKGZ1bmN0aW9uICgpIHsKLQotLy8gRVM1IDE1LjIuMy4y
Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMgotaWYgKCFPYmplY3QuZ2V0UHJv
dG90eXBlT2YpIHsKLSAgICAvLyBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGlt
L2lzc3VlcyNpc3N1ZS8yCi0gICAgLy8gaHR0cDovL2Vqb2huLm9yZy9ibG9nL29iamVjdGdldHBy
b3RvdHlwZW9mLwotICAgIC8vIHJlY29tbWVuZGVkIGJ5IGZzY2hhZWZlciBvbiBnaXRodWIKLSAg
ICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihvYmplY3Qp
IHsKLSAgICAgICAgcmV0dXJuIG9iamVjdC5fX3Byb3RvX18gfHwgKAotICAgICAgICAgICAgb2Jq
ZWN0LmNvbnN0cnVjdG9yCi0gICAgICAgICAgICAgICAgPyBvYmplY3QuY29uc3RydWN0b3IucHJv
dG90eXBlCi0gICAgICAgICAgICAgICAgOiBwcm90b3R5cGVPZk9iamVjdAotICAgICAgICApOwot
ICAgIH07Ci19Ci0KLS8vIEVTNSAxNS4yLjMuMwotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4
MTUuMi4zLjMKLWlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgewotICAgIHZh
ciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxl
ZCBvbiBhIG5vbi1vYmplY3Q6ICI7Ci0KLSAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkp
IHsKLSAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmpl
Y3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsKLSAgICAgICAgfQotICAg
ICAgICAvLyBJZiBvYmplY3QgZG9lcyBub3Qgb3ducyBwcm9wZXJ0eSByZXR1cm4gdW5kZWZpbmVk
IGltbWVkaWF0ZWx5LgotICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpIHsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIG9iamVjdCBoYXMg
YSBwcm9wZXJ0eSB0aGVuIGl0J3MgZm9yIHN1cmUgYm90aCBgZW51bWVyYWJsZWAgYW5kCi0gICAg
ICAgIC8vIGBjb25maWd1cmFibGVgLgotICAgICAgICB2YXIgZGVzY3JpcHRvciA9ICB7IGVudW1l
cmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OwotCi0gICAgICAgIC8vIElmIEpTIGVu
Z2luZSBzdXBwb3J0cyBhY2Nlc3NvciBwcm9wZXJ0aWVzIHRoZW4gcHJvcGVydHkgbWF5IGJlIGEK
LSAgICAgICAgLy8gZ2V0dGVyIG9yIHNldHRlci4KLSAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNz
b3JzKSB7Ci0gICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGBfX2xvb2t1cEdldHRlcl9fYCB3
aWxsIHJldHVybiBhIGdldHRlciBldmVuCi0gICAgICAgICAgICAvLyBpZiBvYmplY3QgaGFzIG93
biBub24gZ2V0dGVyIHByb3BlcnR5IGFsb25nIHdpdGggYSBzYW1lIG5hbWVkCi0gICAgICAgICAg
ICAvLyBpbmhlcml0ZWQgZ2V0dGVyLiBUbyBhdm9pZCBtaXNiZWhhdmlvciB3ZSB0ZW1wb3Jhcnkg
cmVtb3ZlCi0gICAgICAgICAgICAvLyBgX19wcm90b19fYCBzbyB0aGF0IGBfX2xvb2t1cEdldHRl
cl9fYCB3aWxsIHJldHVybiBnZXR0ZXIgb25seQotICAgICAgICAgICAgLy8gaWYgaXQncyBvd25l
ZCBieSBhbiBvYmplY3QuCi0gICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJv
dG9fXzsKLSAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsK
LQotICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5
KTsKLSAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0
eSk7Ci0KLSAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSBnZXR0ZXIgYW5kIHNldHRlciB3ZSBj
YW4gcHV0IHZhbHVlcyBiYWNrLgotICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3Rv
dHlwZTsKLQotICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoZ2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZ2V0ID0g
Z2V0dGVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gc2V0dGVyOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBJZiBpdCB3YXMgYWNjZXNzb3IgcHJvcGVydHkg
d2UncmUgZG9uZSBhbmQgcmV0dXJuIGhlcmUKLSAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0
byBhdm9pZCBhZGRpbmcgYHZhbHVlYCB0byB0aGUgZGVzY3JpcHRvci4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIHdlIGdvdCB0aGlzIGZhciB3ZSBrbm93IHRoYXQgb2JqZWN0IGhhcyBhbiBvd24gcHJv
cGVydHkgdGhhdCBpcwotICAgICAgICAvLyBub3QgYW4gYWNjZXNzb3Igc28gd2Ugc2V0IGl0IGFz
IGEgdmFsdWUgYW5kIHJldHVybiBkZXNjcmlwdG9yLgotICAgICAgICBkZXNjcmlwdG9yLnZhbHVl
ID0gb2JqZWN0W3Byb3BlcnR5XTsKLSAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgfTsK
LX0KLQotLy8gRVM1IDE1LjIuMy40Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMu
NAotaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgewotICAgIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpIHsKLSAg
ICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1
LjIuMy41Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNQotaWYgKCFPYmplY3Qu
Y3JlYXRlKSB7Ci0gICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUs
IHByb3BlcnRpZXMpIHsKLSAgICAgICAgdmFyIG9iamVjdDsKLSAgICAgICAgaWYgKHByb3RvdHlw
ZSA9PT0gbnVsbCkgewotICAgICAgICAgICAgb2JqZWN0ID0geyAiX19wcm90b19fIjogbnVsbCB9
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgIT0g
Im9iamVjdCIpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2Yg
cHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9OwotICAgICAgICAg
ICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7Ci0gICAgICAgICAgICBvYmplY3QgPSBuZXcg
VHlwZSgpOwotICAgICAgICAgICAgLy8gSUUgaGFzIG5vIGJ1aWx0LWluIGltcGxlbWVudGF0aW9u
IG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgCi0gICAgICAgICAgICAvLyBuZWl0aGVyIGBfX3By
b3RvX19gLCBidXQgdGhpcyBtYW51YWxseSBzZXR0aW5nIGBfX3Byb3RvX19gIHdpbGwKLSAgICAg
ICAgICAgIC8vIGd1YXJhbnRlZSB0aGF0IGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIHdpbGwgd29y
ayBhcyBleHBlY3RlZCB3aXRoCi0gICAgICAgICAgICAvLyBvYmplY3RzIGNyZWF0ZWQgdXNpbmcg
YE9iamVjdC5jcmVhdGVgCi0gICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBl
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApIHsKLSAgICAg
ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUuMi4z
LjYKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy42Ci0KLS8vIFBhdGNoIGZvciBX
ZWJLaXQgYW5kIElFOCBzdGFuZGFyZCBtb2RlCi0vLyBEZXNpZ25lZCBieSBoYXggPGhheC5naXRo
dWIuY29tPgotLy8gcmVsYXRlZCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9l
czUtc2hpbS9pc3N1ZXMjaXNzdWUvNQotLy8gSUU4IFJlZmVyZW5jZToKLS8vICAgICBodHRwOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQyODI5MDAuYXNweAotLy8gICAgIGh0
dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDIyOTkxNi5hc3B4Ci0vLyBX
ZWJLaXQgQnVnczoKLS8vICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzY0MjMKLQotZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3QpIHsKLSAg
ICB0cnkgewotICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAic2VudGluZWwi
LCB7fSk7Ci0gICAgICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKLSAgICB9IGNhdGNo
IChleGNlcHRpb24pIHsKLSAgICAgICAgLy8gcmV0dXJucyBmYWxzeQotICAgIH0KLX0KLQotLy8g
Y2hlY2sgd2hldGhlciBkZWZpbmVQcm9wZXJ0eSB3b3JrcyBpZiBpdCdzIGdpdmVuLiBPdGhlcndp
c2UsCi0vLyBzaGltIHBhcnRpYWxseS4KLWlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKLSAg
ICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVByb3BlcnR5V29y
ayh7fSk7Ci0gICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVu
dCA9PSAidW5kZWZpbmVkIiB8fAotICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKLSAgICBpZiAoIWRlZmluZVByb3BlcnR5V29ya3NP
bk9iamVjdCB8fCAhZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tKSB7Ci0gICAgICAgIHZhciBkZWZp
bmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwotICAgIH0KLX0KLQot
aWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgewot
ICAgIHZhciBFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SID0gIlByb3BlcnR5IGRlc2NyaXB0aW9u
IG11c3QgYmUgYW4gb2JqZWN0OiAiOwotICAgIHZhciBFUlJfTk9OX09CSkVDVF9UQVJHRVQgPSAi
T2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiCi0gICAgdmFyIEVS
Ul9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJl
IGRlZmluZWQgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiB0
aGlzIGphdmFzY3JpcHQgZW5naW5lIjsKLQotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1
bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpIHsKLSAg
ICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0g
ImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSAib2JqZWN0IiAmJiB0eXBlb2YgZGVzY3Jp
cHRvciAhPSAiZnVuY3Rpb24iKSB8fCBkZXNjcmlwdG9yID09PSBudWxsKSB7Ci0gICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgKyBkZXNjcmlw
dG9yKTsKLSAgICAgICAgfQotICAgICAgICAvLyBtYWtlIGEgdmFsaWFudCBhdHRlbXB0IHRvIHVz
ZSB0aGUgcmVhbCBkZWZpbmVQcm9wZXJ0eQotICAgICAgICAvLyBmb3IgSTgncyBET00gZWxlbWVu
dHMuCi0gICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7Ci0gICAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrLmNhbGwo
T2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIH0gY2F0
Y2ggKGV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUgc2hpbSBpZiB0aGUg
cmVhbCBvbmUgZG9lc24ndCB3b3JrCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBJZiBpdCdzIGEgZGF0YSBwcm9wZXJ0eS4KLSAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRv
ciwgInZhbHVlIikpIHsKLSAgICAgICAgICAgIC8vIGZhaWwgc2lsZW50bHkgaWYgIndyaXRhYmxl
IiwgImVudW1lcmFibGUiLCBvciAiY29uZmlndXJhYmxlIgotICAgICAgICAgICAgLy8gYXJlIHJl
cXVlc3RlZCBidXQgbm90IHN1cHBvcnRlZAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgIC8v
IGFsdGVybmF0ZSBhcHByb2FjaDoKLSAgICAgICAgICAgIGlmICggLy8gY2FuJ3QgaW1wbGVtZW50
IHRoZXNlIGZlYXR1cmVzOyBhbGxvdyBmYWxzZSBidXQgbm90IHRydWUKLSAgICAgICAgICAgICAg
ICAhKG93bnMoZGVzY3JpcHRvciwgIndyaXRhYmxlIikgPyBkZXNjcmlwdG9yLndyaXRhYmxlIDog
dHJ1ZSkgfHwKLSAgICAgICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgImVudW1lcmFibGUi
KSA/IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA6IHRydWUpIHx8Ci0gICAgICAgICAgICAgICAgIShv
d25zKGRlc2NyaXB0b3IsICJjb25maWd1cmFibGUiKSA/IGRlc2NyaXB0b3IuY29uZmlndXJhYmxl
IDogdHJ1ZSkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VF
cnJvcigKLSAgICAgICAgICAgICAgICAgICAgIlRoaXMgaW1wbGVtZW50YXRpb24gb2YgT2JqZWN0
LmRlZmluZVByb3BlcnR5IGRvZXMgbm90ICIgKwotICAgICAgICAgICAgICAgICAgICAic3VwcG9y
dCBjb25maWd1cmFibGUsIGVudW1lcmFibGUsIG9yIHdyaXRhYmxlLiIKLSAgICAgICAgICAgICAg
ICApOwotICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3Jz
ICYmIChsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBBcyBhY2Nlc3NvcnMgYXJlIHN1cHBvcnRl
ZCBvbmx5IG9uIGVuZ2luZXMgaW1wbGVtZW50aW5nCi0gICAgICAgICAgICAgICAgLy8gYF9fcHJv
dG9fX2Agd2UgY2FuIHNhZmVseSBvdmVycmlkZSBgX19wcm90b19fYCB3aGlsZSBkZWZpbmluZwot
ICAgICAgICAgICAgICAgIC8vIGEgcHJvcGVydHkgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qg
aGl0IGFuIGluaGVyaXRlZAotICAgICAgICAgICAgICAgIC8vIGFjY2Vzc29yLgotICAgICAgICAg
ICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwotICAgICAgICAgICAgICAg
IG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKLSAgICAgICAgICAgICAgICAv
LyBEZWxldGluZyBhIHByb3BlcnR5IGFueXdheSBzaW5jZSBnZXR0ZXIgLyBzZXR0ZXIgbWF5IGJl
Ci0gICAgICAgICAgICAgICAgLy8gZGVmaW5lZCBvbiBvYmplY3QgaXRzZWxmLgotICAgICAgICAg
ICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldOwotICAgICAgICAgICAgICAgIG9iamVjdFtw
cm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwotICAgICAgICAgICAgICAgIC8vIFNldHRpbmcg
b3JpZ2luYWwgYF9fcHJvdG9fX2AgYmFjayBub3cuCi0gICAgICAgICAgICAgICAgb2JqZWN0Ll9f
cHJvdG9fXyA9IHByb3RvdHlwZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXN1cHBvcnRzQWNjZXNzb3JzKSB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JTX05PVF9TVVBQ
T1JURUQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgd2UgZ290IHRoYXQgZmFy
IHRoZW4gZ2V0dGVycyBhbmQgc2V0dGVycyBjYW4gYmUgZGVmaW5lZCAhIQotICAgICAgICAgICAg
aWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKSB7Ci0gICAgICAgICAgICAgICAgZGVmaW5lR2V0
dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJzZXQiKSkgewotICAgICAgICAgICAgICAg
IGRlZmluZVNldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLnNldCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9OwotfQotCi0v
LyBFUzUgMTUuMi4zLjcKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy43Ci1pZiAo
IU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7Ci0gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMg
PSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcykgewotICAgICAg
ICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBpZiAob3du
cyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkgJiYgcHJvcGVydHkgIT0gIl9fcHJvdG9fXyIpIHsKLSAg
ICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJv
cGVydGllc1twcm9wZXJ0eV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBvYmplY3Q7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjIuMy44Ci0vLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3gxNS4yLjMuOAotaWYgKCFPYmplY3Quc2VhbCkgewotICAgIE9iamVjdC5z
ZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKLSAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFk
aW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dAotICAgICAgICAvLyBhbGxvd3Mg
InNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nCi0gICAg
ICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLgotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH07
Ci19Ci0KLS8vIEVTNSAxNS4yLjMuOQotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4z
LjkKLWlmICghT2JqZWN0LmZyZWV6ZSkgewotICAgIE9iamVjdC5mcmVlemUgPSBmdW5jdGlvbiBm
cmVlemUob2JqZWN0KSB7Ci0gICAgICAgIC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtz
IGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQKLSAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNv
ZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29ya2luZwotICAgICAgICAvLyBidXQgaW5z
ZWN1cmUgY29kZS4KLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9OwotfQotCi0vLyBkZXRl
Y3QgYSBSaGlubyBidWcgYW5kIHBhdGNoIGl0Ci10cnkgewotICAgIE9iamVjdC5mcmVlemUoZnVu
Y3Rpb24gKCkge30pOwotfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0gICAgT2JqZWN0LmZyZWV6ZSA9
IChmdW5jdGlvbiBmcmVlemUoZnJlZXplT2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBmdW5jdGlv
biBmcmVlemUob2JqZWN0KSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9PSAiZnVu
Y3Rpb24iKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChvYmplY3QpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0pKE9iamVjdC5mcmVlemUpOwotfQotCi0vLyBF
UzUgMTUuMi4zLjEwCi0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTAKLWlmICgh
T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7Ci0gICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25z
ID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7Ci0gICAgICAgIC8vIHRoaXMg
aXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQKLSAgICAgICAg
Ly8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29y
a2luZwotICAgICAgICAvLyBidXQgaW5zZWN1cmUgY29kZS4KLSAgICAgICAgcmV0dXJuIG9iamVj
dDsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUuMi4zLjExCi0vLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3gxNS4yLjMuMTEKLWlmICghT2JqZWN0LmlzU2VhbGVkKSB7Ci0gICAgT2JqZWN0LmlzU2Vh
bGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9OwotfQotCi0vLyBFUzUgMTUuMi4zLjEyCi0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
I3gxNS4yLjMuMTIKLWlmICghT2JqZWN0LmlzRnJvemVuKSB7Ci0gICAgT2JqZWN0LmlzRnJvemVu
ID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9OwotfQotCi0vLyBFUzUgMTUuMi4zLjEzCi0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gx
NS4yLjMuMTMKLWlmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgewotICAgIE9iamVjdC5pc0V4dGVu
c2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7Ci0gICAgICAgIC8vIDEuIElm
IFR5cGUoTykgaXMgbm90IE9iamVjdCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCi0gICAg
ICAgIGlmIChPYmplY3Qob2JqZWN0KSAhPT0gb2JqZWN0KSB7Ci0gICAgICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQotICAgICAgICB9Ci0gICAgICAgIC8vIDIu
IFJldHVybiB0aGUgQm9vbGVhbiB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwg
cHJvcGVydHkgb2YgTy4KLSAgICAgICAgdmFyIG5hbWUgPSAnJzsKLSAgICAgICAgd2hpbGUgKG93
bnMob2JqZWN0LCBuYW1lKSkgewotICAgICAgICAgICAgbmFtZSArPSAnPyc7Ci0gICAgICAgIH0K
LSAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKLSAgICAgICAgdmFyIHJldHVyblZhbHVlID0g
b3ducyhvYmplY3QsIG5hbWUpOwotICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVdOwotICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgfTsKLX0KLQotfSk7CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0uanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0uanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OTE5N2RiNDVmNjUzYjE4OTYwYThlODIyNDMxYTFm
MjJlZDM5NzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsNzc4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDA5LTIwMTIgYnkg
Y29udHJpYnV0b3JzLCBNSVQgTGljZW5zZQotLy8gdmltOiB0cz00IHN0cz00IHN3PTQgZXhwYW5k
dGFiCi0KLS8vIE1vZHVsZSBzeXN0ZW1zIG1hZ2ljIGRhbmNlCi0oZnVuY3Rpb24gKGRlZmluaXRp
b24pIHsKLSAgICAvLyBSZXF1aXJlSlMKLSAgICBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rp
b24iKSB7Ci0gICAgICAgIGRlZmluZShkZWZpbml0aW9uKTsKLSAgICAvLyBZVUkzCi0gICAgfSBl
bHNlIGlmICh0eXBlb2YgWVVJID09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgWVVJLmFkZCgiZXM1
IiwgZGVmaW5pdGlvbik7Ci0gICAgLy8gQ29tbW9uSlMgYW5kIDxzY3JpcHQ+Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZGVmaW5pdGlvbigpOwotICAgIH0KLX0pKGZ1bmN0aW9uICgpIHsKLQotLyoq
Ci0gKiBCcmluZ3MgYW4gZW52aXJvbm1lbnQgYXMgY2xvc2UgdG8gRUNNQVNjcmlwdCA1IGNvbXBs
aWFuY2UKLSAqIGFzIGlzIHBvc3NpYmxlIHdpdGggdGhlIGZhY2lsaXRpZXMgb2YgZXJzdHdoaWxl
IGVuZ2luZXMuCi0gKgotICogQW5ub3RhdGVkIEVTNTogaHR0cDovL2VzNS5naXRodWIuY29tLyAo
c3BlY2lmaWMgbGlua3MgYmVsb3cpCi0gKiBFUzUgU3BlYzogaHR0cDovL3d3dy5lY21hLWludGVy
bmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9maWxlcy9FQ01BLVNUL0VjbWEtMjYyLnBkZgotICog
UmVxdWlyZWQgcmVhZGluZzogaHR0cDovL2phdmFzY3JpcHR3ZWJsb2cud29yZHByZXNzLmNvbS8y
MDExLzEyLzA1L2V4dGVuZGluZy1qYXZhc2NyaXB0LW5hdGl2ZXMvCi0gKi8KLQotLy8KLS8vIEZ1
bmN0aW9uCi0vLyA9PT09PT09PQotLy8KLQotLy8gRVMtNSAxNS4zLjQuNQotLy8gaHR0cDovL2Vz
NS5naXRodWIuY29tLyN4MTUuMy40LjUKLQotaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkg
ewotICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8v
IC5sZW5ndGggaXMgMQotICAgICAgICAvLyAxLiBMZXQgVGFyZ2V0IGJlIHRoZSB0aGlzIHZhbHVl
LgotICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsKLSAgICAgICAgLy8gMi4gSWYgSXNDYWxsYWJs
ZShUYXJnZXQpIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCi0gICAgICAg
IGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGli
bGUgIiArIHRhcmdldCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gMy4gTGV0IEEgYmUgYSBuZXcg
KHBvc3NpYmx5IGVtcHR5KSBpbnRlcm5hbCBsaXN0IG9mIGFsbCBvZiB0aGUKLSAgICAgICAgLy8g
ICBhcmd1bWVudCB2YWx1ZXMgcHJvdmlkZWQgYWZ0ZXIgdGhpc0FyZyAoYXJnMSwgYXJnMiBldGMp
LCBpbiBvcmRlci4KLSAgICAgICAgLy8gWFhYIHNsaWNlZEFyZ3Mgd2lsbCBzdGFuZCBpbiBmb3Ig
IkEiIGlmIHVzZWQKLSAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7
IC8vIGZvciBub3JtYWwgY2FsbAotICAgICAgICAvLyA0LiBMZXQgRiBiZSBhIG5ldyBuYXRpdmUg
RUNNQVNjcmlwdCBvYmplY3QuCi0gICAgICAgIC8vIDExLiBTZXQgdGhlIFtbUHJvdG90eXBlXV0g
aW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0aGUgc3RhbmRhcmQKLSAgICAgICAgLy8gICBidWls
dC1pbiBGdW5jdGlvbiBwcm90b3R5cGUgb2JqZWN0IGFzIHNwZWNpZmllZCBpbiAxNS4zLjMuMS4K
LSAgICAgICAgLy8gMTIuIFNldCB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBh
cyBkZXNjcmliZWQgaW4KLSAgICAgICAgLy8gICAxNS4zLjQuNS4xLgotICAgICAgICAvLyAxMy4g
U2V0IHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVk
IGluCi0gICAgICAgIC8vICAgMTUuMy40LjUuMi4KLSAgICAgICAgLy8gMTQuIFNldCB0aGUgW1tI
YXNJbnN0YW5jZV1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCi0gICAg
ICAgIC8vICAgMTUuMy40LjUuMy4KLSAgICAgICAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgewot
Ci0gICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gMTUuMy40LjUuMiBbW0NvbnN0cnVjdF1dCi0gICAgICAgICAgICAgICAgLy8gV2hlbiB0
aGUgW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYSBmdW5jdGlvbiBvYmplY3QsCi0g
ICAgICAgICAgICAgICAgLy8gRiB0aGF0IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBiaW5kIGZ1bmN0
aW9uIGlzIGNhbGxlZCB3aXRoIGEKLSAgICAgICAgICAgICAgICAvLyBsaXN0IG9mIGFyZ3VtZW50
cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIHRha2VuOgotICAgICAgICAgICAg
ICAgIC8vIDEuIExldCB0YXJnZXQgYmUgdGhlIHZhbHVlIG9mIEYncyBbW1RhcmdldEZ1bmN0aW9u
XV0KLSAgICAgICAgICAgICAgICAvLyAgIGludGVybmFsIHByb3BlcnR5LgotICAgICAgICAgICAg
ICAgIC8vIDIuIElmIHRhcmdldCBoYXMgbm8gW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBtZXRob2Qs
IGEKLSAgICAgICAgICAgICAgICAvLyAgIFR5cGVFcnJvciBleGNlcHRpb24gaXMgdGhyb3duLgot
ICAgICAgICAgICAgICAgIC8vIDMuIExldCBib3VuZEFyZ3MgYmUgdGhlIHZhbHVlIG9mIEYncyBb
W0JvdW5kQXJnc11dIGludGVybmFsCi0gICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4KLSAg
ICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhl
IHNhbWUgdmFsdWVzIGFzIHRoZQotICAgICAgICAgICAgICAgIC8vICAgbGlzdCBib3VuZEFyZ3Mg
aW4gdGhlIHNhbWUgb3JkZXIgZm9sbG93ZWQgYnkgdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAv
LyAgIHZhbHVlcyBhcyB0aGUgbGlzdCBFeHRyYUFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIuCi0gICAg
ICAgICAgICAgICAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDb25z
dHJ1Y3RdXSBpbnRlcm5hbAotICAgICAgICAgICAgICAgIC8vICAgbWV0aG9kIG9mIHRhcmdldCBw
cm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLgotCi0gICAgICAgICAgICAgICAgdmFyIEYg
PSBmdW5jdGlvbigpe307Ci0gICAgICAgICAgICAgICAgRi5wcm90b3R5cGUgPSB0YXJnZXQucHJv
dG90eXBlOwotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gbmV3IEY7Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KAotICAgICAgICAgICAgICAgICAgICBzZWxm
LAotICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykp
Ci0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkg
PT09IHJlc3VsdCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjsKLQotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyAxNS4zLjQuNS4xIFtbQ2FsbF1dCi0gICAgICAg
ICAgICAgICAgLy8gV2hlbiB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mIGEgZnVuY3Rp
b24gb2JqZWN0LCBGLAotICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdhcyBjcmVhdGVkIHVzaW5n
IHRoZSBiaW5kIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEKLSAgICAgICAgICAgICAgICAvLyB0
aGlzIHZhbHVlIGFuZCBhIGxpc3Qgb2YgYXJndW1lbnRzIEV4dHJhQXJncywgdGhlIGZvbGxvd2lu
ZwotICAgICAgICAgICAgICAgIC8vIHN0ZXBzIGFyZSB0YWtlbjoKLSAgICAgICAgICAgICAgICAv
LyAxLiBMZXQgYm91bmRBcmdzIGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZEFyZ3NdXSBpbnRl
cm5hbAotICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCi0gICAgICAgICAgICAgICAgLy8g
Mi4gTGV0IGJvdW5kVGhpcyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRUaGlzXV0gaW50ZXJu
YWwKLSAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5LgotICAgICAgICAgICAgICAgIC8vIDMu
IExldCB0YXJnZXQgYmUgdGhlIHZhbHVlIG9mIEYncyBbW1RhcmdldEZ1bmN0aW9uXV0gaW50ZXJu
YWwKLSAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5LgotICAgICAgICAgICAgICAgIC8vIDQu
IExldCBhcmdzIGJlIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhl
Ci0gICAgICAgICAgICAgICAgLy8gICBsaXN0IGJvdW5kQXJncyBpbiB0aGUgc2FtZSBvcmRlciBm
b2xsb3dlZCBieSB0aGUgc2FtZQotICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBs
aXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4KLSAgICAgICAgICAgICAgICAvLyA1LiBS
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QK
LSAgICAgICAgICAgICAgICAvLyAgIG9mIHRhcmdldCBwcm92aWRpbmcgYm91bmRUaGlzIGFzIHRo
ZSB0aGlzIHZhbHVlIGFuZAotICAgICAgICAgICAgICAgIC8vICAgcHJvdmlkaW5nIGFyZ3MgYXMg
dGhlIGFyZ3VtZW50cy4KLQotICAgICAgICAgICAgICAgIC8vIGVxdWl2OiB0YXJnZXQuY2FsbCh0
aGlzLCAuLi5ib3VuZEFyZ3MsIC4uLmFyZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdl
dC5hcHBseSgKLSAgICAgICAgICAgICAgICAgICAgdGhhdCwKLSAgICAgICAgICAgICAgICAgICAg
YXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQotICAgICAgICAgICAgICAgICk7Ci0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICB9OwotICAgICAgICAvLyBYWFggYm91bmQubGVuZ3Ro
IGlzIG5ldmVyIHdyaXRhYmxlLCBzbyBkb24ndCBldmVuIHRyeQotICAgICAgICAvLwotICAgICAg
ICAvLyAxNS4gSWYgdGhlIFtbQ2xhc3NdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBUYXJnZXQgaXMg
IkZ1bmN0aW9uIiwgdGhlbgotICAgICAgICAvLyAgICAgYS4gTGV0IEwgYmUgdGhlIGxlbmd0aCBw
cm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxlbmd0aCBvZiBBLgotICAgICAgICAvLyAgICAg
Yi4gU2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gZWl0aGVyIDAgb3IgTCwgd2hp
Y2hldmVyIGlzCi0gICAgICAgIC8vICAgICAgIGxhcmdlci4KLSAgICAgICAgLy8gMTYuIEVsc2Ug
c2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC4KLSAgICAgICAgLy8gMTcuIFNl
dCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIHRoZSB2
YWx1ZXMKLSAgICAgICAgLy8gICBzcGVjaWZpZWQgaW4gMTUuMy41LjEuCi0KLSAgICAgICAgLy8g
VE9ETwotICAgICAgICAvLyAxOC4gU2V0IHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9w
ZXJ0eSBvZiBGIHRvIHRydWUuCi0KLSAgICAgICAgLy8gVE9ETwotICAgICAgICAvLyAxOS4gTGV0
IHRocm93ZXIgYmUgdGhlIFtbVGhyb3dUeXBlRXJyb3JdXSBmdW5jdGlvbiBPYmplY3QgKDEzLjIu
MykuCi0gICAgICAgIC8vIDIwLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJu
YWwgbWV0aG9kIG9mIEYgd2l0aAotICAgICAgICAvLyAgIGFyZ3VtZW50cyAiY2FsbGVyIiwgUHJv
cGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLCBbW1NldF1dOgotICAgICAgICAvLyAg
IHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9
LCBhbmQKLSAgICAgICAgLy8gICBmYWxzZS4KLSAgICAgICAgLy8gMjEuIENhbGwgdGhlIFtbRGVm
aW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgRiB3aXRoCi0gICAgICAgIC8vICAg
YXJndW1lbnRzICJhcmd1bWVudHMiLCBQcm9wZXJ0eURlc2NyaXB0b3Ige1tbR2V0XV06IHRocm93
ZXIsCi0gICAgICAgIC8vICAgW1tTZXRdXTogdGhyb3dlciwgW1tFbnVtZXJhYmxlXV06IGZhbHNl
LCBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZX0sCi0gICAgICAgIC8vICAgYW5kIGZhbHNlLgotCi0g
ICAgICAgIC8vIFRPRE8KLSAgICAgICAgLy8gTk9URSBGdW5jdGlvbiBvYmplY3RzIGNyZWF0ZWQg
dXNpbmcgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgZG8gbm90Ci0gICAgICAgIC8vIGhhdmUgYSBw
cm90b3R5cGUgcHJvcGVydHkgb3IgdGhlIFtbQ29kZV1dLCBbW0Zvcm1hbFBhcmFtZXRlcnNdXSwg
YW5kCi0gICAgICAgIC8vIFtbU2NvcGVdXSBpbnRlcm5hbCBwcm9wZXJ0aWVzLgotICAgICAgICAv
LyBYWFggY2FuJ3QgZGVsZXRlIHByb3RvdHlwZSBpbiBwdXJlLWpzLgotCi0gICAgICAgIC8vIDIy
LiBSZXR1cm4gRi4KLSAgICAgICAgcmV0dXJuIGJvdW5kOwotICAgIH07Ci19Ci0KLS8vIFNob3J0
Y3V0IHRvIGFuIG9mdGVuIGFjY2Vzc2VkIHByb3BlcnRpZXMsIGluIG9yZGVyIHRvIGF2b2lkIG11
bHRpcGxlCi0vLyBkZXJlZmVyZW5jZSB0aGF0IGNvc3RzIHVuaXZlcnNhbGx5LgotLy8gX1BsZWFz
ZSBub3RlOiBTaG9ydGN1dHMgYXJlIGRlZmluZWQgYWZ0ZXIgYEZ1bmN0aW9uLnByb3RvdHlwZS5i
aW5kYCBhcyB3ZQotLy8gdXMgaXQgaW4gZGVmaW5pbmcgc2hvcnRjdXRzLgotdmFyIGNhbGwgPSBG
dW5jdGlvbi5wcm90b3R5cGUuY2FsbDsKLXZhciBwcm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJv
dG90eXBlOwotdmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTsKLXZhciBz
bGljZSA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7Ci0vLyBIYXZpbmcgYSB0b1N0cmluZyBsb2Nh
bCB2YXJpYWJsZSBuYW1lIGJyZWFrcyBpbiBPcGVyYSBzbyB1c2UgX3RvU3RyaW5nLgotdmFyIF90
b1N0cmluZyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmluZyk7Ci12YXIgb3du
cyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSk7Ci0KLS8vIElm
IEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvcnMgY3JlYXRpbmcgc2hvcnRjdXRzLgotdmFyIGRl
ZmluZUdldHRlcjsKLXZhciBkZWZpbmVTZXR0ZXI7Ci12YXIgbG9va3VwR2V0dGVyOwotdmFyIGxv
b2t1cFNldHRlcjsKLXZhciBzdXBwb3J0c0FjY2Vzc29yczsKLWlmICgoc3VwcG9ydHNBY2Nlc3Nv
cnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJfXyIpKSkgewotICAg
IGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRl
cl9fKTsKLSAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19k
ZWZpbmVTZXR0ZXJfXyk7Ci0gICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9m
T2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOwotICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChw
cm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKLX0KLQotLy8KLS8vIEFycmF5Ci0v
LyA9PT09PQotLy8KLQotLy8gRVM1IDE1LjQuMy4yCi0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
I3gxNS40LjMuMgotLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlw
dC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNBcnJheQotaWYgKCFBcnJheS5pc0Fy
cmF5KSB7Ci0gICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7Ci0gICAg
ICAgIHJldHVybiBfdG9TdHJpbmcob2JqKSA9PSAiW29iamVjdCBBcnJheV0iOwotICAgIH07Ci19
Ci0KLS8vIFRoZSBJc0NhbGxhYmxlKCkgY2hlY2sgaW4gdGhlIEFycmF5IGZ1bmN0aW9ucwotLy8g
aGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIHN0cmljdCBjaGVjayBvbiB0aGUKLS8vIGludGVybmFs
IGNsYXNzIG9mIHRoZSBvYmplY3QgdG8gdHJhcCBjYXNlcyB3aGVyZQotLy8gdGhlIHByb3ZpZGVk
IGZ1bmN0aW9uIHdhcyBhY3R1YWxseSBhIHJlZ3VsYXIKLS8vIGV4cHJlc3Npb24gbGl0ZXJhbCwg
d2hpY2ggaW4gVjggYW5kCi0vLyBKYXZhU2NyaXB0Q29yZSBpcyBhIHR5cGVvZiAiZnVuY3Rpb24i
LiAgT25seSBpbgotLy8gVjggYXJlIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFscyBwZXJtaXR0
ZWQgYXMKLS8vIHJlZHVjZSBwYXJhbWV0ZXJzLCBzbyBpdCBpcyBkZXNpcmFibGUgaW4gdGhlCi0v
LyBnZW5lcmFsIGNhc2UgZm9yIHRoZSBzaGltIHRvIG1hdGNoIHRoZSBtb3JlCi0vLyBzdHJpY3Qg
YW5kIGNvbW1vbiBiZWhhdmlvciBvZiByZWplY3RpbmcgcmVndWxhcgotLy8gZXhwcmVzc2lvbnMu
Ci0KLS8vIEVTNSAxNS40LjQuMTgKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4x
OAotLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVu
Y2UvR2xvYmFsX09iamVjdHMvYXJyYXkvZm9yRWFjaAotaWYgKCFBcnJheS5wcm90b3R5cGUuZm9y
RWFjaCkgewotICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChm
dW4gLyosIHRoaXNwKi8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKLSAg
ICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLAotICAgICAgICAgICAgaSA9IC0xLAotICAg
ICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7Ci0KLSAgICAgICAgLy8gSWYgbm8g
Y2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rp
b24KLSAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsK
LSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCi0gICAg
ICAgIH0KLQotICAgICAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAo
aSBpbiBzZWxmKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBmdW5j
dGlvbiB3aXRoIGNhbGwsIHBhc3NpbmcgYXJndW1lbnRzOgotICAgICAgICAgICAgICAgIC8vIGNv
bnRleHQsIHByb3BlcnR5IHZhbHVlLCBwcm9wZXJ0eSBrZXksIHRoaXNBcmcgb2JqZWN0IGNvbnRl
eHQKLSAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi0vLyBFUzUgMTUuNC40LjE5Ci0v
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTkKLS8vIGh0dHBzOi8vZGV2ZWxvcGVy
Lm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJy
YXkvbWFwCi1pZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsKLSAgICBBcnJheS5wcm90b3R5cGUu
bWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgewotICAgICAgICB2YXIgc2VsZiA9
IHRvT2JqZWN0KHRoaXMpLAotICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAs
Ci0gICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAotICAgICAgICAgICAgdGhpc3Ag
PSBhcmd1bWVudHNbMV07Ci0KLSAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3Ig
aWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KLSAgICAgICAgaWYgKF90b1N0
cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKLSAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYg
KGkgaW4gc2VsZikKLSAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBmdW4uY2FsbCh0aGlzcCwg
c2VsZltpXSwgaSwgc2VsZik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9OwotfQotCi0vLyBFUzUgMTUuNC40LjIwCi0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gx
NS40LjQuMjAKLS8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNj
cmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvZmlsdGVyCi1pZiAoIUFycmF5LnByb3Rv
dHlwZS5maWx0ZXIpIHsKLSAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gZmls
dGVyKGZ1biAvKiwgdGhpc3AgKi8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlz
KSwKLSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAotICAgICAgICAgICAg
cmVzdWx0ID0gW10sCi0gICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAgIHRoaXNwID0gYXJn
dW1lbnRzWzFdOwotCi0gICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNh
bGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCi0gICAgICAgIGlmIChfdG9TdHJpbmco
ZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpIGlu
IHNlbGYpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZbaV07Ci0gICAgICAgICAgICAg
ICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1ZSwgaSwgc2VsZikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2godmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07Ci19Ci0KLS8vIEVT
NSAxNS40LjQuMTYKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNgotLy8gaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFs
X09iamVjdHMvQXJyYXkvZXZlcnkKLWlmICghQXJyYXkucHJvdG90eXBlLmV2ZXJ5KSB7Ci0gICAg
QXJyYXkucHJvdG90eXBlLmV2ZXJ5ID0gZnVuY3Rpb24gZXZlcnkoZnVuIC8qLCB0aGlzcCAqLykg
ewotICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLAotICAgICAgICAgICAgbGVuZ3Ro
ID0gc2VsZi5sZW5ndGggPj4+IDAsCi0gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsK
LQotICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBu
b3QgYSBjYWxsYWJsZSBmdW5jdGlvbgotICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltv
YmplY3QgRnVuY3Rpb25dIikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4g
KyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFm
dW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZikpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjQuNC4xNwotLy8gaHR0cDovL2VzNS5naXRodWIuY29t
LyN4MTUuNC40LjE3Ci0vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2Ny
aXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9zb21lCi1pZiAoIUFycmF5LnByb3Rv
dHlwZS5zb21lKSB7Ci0gICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1
biAvKiwgdGhpc3AgKi8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKLSAg
ICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAotICAgICAgICAgICAgdGhpc3Ag
PSBhcmd1bWVudHNbMV07Ci0KLSAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3Ig
aWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KLSAgICAgICAgaWYgKF90b1N0
cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKLSAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYg
KGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgc2VsZikpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjQuNC4yMQotLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIxCi0vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVj
ZQotaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7Ci0gICAgQXJyYXkucHJvdG90eXBlLnJl
ZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgewotICAgICAgICB2YXIg
c2VsZiA9IHRvT2JqZWN0KHRoaXMpLAotICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGgg
Pj4+IDA7Ci0KLSAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJh
Y2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KLSAgICAgICAgaWYgKF90b1N0cmluZyhmdW4p
ICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
bm8gdmFsdWUgdG8gcmV0dXJuIGlmIG5vIGluaXRpYWwgdmFsdWUgYW5kIGFuIGVtcHR5IGFycmF5
Ci0gICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewotICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8g
aW5pdGlhbCB2YWx1ZScpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGkgPSAwOwotICAgICAg
ICB2YXIgcmVzdWx0OwotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7Ci0gICAg
ICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBzZWxmW2krK107Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGlmIGFycmF5IGNvbnRhaW5z
IG5vIHZhbHVlcywgbm8gaW5pdGlhbCB2YWx1ZSB0byByZXR1cm4KLSAgICAgICAgICAgICAgICBp
ZiAoKytpID49IGxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVy
cm9yKCdyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSBpbiBz
ZWxmKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQs
IHNlbGZbaV0sIGksIHNlbGYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUuNC40LjIyCi0vLyBodHRwOi8v
ZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMjIKLS8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvcmVkdWNl
UmlnaHQKLWlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KSB7Ci0gICAgQXJyYXkucHJv
dG90eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFs
Ki8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKLSAgICAgICAgICAgIGxl
bmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwotCi0gICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1
bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCi0gICAgICAg
IGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7Ci0gICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIG5vIHZhbHVlIHRvIHJldHVybiBpZiBubyBpbml0aWFsIHZhbHVl
LCBlbXB0eSBhcnJheQotICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09
IDEpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZHVjZVJpZ2h0IG9mIGVt
cHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFyIHJlc3VsdCwgaSA9IGxlbmd0aCAtIDE7Ci0gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID49IDIpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaS0tXTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gaWYg
YXJyYXkgY29udGFpbnMgbm8gdmFsdWVzLCBubyBpbml0aWFsIHZhbHVlIHRvIHJldHVybgotICAg
ICAgICAgICAgICAgIGlmICgtLWkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoJ3JlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2
YWx1ZScpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykgewot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ld
LCBpLCBzZWxmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoaS0tKTsKLQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS40LjQuMTQKLS8vIGh0
dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNAotLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaW5k
ZXhPZgotaWYgKCFBcnJheS5wcm90b3R5cGUuaW5kZXhPZikgewotICAgIEFycmF5LnByb3RvdHlw
ZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHsK
LSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKLSAgICAgICAgICAgIGxlbmd0aCA9
IHNlbGYubGVuZ3RoID4+PiAwOwotCi0gICAgICAgIGlmICghbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaSA9IDA7Ci0gICAgICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID4gMSkgewotICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1
bWVudHNbMV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGlj
ZXMKLSAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsKLSAg
ICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGkgaW4gc2Vs
ZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfTsKLX0KLQot
Ly8gRVM1IDE1LjQuNC4xNQotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE1Ci0v
LyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9H
bG9iYWxfT2JqZWN0cy9BcnJheS9sYXN0SW5kZXhPZgotaWYgKCFBcnJheS5wcm90b3R5cGUubGFz
dEluZGV4T2YpIHsKLSAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBs
YXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgewotICAgICAgICB2YXIgc2VsZiA9
IHRvT2JqZWN0KHRoaXMpLAotICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7
Ci0KLSAgICAgICAgaWYgKCFsZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAg
ICAgfQotICAgICAgICB2YXIgaSA9IGxlbmd0aCAtIDE7Ci0gICAgICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoID4gMSkgewotICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1
bWVudHNbMV0pKTsKLSAgICAgICAgfQotICAgICAgICAvLyBoYW5kbGUgbmVnYXRpdmUgaW5kaWNl
cwotICAgICAgICBpID0gaSA+PSAwID8gaSA6IGxlbmd0aCAtIE1hdGguYWJzKGkpOwotICAgICAg
ICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291
Z2h0ID09PSBzZWxmW2ldKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH07Ci19Ci0KLS8vCi0vLyBP
YmplY3QKLS8vID09PT09PQotLy8KLQotLy8gRVM1IDE1LjIuMy4xNAotLy8gaHR0cDovL2VzNS5n
aXRodWIuY29tLyN4MTUuMi4zLjE0Ci1pZiAoIU9iamVjdC5rZXlzKSB7Ci0gICAgLy8gaHR0cDov
L3doYXR0aGVoZWFkc2FpZC5jb20vMjAxMC8xMC9hLXNhZmVyLW9iamVjdC1rZXlzLWNvbXBhdGli
aWxpdHktaW1wbGVtZW50YXRpb24KLSAgICB2YXIgaGFzRG9udEVudW1CdWcgPSB0cnVlLAotICAg
ICAgICBkb250RW51bXMgPSBbCi0gICAgICAgICAgICAidG9TdHJpbmciLAotICAgICAgICAgICAg
InRvTG9jYWxlU3RyaW5nIiwKLSAgICAgICAgICAgICJ2YWx1ZU9mIiwKLSAgICAgICAgICAgICJo
YXNPd25Qcm9wZXJ0eSIsCi0gICAgICAgICAgICAiaXNQcm90b3R5cGVPZiIsCi0gICAgICAgICAg
ICAicHJvcGVydHlJc0VudW1lcmFibGUiLAotICAgICAgICAgICAgImNvbnN0cnVjdG9yIgotICAg
ICAgICBdLAotICAgICAgICBkb250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOwotCi0g
ICAgZm9yICh2YXIga2V5IGluIHsidG9TdHJpbmciOiBudWxsfSkgewotICAgICAgICBoYXNEb250
RW51bUJ1ZyA9IGZhbHNlOwotICAgIH0KLQotICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5
cyhvYmplY3QpIHsKLQotICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYg
dHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpIHsKLSAgICAg
ICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1v
YmplY3QiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBrZXlzID0gW107Ci0gICAgICAgIGZv
ciAodmFyIG5hbWUgaW4gb2JqZWN0KSB7Ci0gICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIG5h
bWUpKSB7Ci0gICAgICAgICAgICAgICAga2V5cy5wdXNoKG5hbWUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc0RvbnRFbnVtQnVnKSB7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgaWkgPSBkb250RW51bXNMZW5ndGg7IGkgPCBpaTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGRvbnRFbnVtID0gZG9udEVudW1zW2ldOwotICAgICAgICAgICAgICAg
IGlmIChvd25zKG9iamVjdCwgZG9udEVudW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGtleXMu
cHVzaChkb250RW51bSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBrZXlzOwotICAgIH07Ci0KLX0KLQotLy8KLS8vIERhdGUKLS8v
ID09PT0KLS8vCi0KLS8vIEVTNSAxNS45LjUuNDMKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8j
eDE1LjkuNS40MwotLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgU3RyaW5nIHZhbHVlIHJlcHJl
c2VudCB0aGUgaW5zdGFuY2UgaW4gdGltZQotLy8gcmVwcmVzZW50ZWQgYnkgdGhpcyBEYXRlIG9i
amVjdC4gVGhlIGZvcm1hdCBvZiB0aGUgU3RyaW5nIGlzIHRoZSBEYXRlIFRpbWUKLS8vIHN0cmlu
ZyBmb3JtYXQgZGVmaW5lZCBpbiAxNS45LjEuMTUuIEFsbCBmaWVsZHMgYXJlIHByZXNlbnQgaW4g
dGhlIFN0cmluZy4KLS8vIFRoZSB0aW1lIHpvbmUgaXMgYWx3YXlzIFVUQywgZGVub3RlZCBieSB0
aGUgc3VmZml4IFouIElmIHRoZSB0aW1lIHZhbHVlIG9mCi0vLyB0aGlzIG9iamVjdCBpcyBub3Qg
YSBmaW5pdGUgTnVtYmVyIGEgUmFuZ2VFcnJvciBleGNlcHRpb24gaXMgdGhyb3duLgotaWYgKCFE
YXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyB8fCAobmV3IERhdGUoLTYyMTk4NzU1MjAwMDAwKS50
b0lTT1N0cmluZygpLmluZGV4T2YoJy0wMDAwMDEnKSA9PT0gLTEpKSB7Ci0gICAgRGF0ZS5wcm90
b3R5cGUudG9JU09TdHJpbmcgPSBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHsKLSAgICAgICAgdmFy
IHJlc3VsdCwgbGVuZ3RoLCB2YWx1ZSwgeWVhcjsKLSAgICAgICAgaWYgKCFpc0Zpbml0ZSh0aGlz
KSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRhdGUucHJvdG90eXBlLnRv
SVNPU3RyaW5nIGNhbGxlZCBvbiBub24tZmluaXRlIHZhbHVlLiIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gdGhlIGRhdGUgdGltZSBzdHJpbmcgZm9ybWF0IGlzIHNwZWNpZmllZCBpbiAxNS45
LjEuMTUuCi0gICAgICAgIHJlc3VsdCA9IFt0aGlzLmdldFVUQ01vbnRoKCkgKyAxLCB0aGlzLmdl
dFVUQ0RhdGUoKSwKLSAgICAgICAgICAgIHRoaXMuZ2V0VVRDSG91cnMoKSwgdGhpcy5nZXRVVENN
aW51dGVzKCksIHRoaXMuZ2V0VVRDU2Vjb25kcygpXTsKLSAgICAgICAgeWVhciA9IHRoaXMuZ2V0
VVRDRnVsbFllYXIoKTsKLSAgICAgICAgeWVhciA9ICh5ZWFyIDwgMCA/ICctJyA6ICh5ZWFyID4g
OTk5OSA/ICcrJyA6ICcnKSkgKyAoJzAwMDAwJyArIE1hdGguYWJzKHllYXIpKS5zbGljZSgwIDw9
IHllYXIgJiYgeWVhciA8PSA5OTk5ID8gLTQgOiAtNik7Ci0KLSAgICAgICAgbGVuZ3RoID0gcmVz
dWx0Lmxlbmd0aDsKLSAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7Ci0gICAgICAgICAgICB2YWx1
ZSA9IHJlc3VsdFtsZW5ndGhdOwotICAgICAgICAgICAgLy8gcGFkIG1vbnRocywgZGF5cywgaG91
cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHRvIGhhdmUgdHdvIGRpZ2l0cy4KLSAgICAgICAgICAg
IGlmICh2YWx1ZSA8IDEwKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSAiMCIg
KyB2YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBwYWQgbWlsbGlz
ZWNvbmRzIHRvIGhhdmUgdGhyZWUgZGlnaXRzLgotICAgICAgICByZXR1cm4geWVhciArICItIiAr
IHJlc3VsdC5zbGljZSgwLCAyKS5qb2luKCItIikgKyAiVCIgKyByZXN1bHQuc2xpY2UoMikuam9p
bigiOiIpICsgIi4iICsKLSAgICAgICAgICAgICgiMDAwIiArIHRoaXMuZ2V0VVRDTWlsbGlzZWNv
bmRzKCkpLnNsaWNlKC0zKSArICJaIjsKLSAgICB9Ci19Ci0KLS8vIEVTNSAxNS45LjQuNAotLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjQKLWlmICghRGF0ZS5ub3cpIHsKLSAgICBE
YXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0
VGltZSgpOwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS45LjUuNDQKLS8vIGh0dHA6Ly9lczUuZ2l0
aHViLmNvbS8jeDE1LjkuNS40NAotLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIFN0cmluZyBy
ZXByZXNlbnRhdGlvbiBvZiBhIERhdGUgb2JqZWN0IGZvciB1c2UgYnkKLS8vIEpTT04uc3RyaW5n
aWZ5ICgxNS4xMi4zKS4KLWlmICghRGF0ZS5wcm90b3R5cGUudG9KU09OKSB7Ci0gICAgRGF0ZS5w
cm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKGtleSkgewotICAgICAgICAvLyBXaGVu
IHRoZSB0b0pTT04gbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGFyZ3VtZW50IGtleSwgdGhlIGZvbGxv
d2luZwotICAgICAgICAvLyBzdGVwcyBhcmUgdGFrZW46Ci0KLSAgICAgICAgLy8gMS4gIExldCBP
IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb09iamVjdCwgZ2l2aW5nIGl0IHRoZSB0aGlzCi0g
ICAgICAgIC8vIHZhbHVlIGFzIGl0cyBhcmd1bWVudC4KLSAgICAgICAgLy8gMi4gTGV0IHR2IGJl
IFRvUHJpbWl0aXZlKE8sIGhpbnQgTnVtYmVyKS4KLSAgICAgICAgLy8gMy4gSWYgdHYgaXMgYSBO
dW1iZXIgYW5kIGlzIG5vdCBmaW5pdGUsIHJldHVybiBudWxsLgotICAgICAgICAvLyBYWFgKLSAg
ICAgICAgLy8gNC4gTGV0IHRvSVNPIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRd
XSBpbnRlcm5hbCBtZXRob2Qgb2YKLSAgICAgICAgLy8gTyB3aXRoIGFyZ3VtZW50ICJ0b0lTT1N0
cmluZyIuCi0gICAgICAgIC8vIDUuIElmIElzQ2FsbGFibGUodG9JU08pIGlzIGZhbHNlLCB0aHJv
dyBhIFR5cGVFcnJvciBleGNlcHRpb24uCi0gICAgICAgIGlmICh0eXBlb2YgdGhpcy50b0lTT1N0
cmluZyAhPSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0
b0lTT1N0cmluZyBwcm9wZXJ0eSBpcyBub3QgY2FsbGFibGUnKTsKLSAgICAgICAgfQotICAgICAg
ICAvLyA2LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5h
bCBtZXRob2Qgb2YKLSAgICAgICAgLy8gIHRvSVNPIHdpdGggTyBhcyB0aGUgdGhpcyB2YWx1ZSBh
bmQgYW4gZW1wdHkgYXJndW1lbnQgbGlzdC4KLSAgICAgICAgcmV0dXJuIHRoaXMudG9JU09TdHJp
bmcoKTsKLQotICAgICAgICAvLyBOT1RFIDEgVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuCi0KLSAg
ICAgICAgLy8gTk9URSAyIFRoZSB0b0pTT04gZnVuY3Rpb24gaXMgaW50ZW50aW9uYWxseSBnZW5l
cmljOyBpdCBkb2VzIG5vdAotICAgICAgICAvLyByZXF1aXJlIHRoYXQgaXRzIHRoaXMgdmFsdWUg
YmUgYSBEYXRlIG9iamVjdC4gVGhlcmVmb3JlLCBpdCBjYW4gYmUKLSAgICAgICAgLy8gdHJhbnNm
ZXJyZWQgdG8gb3RoZXIga2luZHMgb2Ygb2JqZWN0cyBmb3IgdXNlIGFzIGEgbWV0aG9kLiBIb3dl
dmVyLAotICAgICAgICAvLyBpdCBkb2VzIHJlcXVpcmUgdGhhdCBhbnkgc3VjaCBvYmplY3QgaGF2
ZSBhIHRvSVNPU3RyaW5nIG1ldGhvZC4gQW4KLSAgICAgICAgLy8gb2JqZWN0IGlzIGZyZWUgdG8g
dXNlIHRoZSBhcmd1bWVudCBrZXkgdG8gZmlsdGVyIGl0cwotICAgICAgICAvLyBzdHJpbmdpZmlj
YXRpb24uCi0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjkuNC4yCi0vLyBodHRwOi8vZXM1LmdpdGh1
Yi5jb20vI3gxNS45LjQuMgotLy8gYmFzZWQgb24gd29yayBzaGFyZWQgYnkgRGFuaWVsIEZyaWVz
ZW4gKGRhbnRtYW4pCi0vLyBodHRwOi8vZ2lzdC5naXRodWIuY29tLzMwMzI0OQotaWYgKCFEYXRl
LnBhcnNlIHx8IERhdGUucGFyc2UoIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWiIpICE9PSA4
LjY0ZTE1KSB7Ci0gICAgLy8gWFhYIGdsb2JhbCBhc3NpZ25tZW50IHdvbid0IHdvcmsgaW4gZW1i
ZWRkaW5ncyB0aGF0IHVzZQotICAgIC8vIGFuIGFsdGVybmF0ZSBvYmplY3QgZm9yIHRoZSBjb250
ZXh0LgotICAgIERhdGUgPSAoZnVuY3Rpb24oTmF0aXZlRGF0ZSkgewotCi0gICAgICAgIC8vIERh
dGUubGVuZ3RoID09PSA3Ci0gICAgICAgIHZhciBEYXRlID0gZnVuY3Rpb24gRGF0ZShZLCBNLCBE
LCBoLCBtLCBzLCBtcykgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5n
dGg7Ci0gICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZURhdGUpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgZGF0ZSA9IGxlbmd0aCA9PSAxICYmIFN0cmluZyhZKSA9PT0gWSA/IC8v
IGlzU3RyaW5nKFkpCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGV4cGxpY2l0bHkgcGFzcyBp
dCB0aHJvdWdoIHBhcnNlOgotICAgICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZShEYXRl
LnBhcnNlKFkpKSA6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkg
bWFrZSBjYWxscyBkZXBlbmRpbmcgb24gYXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgLy8g
bGVuZ3RoIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDcgPyBuZXcgTmF0aXZl
RGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgOgotICAgICAgICAgICAgICAgICAgICBsZW5ndGgg
Pj0gNiA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgsIG0sIHMpIDoKLSAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoID49IDUgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtKSA6Ci0gICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA0ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCkg
OgotICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gMyA/IG5ldyBOYXRpdmVEYXRlKFksIE0s
IEQpIDoKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDIgPyBuZXcgTmF0aXZlRGF0ZShZ
LCBNKSA6Ci0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSAxID8gbmV3IE5hdGl2ZURhdGUo
WSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOYXRpdmVEYXRlKCk7
Ci0gICAgICAgICAgICAgICAgLy8gUHJldmVudCBtaXh1cHMgd2l0aCB1bmZpeGVkIERhdGUgb2Jq
ZWN0Ci0gICAgICAgICAgICAgICAgZGF0ZS5jb25zdHJ1Y3RvciA9IERhdGU7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGRhdGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTmF0
aXZlRGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICB9OwotCi0gICAgICAgIC8v
IDE1LjkuMS4xNSBEYXRlIFRpbWUgU3RyaW5nIEZvcm1hdC4KLSAgICAgICAgdmFyIGlzb0RhdGVF
eHByZXNzaW9uID0gbmV3IFJlZ0V4cCgiXiIgKwotICAgICAgICAgICAgIihcXGR7NH18W1wrXC1d
XFxkezZ9KSIgKyAvLyBmb3VyLWRpZ2l0IHllYXIgY2FwdHVyZSBvciBzaWduICsgNi1kaWdpdCBl
eHRlbmRlZCB5ZWFyCi0gICAgICAgICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIG1v
bnRoIGNhcHR1cmUKLSAgICAgICAgICAgICIoPzotKFxcZHsyfSkiICsgLy8gb3B0aW9uYWwgZGF5
IGNhcHR1cmUKLSAgICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVyZSBob3VyczptaW51dGVzOnNl
Y29uZHMubWlsbGlzZWNvbmRzCi0gICAgICAgICAgICAgICAgIlQoXFxkezJ9KSIgKyAvLyBob3Vy
cyBjYXB0dXJlCi0gICAgICAgICAgICAgICAgIjooXFxkezJ9KSIgKyAvLyBtaW51dGVzIGNhcHR1
cmUKLSAgICAgICAgICAgICAgICAiKD86IiArIC8vIG9wdGlvbmFsIDpzZWNvbmRzLm1pbGxpc2Vj
b25kcwotICAgICAgICAgICAgICAgICAgICAiOihcXGR7Mn0pIiArIC8vIHNlY29uZHMgY2FwdHVy
ZQotICAgICAgICAgICAgICAgICAgICAiKD86XFwuKFxcZHszfSkpPyIgKyAvLyBtaWxsaXNlY29u
ZHMgY2FwdHVyZQotICAgICAgICAgICAgICAgICIpPyIgKwotICAgICAgICAgICAgIig/OiIgKyAv
LyBjYXB0dXJlIFVUQyBvZmZzZXQgY29tcG9uZW50Ci0gICAgICAgICAgICAgICAgIlp8IiArIC8v
IFVUQyBjYXB0dXJlCi0gICAgICAgICAgICAgICAgIig/OiIgKyAvLyBvZmZzZXQgc3BlY2lmaWVy
ICsvLWhvdXJzOm1pbnV0ZXMKLSAgICAgICAgICAgICAgICAgICAgIihbLStdKSIgKyAvLyBzaWdu
IGNhcHR1cmUKLSAgICAgICAgICAgICAgICAgICAgIihcXGR7Mn0pIiArIC8vIGhvdXJzIG9mZnNl
dCBjYXB0dXJlCi0gICAgICAgICAgICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBv
ZmZzZXQgY2FwdHVyZQotICAgICAgICAgICAgICAgICIpIiArCi0gICAgICAgICAgICAiKT8pPyk/
KT8iICsKLSAgICAgICAgIiQiKTsKLQotICAgICAgICAvLyBDb3B5IGFueSBjdXN0b20gbWV0aG9k
cyBhIDNyZCBwYXJ0eSBsaWJyYXJ5IG1heSBoYXZlIGFkZGVkCi0gICAgICAgIGZvciAodmFyIGtl
eSBpbiBOYXRpdmVEYXRlKSB7Ci0gICAgICAgICAgICBEYXRlW2tleV0gPSBOYXRpdmVEYXRlW2tl
eV07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb3B5ICJuYXRpdmUiIG1ldGhvZHMgZXhwbGlj
aXRseTsgdGhleSBtYXkgYmUgbm9uLWVudW1lcmFibGUKLSAgICAgICAgRGF0ZS5ub3cgPSBOYXRp
dmVEYXRlLm5vdzsKLSAgICAgICAgRGF0ZS5VVEMgPSBOYXRpdmVEYXRlLlVUQzsKLSAgICAgICAg
RGF0ZS5wcm90b3R5cGUgPSBOYXRpdmVEYXRlLnByb3RvdHlwZTsKLSAgICAgICAgRGF0ZS5wcm90
b3R5cGUuY29uc3RydWN0b3IgPSBEYXRlOwotCi0gICAgICAgIC8vIFVwZ3JhZGUgRGF0ZS5wYXJz
ZSB0byBoYW5kbGUgc2ltcGxpZmllZCBJU08gODYwMSBzdHJpbmdzCi0gICAgICAgIERhdGUucGFy
c2UgPSBmdW5jdGlvbiBwYXJzZShzdHJpbmcpIHsKLSAgICAgICAgICAgIHZhciBtYXRjaCA9IGlz
b0RhdGVFeHByZXNzaW9uLmV4ZWMoc3RyaW5nKTsKLSAgICAgICAgICAgIGlmIChtYXRjaCkgewot
ICAgICAgICAgICAgICAgIG1hdGNoLnNoaWZ0KCk7IC8vIGtpbGwgbWF0Y2hbMF0sIHRoZSBmdWxs
IG1hdGNoCi0gICAgICAgICAgICAgICAgLy8gcGFyc2UgbW9udGhzLCBkYXlzLCBob3VycywgbWlu
dXRlcywgc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcwotICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgNzsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByb3ZpZGUgZGVm
YXVsdCB2YWx1ZXMgaWYgbmVjZXNzYXJ5Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoW2ldID0g
KyhtYXRjaFtpXSB8fCAoaSA8IDMgPyAxIDogMCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBt
YXRjaFsxXSBpcyB0aGUgbW9udGguIE1vbnRocyBhcmUgMC0xMSBpbiBKYXZhU2NyaXB0Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIGBEYXRlYCBvYmplY3RzLCBidXQgMS0xMiBpbiBJU08gbm90YXRp
b24sIHNvIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGRlY3JlbWVudC4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0t
LTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIHBhcnNlIHRoZSBVVEMgb2Zmc2V0IGNvbXBvbmVudAotICAgICAgICAgICAgICAg
IHZhciBtaW51dGVPZmZzZXQgPSArbWF0Y2gucG9wKCksIGhvdXJPZmZzZXQgPSArbWF0Y2gucG9w
KCksIHNpZ24gPSBtYXRjaC5wb3AoKTsKLQotICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhl
IGV4cGxpY2l0IHRpbWUgem9uZSBvZmZzZXQgaWYgc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAg
dmFyIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gZGV0ZWN0IGludmFsaWQgb2Zmc2V0cyBhbmQgcmV0dXJuIGVhcmx5Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChob3VyT2Zmc2V0ID4gMjMgfHwgbWludXRlT2Zmc2V0ID4gNTkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYU47Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBleHByZXNzIHRoZSBwcm92aWRlZCB0aW1l
IHpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMuIFRoZSBvZmZzZXQgaXMKLSAgICAgICAgICAgICAgICAg
ICAgLy8gbmVnYXRpdmUgZm9yIHRpbWUgem9uZXMgd2VzdCBvZiBVVEM7IHBvc2l0aXZlIG90aGVy
d2lzZS4KLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKGhvdXJPZmZzZXQgKiA2MCArIG1p
bnV0ZU9mZnNldCkgKiA2ZTQgKiAoc2lnbiA9PSAiKyIgPyAtMSA6IDEpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIERhdGUuVVRDIGZvciB5ZWFycyBiZXR3ZWVuIDAg
YW5kIDk5IGNvbnZlcnRzIHllYXIgdG8gMTkwMCArIHllYXIKLSAgICAgICAgICAgICAgICAvLyBU
aGUgR3JlZ29yaWFuIGNhbGVuZGFyIGhhcyBhIDQwMC15ZWFyIGN5Y2xlLCBzbwotICAgICAgICAg
ICAgICAgIC8vIHRvIERhdGUuVVRDKHllYXIgKyA0MDAsIC4uLi4gKSAtIDEyNjIyNzgwODAwMDAw
ID09IERhdGUuVVRDKHllYXIsIC4uLiksCi0gICAgICAgICAgICAgICAgLy8gd2hlcmUgMTI2MjI3
ODA4MDAwMDAgLSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIEdyZWdvcmlhbiBjYWxlbmRhciA0
MDAgeWVhcnMKLSAgICAgICAgICAgICAgICB2YXIgeWVhciA9ICttYXRjaFswXTsKLSAgICAgICAg
ICAgICAgICBpZiAoMCA8PSB5ZWFyICYmIHllYXIgPD0gOTkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hbMF0gPSB5ZWFyICsgNDAwOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmF0
aXZlRGF0ZS5VVEMuYXBwbHkodGhpcywgbWF0Y2gpICsgb2Zmc2V0IC0gMTI2MjI3ODA4MDAwMDA7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBhIG5ldyBV
VEMgZGF0ZSB2YWx1ZSwgYWNjb3VudGluZyBmb3IgdGhlIG9wdGlvbmFsIG9mZnNldAotICAgICAg
ICAgICAgICAgIHJldHVybiBOYXRpdmVEYXRlLlVUQy5hcHBseSh0aGlzLCBtYXRjaCkgKyBvZmZz
ZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5wYXJzZS5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICB9OwotCi0gICAgICAgIHJldHVybiBEYXRl
OwotICAgIH0pKERhdGUpOwotfQotCi0vLwotLy8gU3RyaW5nCi0vLyA9PT09PT0KLS8vCi0KLS8v
IEVTNSAxNS41LjQuMjAKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjUuNC4yMAotdmFy
IHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4QTBcdTE2ODBcdTE4MEVcdTIwMDBcdTIw
MDFcdTIwMDJcdTIwMDMiICsKLSAgICAiXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUy
MDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHUyMDI4IiArCi0gICAgIlx1MjAyOVx1RkVGRiI7
Ci1pZiAoIVN0cmluZy5wcm90b3R5cGUudHJpbSB8fCB3cy50cmltKCkpIHsKLSAgICAvLyBodHRw
Oi8vYmxvZy5zdGV2ZW5sZXZpdGhhbi5jb20vYXJjaGl2ZXMvZmFzdGVyLXRyaW0tamF2YXNjcmlw
dAotICAgIC8vIGh0dHA6Ly9wZXJmZWN0aW9ua2lsbHMuY29tL3doaXRlc3BhY2UtZGV2aWF0aW9u
cy8KLSAgICB3cyA9ICJbIiArIHdzICsgIl0iOwotICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBu
ZXcgUmVnRXhwKCJeIiArIHdzICsgd3MgKyAiKiIpLAotICAgICAgICB0cmltRW5kUmVnZXhwID0g
bmV3IFJlZ0V4cCh3cyArIHdzICsgIiokIik7Ci0gICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0g
ZnVuY3Rpb24gdHJpbSgpIHsKLSAgICAgICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCB8fCB0aGlz
ID09PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252
ZXJ0ICIrdGhpcysiIHRvIG9iamVjdCIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdHJp
bmcodGhpcykucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRSZWdl
eHAsICIiKTsKLSAgICB9OwotfQotCi0vLwotLy8gVXRpbAotLy8gPT09PT09Ci0vLwotCi0vLyBF
UzUgOS40Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjQKLS8vIGh0dHA6Ly9qc3BlcmYu
Y29tL3RvLWludGVnZXIKLXZhciB0b0ludGVnZXIgPSBmdW5jdGlvbiAobikgewotICAgIG4gPSAr
bjsKLSAgICBpZiAobiAhPT0gbikgeyAvLyBpc05hTgotICAgICAgICBuID0gMDsKLSAgICB9IGVs
c2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7Ci0gICAgICAg
IG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7Ci0gICAgfQotICAg
IHJldHVybiBuOwotfTsKLQotdmFyIHByZXBhcmVTdHJpbmcgPSAiYSJbMF0gIT0gImEiOwotICAg
IC8vIEVTNSA5LjkKLSAgICAvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjkKLXZhciB0b09i
amVjdCA9IGZ1bmN0aW9uIChvKSB7Ci0gICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNo
ZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigi
Y2FuJ3QgY29udmVydCAiK28rIiB0byBvYmplY3QiKTsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGlt
cGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBieS1pbmRleCBhY2Nlc3Mgb2YKLSAgICAvLyBz
dHJpbmcgY2hhcmFjdGVycyAoZXguIElFIDwgOSksIHNwbGl0IHRoZSBzdHJpbmcKLSAgICBpZiAo
cHJlcGFyZVN0cmluZyAmJiB0eXBlb2YgbyA9PSAic3RyaW5nIiAmJiBvKSB7Ci0gICAgICAgIHJl
dHVybiBvLnNwbGl0KCIiKTsKLSAgICB9Ci0gICAgcmV0dXJuIE9iamVjdChvKTsKLX07Ci0KLX0p
OwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9s
aWIvYWR2aWNlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9s
aWIvYWR2aWNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OThjMzQwNmU1ZjY4
MjMzNjllNDc4YzU5NmIxZTQ5MzEwNzI3MTA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGln
aHQvbGliL2FkdmljZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQ29weXJpZ2h0IDIwMTMg
VHdpdHRlciwgSW5jCi0vLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UKLS8vIGh0dHA6
Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCi1kZWZpbmUoCi0KLSAgWwotICAgICcuL2NvbXBvc2UnCi0g
IF0sCi0KLSAgZnVuY3Rpb24oY29tcG9zZSkgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHZh
ciBhZHZpY2UgPSB7Ci0KLSAgICAgIGFyb3VuZDogZnVuY3Rpb24oYmFzZSwgd3JhcHBlZCkgewot
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29tcG9zZWRBcm91bmQoKSB7Ci0gICAgICAgICAgLy8g
dW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgotICAgICAgICAg
IHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobCArIDEp
OwotICAgICAgICAgIGFyZ3NbMF0gPSBiYXNlLmJpbmQodGhpcyk7Ci0gICAgICAgICAgZm9yICg7
IGkgPCBsOyBpKyspIGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldOwotCi0gICAgICAgICAgcmV0
dXJuIHdyYXBwZWQuYXBwbHkodGhpcywgYXJncyk7Ci0gICAgICAgIH07Ci0gICAgICB9LAotCi0g
ICAgICBiZWZvcmU6IGZ1bmN0aW9uKGJhc2UsIGJlZm9yZSkgewotICAgICAgICB2YXIgYmVmb3Jl
Rm4gPSAodHlwZW9mIGJlZm9yZSA9PSAnZnVuY3Rpb24nKSA/IGJlZm9yZSA6IGJlZm9yZS5vYmpb
YmVmb3JlLmZuTmFtZV07Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEJlZm9yZSgp
IHsKLSAgICAgICAgICBiZWZvcmVGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAg
IHJldHVybiBiYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgIH07Ci0gICAgICB9
LAotCi0gICAgICBhZnRlcjogZnVuY3Rpb24oYmFzZSwgYWZ0ZXIpIHsKLSAgICAgICAgdmFyIGFm
dGVyRm4gPSAodHlwZW9mIGFmdGVyID09ICdmdW5jdGlvbicpID8gYWZ0ZXIgOiBhZnRlci5vYmpb
YWZ0ZXIuZm5OYW1lXTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBvc2VkQWZ0ZXIoKSB7
Ci0gICAgICAgICAgdmFyIHJlcyA9IChiYXNlLnVuYm91bmQgfHwgYmFzZSkuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKLSAgICAgICAgICBhZnRlckZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfTsKLSAgICAgIH0sCi0KLSAgICAgIC8vIGEg
bWl4aW4gdGhhdCBhbGxvd3Mgb3RoZXIgbWl4aW5zIHRvIGF1Z21lbnQgZXhpc3RpbmcgZnVuY3Rp
b25zIGJ5IGFkZGluZyBhZGRpdGlvbmFsCi0gICAgICAvLyBjb2RlIGJlZm9yZSwgYWZ0ZXIgb3Ig
YXJvdW5kLgotICAgICAgd2l0aEFkdmljZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIFsnYmVmb3Jl
JywgJ2FmdGVyJywgJ2Fyb3VuZCddLmZvckVhY2goZnVuY3Rpb24obSkgewotICAgICAgICAgIHRo
aXNbbV0gPSBmdW5jdGlvbihtZXRob2QsIGZuKSB7Ci0KLSAgICAgICAgICAgIGNvbXBvc2UudW5s
b2NrUHJvcGVydHkodGhpcywgbWV0aG9kLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgaWYg
KHR5cGVvZiB0aGlzW21ldGhvZF0gPT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgICAgIHRo
aXNbbWV0aG9kXSA9IGFkdmljZVttXSh0aGlzW21ldGhvZF0sIGZuKTsKLSAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzW21ldGhvZF0gPSBmbjsKLSAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgIHJldHVybiB0aGlzW21ldGhvZF07Ci0gICAgICAgICAgICB9
KTsKLQotICAgICAgICAgIH07Ci0gICAgICAgIH0sIHRoaXMpOwotICAgICAgfQotICAgIH07Ci0K
LSAgICByZXR1cm4gYWR2aWNlOwotICB9Ci0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvYmFzZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2Jhc2UuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJmMTFhMGNhMTU4NTBkNDkxMjBlODRlZDM1MGNkMjE2MjlkOTlmYmEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvYmFzZS5qcworKysgL2Rldi9udWxsCkBAIC0x
LDIxOSArMCwwIEBACi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYwotLy8gTGljZW5zZWQgdW5kZXIgVGhl
IE1JVCBMaWNlbnNlCi0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotZGVmaW5lKAotCi0g
IFsKLSAgICAnLi91dGlscycsCi0gICAgJy4vcmVnaXN0cnknLAotICAgICcuL2RlYnVnJwotICBd
LAotCi0gIGZ1bmN0aW9uKHV0aWxzLCByZWdpc3RyeSwgZGVidWcpIHsKLSAgICAndXNlIHN0cmlj
dCc7Ci0KLSAgICAvLyBjb21tb24gbWl4aW4gYWxsb2NhdGVzIGJhc2ljIGZ1bmN0aW9uYWxpdHkg
LSB1c2VkIGJ5IGFsbCBjb21wb25lbnQgcHJvdG90eXBlcwotICAgIC8vIGNhbGxiYWNrIGNvbnRl
eHQgaXMgYm91bmQgdG8gY29tcG9uZW50Ci0gICAgdmFyIGNvbXBvbmVudElkID0gMDsKLQotICAg
IGZ1bmN0aW9uIHRlYXJkb3duSW5zdGFuY2UoaW5zdGFuY2VJbmZvKXsKLSAgICAgIGluc3RhbmNl
SW5mby5ldmVudHMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgIHZh
ciBhcmdzID0gW2V2ZW50LnR5cGVdOwotCi0gICAgICAgIGV2ZW50LmVsZW1lbnQgJiYgYXJncy51
bnNoaWZ0KGV2ZW50LmVsZW1lbnQpOwotICAgICAgICAodHlwZW9mIGV2ZW50LmNhbGxiYWNrID09
ICdmdW5jdGlvbicpICYmIGFyZ3MucHVzaChldmVudC5jYWxsYmFjayk7Ci0KLSAgICAgICAgdGhp
cy5vZmYuYXBwbHkodGhpcywgYXJncyk7Ci0gICAgICB9LCBpbnN0YW5jZUluZm8uaW5zdGFuY2Up
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNoZWNrU2VyaWFsaXphYmxlKHR5cGUsIGRhdGEpIHsK
LSAgICAgIHRyeSB7Ci0gICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShkYXRhLCAnKicpOwotICAg
ICAgfSBjYXRjaChlKSB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCd1bnNlcmlhbGl6YWJsZSBkYXRh
IGZvciBldmVudCcsdHlwZSwnOicsZGF0YSk7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigKLSAg
ICAgICAgICBbJ1RoZSBldmVudCcsIHR5cGUsICdvbiBjb21wb25lbnQnLCB0aGlzLnRvU3RyaW5n
KCksICd3YXMgdHJpZ2dlcmVkIHdpdGggbm9uLXNlcmlhbGl6YWJsZSBkYXRhJ10uam9pbignICcp
Ci0gICAgICAgICk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gd2l0aEJhc2UoKSB7
Ci0KLSAgICAgIC8vIGRlbGVnYXRlIHRyaWdnZXIsIGJpbmQgYW5kIHVuYmluZCB0byBhbiBlbGVt
ZW50Ci0gICAgICAvLyBpZiAkZWxlbWVudCBub3Qgc3VwcGxpZWQsIHVzZSBjb21wb25lbnQncyBu
b2RlCi0gICAgICAvLyBvdGhlciBhcmd1bWVudHMgYXJlIHBhc3NlZCBvbgotICAgICAgLy8gZXZl
bnQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSB0eXBlCi0gICAgICAvLyBv
ZiB0aGUgZXZlbnQsIG9yIGEgaGFzaCBzcGVjaWZ5aW5nIGJvdGggdGhlIHR5cGUKLSAgICAgIC8v
IGFuZCBhIGRlZmF1bHQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLgotICAgICAgdGhpcy50cmlnZ2Vy
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciAkZWxlbWVudCwgdHlwZSwgZGF0YSwgZXZlbnQs
IGRlZmF1bHRGbjsKLSAgICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggLSAx
LCBsYXN0QXJnID0gYXJndW1lbnRzW2xhc3RJbmRleF07Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBs
YXN0QXJnICE9ICdzdHJpbmcnICYmICEobGFzdEFyZyAmJiBsYXN0QXJnLmRlZmF1bHRCZWhhdmlv
cikpIHsKLSAgICAgICAgICBsYXN0SW5kZXgtLTsKLSAgICAgICAgICBkYXRhID0gbGFzdEFyZzsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXN0SW5kZXggPT0gMSkgewotICAgICAgICAgICRl
bGVtZW50ID0gJChhcmd1bWVudHNbMF0pOwotICAgICAgICAgIGV2ZW50ID0gYXJndW1lbnRzWzFd
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKLSAg
ICAgICAgICBldmVudCA9IGFyZ3VtZW50c1swXTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChl
dmVudC5kZWZhdWx0QmVoYXZpb3IpIHsKLSAgICAgICAgICBkZWZhdWx0Rm4gPSBldmVudC5kZWZh
dWx0QmVoYXZpb3I7Ci0gICAgICAgICAgZXZlbnQgPSAkLkV2ZW50KGV2ZW50LnR5cGUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQ7Ci0KLSAgICAgICAg
aWYgKGRlYnVnLmVuYWJsZWQgJiYgd2luZG93LnBvc3RNZXNzYWdlKSB7Ci0gICAgICAgICAgY2hl
Y2tTZXJpYWxpemFibGUuY2FsbCh0aGlzLCB0eXBlLCBkYXRhKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh0eXBlb2YgdGhpcy5hdHRyLmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHsKLSAgICAg
ICAgICBkYXRhID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMuYXR0ci5ldmVudERhdGEsIGRhdGEp
OwotICAgICAgICB9Ci0KLSAgICAgICAgJGVsZW1lbnQudHJpZ2dlcigoZXZlbnQgfHwgdHlwZSks
IGRhdGEpOwotCi0gICAgICAgIGlmIChkZWZhdWx0Rm4gJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZl
bnRlZCgpKSB7Ci0gICAgICAgICAgKHRoaXNbZGVmYXVsdEZuXSB8fCBkZWZhdWx0Rm4pLmNhbGwo
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gJGVsZW1lbnQ7Ci0gICAgICB9Owot
Ci0gICAgICB0aGlzLm9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciAkZWxlbWVudCwgdHlw
ZSwgY2FsbGJhY2ssIG9yaWdpbmFsQ2I7Ci0gICAgICAgIHZhciBsYXN0SW5kZXggPSBhcmd1bWVu
dHMubGVuZ3RoIC0gMSwgb3JpZ2luID0gYXJndW1lbnRzW2xhc3RJbmRleF07Ci0KLSAgICAgICAg
aWYgKHR5cGVvZiBvcmlnaW4gPT0gJ29iamVjdCcpIHsKLSAgICAgICAgICAvL2RlbGVnYXRlIGNh
bGxiYWNrCi0gICAgICAgICAgb3JpZ2luYWxDYiA9IHV0aWxzLmRlbGVnYXRlKAotICAgICAgICAg
ICAgdGhpcy5yZXNvbHZlRGVsZWdhdGVSdWxlcyhvcmlnaW4pCi0gICAgICAgICAgKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICBvcmlnaW5hbENiID0gb3JpZ2luOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGxhc3RJbmRleCA9PSAyKSB7Ci0gICAgICAgICAgJGVsZW1lbnQgPSAkKGFy
Z3VtZW50c1swXSk7Ci0gICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAkZWxlbWVudCA9IHRoaXMuJG5vZGU7Ci0gICAgICAgICAgdHlwZSA9
IGFyZ3VtZW50c1swXTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxD
YiAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvcmlnaW5hbENiICE9ICdvYmplY3QnKSB7Ci0gICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gYmluZCB0byAiJyArIHR5cGUgKyAnIiBi
ZWNhdXNlIHRoZSBnaXZlbiBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qn
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhbGxiYWNrID0gb3JpZ2luYWxDYi5iaW5kKHRoaXMp
OwotICAgICAgICBjYWxsYmFjay50YXJnZXQgPSBvcmlnaW5hbENiOwotCi0gICAgICAgIC8vIGlm
IHRoZSBvcmlnaW5hbCBjYWxsYmFjayBpcyBhbHJlYWR5IGJyYW5kZWQgYnkgalF1ZXJ5J3MgZ3Vp
ZCwgY29weSBpdCB0byB0aGUgY29udGV4dC1ib3VuZCB2ZXJzaW9uCi0gICAgICAgIGlmIChvcmln
aW5hbENiLmd1aWQpIHsKLSAgICAgICAgICBjYWxsYmFjay5ndWlkID0gb3JpZ2luYWxDYi5ndWlk
OwotICAgICAgICB9Ci0KLSAgICAgICAgJGVsZW1lbnQub24odHlwZSwgY2FsbGJhY2spOwotCi0g
ICAgICAgIC8vIGdldCBqcXVlcnkncyBndWlkIGZyb20gb3VyIGJvdW5kIGZuLCBzbyB1bmJpbmRp
bmcgd2lsbCB3b3JrCi0gICAgICAgIG9yaWdpbmFsQ2IuZ3VpZCA9IGNhbGxiYWNrLmd1aWQ7Ci0K
LSAgICAgICAgcmV0dXJuIGNhbGxiYWNrOwotICAgICAgfTsKLQotICAgICAgdGhpcy5vZmYgPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgdmFyICRlbGVtZW50LCB0eXBlLCBjYWxsYmFjazsKLSAgICAg
ICAgdmFyIGxhc3RJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOwotCi0gICAgICAgIGlmICh0
eXBlb2YgYXJndW1lbnRzW2xhc3RJbmRleF0gPT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgIGNh
bGxiYWNrID0gYXJndW1lbnRzW2xhc3RJbmRleF07Ci0gICAgICAgICAgbGFzdEluZGV4IC09IDE7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGFzdEluZGV4ID09IDEpIHsKLSAgICAgICAgICAk
ZWxlbWVudCA9ICQoYXJndW1lbnRzWzBdKTsKLSAgICAgICAgICB0eXBlID0gYXJndW1lbnRzWzFd
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKLSAg
ICAgICAgICB0eXBlID0gYXJndW1lbnRzWzBdOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
ICRlbGVtZW50Lm9mZih0eXBlLCBjYWxsYmFjayk7Ci0gICAgICB9OwotCi0gICAgICB0aGlzLnJl
c29sdmVEZWxlZ2F0ZVJ1bGVzID0gZnVuY3Rpb24ocnVsZUluZm8pIHsKLSAgICAgICAgdmFyIHJ1
bGVzID0ge307Ci0KLSAgICAgICAgT2JqZWN0LmtleXMocnVsZUluZm8pLmZvckVhY2goZnVuY3Rp
b24ocikgewotICAgICAgICAgIGlmICghKHIgaW4gdGhpcy5hdHRyKSkgewotICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgIicgKyB0aGlzLnRvU3RyaW5nKCkgKyAnIiB3YW50
cyB0byBsaXN0ZW4gb24gIicgKyByICsgJyIgYnV0IG5vIHN1Y2ggYXR0cmlidXRlIHdhcyBkZWZp
bmVkLicpOwotICAgICAgICAgIH0KLSAgICAgICAgICBydWxlc1t0aGlzLmF0dHJbcl1dID0gcnVs
ZUluZm9bcl07Ci0gICAgICAgIH0sIHRoaXMpOwotCi0gICAgICAgIHJldHVybiBydWxlczsKLSAg
ICAgIH07Ci0KLSAgICAgIHRoaXMuZGVmYXVsdEF0dHJzID0gZnVuY3Rpb24oZGVmYXVsdHMpIHsK
LSAgICAgICAgdXRpbHMucHVzaCh0aGlzLmRlZmF1bHRzLCBkZWZhdWx0cywgdHJ1ZSkgfHwgKHRo
aXMuZGVmYXVsdHMgPSBkZWZhdWx0cyk7Ci0gICAgICB9OwotCi0gICAgICB0aGlzLnNlbGVjdCA9
IGZ1bmN0aW9uKGF0dHJpYnV0ZUtleSkgewotICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5maW5k
KHRoaXMuYXR0clthdHRyaWJ1dGVLZXldKTsKLSAgICAgIH07Ci0KLSAgICAgIHRoaXMuaW5pdGlh
bGl6ZSA9IGZ1bmN0aW9uKG5vZGUsIGF0dHJzKSB7Ci0gICAgICAgIGF0dHJzIHx8IChhdHRycyA9
IHt9KTsKLSAgICAgICAgLy9vbmx5IGFzc2lnbiBpZGVudGl0eSBpZiB0aGVyZSBpc24ndCBvbmUg
KGluaXRpYWxpemUgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcykKLSAgICAgICAgdGhpcy5p
ZGVudGl0eSB8fCAodGhpcy5pZGVudGl0eSA9IGNvbXBvbmVudElkKyspOwotCi0gICAgICAgIGlm
ICghbm9kZSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IG5lZWRzIGEg
bm9kZScpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGUuanF1ZXJ5KSB7Ci0gICAgICAg
ICAgdGhpcy5ub2RlID0gbm9kZVswXTsKLSAgICAgICAgICB0aGlzLiRub2RlID0gbm9kZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aGlzLm5vZGUgPSBub2RlOwotICAgICAgICAgIHRo
aXMuJG5vZGUgPSAkKG5vZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWVyZ2UgZGVmYXVs
dHMgd2l0aCBzdXBwbGllZCBvcHRpb25zCi0gICAgICAgIC8vIHB1dCBvcHRpb25zIGluIGF0dHIu
X19wcm90b19fIHRvIGF2b2lkIG1lcmdlIG92ZXJoZWFkCi0gICAgICAgIHZhciBhdHRyID0gT2Jq
ZWN0LmNyZWF0ZShhdHRycyk7Ci0gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRlZmF1bHRz
KSB7Ci0gICAgICAgICAgaWYgKCFhdHRycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAg
ICAgICBhdHRyW2tleV0gPSB0aGlzLmRlZmF1bHRzW2tleV07Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgdGhpcy5hdHRyID0gYXR0cjsKLQotICAgICAgICBPYmplY3Qua2V5cyh0
aGlzLmRlZmF1bHRzIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewotICAgICAgICAgIGlm
ICh0aGlzLmRlZmF1bHRzW2tleV0gPT09IG51bGwgJiYgdGhpcy5hdHRyW2tleV0gPT09IG51bGwp
IHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgYXR0cmlidXRlICInICsg
a2V5ICsgJyIgbm90IHNwZWNpZmllZCBpbiBhdHRhY2hUbyBmb3IgY29tcG9uZW50ICInICsgdGhp
cy50b1N0cmluZygpICsgJyIuJyk7Ci0gICAgICAgICAgfQotICAgICAgICB9LCB0aGlzKTsKLQot
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH07Ci0KLSAgICAgIHRoaXMudGVhcmRvd24gPSBm
dW5jdGlvbigpIHsKLSAgICAgICAgdGVhcmRvd25JbnN0YW5jZShyZWdpc3RyeS5maW5kSW5zdGFu
Y2VJbmZvKHRoaXMpKTsKLSAgICAgIH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHdpdGhCYXNlOwot
ICB9Ci0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2Zs
aWdodC9saWIvY29tcG9uZW50LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRz
L2ZsaWdodC9saWIvY29tcG9uZW50LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
MmM4YjU1MDU1NDVkMTUyZTQwZWI4MDhiMmIyNTE5MTU1NWU2MDBjLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29t
cG9uZW50cy9mbGlnaHQvbGliL2NvbXBvbmVudC5qcworKysgL2Rldi9udWxsCkBAIC0xLDEyMCAr
MCwwIEBACi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8v
IENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYwotLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBM
aWNlbnNlCi0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotZGVmaW5lKAotCi0gIFsKLSAg
ICAnLi9hZHZpY2UnLAotICAgICcuL3V0aWxzJywKLSAgICAnLi9jb21wb3NlJywKLSAgICAnLi9i
YXNlJywKLSAgICAnLi9yZWdpc3RyeScsCi0gICAgJy4vbG9nZ2VyJywKLSAgICAnLi9kZWJ1ZycK
LSAgXSwKLQotICBmdW5jdGlvbihhZHZpY2UsIHV0aWxzLCBjb21wb3NlLCB3aXRoQmFzZSwgcmVn
aXN0cnksIHdpdGhMb2dnaW5nLCBkZWJ1ZykgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHZh
ciBmdW5jdGlvbk5hbWVSZWdFeCA9IC9mdW5jdGlvbiAoLio/KVxzP1woLzsKLQotICAgIC8vIHRl
YXJkb3duIGZvciBhbGwgaW5zdGFuY2VzIG9mIHRoaXMgY29uc3RydWN0b3IKLSAgICBmdW5jdGlv
biB0ZWFyZG93bkFsbCgpIHsKLSAgICAgIHZhciBjb21wb25lbnRJbmZvID0gcmVnaXN0cnkuZmlu
ZENvbXBvbmVudEluZm8odGhpcyk7Ci0KLSAgICAgIGNvbXBvbmVudEluZm8gJiYgT2JqZWN0Lmtl
eXMoY29tcG9uZW50SW5mby5pbnN0YW5jZXMpLmZvckVhY2goZnVuY3Rpb24oaykgewotICAgICAg
ICB2YXIgaW5mbyA9IGNvbXBvbmVudEluZm8uaW5zdGFuY2VzW2tdOwotICAgICAgICBpbmZvLmlu
c3RhbmNlLnRlYXJkb3duKCk7Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjaGVj
a1NlcmlhbGl6YWJsZSh0eXBlLCBkYXRhKSB7Ci0gICAgICB0cnkgewotICAgICAgICB3aW5kb3cu
cG9zdE1lc3NhZ2UoZGF0YSwgJyonKTsKLSAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICBjb25z
b2xlLmxvZygndW5zZXJpYWxpemFibGUgZGF0YSBmb3IgZXZlbnQnLHR5cGUsJzonLGRhdGEpOwot
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCi0gICAgICAgICAgWydUaGUgZXZlbnQnLCB0eXBlLCAn
b24gY29tcG9uZW50JywgdGhpcy50b1N0cmluZygpLCAnd2FzIHRyaWdnZXJlZCB3aXRoIG5vbi1z
ZXJpYWxpemFibGUgZGF0YSddLmpvaW4oJyAnKQotICAgICAgICApOwotICAgICAgfQotICAgIH0K
LQotICAgIGZ1bmN0aW9uIGF0dGFjaFRvKHNlbGVjdG9yLyosIG9wdGlvbnMgYXJncyAqLykgewot
ICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3Rlcgot
ICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJy
YXkobCAtIDEpOwotICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsOyBpKyspIGFyZ3NbaSAtIDFd
ID0gYXJndW1lbnRzW2ldOwotCi0gICAgICBpZiAoIXNlbGVjdG9yKSB7Ci0gICAgICAgIHRocm93
IG5ldyBFcnJvcignQ29tcG9uZW50IG5lZWRzIHRvIGJlIGF0dGFjaFRvXCdkIGEgalF1ZXJ5IG9i
amVjdCwgbmF0aXZlIG5vZGUgb3Igc2VsZWN0b3Igc3RyaW5nJyk7Ci0gICAgICB9Ci0KLSAgICAg
IHZhciBvcHRpb25zID0gdXRpbHMubWVyZ2UuYXBwbHkodXRpbHMsIGFyZ3MpOwotICAgICAgdmFy
IGNvbXBvbmVudEluZm8gPSByZWdpc3RyeS5maW5kQ29tcG9uZW50SW5mbyh0aGlzKTsKLQotICAg
ICAgJChzZWxlY3RvcikuZWFjaChmdW5jdGlvbihpLCBub2RlKSB7Ci0gICAgICAgIGlmIChjb21w
b25lbnRJbmZvICYmIGNvbXBvbmVudEluZm8uaXNBdHRhY2hlZFRvKG5vZGUpKSB7Ci0gICAgICAg
ICAgLy8gYWxyZWFkeSBhdHRhY2hlZAotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIChuZXcgdGhpcykuaW5pdGlhbGl6ZShub2RlLCBvcHRpb25zKTsKLSAgICAgIH0uYmlu
ZCh0aGlzKSk7Ci0gICAgfQotCi0gICAgLy8gZGVmaW5lIHRoZSBjb25zdHJ1Y3RvciBmb3IgYSBj
dXN0b20gY29tcG9uZW50IHR5cGUKLSAgICAvLyB0YWtlcyBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9m
IG1peGluIGZ1bmN0aW9ucyBhcyBhcmd1bWVudHMKLSAgICAvLyB0eXBpY2FsIGFwaSBjYWxsIHdp
dGggMyBtaXhpbnM6IGRlZmluZSh0aW1lbGluZSwgd2l0aFR3ZWV0Q2FwYWJpbGl0eSwgd2l0aFNj
cm9sbENhcGFiaWxpdHkpOwotICAgIGZ1bmN0aW9uIGRlZmluZSgvKm1peGlucyovKSB7Ci0gICAg
ICAvLyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQgYmVuY2htYXJrZWQgZmFzdGVyCi0gICAg
ICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICAvLyBhZGQgdGhyZWUgZm9yIGNvbW1v
biBtaXhpbnMKLSAgICAgIHZhciBtaXhpbnMgPSBuZXcgQXJyYXkobCArIDMpOwotICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIG1peGluc1tpXSA9IGFyZ3VtZW50c1tpXTsKLQotICAg
ICAgdmFyIENvbXBvbmVudCA9IGZ1bmN0aW9uKCkge307Ci0KLSAgICAgIENvbXBvbmVudC50b1N0
cmluZyA9IENvbXBvbmVudC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgdmFyIHByZXR0eVByaW50TWl4aW5zID0gbWl4aW5zLm1hcChmdW5jdGlvbihtaXhpbikgewot
ICAgICAgICAgIGlmIChtaXhpbi5uYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIGZ1bmN0
aW9uIG5hbWUgcHJvcGVydHkgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIsIHVzZSByZWdl
eAotICAgICAgICAgICAgdmFyIG0gPSBtaXhpbi50b1N0cmluZygpLm1hdGNoKGZ1bmN0aW9uTmFt
ZVJlZ0V4KTsKLSAgICAgICAgICAgIHJldHVybiAobSAmJiBtWzFdKSA/IG1bMV0gOiAnJzsKLSAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIChtaXhpbi5uYW1lICE9ICd3aXRo
QmFzZScpID8gbWl4aW4ubmFtZSA6ICcnOwotICAgICAgICAgIH0KLSAgICAgICAgfSkuZmlsdGVy
KEJvb2xlYW4pLmpvaW4oJywgJyk7Ci0gICAgICAgIHJldHVybiBwcmV0dHlQcmludE1peGluczsK
LSAgICAgIH07Ci0KLSAgICAgIGlmIChkZWJ1Zy5lbmFibGVkKSB7Ci0gICAgICAgIENvbXBvbmVu
dC5kZXNjcmliZSA9IENvbXBvbmVudC5wcm90b3R5cGUuZGVzY3JpYmUgPSBDb21wb25lbnQudG9T
dHJpbmcoKTsKLSAgICAgIH0KLQotICAgICAgLy8gJ29wdGlvbnMnIGlzIG9wdGlvbmFsIGhhc2gg
dG8gYmUgbWVyZ2VkIHdpdGggJ2RlZmF1bHRzJyBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24K
LSAgICAgIENvbXBvbmVudC5hdHRhY2hUbyA9IGF0dGFjaFRvOwotICAgICAgQ29tcG9uZW50LnRl
YXJkb3duQWxsID0gdGVhcmRvd25BbGw7Ci0KLSAgICAgIC8vIHByZXBlbmQgY29tbW9uIG1peGlu
cyB0byBzdXBwbGllZCBsaXN0LCB0aGVuIG1peGluIGFsbCBmbGF2b3JzCi0gICAgICBpZiAoZGVi
dWcuZW5hYmxlZCkgewotICAgICAgICBtaXhpbnMudW5zaGlmdCh3aXRoTG9nZ2luZyk7Ci0gICAg
ICB9Ci0gICAgICBtaXhpbnMudW5zaGlmdCh3aXRoQmFzZSwgYWR2aWNlLndpdGhBZHZpY2UsIHJl
Z2lzdHJ5LndpdGhSZWdpc3RyYXRpb24pOwotICAgICAgY29tcG9zZS5taXhpbihDb21wb25lbnQu
cHJvdG90eXBlLCBtaXhpbnMpOwotCi0gICAgICByZXR1cm4gQ29tcG9uZW50OwotICAgIH0KLQot
ICAgIGRlZmluZS50ZWFyZG93bkFsbCA9IGZ1bmN0aW9uKCkgewotICAgICAgcmVnaXN0cnkuY29t
cG9uZW50cy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24oYykgewotICAgICAgICBjLmNvbXBvbmVu
dC50ZWFyZG93bkFsbCgpOwotICAgICAgfSk7Ci0gICAgICByZWdpc3RyeS5yZXNldCgpOwotICAg
IH07Ci0KLSAgICByZXR1cm4gZGVmaW5lOwotICB9Ci0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvY29tcG9zZS5qcyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNzlkOTllZTA5ZTI5NmJhOTM5MTE0MTk1MmEzM2ViMWJl
MDdmOTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvY29tcG9zZS5qcworKysg
L2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCi0vLyBMaWNl
bnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UKLS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNl
bnNlcy9NSVQKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ci1kZWZpbmUoCi0KLSAgWwotICAgICcuL3V0aWxzJywKLSAgICAnLi9kZWJ1ZycKLSAgXSwKLQot
ICBmdW5jdGlvbih1dGlscywgZGVidWcpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICAvL2Vu
dW1lcmFibGVzIGFyZSBzaGltcyAtIGdldE93blByb3BlcnR5RGVzY3JpcHRvciBzaGltIGRvZXNu
J3Qgd29yawotICAgIHZhciBjYW5Xcml0ZVByb3RlY3QgPSBkZWJ1Zy5lbmFibGVkICYmICF1dGls
cy5pc0VudW1lcmFibGUoT2JqZWN0LCAnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJyk7Ci0gICAg
Ly93aGl0ZWxpc3Qgb2YgdW5sb2NrYWJsZSBwcm9wZXJ0eSBuYW1lcwotICAgIHZhciBkb250TG9j
ayA9IFsnbWl4ZWRJbiddOwotCi0gICAgaWYgKGNhbldyaXRlUHJvdGVjdCkgewotICAgICAgLy9J
RTggZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGlzIGJ1aWx0LWluIGJ1dCB0aHJvd3MgZXhlcHRp
b24gb24gbm9uIERPTSBvYmplY3RzCi0gICAgICB0cnkgewotICAgICAgICBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCwgJ2tleXMnKTsKLSAgICAgIH0gY2F0Y2goZSkgewot
ICAgICAgICBjYW5Xcml0ZVByb3RlY3QgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBzZXRQcm9wZXJ0eVdyaXRhYmlsaXR5KG9iaiwgaXNXcml0YWJsZSkgewotICAgICAg
aWYgKCFjYW5Xcml0ZVByb3RlY3QpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAg
ICB2YXIgcHJvcHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwotCi0gICAgICBPYmplY3Qua2V5cyhv
YmopLmZvckVhY2goCi0gICAgICAgIGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgICAgICBpZiAoZG9u
dExvY2suaW5kZXhPZihrZXkpIDwgMCkgewotICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTsKLSAgICAgICAgICAgIGRlc2Mud3Jp
dGFibGUgPSBpc1dyaXRhYmxlOwotICAgICAgICAgICAgcHJvcHNba2V5XSA9IGRlc2M7Ci0gICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICApOwotCi0gICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dGllcyhvYmosIHByb3BzKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB1bmxvY2tQcm9wZXJ0eShv
YmosIHByb3AsIG9wKSB7Ci0gICAgICB2YXIgd3JpdGFibGU7Ci0KLSAgICAgIGlmICghY2FuV3Jp
dGVQcm90ZWN0IHx8ICFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgb3AuY2Fs
bChvYmopOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHdyaXRhYmxlID0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApLndyaXRhYmxlOwotICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB3cml0YWJsZTogdHJ1ZSB9KTsKLSAg
ICAgIG9wLmNhbGwob2JqKTsKLSAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3As
IHsgd3JpdGFibGU6IHdyaXRhYmxlIH0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1peGluKGJh
c2UsIG1peGlucykgewotICAgICAgYmFzZS5taXhlZEluID0gYmFzZS5oYXNPd25Qcm9wZXJ0eSgn
bWl4ZWRJbicpID8gYmFzZS5taXhlZEluIDogW107Ci0KLSAgICAgIG1peGlucy5mb3JFYWNoKGZ1
bmN0aW9uKG1peGluKSB7Ci0gICAgICAgIGlmIChiYXNlLm1peGVkSW4uaW5kZXhPZihtaXhpbikg
PT0gLTEpIHsKLSAgICAgICAgICBzZXRQcm9wZXJ0eVdyaXRhYmlsaXR5KGJhc2UsIGZhbHNlKTsK
LSAgICAgICAgICBtaXhpbi5jYWxsKGJhc2UpOwotICAgICAgICAgIGJhc2UubWl4ZWRJbi5wdXNo
KG1peGluKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICAgIHNldFByb3BlcnR5V3JpdGFi
aWxpdHkoYmFzZSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgIG1peGluOiBt
aXhpbiwKLSAgICAgIHVubG9ja1Byb3BlcnR5OiB1bmxvY2tQcm9wZXJ0eQotICAgIH07Ci0KLSAg
fQotKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGln
aHQvbGliL2RlYnVnLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdo
dC9saWIvZGVidWcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NzBhY2ZiMzVh
OGZkMjE2ZmQwMWI3MWQ3MjgwODhkNjEwNjNjODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2Zs
aWdodC9saWIvZGVidWcuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDb3B5cmlnaHQgMjAx
MyBUd2l0dGVyLCBJbmMKLS8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQotLy8gaHR0
cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0KLWRlZmluZSgKLQotICBbXSwKLQotICBmdW5jdGlvbigp
IHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgotICAgIC8vIFNlYXJjaCBvYmplY3QgbW9kZWwKLSAgICAvLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgotCi0gICAgZnVuY3Rpb24gdHJhdmVyc2UodXRpbCwgc2VhcmNo
VGVybSwgb3B0aW9ucykgewotICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0gICAgICB2
YXIgb2JqID0gb3B0aW9ucy5vYmogfHwgd2luZG93OwotICAgICAgdmFyIHBhdGggPSBvcHRpb25z
LnBhdGggfHwgKChvYmo9PXdpbmRvdykgPyAnd2luZG93JyA6ICcnKTsKLSAgICAgIHZhciBwcm9w
cyA9IE9iamVjdC5rZXlzKG9iaik7Ci0gICAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3Ap
IHsKLSAgICAgICAgaWYgKCh0ZXN0c1t1dGlsXSB8fCB1dGlsKShzZWFyY2hUZXJtLCBvYmosIHBy
b3ApKXsKLSAgICAgICAgICBjb25zb2xlLmxvZyhbcGF0aCwgJy4nLCBwcm9wXS5qb2luKCcnKSwg
Jy0+JywgWycoJywgdHlwZW9mIG9ialtwcm9wXSwgJyknXS5qb2luKCcnKSwgb2JqW3Byb3BdKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9i
altwcm9wXSkgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgKG9ialtwcm9wXSAhPSBvYmopICYmIHBh
dGguc3BsaXQoJy4nKS5pbmRleE9mKHByb3ApID09IC0xKSB7Ci0gICAgICAgICAgdHJhdmVyc2Uo
dXRpbCwgc2VhcmNoVGVybSwge29iajogb2JqW3Byb3BdLCBwYXRoOiBbcGF0aCxwcm9wXS5qb2lu
KCcuJyl9KTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2Vh
cmNoKHV0aWwsIGV4cGVjdGVkLCBzZWFyY2hUZXJtLCBvcHRpb25zKSB7Ci0gICAgICBpZiAoIWV4
cGVjdGVkIHx8IHR5cGVvZiBzZWFyY2hUZXJtID09IGV4cGVjdGVkKSB7Ci0gICAgICAgIHRyYXZl
cnNlKHV0aWwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
Y29uc29sZS5lcnJvcihbc2VhcmNoVGVybSwgJ211c3QgYmUnLCBleHBlY3RlZF0uam9pbignICcp
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICB2YXIgdGVzdHMgPSB7Ci0gICAgICAnbmFtZSc6IGZ1
bmN0aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVybiBzZWFyY2hUZXJtID09IHByb3A7
fSwKLSAgICAgICduYW1lQ29udGFpbnMnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3Ap
IHtyZXR1cm4gcHJvcC5pbmRleE9mKHNlYXJjaFRlcm0pID4gLTE7fSwKLSAgICAgICd0eXBlJzog
ZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIG9ialtwcm9wXSBpbnN0YW5j
ZW9mIHNlYXJjaFRlcm07fSwKLSAgICAgICd2YWx1ZSc6IGZ1bmN0aW9uKHNlYXJjaFRlcm0sIG9i
aiwgcHJvcCkge3JldHVybiBvYmpbcHJvcF0gPT09IHNlYXJjaFRlcm07fSwKLSAgICAgICd2YWx1
ZUNvZXJjZWQnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4gb2JqW3By
b3BdID09IHNlYXJjaFRlcm07fQotICAgIH07Ci0KLSAgICBmdW5jdGlvbiBieU5hbWUoc2VhcmNo
VGVybSwgb3B0aW9ucykge3NlYXJjaCgnbmFtZScsICdzdHJpbmcnLCBzZWFyY2hUZXJtLCBvcHRp
b25zKTt9Ci0gICAgZnVuY3Rpb24gYnlOYW1lQ29udGFpbnMoc2VhcmNoVGVybSwgb3B0aW9ucykg
e3NlYXJjaCgnbmFtZUNvbnRhaW5zJywgJ3N0cmluZycsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO30K
LSAgICBmdW5jdGlvbiBieVR5cGUoc2VhcmNoVGVybSwgb3B0aW9ucykge3NlYXJjaCgndHlwZScs
ICdmdW5jdGlvbicsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO30KLSAgICBmdW5jdGlvbiBieVZhbHVl
KHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3ZhbHVlJywgbnVsbCwgc2VhcmNoVGVybSwg
b3B0aW9ucyk7fQotICAgIGZ1bmN0aW9uIGJ5VmFsdWVDb2VyY2VkKHNlYXJjaFRlcm0sIG9wdGlv
bnMpIHtzZWFyY2goJ3ZhbHVlQ29lcmNlZCcsIG51bGwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO30K
LSAgICBmdW5jdGlvbiBjdXN0b20oZm4sIG9wdGlvbnMpIHt0cmF2ZXJzZShmbiwgbnVsbCwgb3B0
aW9ucyk7fQotCi0gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAv
LyBFdmVudCBsb2dnaW5nCi0gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
LQotICAgIHZhciBBTEwgPSAnYWxsJzsgLy9ubyBmaWx0ZXIKLQotICAgIC8vbm8gbG9nZ2luZyBi
eSBkZWZhdWx0Ci0gICAgdmFyIGRlZmF1bHRFdmVudE5hbWVzRmlsdGVyID0gW107Ci0gICAgdmFy
IGRlZmF1bHRBY3Rpb25zRmlsdGVyID0gW107Ci0KLSAgICB2YXIgbG9nRmlsdGVyID0gcmV0cmll
dmVMb2dGaWx0ZXIoKTsKLQotICAgIGZ1bmN0aW9uIGZpbHRlckV2ZW50TG9nc0J5QWN0aW9uKC8q
YWN0aW9ucyovKSB7Ci0gICAgICB2YXIgYWN0aW9ucyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRz
KTsKLQotICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMubGVuZ3RoIHx8IChsb2dGaWx0ZXIuZXZl
bnROYW1lcyA9IEFMTCk7Ci0gICAgICBsb2dGaWx0ZXIuYWN0aW9ucyA9IGFjdGlvbnMubGVuZ3Ro
ID8gYWN0aW9ucyA6IEFMTDsKLSAgICAgIHNhdmVMb2dGaWx0ZXIoKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBmaWx0ZXJFdmVudExvZ3NCeU5hbWUoLypldmVudE5hbWVzKi8pIHsKLSAgICAgIHZh
ciBldmVudE5hbWVzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpOwotCi0gICAgICBsb2dGaWx0
ZXIuYWN0aW9ucy5sZW5ndGggfHwgKGxvZ0ZpbHRlci5hY3Rpb25zID0gQUxMKTsKLSAgICAgIGxv
Z0ZpbHRlci5ldmVudE5hbWVzID0gZXZlbnROYW1lcy5sZW5ndGggPyBldmVudE5hbWVzIDogQUxM
OwotICAgICAgc2F2ZUxvZ0ZpbHRlcigpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhpZGVBbGxF
dmVudExvZ3MoKSB7Ci0gICAgICBsb2dGaWx0ZXIuYWN0aW9ucyA9IFtdOwotICAgICAgbG9nRmls
dGVyLmV2ZW50TmFtZXMgPSBbXTsKLSAgICAgIHNhdmVMb2dGaWx0ZXIoKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBzaG93QWxsRXZlbnRMb2dzKCkgewotICAgICAgbG9nRmlsdGVyLmFjdGlvbnMg
PSBBTEw7Ci0gICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9IEFMTDsKLSAgICAgIHNhdmVMb2dG
aWx0ZXIoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzYXZlTG9nRmlsdGVyKCkgewotICAgICAg
aWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKLSAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0o
J2xvZ0ZpbHRlcl9ldmVudE5hbWVzJywgbG9nRmlsdGVyLmV2ZW50TmFtZXMpOwotICAgICAgICBs
b2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9nRmlsdGVyX2FjdGlvbnMnLCBsb2dGaWx0ZXIuYWN0aW9u
cyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmV0cmlldmVMb2dGaWx0ZXIoKSB7
Ci0gICAgICB2YXIgcmVzdWx0ID0gewotICAgICAgICBldmVudE5hbWVzOiAod2luZG93LmxvY2Fs
U3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9nRmlsdGVyX2V2ZW50TmFtZXMnKSkg
fHwgZGVmYXVsdEV2ZW50TmFtZXNGaWx0ZXIsCi0gICAgICAgIGFjdGlvbnM6ICh3aW5kb3cubG9j
YWxTdG9yYWdlICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dGaWx0ZXJfYWN0aW9ucycpKSB8
fCBkZWZhdWx0QWN0aW9uc0ZpbHRlcgotICAgICAgfTsKLQotICAgICAgLy8gcmVjb25zdGl0dXRl
IGFycmF5cwotICAgICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsK
LSAgICAgICAgdmFyIHRoaXNQcm9wID0gcmVzdWx0W2tdOwotICAgICAgICBpZiAodHlwZW9mIHRo
aXNQcm9wID09ICdzdHJpbmcnICYmIHRoaXNQcm9wICE9PSBBTEwpIHsKLSAgICAgICAgICByZXN1
bHRba10gPSB0aGlzUHJvcC5zcGxpdCgnLCcpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLQotICAgICAgZW5hYmxlOiBm
dW5jdGlvbihlbmFibGUpIHsKLSAgICAgICAgdGhpcy5lbmFibGVkID0gISFlbmFibGU7Ci0KLSAg
ICAgICAgaWYgKGVuYWJsZSAmJiB3aW5kb3cuY29uc29sZSkgewotICAgICAgICAgIGNvbnNvbGUu
aW5mbygnQm9vdGluZyBpbiBERUJVRyBtb2RlJyk7Ci0gICAgICAgICAgY29uc29sZS5pbmZvKCdZ
b3UgY2FuIGNvbmZpZ3VyZSBldmVudCBsb2dnaW5nIHdpdGggREVCVUcuZXZlbnRzLmxvZ0FsbCgp
L2xvZ05vbmUoKS9sb2dCeU5hbWUoKS9sb2dCeUFjdGlvbigpJyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB3aW5kb3cuREVCVUcgPSB0aGlzOwotICAgICAgfSwKLQotICAgICAgZmluZDogewotICAg
ICAgICBieU5hbWU6IGJ5TmFtZSwKLSAgICAgICAgYnlOYW1lQ29udGFpbnM6IGJ5TmFtZUNvbnRh
aW5zLAotICAgICAgICBieVR5cGU6IGJ5VHlwZSwKLSAgICAgICAgYnlWYWx1ZTogYnlWYWx1ZSwK
LSAgICAgICAgYnlWYWx1ZUNvZXJjZWQ6IGJ5VmFsdWVDb2VyY2VkLAotICAgICAgICBjdXN0b206
IGN1c3RvbQotICAgICAgfSwKLQotICAgICAgZXZlbnRzOiB7Ci0gICAgICAgIGxvZ0ZpbHRlcjog
bG9nRmlsdGVyLAotCi0gICAgICAgIC8vIEFjY2VwdHMgYW55IG51bWJlciBvZiBhY3Rpb24gYXJn
cwotICAgICAgICAvLyBlLmcuIERFQlVHLmV2ZW50cy5sb2dCeUFjdGlvbigib24iLCAib2ZmIikK
LSAgICAgICAgbG9nQnlBY3Rpb246IGZpbHRlckV2ZW50TG9nc0J5QWN0aW9uLAotCi0gICAgICAg
IC8vIEFjY2VwdHMgYW55IG51bWJlciBvZiBldmVudCBuYW1lIGFyZ3MgKGluYy4gcmVnZXggb3Ig
d2lsZGNhcmRzKQotICAgICAgICAvLyBlLmcuIERFQlVHLmV2ZW50cy5sb2dCeU5hbWUoL3VpLiov
LCAiKlRocmVhZCoiKTsKLSAgICAgICAgbG9nQnlOYW1lOiBmaWx0ZXJFdmVudExvZ3NCeU5hbWUs
Ci0KLSAgICAgICAgbG9nQWxsOiBzaG93QWxsRXZlbnRMb2dzLAotICAgICAgICBsb2dOb25lOiBo
aWRlQWxsRXZlbnRMb2dzCi0gICAgICB9Ci0gICAgfTsKLSAgfQotKTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2luZGV4LmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvaW5kZXguanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ODA2YWFjNGNmNDUyYjNlYWRiZDg0ZTIzNjgwYzZk
YzVhOTY2ZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvaW5kZXguanMKKysr
IC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYwotLy8gTGlj
ZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCi0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj
ZW5zZXMvTUlUCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotZGVmaW5lKAotCi0gIFsKLSAgICAnLi9hZHZpY2UnLAotICAgICcuL2NvbXBvbmVudCcsCi0g
ICAgJy4vY29tcG9zZScsCi0gICAgJy4vbG9nZ2VyJywKLSAgICAnLi9yZWdpc3RyeScsCi0gICAg
Jy4vdXRpbHMnCi0gIF0sCi0KLSAgZnVuY3Rpb24oYWR2aWNlLCBjb21wb25lbnQsIGNvbXBvc2Us
IGxvZ2dlciwgcmVnaXN0cnksIHV0aWxzKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgcmV0
dXJuIHsKLSAgICAgIGFkdmljZTogYWR2aWNlLAotICAgICAgY29tcG9uZW50OiBjb21wb25lbnQs
Ci0gICAgICBjb21wb3NlOiBjb21wb3NlLAotICAgICAgbG9nZ2VyOiBsb2dnZXIsCi0gICAgICBy
ZWdpc3RyeTogcmVnaXN0cnksCi0gICAgICB1dGlsczogdXRpbHMKLSAgICB9OwotCi0gIH0KLSk7
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xp
Yi9sb2dnZXIuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xp
Yi9sb2dnZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZGQzYThiNWY4ZmZh
ZWMxODk0NjY3MDM3YjkwYzgwMzQ2NTEwOWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdo
dC9saWIvbG9nZ2VyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDb3B5cmlnaHQgMjAxMyBU
d2l0dGVyLCBJbmMKLS8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQotLy8gaHR0cDov
L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLWRlZmluZSgKLQotICBbCi0gICAgJy4vdXRpbHMnCi0gIF0s
Ci0KLSAgZnVuY3Rpb24odXRpbHMpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICB2YXIgYWN0
aW9uU3ltYm9scyA9IHsKLSAgICAgIG9uOiAnPC0nLAotICAgICAgdHJpZ2dlcjogJy0+JywKLSAg
ICAgIG9mZjogJ3ggJwotICAgIH07Ci0KLSAgICBmdW5jdGlvbiBlbGVtVG9TdHJpbmcoZWxlbSkg
ewotICAgICAgdmFyIHRhZ1N0ciA9IGVsZW0udGFnTmFtZSA/IGVsZW0udGFnTmFtZS50b0xvd2Vy
Q2FzZSgpIDogZWxlbS50b1N0cmluZygpOwotICAgICAgdmFyIGNsYXNzU3RyID0gZWxlbS5jbGFz
c05hbWUgPyAnLicgKyAoZWxlbS5jbGFzc05hbWUpIDogJyc7Ci0gICAgICB2YXIgcmVzdWx0ID0g
dGFnU3RyICsgY2xhc3NTdHI7Ci0gICAgICByZXR1cm4gZWxlbS50YWdOYW1lID8gWydcJycsICdc
JyddLmpvaW4ocmVzdWx0KSA6IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBsb2coYWN0
aW9uLCBjb21wb25lbnQsIGV2ZW50QXJncykgewotICAgICAgdmFyIG5hbWUsIGVsZW0sIGZuLCBs
b2dGaWx0ZXIsIHRvUmVnRXhwLCBhY3Rpb25Mb2dnYWJsZSwgbmFtZUxvZ2dhYmxlOwotCi0gICAg
ICBpZiAodHlwZW9mIGV2ZW50QXJnc1tldmVudEFyZ3MubGVuZ3RoLTFdID09ICdmdW5jdGlvbicp
IHsKLSAgICAgICAgZm4gPSBldmVudEFyZ3MucG9wKCk7Ci0gICAgICAgIGZuID0gZm4udW5ib3Vu
ZCB8fCBmbjsgLy8gdXNlIHVuYm91bmQgdmVyc2lvbiBpZiBhbnkgKGJldHRlciBpbmZvKQotICAg
ICAgfQotCi0gICAgICBpZiAodHlwZW9mIGV2ZW50QXJnc1tldmVudEFyZ3MubGVuZ3RoIC0gMV0g
PT0gJ29iamVjdCcpIHsKLSAgICAgICAgZXZlbnRBcmdzLnBvcCgpOyAvLyB0cmlnZ2VyIGRhdGEg
YXJnIC0gbm90IGxvZ2dlZCByaWdodCBub3cKLSAgICAgIH0KLQotICAgICAgaWYgKGV2ZW50QXJn
cy5sZW5ndGggPT0gMikgewotICAgICAgICBlbGVtID0gZXZlbnRBcmdzWzBdOwotICAgICAgICBu
YW1lID0gZXZlbnRBcmdzWzFdOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZWxlbSA9IGNvbXBv
bmVudC4kbm9kZVswXTsKLSAgICAgICAgbmFtZSA9IGV2ZW50QXJnc1swXTsKLSAgICAgIH0KLQot
ICAgICAgaWYgKHdpbmRvdy5ERUJVRyAmJiB3aW5kb3cuREVCVUcuZW5hYmxlZCkgewotICAgICAg
ICBsb2dGaWx0ZXIgPSBERUJVRy5ldmVudHMubG9nRmlsdGVyOwotCi0gICAgICAgIC8vIG5vIHJl
Z2V4IGZvciB5b3UsIGFjdGlvbnMuLi4KLSAgICAgICAgYWN0aW9uTG9nZ2FibGUgPSBsb2dGaWx0
ZXIuYWN0aW9ucyA9PSAnYWxsJyB8fCAobG9nRmlsdGVyLmFjdGlvbnMuaW5kZXhPZihhY3Rpb24p
ID4gLTEpOwotICAgICAgICAvLyBldmVudCBuYW1lIGZpbHRlciBhbGxvdyB3aWxkY2FyZHMgb3Ig
cmVnZXguLi4KLSAgICAgICAgdG9SZWdFeHAgPSBmdW5jdGlvbihleHByKSB7Ci0gICAgICAgICAg
cmV0dXJuIGV4cHIudGVzdCA/IGV4cHIgOiBuZXcgUmVnRXhwKCdeJyArIGV4cHIucmVwbGFjZSgv
XCovZywgJy4qJykgKyAnJCcpOwotICAgICAgICB9OwotICAgICAgICBuYW1lTG9nZ2FibGUgPQot
ICAgICAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzID09ICdhbGwnIHx8Ci0gICAgICAgICAgbG9n
RmlsdGVyLmV2ZW50TmFtZXMuc29tZShmdW5jdGlvbihlKSB7cmV0dXJuIHRvUmVnRXhwKGUpLnRl
c3QobmFtZSk7fSk7Ci0KLSAgICAgICAgaWYgKGFjdGlvbkxvZ2dhYmxlICYmIG5hbWVMb2dnYWJs
ZSkgewotICAgICAgICAgIGNvbnNvbGUuaW5mbygKLSAgICAgICAgICAgIGFjdGlvblN5bWJvbHNb
YWN0aW9uXSwKLSAgICAgICAgICAgIGFjdGlvbiwKLSAgICAgICAgICAgICdbJyArIG5hbWUgKyAn
XScsCi0gICAgICAgICAgICBlbGVtVG9TdHJpbmcoZWxlbSksCi0gICAgICAgICAgICBjb21wb25l
bnQuY29uc3RydWN0b3IuZGVzY3JpYmUuc3BsaXQoJyAnKS5zbGljZSgwLDMpLmpvaW4oJyAnKSAv
LyB0d28gbWl4aW5zIG9ubHkKLSAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gd2l0aExvZ2dpbmcoKSB7Ci0gICAgICB0aGlzLmJlZm9yZSgndHJp
Z2dlcicsIGZ1bmN0aW9uKCkgewotICAgICAgICBsb2coJ3RyaWdnZXInLCB0aGlzLCB1dGlscy50
b0FycmF5KGFyZ3VtZW50cykpOwotICAgICAgfSk7Ci0gICAgICB0aGlzLmJlZm9yZSgnb24nLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgbG9nKCdvbicsIHRoaXMsIHV0aWxzLnRvQXJyYXkoYXJndW1l
bnRzKSk7Ci0gICAgICB9KTsKLSAgICAgIHRoaXMuYmVmb3JlKCdvZmYnLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgbG9nKCdvZmYnLCB0aGlzLCB1dGlscy50b0FycmF5KGFyZ3VtZW50cykpOwotICAg
ICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHdpdGhMb2dnaW5nOwotICB9Ci0pOwpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvcmVnaXN0
cnkuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9yZWdp
c3RyeS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2YTY4MWFkZjQzYTM4MmNl
OWRiNDEyMWRmNmMwODE2MDg2N2Q1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xp
Yi9yZWdpc3RyeS5qcworKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIENvcHlyaWdodCAyMDEzIFR3
aXR0ZXIsIEluYwotLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCi0vLyBodHRwOi8v
b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotZGVmaW5lKAotCi0gIFtdLAotCi0gIGZ1bmN0aW9uKCkgewot
ICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIGZ1bmN0aW9uIHBhcnNlRXZlbnRBcmdzKGluc3RhbmNl
LCBhcmdzKSB7Ci0gICAgICB2YXIgZWxlbWVudCwgdHlwZSwgY2FsbGJhY2s7Ci0gICAgICB2YXIg
ZW5kID0gYXJncy5sZW5ndGg7Ci0KLSAgICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0g
J2Z1bmN0aW9uJykgewotICAgICAgICBlbmQgLT0gMTsKLSAgICAgICAgY2FsbGJhY2sgPSBhcmdz
W2VuZF07Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ29i
amVjdCcpIHsKLSAgICAgICAgZW5kIC09IDE7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChlbmQgPT0g
MikgewotICAgICAgICBlbGVtZW50ID0gYXJnc1swXTsKLSAgICAgICAgdHlwZSA9IGFyZ3NbMV07
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlbGVtZW50ID0gaW5zdGFuY2Uubm9kZTsKLSAgICAg
ICAgdHlwZSA9IGFyZ3NbMF07Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB7Ci0gICAgICAgIGVs
ZW1lbnQ6IGVsZW1lbnQsCi0gICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgIGNhbGxiYWNrOiBj
YWxsYmFjawotICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtYXRjaEV2ZW50KGEsIGIp
IHsKLSAgICAgIHJldHVybiAoCi0gICAgICAgIChhLmVsZW1lbnQgPT0gYi5lbGVtZW50KSAmJgot
ICAgICAgICAoYS50eXBlID09IGIudHlwZSkgJiYKLSAgICAgICAgKGIuY2FsbGJhY2sgPT0gbnVs
bCB8fCAoYS5jYWxsYmFjayA9PSBiLmNhbGxiYWNrKSkKLSAgICAgICk7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gUmVnaXN0cnkoKSB7Ci0KLSAgICAgIHZhciByZWdpc3RyeSA9IHRoaXM7Ci0KLSAg
ICAgICh0aGlzLnJlc2V0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuY29tcG9uZW50cyA9
IFtdOwotICAgICAgICB0aGlzLmFsbEluc3RhbmNlcyA9IHt9OwotICAgICAgICB0aGlzLmV2ZW50
cyA9IFtdOwotICAgICAgfSkuY2FsbCh0aGlzKTsKLQotICAgICAgZnVuY3Rpb24gQ29tcG9uZW50
SW5mbyhjb21wb25lbnQpIHsKLSAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7Ci0g
ICAgICAgIHRoaXMuYXR0YWNoZWRUbyA9IFtdOwotICAgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9
OwotCi0gICAgICAgIHRoaXMuYWRkSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgewotICAg
ICAgICAgIHZhciBpbnN0YW5jZUluZm8gPSBuZXcgSW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKLSAg
ICAgICAgICB0aGlzLmluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV0gPSBpbnN0YW5jZUluZm87
Ci0gICAgICAgICAgdGhpcy5hdHRhY2hlZFRvLnB1c2goaW5zdGFuY2Uubm9kZSk7Ci0KLSAgICAg
ICAgICByZXR1cm4gaW5zdGFuY2VJbmZvOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMucmVt
b3ZlSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgewotICAgICAgICAgIGRlbGV0ZSB0aGlz
Lmluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV07Ci0gICAgICAgICAgdmFyIGluZGV4T2ZOb2Rl
ID0gdGhpcy5hdHRhY2hlZFRvLmluZGV4T2YoaW5zdGFuY2Uubm9kZSk7Ci0gICAgICAgICAgKGlu
ZGV4T2ZOb2RlID4gLTEpICYmIHRoaXMuYXR0YWNoZWRUby5zcGxpY2UoaW5kZXhPZk5vZGUsIDEp
OwotCi0gICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmluc3RhbmNlcykubGVuZ3RoKSB7
Ci0gICAgICAgICAgICAvL2lmIEkgaG9sZCBubyBtb3JlIGluc3RhbmNlcyByZW1vdmUgbWUgZnJv
bSByZWdpc3RyeQotICAgICAgICAgICAgcmVnaXN0cnkucmVtb3ZlQ29tcG9uZW50SW5mbyh0aGlz
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5pc0F0dGFjaGVkVG8g
PSBmdW5jdGlvbihub2RlKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMuYXR0YWNoZWRUby5pbmRl
eE9mKG5vZGUpID4gLTE7Ci0gICAgICAgIH07Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIElu
c3RhbmNlSW5mbyhpbnN0YW5jZSkgewotICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7
Ci0gICAgICAgIHRoaXMuZXZlbnRzID0gW107Ci0KLSAgICAgICAgdGhpcy5hZGRCaW5kID0gZnVu
Y3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKGV2ZW50KTsKLSAgICAg
ICAgICByZWdpc3RyeS5ldmVudHMucHVzaChldmVudCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
dGhpcy5yZW1vdmVCaW5kID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgZTsgZSA9IHRoaXMuZXZlbnRzW2ldOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChtYXRj
aEV2ZW50KGUsIGV2ZW50KSkgewotICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5zcGxpY2UoaSwg
MSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgfQotCi0g
ICAgICB0aGlzLmFkZEluc3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKLSAgICAgICAgdmFy
IGNvbXBvbmVudCA9IHRoaXMuZmluZENvbXBvbmVudEluZm8oaW5zdGFuY2UpOwotCi0gICAgICAg
IGlmICghY29tcG9uZW50KSB7Ci0gICAgICAgICAgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudElu
Zm8oaW5zdGFuY2UuY29uc3RydWN0b3IpOwotICAgICAgICAgIHRoaXMuY29tcG9uZW50cy5wdXNo
KGNvbXBvbmVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaW5zdCA9IGNvbXBvbmVudC5h
ZGRJbnN0YW5jZShpbnN0YW5jZSk7Ci0KLSAgICAgICAgdGhpcy5hbGxJbnN0YW5jZXNbaW5zdGFu
Y2UuaWRlbnRpdHldID0gaW5zdDsKLQotICAgICAgICByZXR1cm4gY29tcG9uZW50OwotICAgICAg
fTsKLQotICAgICAgdGhpcy5yZW1vdmVJbnN0YW5jZSA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7Ci0g
ICAgICAgIHZhciBpbmRleCwgaW5zdEluZm8gPSB0aGlzLmZpbmRJbnN0YW5jZUluZm8oaW5zdGFu
Y2UpOwotCi0gICAgICAgIC8vcmVtb3ZlIGZyb20gY29tcG9uZW50IGluZm8KLSAgICAgICAgdmFy
IGNvbXBvbmVudEluZm8gPSB0aGlzLmZpbmRDb21wb25lbnRJbmZvKGluc3RhbmNlKTsKLSAgICAg
ICAgY29tcG9uZW50SW5mbyAmJiBjb21wb25lbnRJbmZvLnJlbW92ZUluc3RhbmNlKGluc3RhbmNl
KTsKLQotICAgICAgICAvL3JlbW92ZSBmcm9tIHJlZ2lzdHJ5Ci0gICAgICAgIGRlbGV0ZSB0aGlz
LmFsbEluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV07Ci0gICAgICB9OwotCi0gICAgICB0aGlz
LnJlbW92ZUNvbXBvbmVudEluZm8gPSBmdW5jdGlvbihjb21wb25lbnRJbmZvKSB7Ci0gICAgICAg
IHZhciBpbmRleCA9IHRoaXMuY29tcG9uZW50cy5pbmRleE9mKGNvbXBvbmVudEluZm8pOwotICAg
ICAgICAoaW5kZXggPiAtMSkgJiYgdGhpcy5jb21wb25lbnRzLnNwbGljZShpbmRleCwgMSk7Ci0g
ICAgICB9OwotCi0gICAgICB0aGlzLmZpbmRDb21wb25lbnRJbmZvID0gZnVuY3Rpb24od2hpY2gp
IHsKLSAgICAgICAgdmFyIGNvbXBvbmVudCA9IHdoaWNoLmF0dGFjaFRvID8gd2hpY2ggOiB3aGlj
aC5jb25zdHJ1Y3RvcjsKLQotICAgICAgICBmb3IgKHZhciBpID0gMCwgYzsgYyA9IHRoaXMuY29t
cG9uZW50c1tpXTsgaSsrKSB7Ci0gICAgICAgICAgaWYgKGMuY29tcG9uZW50ID09PSBjb21wb25l
bnQpIHsKLSAgICAgICAgICAgIHJldHVybiBjOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgfTsKLQotICAgICAgdGhpcy5maW5kSW5zdGFuY2VJ
bmZvID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYWxsSW5zdGFu
Y2VzW2luc3RhbmNlLmlkZW50aXR5XSB8fCBudWxsOwotICAgICAgfTsKLQotICAgICAgdGhpcy5m
aW5kSW5zdGFuY2VJbmZvQnlOb2RlID0gZnVuY3Rpb24obm9kZSkgewotICAgICAgICB2YXIgcmVz
dWx0ID0gW107Ci0gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWxsSW5zdGFuY2VzKS5mb3JFYWNo
KGZ1bmN0aW9uKGspIHsKLSAgICAgICAgICB2YXIgdGhpc0luc3RhbmNlSW5mbyA9IHRoaXMuYWxs
SW5zdGFuY2VzW2tdOwotICAgICAgICAgIGlmICh0aGlzSW5zdGFuY2VJbmZvLmluc3RhbmNlLm5v
ZGUgPT09IG5vZGUpIHsKLSAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXNJbnN0YW5jZUluZm8p
OwotICAgICAgICAgIH0KLSAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICB9OwotCi0gICAgICB0aGlzLm9uID0gZnVuY3Rpb24oY29tcG9uZW50T24pIHsKLSAg
ICAgICAgdmFyIGluc3RhbmNlID0gcmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKSwgYm91
bmRDYWxsYmFjazsKLQotICAgICAgICAvLyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQgYmVu
Y2htYXJrZWQgZmFzdGVyCi0gICAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IDE7
Ci0gICAgICAgIHZhciBvdGhlckFyZ3MgPSBuZXcgQXJyYXkobCAtIDEpOwotICAgICAgICBmb3Ig
KDsgaSA8IGw7IGkrKykgb3RoZXJBcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKLQotICAgICAg
ICBpZiAoaW5zdGFuY2UpIHsKLSAgICAgICAgICBib3VuZENhbGxiYWNrID0gY29tcG9uZW50T24u
YXBwbHkobnVsbCwgb3RoZXJBcmdzKTsKLSAgICAgICAgICBpZiAoYm91bmRDYWxsYmFjaykgewot
ICAgICAgICAgICAgb3RoZXJBcmdzW290aGVyQXJncy5sZW5ndGgtMV0gPSBib3VuZENhbGxiYWNr
OwotICAgICAgICAgIH0KLSAgICAgICAgICB2YXIgZXZlbnQgPSBwYXJzZUV2ZW50QXJncyh0aGlz
LCBvdGhlckFyZ3MpOwotICAgICAgICAgIGluc3RhbmNlLmFkZEJpbmQoZXZlbnQpOwotICAgICAg
ICB9Ci0gICAgICB9OwotCi0gICAgICB0aGlzLm9mZiA9IGZ1bmN0aW9uKC8qZWwsIHR5cGUsIGNh
bGxiYWNrKi8pIHsKLSAgICAgICAgdmFyIGV2ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgYXJn
dW1lbnRzKSwKLSAgICAgICAgICAgIGluc3RhbmNlID0gcmVnaXN0cnkuZmluZEluc3RhbmNlSW5m
byh0aGlzKTsKLQotICAgICAgICBpZiAoaW5zdGFuY2UpIHsKLSAgICAgICAgICBpbnN0YW5jZS5y
ZW1vdmVCaW5kKGV2ZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vcmVtb3ZlIGZyb20gZ2xv
YmFsIGV2ZW50IHJlZ2lzdHJ5Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBlOyBlID0gcmVnaXN0
cnkuZXZlbnRzW2ldOyBpKyspIHsKLSAgICAgICAgICBpZiAobWF0Y2hFdmVudChlLCBldmVudCkp
IHsKLSAgICAgICAgICAgIHJlZ2lzdHJ5LmV2ZW50cy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICB9OwotCi0gICAgICAvLyBkZWJ1ZyB0b29scyBtYXkgd2FudCB0
byBhZGQgYWR2aWNlIHRvIHRyaWdnZXIKLSAgICAgIHJlZ2lzdHJ5LnRyaWdnZXIgPSBmdW5jdGlv
bigpIHt9OwotCi0gICAgICB0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJl
Z2lzdHJ5LnJlbW92ZUluc3RhbmNlKHRoaXMpOwotICAgICAgfTsKLQotICAgICAgdGhpcy53aXRo
UmVnaXN0cmF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxp
emUnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICByZWdpc3RyeS5hZGRJbnN0YW5jZSh0aGlzKTsK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5hcm91bmQoJ29uJywgcmVnaXN0cnkub24pOwot
ICAgICAgICB0aGlzLmFmdGVyKCdvZmYnLCByZWdpc3RyeS5vZmYpOwotICAgICAgICAvL2RlYnVn
IHRvb2xzIG1heSB3YW50IHRvIGFkZCBhZHZpY2UgdG8gdHJpZ2dlcgotICAgICAgICB3aW5kb3cu
REVCVUcgJiYgREVCVUcuZW5hYmxlZCAmJiB0aGlzLmFmdGVyKCd0cmlnZ2VyJywgcmVnaXN0cnku
dHJpZ2dlcik7Ci0gICAgICAgIHRoaXMuYWZ0ZXIoJ3RlYXJkb3duJywge29iajogcmVnaXN0cnks
IGZuTmFtZTogJ3RlYXJkb3duJ30pOwotICAgICAgfTsKLQotICAgIH0KLQotICAgIHJldHVybiBu
ZXcgUmVnaXN0cnk7Ci0gIH0KLSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2Vy
X2NvbXBvbmVudHMvZmxpZ2h0L2xpYi91dGlscy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJf
Y29tcG9uZW50cy9mbGlnaHQvbGliL3V0aWxzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ZmYwNGQ1OTBkZjg5Nzc0NzMyYTc2MzQ2Yjg1NzYzN2U1YTY0NjE3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL3V0aWxzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjM1
ICswLDAgQEAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ly8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCi0vLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlU
IExpY2Vuc2UKLS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKLS8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1kZWZpbmUoCi0KLSAgW10s
Ci0KLSAgZnVuY3Rpb24oKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgdmFyIGFycnkgPSBb
XTsKLSAgICB2YXIgREVGQVVMVF9JTlRFUlZBTCA9IDEwMDsKLQotICAgIHZhciB1dGlscyA9IHsK
LQotICAgICAgaXNEb21PYmo6IGZ1bmN0aW9uKG9iaikgewotICAgICAgICByZXR1cm4gISEob2Jq
Lm5vZGVUeXBlIHx8IChvYmogPT09IHdpbmRvdykpOwotICAgICAgfSwKLQotICAgICAgdG9BcnJh
eTogZnVuY3Rpb24ob2JqLCBmcm9tKSB7Ci0gICAgICAgIHJldHVybiBhcnJ5LnNsaWNlLmNhbGwo
b2JqLCBmcm9tKTsKLSAgICAgIH0sCi0KLSAgICAgIC8vIHJldHVybnMgbmV3IG9iamVjdCByZXBy
ZXNlbnRpbmcgbXVsdGlwbGUgb2JqZWN0cyBtZXJnZWQgdG9nZXRoZXIKLSAgICAgIC8vIG9wdGlv
bmFsIGZpbmFsIGFyZ3VtZW50IGlzIGJvb2xlYW4gd2hpY2ggc3BlY2lmaWVzIGlmIG1lcmdlIGlz
IHJlY3Vyc2l2ZQotICAgICAgLy8gb3JpZ2luYWwgb2JqZWN0cyBhcmUgdW5tb2RpZmllZAotICAg
ICAgLy8KLSAgICAgIC8vIHVzYWdlOgotICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6Nn07
Ci0gICAgICAvLyAgIHZhciBleHRyYSA9IHtiOjMsIGM6NH07Ci0gICAgICAvLyAgIG1lcmdlKGJh
c2UsIGV4dHJhKTsgLy97YToyLCBiOjMsIGM6NH0KLSAgICAgIC8vICAgYmFzZTsgLy97YToyLCBi
OjZ9Ci0gICAgICAvLwotICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6Nn07Ci0gICAgICAv
LyAgIHZhciBleHRyYSA9IHtiOjMsIGM6NH07Ci0gICAgICAvLyAgIHZhciBleHRyYUV4dHJhID0g
e2E6NCwgZDo5fTsKLSAgICAgIC8vICAgbWVyZ2UoYmFzZSwgZXh0cmEsIGV4dHJhRXh0cmEpOyAv
L3thOjQsIGI6MywgYzo0LiBkOiA5fQotICAgICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Nn0KLSAg
ICAgIC8vCi0gICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjp7YmI6NCwgY2M6NX19OwotICAg
ICAgLy8gICB2YXIgZXh0cmEgPSB7YTo0LCBiOntjYzo3LCBkZDoxfX07Ci0gICAgICAvLyAgIG1l
cmdlKGJhc2UsIGV4dHJhLCB0cnVlKTsgLy97YTo0LCBiOntiYjo0LCBjYzo3LCBkZDoxfX0KLSAg
ICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9Ci0KLSAgICAgIG1lcmdlOiBmdW5jdGlvbigvKm9i
ajEsIG9iajIsLi4uLmRlZXBDb3B5Ki8pIHsKLSAgICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50
cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgotICAgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5s
ZW5ndGgsCi0gICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgIGFyZ3MgPSBuZXcgQXJyYXko
bCArIDEpOwotICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykgYXJnc1tpICsgMV0gPSBhcmd1bWVu
dHNbaV07Ci0KLSAgICAgICAgaWYgKGwgPT09IDApIHsKLSAgICAgICAgICByZXR1cm4ge307Ci0g
ICAgICAgIH0KLQotICAgICAgICAvL3N0YXJ0IHdpdGggZW1wdHkgb2JqZWN0IHNvIGEgY29weSBp
cyBjcmVhdGVkCi0gICAgICAgIGFyZ3NbMF0gPSB7fTsKLQotICAgICAgICBpZiAoYXJnc1thcmdz
Lmxlbmd0aCAtIDFdID09PSB0cnVlKSB7Ci0gICAgICAgICAgLy9qcXVlcnkgZXh0ZW5kIHJlcXVp
cmVzIGRlZXAgY29weSBhcyBmaXJzdCBhcmcKLSAgICAgICAgICBhcmdzLnBvcCgpOwotICAgICAg
ICAgIGFyZ3MudW5zaGlmdCh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAkLmV4
dGVuZC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOwotICAgICAgfSwKLQotICAgICAgLy8gdXBkYXRl
cyBiYXNlIGluIHBsYWNlIGJ5IGNvcHlpbmcgcHJvcGVydGllcyBvZiBleHRyYSB0byBpdAotICAg
ICAgLy8gb3B0aW9uYWxseSBjbG9iYmVyIHByb3RlY3RlZAotICAgICAgLy8gdXNhZ2U6Ci0gICAg
ICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2fTsKLSAgICAgIC8vICAgdmFyIGV4dHJhID0ge2M6
NH07Ci0gICAgICAvLyAgIHB1c2goYmFzZSwgZXh0cmEpOyAvL3thOjIsIGI6NiwgYzo0fQotICAg
ICAgLy8gICBiYXNlOyAvL3thOjIsIGI6NiwgYzo0fQotICAgICAgLy8KLSAgICAgIC8vICAgdmFy
IGJhc2UgPSB7YToyLCBiOjZ9OwotICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YjogNCBjOjR9Owot
ICAgICAgLy8gICBwdXNoKGJhc2UsIGV4dHJhLCB0cnVlKTsgLy9FcnJvciAoInV0aWxzLnB1c2gg
YXR0ZW1wdGVkIHRvIG92ZXJ3cml0ZSAnYicgd2hpbGUgcnVubmluZyBpbiBwcm90ZWN0ZWQgbW9k
ZSIpCi0gICAgICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2fQotICAgICAgLy8KLSAgICAgIC8vIG9i
amVjdHMgd2l0aCB0aGUgc2FtZSBrZXkgd2lsbCBtZXJnZSByZWN1cnNpdmVseSB3aGVuIHByb3Rl
Y3QgaXMgZmFsc2UKLSAgICAgIC8vIGVnOgotICAgICAgLy8gdmFyIGJhc2UgPSB7YToxNiwgYjp7
YmI6NCwgY2M6MTB9fTsKLSAgICAgIC8vIHZhciBleHRyYSA9IHtiOntjYzoyNSwgZGQ6MTl9LCBj
OjV9OwotICAgICAgLy8gcHVzaChiYXNlLCBleHRyYSk7IC8ve2E6MTYsIHtiYjo0LCBjYzoyNSwg
ZGQ6MTl9LCBjOjV9Ci0gICAgICAvLwotICAgICAgcHVzaDogZnVuY3Rpb24oYmFzZSwgZXh0cmEs
IHByb3RlY3QpIHsKLSAgICAgICAgaWYgKGJhc2UpIHsKLSAgICAgICAgICBPYmplY3Qua2V5cyhl
eHRyYSB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICAgIGlmIChiYXNl
W2tleV0gJiYgcHJvdGVjdCkgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3V0aWxz
LnB1c2ggYXR0ZW1wdGVkIHRvIG92ZXJ3cml0ZSAiJyArIGtleSArICciIHdoaWxlIHJ1bm5pbmcg
aW4gcHJvdGVjdGVkIG1vZGUnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR5
cGVvZiBiYXNlW2tleV0gPT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4dHJhW2tleV0gPT0gJ29iamVj
dCcpIHsKLSAgICAgICAgICAgICAgLy8gcmVjdXJzZQotICAgICAgICAgICAgICB0aGlzLnB1c2go
YmFzZVtrZXldLCBleHRyYVtrZXldKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgIC8vIG5vIHByb3RlY3QsIHNvIGV4dHJhIHdpbnMKLSAgICAgICAgICAgICAgYmFzZVtrZXld
ID0gZXh0cmFba2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBiYXNlOwotICAgICAgfSwKLQotICAgICAgaXNFbnVtZXJh
YmxlOiBmdW5jdGlvbihvYmosIHByb3BlcnR5KSB7Ci0gICAgICAgIHJldHVybiBPYmplY3Qua2V5
cyhvYmopLmluZGV4T2YocHJvcGVydHkpID4gLTE7Ci0gICAgICB9LAotCi0gICAgICAvLyBidWls
ZCBhIGZ1bmN0aW9uIGZyb20gb3RoZXIgZnVuY3Rpb24ocykKLSAgICAgIC8vIHV0aWxzLmNvbXBv
c2UoYSxiLGMpIC0+IGEoYihjKCkpKTsKLSAgICAgIC8vIGltcGxlbWVudGF0aW9uIGxpZnRlZCBm
cm9tIHVuZGVyc2NvcmUuanMgKGMpIDIwMDktMjAxMiBKZXJlbXkgQXNoa2VuYXMKLSAgICAgIGNv
bXBvc2U6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgZnVuY3MgPSBhcmd1bWVudHM7Ci0KLSAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRz
OwotCi0gICAgICAgICAgZm9yICh2YXIgaSA9IGZ1bmNzLmxlbmd0aC0xOyBpID49IDA7IGktLSkg
ewotICAgICAgICAgICAgYXJncyA9IFtmdW5jc1tpXS5hcHBseSh0aGlzLCBhcmdzKV07Ci0gICAg
ICAgICAgfQotCi0gICAgICAgICAgcmV0dXJuIGFyZ3NbMF07Ci0gICAgICAgIH07Ci0gICAgICB9
LAotCi0gICAgICAvLyBDYW4gb25seSB1bmlxdWUgYXJyYXlzIG9mIGhvbW9nZW5lb3VzIHByaW1p
dGl2ZXMsIGUuZy4gYW4gYXJyYXkgb2Ygb25seSBzdHJpbmdzLCBhbiBhcnJheSBvZiBvbmx5IGJv
b2xlYW5zLCBvciBhbiBhcnJheSBvZiBvbmx5IG51bWVyaWNzCi0gICAgICB1bmlxdWVBcnJheTog
ZnVuY3Rpb24oYXJyYXkpIHsKLSAgICAgICAgdmFyIHUgPSB7fSwgYSA9IFtdOwotCi0gICAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAg
ICAgaWYgKHUuaGFzT3duUHJvcGVydHkoYXJyYXlbaV0pKSB7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBhLnB1c2goYXJyYXlbaV0pOwotICAgICAgICAg
IHVbYXJyYXlbaV1dID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBhOwotICAgICAg
fSwKLQotICAgICAgZGVib3VuY2U6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkgewot
ICAgICAgICBpZiAodHlwZW9mIHdhaXQgIT0gJ251bWJlcicpIHsKLSAgICAgICAgICB3YWl0ID0g
REVGQVVMVF9JTlRFUlZBTDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0aW1lb3V0LCByZXN1
bHQ7Ci0KLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHZhciBjb250ZXh0
ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsKLSAgICAgICAgICB2YXIgbGF0ZXIgPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsOwotICAgICAgICAgICAgaWYgKCFpbW1l
ZGlhdGUpIHsKLSAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdz
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9OwotICAgICAgICAgIHZhciBjYWxsTm93ID0g
aW1tZWRpYXRlICYmICF0aW1lb3V0OwotCi0gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQp
OwotICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTsKLQotICAgICAg
ICAgIGlmIChjYWxsTm93KSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRl
eHQsIGFyZ3MpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH07Ci0gICAgICB9LAotCi0gICAgICB0aHJvdHRsZTogZnVuY3Rpb24oZnVuYywgd2FpdCkg
ewotICAgICAgICBpZiAodHlwZW9mIHdhaXQgIT0gJ251bWJlcicpIHsKLSAgICAgICAgICB3YWl0
ID0gREVGQVVMVF9JTlRFUlZBTDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjb250ZXh0LCBh
cmdzLCB0aW1lb3V0LCB0aHJvdHRsaW5nLCBtb3JlLCByZXN1bHQ7Ci0gICAgICAgIHZhciB3aGVu
RG9uZSA9IHRoaXMuZGVib3VuY2UoZnVuY3Rpb24oKXsKLSAgICAgICAgICBtb3JlID0gdGhyb3R0
bGluZyA9IGZhbHNlOwotICAgICAgICB9LCB3YWl0KTsKLQotICAgICAgICByZXR1cm4gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgY29udGV4dCA9IHRoaXM7IGFyZ3MgPSBhcmd1bWVudHM7Ci0gICAg
ICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aW1lb3V0ID0gbnVs
bDsKLSAgICAgICAgICAgIGlmIChtb3JlKSB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMu
YXBwbHkoY29udGV4dCwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGVuRG9u
ZSgpOwotICAgICAgICAgIH07Ci0KLSAgICAgICAgICBpZiAoIXRpbWVvdXQpIHsKLSAgICAgICAg
ICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTsKLSAgICAgICAgICB9Ci0KLSAg
ICAgICAgICBpZiAodGhyb3R0bGluZykgewotICAgICAgICAgICAgbW9yZSA9IHRydWU7Ci0gICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm90dGxpbmcgPSB0cnVlOwotICAgICAgICAg
ICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKLSAgICAgICAgICB9Ci0KLSAg
ICAgICAgICB3aGVuRG9uZSgpOwotICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH07
Ci0gICAgICB9LAotCi0gICAgICBjb3VudFRoZW46IGZ1bmN0aW9uKG51bSwgYmFzZSkgewotICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgaWYgKCEtLW51bSkgeyByZXR1cm4g
YmFzZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9Ci0gICAgICAgIH07Ci0gICAgICB9LAotCi0g
ICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24ocnVsZXMpIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KGUsIGRhdGEpIHsKLSAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChlLnRhcmdldCksIHBhcmVudDsK
LQotICAgICAgICAgIE9iamVjdC5rZXlzKHJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHNlbGVjdG9y
KSB7Ci0gICAgICAgICAgICBpZiAoKHBhcmVudCA9IHRhcmdldC5jbG9zZXN0KHNlbGVjdG9yKSku
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHt9OwotICAgICAgICAgICAg
ICBkYXRhLmVsID0gcGFyZW50WzBdOwotICAgICAgICAgICAgICByZXR1cm4gcnVsZXNbc2VsZWN0
b3JdLmFwcGx5KHRoaXMsIFtlLCBkYXRhXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwg
dGhpcyk7Ci0gICAgICAgIH07Ci0gICAgICB9Ci0KLSAgICB9OwotCi0gICAgcmV0dXJuIHV0aWxz
OwotICB9Ci0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRz
L2pxdWVyeS9qcXVlcnkuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvanF1
ZXJ5L2pxdWVyeS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQzMTg1MTllODhk
YTYxNmQzODFhZWIxYzE2MDUyZTYyODFiYWQ0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvanF1
ZXJ5L2pxdWVyeS5qcworKysgL2Rldi9udWxsCkBAIC0xLDk0NzIgKzAsMCBAQAotLyohCi0gKiBq
UXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYxLjguMwotICogaHR0cDovL2pxdWVyeS5jb20vCi0g
KgotICogSW5jbHVkZXMgU2l6emxlLmpzCi0gKiBodHRwOi8vc2l6emxlanMuY29tLwotICoKLSAq
IENvcHlyaWdodCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMK
LSAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQotICogaHR0cDovL2pxdWVyeS5vcmcv
bGljZW5zZQotICoKLSAqIERhdGU6IFR1ZSBOb3YgMTMgMjAxMiAwODoyMDozMyBHTVQtMDUwMCAo
RWFzdGVybiBTdGFuZGFyZCBUaW1lKQotICovCi0oZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVk
ICkgewotdmFyCi0gICAgICAgIC8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1
ZXJ5KGRvY3VtZW50KQotICAgICAgICByb290alF1ZXJ5LAotCi0gICAgICAgIC8vIFRoZSBkZWZl
cnJlZCB1c2VkIG9uIERPTSByZWFkeQotICAgICAgICByZWFkeUxpc3QsCi0KLSAgICAgICAgLy8g
VXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdpdGggd2luZG93IGFyZ3VtZW50
IChzYW5kYm94KQotICAgICAgICBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCwKLSAgICAgICAg
bG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24sCi0gICAgICAgIG5hdmlnYXRvciA9IHdpbmRvdy5u
YXZpZ2F0b3IsCi0KLSAgICAgICAgLy8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3Zlcndy
aXRlCi0gICAgICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAotCi0gICAgICAgIC8vIE1hcCBv
dmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlCi0gICAgICAgIF8kID0gd2luZG93LiQsCi0K
LSAgICAgICAgLy8gU2F2ZSBhIHJlZmVyZW5jZSB0byBzb21lIGNvcmUgbWV0aG9kcwotICAgICAg
ICBjb3JlX3B1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaCwKLSAgICAgICAgY29yZV9zbGljZSA9
IEFycmF5LnByb3RvdHlwZS5zbGljZSwKLSAgICAgICAgY29yZV9pbmRleE9mID0gQXJyYXkucHJv
dG90eXBlLmluZGV4T2YsCi0gICAgICAgIGNvcmVfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nLAotICAgICAgICBjb3JlX2hhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3du
UHJvcGVydHksCi0gICAgICAgIGNvcmVfdHJpbSA9IFN0cmluZy5wcm90b3R5cGUudHJpbSwKLQot
ICAgICAgICAvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQotICAgICAgICBqUXVlcnkg
PSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhl
IGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5o
YW5jZWQnCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0
b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBVc2Vk
IGZvciBtYXRjaGluZyBudW1iZXJzCi0gICAgICAgIGNvcmVfcG51bSA9IC9bXC0rXT8oPzpcZCpc
LnwpXGQrKD86W2VFXVtcLStdP1xkK3wpLy5zb3VyY2UsCi0KLSAgICAgICAgLy8gVXNlZCBmb3Ig
ZGV0ZWN0aW5nIGFuZCB0cmltbWluZyB3aGl0ZXNwYWNlCi0gICAgICAgIGNvcmVfcm5vdHdoaXRl
ID0gL1xTLywKLSAgICAgICAgY29yZV9yc3BhY2UgPSAvXHMrLywKLQotICAgICAgICAvLyBNYWtl
IHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1AgKGhlcmUncyBsb29raW5nIGF0IHlvdSwgU2FmYXJp
IDUuMCBhbmQgSUUpCi0gICAgICAgIHJ0cmltID0gL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZG
XHhBMF0rJC9nLAotCi0gICAgICAgIC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBz
dHJpbmdzCi0gICAgICAgIC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNT
IHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSkKLSAgICAgICAgcnF1aWNrRXhwciA9IC9eKD86W14j
PF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLywKLQotICAgICAgICAvLyBNYXRjaCBh
IHN0YW5kYWxvbmUgdGFnCi0gICAgICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4oPzo8
XC9cMT58KSQvLAotCi0gICAgICAgIC8vIEpTT04gUmVnRXhwCi0gICAgICAgIHJ2YWxpZGNoYXJz
ID0gL15bXF0sOnt9XHNdKiQvLAotICAgICAgICBydmFsaWRicmFjZXMgPSAvKD86Xnw6fCwpKD86
XHMqXFspKy9nLAotICAgICAgICBydmFsaWRlc2NhcGUgPSAvXFwoPzpbIlxcXC9iZm5ydF18dVtc
ZGEtZkEtRl17NH0pL2csCi0gICAgICAgIHJ2YWxpZHRva2VucyA9IC8iW14iXFxcclxuXSoifHRy
dWV8ZmFsc2V8bnVsbHwtPyg/OlxkXGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS9nLAotCi0g
ICAgICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZwotICAgICAgICBy
bXNQcmVmaXggPSAvXi1tcy0vLAotICAgICAgICByZGFzaEFscGhhID0gLy0oW1xkYS16XSkvZ2ks
Ci0KLSAgICAgICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJl
cGxhY2UoKQotICAgICAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkgewot
ICAgICAgICAgICAgICAgIHJldHVybiAoIGxldHRlciArICIiICkudG9VcHBlckNhc2UoKTsKLSAg
ICAgICAgfSwKLQotICAgICAgICAvLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBj
bGVhbnVwIG1ldGhvZAotICAgICAgICBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRl
bnRMb2FkZWQiLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LnJlYWR5KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZG9jdW1l
bnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdlJ3JlIGhlcmUgYmVjYXVzZSByZWFkeVN0YXRlID09PSAiY29tcGxldGUiIGluIG9sZElF
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBnb29kIGVub3VnaCBmb3IgdXMg
dG8gY2FsbCB0aGUgZG9tIHJlYWR5IQotICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQu
ZGV0YWNoRXZlbnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVkICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHkoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gW1tDbGFzc11dIC0+IHR5cGUgcGFpcnMKLSAgICAg
ICAgY2xhc3MydHlwZSA9IHt9OwotCi1qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewot
ICAgICAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LAotICAgICAgICBpbml0OiBmdW5jdGlvbiggc2Vs
ZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGNo
LCBlbGVtLCByZXQsIGRvYzsKLQotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSAkKCIiKSwgJChu
dWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKQotICAgICAgICAgICAgICAgIGlmICggIXNlbGVj
dG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gSGFuZGxlICQoRE9NRWxlbWVudCkKLSAgICAg
ICAgICAgICAgICBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jb250ZXh0ID0gdGhpc1swXSA9IHNlbGVjdG9yOwotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5sZW5ndGggPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIEhU
TUwgc3RyaW5ncwotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3Ry
aW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZWN0b3IuY2hhckF0KDAp
ID09PSAiPCIgJiYgc2VsZWN0b3IuY2hhckF0KCBzZWxlY3Rvci5sZW5ndGggLSAxICkgPT09ICI+
IiAmJiBzZWxlY3Rvci5sZW5ndGggPj0gMyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBh
cmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3Vy
ZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hdGNoICYmIChtYXRjaFsxXSB8fCAhY29udGV4dCkgKSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2Vv
ZiBqUXVlcnkgPyBjb250ZXh0WzBdIDogY29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb2MgPSAoIGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNv
bnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQgKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFj
ay1jb21wYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rv
ciA9IGpRdWVyeS5wYXJzZUhUTUwoIG1hdGNoWzFdLCBkb2MsIHRydWUgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hb
MV0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyLmNhbGwoIHNlbGVj
dG9yLCBjb250ZXh0LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBIQU5ETEU6ICQoI2lkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbMl0gKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2gg
d2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAj
Njk2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSAm
JiBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVy
biBpdGVtcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgIT09IG1hdGNoWzJdICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9v
dGpRdWVyeS5maW5kKCBzZWxlY3RvciApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGluamVjdCB0aGUgZWxlbWVudCBkaXJlY3Rs
eSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWzBdID0gZWxlbTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFO
RExFOiAkKGV4cHIsICQoLi4uKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
ICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKCBjb250ZXh0IHx8IHJvb3RqUXVlcnkgKS5maW5kKCBzZWxlY3RvciAp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86
ICQoY29udGV4dCkuZmluZChleHByKQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3Io
IGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQotICAgICAgICAgICAgICAg
IC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeQotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJvb3RqUXVlcnkucmVhZHkoIHNlbGVjdG9yICk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZp
bmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9y
LnNlbGVjdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gc2VsZWN0
b3IuY29udGV4dDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTsKLSAgICAgICAgfSwKLQotICAgICAg
ICAvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yCi0gICAgICAgIHNlbGVjdG9yOiAiIiwK
LQotICAgICAgICAvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkCi0g
ICAgICAgIGpxdWVyeTogIjEuOC4zIiwKLQotICAgICAgICAvLyBUaGUgZGVmYXVsdCBsZW5ndGgg
b2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKLSAgICAgICAgbGVuZ3RoOiAwLAotCi0gICAgICAgIC8v
IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQg
c2V0Ci0gICAgICAgIHNpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmxlbmd0aDsKLSAgICAgICAgfSwKLQotICAgICAgICB0b0FycmF5OiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gY29yZV9zbGljZS5jYWxsKCB0aGlzICk7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgLy8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVt
ZW50IHNldCBPUgotICAgICAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQg
YXMgYSBjbGVhbiBhcnJheQotICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIG51bSA9PSBudWxsID8KLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50
b0FycmF5KCkgOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4ganVzdCB0aGUg
b2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAoIG51bSA8IDAgPyB0aGlzWyB0aGlzLmxl
bmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBU
YWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrCi0gICAg
ICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQotICAgICAgICBw
dXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcywgbmFtZSwgc2VsZWN0b3IgKSB7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAotICAgICAg
ICAgICAgICAgIHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxl
bXMgKTsKLQotICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBz
dGFjayAoYXMgYSByZWZlcmVuY2UpCi0gICAgICAgICAgICAgICAgcmV0LnByZXZPYmplY3QgPSB0
aGlzOwotCi0gICAgICAgICAgICAgICAgcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIG5hbWUgPT09ICJmaW5kIiApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAoIHRoaXMuc2VsZWN0b3IgPyAi
ICIgOiAiIiApICsgc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbmFtZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3Ig
KyAiLiIgKyBuYW1lICsgIigiICsgc2VsZWN0b3IgKyAiKSI7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXQK
LSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9LAotCi0gICAgICAgIC8vIEV4
ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuCi0g
ICAgICAgIC8vIChZb3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5IG9mIGFy
Z3MsIGJ1dCB0aGlzIGlzCi0gICAgICAgIC8vIG9ubHkgdXNlZCBpbnRlcm5hbGx5LikKLSAgICAg
ICAgZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrLCBhcmdzICkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFyZ3MgKTsKLSAgICAgICAgfSwKLQot
ICAgICAgICByZWFkeTogZnVuY3Rpb24oIGZuICkgewotICAgICAgICAgICAgICAgIC8vIEFkZCB0
aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHkucHJvbWlzZSgpLmRvbmUo
IGZuICk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAg
ICAgICBlcTogZnVuY3Rpb24oIGkgKSB7Ci0gICAgICAgICAgICAgICAgaSA9ICtpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBpID09PSAtMSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnNsaWNlKCBpICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGljZSggaSwgaSAr
IDEgKTsKLSAgICAgICAgfSwKLQotICAgICAgICBmaXJzdDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZXEoIDAgKTsKLSAgICAgICAgfSwKLQotICAgICAgICBsYXN0
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcSggLTEgKTsKLSAg
ICAgICAgfSwKLQotICAgICAgICBzbGljZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBjb3JlX3NsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMg
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSIsIGNvcmVfc2xpY2UuY2FsbChhcmd1
bWVudHMpLmpvaW4oIiwiKSApOwotICAgICAgICB9LAotCi0gICAgICAgIG1hcDogZnVuY3Rpb24o
IGNhbGxiYWNrICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1
ZXJ5Lm1hcCh0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7Ci0gICAgICAgICAgICAg
ICAgfSkpOwotICAgICAgICB9LAotCi0gICAgICAgIGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKG51bGwp
OwotICAgICAgICB9LAotCi0gICAgICAgIC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAgICAg
ICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBt
ZXRob2QuCi0gICAgICAgIHB1c2g6IGNvcmVfcHVzaCwKLSAgICAgICAgc29ydDogW10uc29ydCwK
LSAgICAgICAgc3BsaWNlOiBbXS5zcGxpY2UKLX07Ci0KLS8vIEdpdmUgdGhlIGluaXQgZnVuY3Rp
b24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb24KLWpRdWVyeS5m
bi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKLQotalF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5m
bi5leHRlbmQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIG9wdGlvbnMsIG5hbWUsIHNyYywg
Y29weSwgY29weUlzQXJyYXksIGNsb25lLAotICAgICAgICAgICAgICAgIHRhcmdldCA9IGFyZ3Vt
ZW50c1swXSB8fCB7fSwKLSAgICAgICAgICAgICAgICBpID0gMSwKLSAgICAgICAgICAgICAgICBs
ZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLAotICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsK
LQotICAgICAgICAvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uCi0gICAgICAgIGlmICgg
dHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgewotICAgICAgICAgICAgICAgIGRlZXAgPSB0
YXJnZXQ7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OwotICAg
ICAgICAgICAgICAgIC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKLSAgICAgICAg
ICAgICAgICBpID0gMjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4g
dGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KQot
ICAgICAgICBpZiAoIHR5cGVvZiB0YXJnZXQgIT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5j
dGlvbih0YXJnZXQpICkgewotICAgICAgICAgICAgICAgIHRhcmdldCA9IHt9OwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQg
aXMgcGFzc2VkCi0gICAgICAgIGlmICggbGVuZ3RoID09PSBpICkgewotICAgICAgICAgICAgICAg
IHRhcmdldCA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgLS1pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSBk
ZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlcwotICAgICAgICAgICAgICAgIGlmICgg
KG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkgIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjID0gdGFyZ2V0WyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvcHkgPSBvcHRpb25zWyBuYW1lIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRhcmdldCA9PT0gY29weSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2UgaWYgd2Un
cmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5cwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KGNv
cHkpIHx8IChjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KGNvcHkpKSApICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29weUlzQXJyYXkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5SXNBcnJh
eSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVy
eS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5l
eHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0WyBuYW1lIF0gPSBjb3B5
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJu
IHRoZSBtb2RpZmllZCBvYmplY3QKLSAgICAgICAgcmV0dXJuIHRhcmdldDsKLX07Ci0KLWpRdWVy
eS5leHRlbmQoewotICAgICAgICBub0NvbmZsaWN0OiBmdW5jdGlvbiggZGVlcCApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB3aW5kb3cuJCA9IF8kOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5OwotICAgICAgICB9LAotCi0gICAgICAg
IC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1
cnMuCi0gICAgICAgIGlzUmVhZHk6IGZhbHNlLAotCi0gICAgICAgIC8vIEEgY291bnRlciB0byB0
cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKLSAgICAgICAgLy8gdGhlIHJl
YWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODEKLSAgICAgICAgcmVhZHlXYWl0OiAxLAotCi0gICAg
ICAgIC8vIEhvbGQgKG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVudAotICAgICAgICBob2xkUmVh
ZHk6IGZ1bmN0aW9uKCBob2xkICkgewotICAgICAgICAgICAgICAgIGlmICggaG9sZCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeVdhaXQrKzsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCB0cnVlICk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIC8vIEhhbmRsZSB3aGVu
IHRoZSBET00gaXMgcmVhZHkKLSAgICAgICAgcmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkgewotCi0g
ICAgICAgICAgICAgICAgLy8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2Un
cmUgYWxyZWFkeSByZWFkeQotICAgICAgICAgICAgICAgIGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0t
alF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSBib2R5IGV4aXN0cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBv
dmVyemVhbG91cyAodGlja2V0ICM1NDQzKS4KLSAgICAgICAgICAgICAgICBpZiAoICFkb2N1bWVu
dC5ib2R5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGpR
dWVyeS5yZWFkeSwgMSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeQotICAgICAgICAgICAgICAgIGpRdWVyeS5p
c1JlYWR5ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIGEgbm9ybWFsIERPTSBSZWFk
eSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlCi0gICAgICAgICAg
ICAgICAgaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZQot
ICAgICAgICAgICAgICAgIHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5
IF0gKTsKLQotICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50
cwotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmZuLnRyaWdnZXIgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlcigicmVhZHkiKS5vZmYoInJl
YWR5Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIC8vIFNlZSB0
ZXN0L3VuaXQvY29yZS5qcyBmb3IgZGV0YWlscyBjb25jZXJuaW5nIGlzRnVuY3Rpb24uCi0gICAg
ICAgIC8vIFNpbmNlIHZlcnNpb24gMS4zLCBET00gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGxpa2Ug
YWxlcnQKLSAgICAgICAgLy8gYXJlbid0IHN1cHBvcnRlZC4gVGhleSByZXR1cm4gZmFsc2Ugb24g
SUUgKCMyOTY4KS4KLSAgICAgICAgaXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImZ1bmN0aW9uIjsKLSAgICAg
ICAgfSwKLQotICAgICAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKCBvYmog
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09ICJhcnJheSI7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PSBvYmoud2luZG93OwotICAg
ICAgICB9LAotCi0gICAgICAgIGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIWlzTmFOKCBwYXJzZUZsb2F0KG9iaikgKSAmJiBpc0Zpbml0ZSggb2Jq
ICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgdHlwZTogZnVuY3Rpb24oIG9iaiApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gb2JqID09IG51bGwgPwotICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nKCBvYmogKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczJ0eXBlWyBjb3Jl
X3RvU3RyaW5nLmNhbGwob2JqKSBdIHx8ICJvYmplY3QiOwotICAgICAgICB9LAotCi0gICAgICAg
IGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgLy8gTXVz
dCBiZSBhbiBPYmplY3QuCi0gICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxz
byBoYXZlIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHku
Ci0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgRE9NIG5vZGVzIGFuZCB3aW5kb3cg
b2JqZWN0cyBkb24ndCBwYXNzIHRocm91Z2gsIGFzIHdlbGwKLSAgICAgICAgICAgICAgICBpZiAo
ICFvYmogfHwgalF1ZXJ5LnR5cGUob2JqKSAhPT0gIm9iamVjdCIgfHwgb2JqLm5vZGVUeXBlIHx8
IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVz
dCBiZSBPYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2JqLmNvbnN0cnVjdG9y
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjb3JlX2hhc093bi5jYWxsKG9i
aiwgImNvbnN0cnVjdG9yIikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNv
cmVfaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2Yi
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUU4LDkgV2lsbCB0aHJvdyBleGNlcHRpb25zIG9u
IGNlcnRhaW4gaG9zdCBvYmplY3RzICM5ODk3Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gT3duIHBy
b3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsCi0gICAgICAg
ICAgICAgICAgLy8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBv
d24uCi0KLSAgICAgICAgICAgICAgICB2YXIga2V5OwotICAgICAgICAgICAgICAgIGZvciAoIGtl
eSBpbiBvYmogKSB7fQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVk
IHx8IGNvcmVfaGFzT3duLmNhbGwoIG9iaiwga2V5ICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgICAgICAgICB2YXIgbmFt
ZTsKLSAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCBt
c2cgKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKLSAgICAgICAg
fSwKLQotICAgICAgICAvLyBkYXRhOiBzdHJpbmcgb2YgaHRtbAotICAgICAgICAvLyBjb250ZXh0
IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBp
biB0aGlzIGNvbnRleHQsIGRlZmF1bHRzIHRvIGRvY3VtZW50Ci0gICAgICAgIC8vIHNjcmlwdHMg
KG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBo
dG1sIHN0cmluZwotICAgICAgICBwYXJzZUhUTUw6IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBz
Y3JpcHRzICkgewotICAgICAgICAgICAgICAgIHZhciBwYXJzZWQ7Ci0gICAgICAgICAgICAgICAg
aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gImJvb2xlYW4iICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyaXB0cyA9IGNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGV4dCA9IGNv
bnRleHQgfHwgZG9jdW1lbnQ7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaW5nbGUgdGFnCi0gICAg
ICAgICAgICAgICAgaWYgKCAocGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICkpICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBw
YXJzZWRbMV0gKSBdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHBhcnNl
ZCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyA/IG51
bGwgOiBbXSApOwotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgKHBhcnNlZC5jYWNoZWFibGUgPyBqUXVlcnkuY2xvbmUoIHBh
cnNlZC5mcmFnbWVudCApIDogcGFyc2VkLmZyYWdtZW50KS5jaGlsZE5vZGVzICk7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgcGFyc2VKU09OOiBmdW5jdGlvbiggZGF0YSApIHsKLSAgICAgICAgICAg
ICAgICBpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyByZW1v
dmVkIChJRSBjYW4ndCBoYW5kbGUgaXQpCi0gICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS50
cmltKCBkYXRhICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5n
IHRoZSBuYXRpdmUgSlNPTiBwYXJzZXIgZmlyc3QKLSAgICAgICAgICAgICAgICBpZiAoIHdpbmRv
dy5KU09OICYmIHdpbmRvdy5KU09OLnBhcnNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHdpbmRvdy5KU09OLnBhcnNlKCBkYXRhICk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNvbWluZyBkYXRhIGlzIGFjdHVhbCBK
U09OCi0gICAgICAgICAgICAgICAgLy8gTG9naWMgYm9ycm93ZWQgZnJvbSBodHRwOi8vanNvbi5v
cmcvanNvbjIuanMKLSAgICAgICAgICAgICAgICBpZiAoIHJ2YWxpZGNoYXJzLnRlc3QoIGRhdGEu
cmVwbGFjZSggcnZhbGlkZXNjYXBlLCAiQCIgKQotICAgICAgICAgICAgICAgICAgICAgICAgLnJl
cGxhY2UoIHJ2YWxpZHRva2VucywgIl0iICkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBs
YWNlKCBydmFsaWRicmFjZXMsICIiKSkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAoIG5ldyBGdW5jdGlvbiggInJldHVybiAiICsgZGF0YSApICkoKTsKLQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoICJJbnZhbGlkIEpTT046ICIg
KyBkYXRhICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFy
c2luZwotICAgICAgICBwYXJzZVhNTDogZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHhtbCwgdG1wOwotICAgICAgICAgICAgICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRh
dGEgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHdpbmRvdy5ET01QYXJzZXIgKSB7IC8vIFN0YW5kYXJkCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ldyBET01QYXJzZXIoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0gdG1wLnBhcnNlRnJvbVN0cmluZyggZGF0YSAs
ICJ0ZXh0L3htbCIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIElFCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IG5ldyBBY3RpdmVYT2JqZWN0KCAi
TWljcm9zb2Z0LlhNTERPTSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1s
LmFzeW5jID0gImZhbHNlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sLmxv
YWRYTUwoIGRhdGEgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGNhdGNoKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0gdW5kZWZpbmVk
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoICF4bWwgfHwgIXhtbC5k
b2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAicGFyc2VyZXJyb3Ii
ICkubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52
YWxpZCBYTUw6ICIgKyBkYXRhICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiB4bWw7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbm9vcDogZnVuY3Rpb24oKSB7fSwK
LQotICAgICAgICAvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dAotICAg
ICAgICAvLyBXb3JrYXJvdW5kcyBiYXNlZCBvbiBmaW5kaW5ncyBieSBKaW0gRHJpc2NvbGwKLSAg
ICAgICAgLy8gaHR0cDovL3dlYmxvZ3MuamF2YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZlLzIw
MDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1jb250ZXh0Ci0gICAgICAgIGdsb2JhbEV2
YWw6IGZ1bmN0aW9uKCBkYXRhICkgewotICAgICAgICAgICAgICAgIGlmICggZGF0YSAmJiBjb3Jl
X3Jub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBX
ZSB1c2UgZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgdXNlIGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMg
d2luZG93Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4g
RmlyZWZveAotICAgICAgICAgICAgICAgICAgICAgICAgKCB3aW5kb3cuZXhlY1NjcmlwdCB8fCBm
dW5jdGlvbiggZGF0YSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93
WyAiZXZhbCIgXS5jYWxsKCB3aW5kb3csIGRhdGEgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gKSggZGF0YSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICAv
LyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBt
b2R1bGVzCi0gICAgICAgIC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3Ig
cHJlZml4ICgjOTU3MikKLSAgICAgICAgY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCAibXMtIiAp
LnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKLSAgICAgICAgfSwKLQotICAgICAg
ICBub2RlTmFtZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1l
LnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gYXJncyBpcyBmb3IgaW50
ZXJuYWwgdXNhZ2Ugb25seQotICAgICAgICBlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjaywg
YXJncyApIHsKLSAgICAgICAgICAgICAgICB2YXIgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGkgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gb2JqLmxlbmd0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlzT2JqID0gbGVuZ3RoID09PSB1bmRlZmluZWQgfHwg
alF1ZXJ5LmlzRnVuY3Rpb24oIG9iaiApOwotCi0gICAgICAgICAgICAgICAgaWYgKCBhcmdzICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc09iaiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmogKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5hcHBseSggb2JqWyBuYW1lIF0s
IGFyZ3MgKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IDsgaSA8IGxlbmd0aDsgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjYWxsYmFjay5hcHBseSggb2JqWyBpKysgXSwgYXJncyApID09PSBmYWxzZSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24gdXNl
IG9mIGVhY2gKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBpc09iaiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
bmFtZSBpbiBvYmogKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIG5hbWUgXSwgbmFtZSwgb2JqWyBuYW1lIF0gKSA9PT0g
ZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0
aDsgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxs
YmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpKysgXSApID09PSBmYWxzZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBvYmo7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
Ly8gVXNlIG5hdGl2ZSBTdHJpbmcudHJpbSBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZQotICAg
ICAgICB0cmltOiBjb3JlX3RyaW0gJiYgIWNvcmVfdHJpbS5jYWxsKCJcdUZFRkZceEEwIikgPwot
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV90cmltLmNhbGwoIHRl
eHQgKTsKLSAgICAgICAgICAgICAgICB9IDoKLQotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSB1c2Ugb3VyIG93biB0cmltbWluZyBmdW5jdGlvbmFsaXR5Ci0gICAgICAgICAgICAgICAgZnVu
Y3Rpb24oIHRleHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dCA9PSBu
dWxsID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoIHRleHQgKyAiIiApLnJlcGxhY2UoIHJ0cmltLCAiIiApOwot
ICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwg
dXNhZ2Ugb25seQotICAgICAgICBtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQg
PSByZXN1bHRzIHx8IFtdOwotCi0gICAgICAgICAgICAgICAgaWYgKCBhcnIgIT0gbnVsbCApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB3aW5kb3csIHN0cmluZ3MgKGFuZCBmdW5j
dGlvbnMpIGFsc28gaGF2ZSAnbGVuZ3RoJwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHdl
YWtlZCBsb2dpYyBzbGlnaHRseSB0byBoYW5kbGUgQmxhY2tiZXJyeSA0LjcgUmVnRXhwIGlzc3Vl
cyAjNjkzMAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBhcnIg
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcnIubGVuZ3RoID09IG51bGwgfHwg
dHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlID09PSAicmVn
ZXhwIiB8fCBqUXVlcnkuaXNXaW5kb3coIGFyciApICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3JlX3B1c2guY2FsbCggcmV0LCBhcnIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5t
ZXJnZSggcmV0LCBhcnIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9LAotCi0gICAg
ICAgIGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGxlbjsKLQotICAgICAgICAgICAgICAgIGlmICggYXJyICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjb3JlX2luZGV4T2YgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjb3JlX2luZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IGFyci5s
ZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpID0gaSA/IGkgPCAwID8gTWF0aC5tYXgo
IDAsIGxlbiArIGkgKSA6IGkgOiAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7
IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tp
cCBhY2Nlc3NpbmcgaW4gc3BhcnNlIGFycmF5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGkgaW4gYXJyICYmIGFyclsgaSBdID09PSBlbGVtICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9LAotCi0gICAgICAg
IG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHsKLSAgICAgICAgICAgICAgICB2YXIg
bCA9IHNlY29uZC5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gZmlyc3QubGVu
Z3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDA7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIHR5cGVvZiBsID09PSAibnVtYmVyIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIDsgaiA8IGw7IGorKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly
c3RbIGkrKyBdID0gc2Vjb25kWyBqIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBz
ZWNvbmRbal0gIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqKysgXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmaXJzdC5sZW5ndGggPSBp
OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0OwotICAgICAgICB9LAotCi0gICAgICAg
IGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludiApIHsKLSAgICAgICAgICAgICAg
ICB2YXIgcmV0VmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gW10sCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9
IGVsZW1zLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBpbnYgPSAhIWludjsKLQotICAgICAgICAg
ICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKLSAg
ICAgICAgICAgICAgICAvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgotICAgICAg
ICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0VmFsID0gISFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpbnYgIT09IHJldFZhbCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnB1c2goIGVsZW1zWyBpIF0gKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owot
ICAgICAgICB9LAotCi0gICAgICAgIC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQot
ICAgICAgICBtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHsKLSAgICAgICAg
ICAgICAgICB2YXIgdmFsdWUsIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFtd
LAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBqcXVl
cnkgb2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlzQXJyYXkgPSBlbGVtcyBpbnN0YW5jZW9mIGpRdWVyeSB8fCBsZW5ndGggIT09IHVuZGVmaW5l
ZCAmJiB0eXBlb2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiAoICggbGVuZ3RoID4gMCAmJiBlbGVt
c1sgMCBdICYmIGVsZW1zWyBsZW5ndGggLTEgXSApIHx8IGxlbmd0aCA9PT0gMCB8fCBqUXVlcnku
aXNBcnJheSggZWxlbXMgKSApIDsKLQotICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggdGhl
IGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpcgotICAgICAgICAg
ICAgICAgIGlmICggaXNBcnJheSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsg
aSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCwKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgga2V5
IGluIGVsZW1zICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNh
bGxiYWNrKCBlbGVtc1sga2V5IF0sIGtleSwgYXJnICk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJy
YXlzCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtdLCByZXQgKTsK
LSAgICAgICAgfSwKLQotICAgICAgICAvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVj
dHMKLSAgICAgICAgZ3VpZDogMSwKLQotICAgICAgICAvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBj
b250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKLSAgICAgICAgLy8gYXJn
dW1lbnRzLgotICAgICAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgewotICAgICAg
ICAgICAgICAgIHZhciB0bXAsIGFyZ3MsIHByb3h5OwotCi0gICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgY29udGV4dCA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
bXAgPSBmblsgY29udGV4dCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGZu
OwotICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSB0bXA7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBp
cyBjYWxsYWJsZSwgaW4gdGhlIHNwZWMKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHRocm93cyBh
IFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLgotICAgICAgICAg
ICAgICAgIGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBTaW11bGF0ZWQgYmluZAotICAgICAgICAgICAgICAgIGFyZ3MgPSBjb3JlX3Ns
aWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOwotICAgICAgICAgICAgICAgIHByb3h5ID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQs
IGFyZ3MuY29uY2F0KCBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTsKLSAgICAgICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBo
YW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1v
dmVkCi0gICAgICAgICAgICAgICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpR
dWVyeS5ndWlkKys7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1
ZXMgb2YgYSBjb2xsZWN0aW9uCi0gICAgICAgIC8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5
IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgotICAgICAgICBhY2Nlc3M6IGZ1bmN0aW9u
KCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHBhc3MgKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGV4ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWxrID0g
a2V5ID09IG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIC8v
IFNldHMgbWFueSB2YWx1ZXMKLSAgICAgICAgICAgICAgICBpZiAoIGtleSAmJiB0eXBlb2Yga2V5
ID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4ga2V5
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYWNjZXNzKCBlbGVt
cywgZm4sIGksIGtleVtpXSwgMSwgZW1wdHlHZXQsIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFpbmFibGUgPSAxOwotCi0gICAg
ICAgICAgICAgICAgLy8gU2V0cyBvbmUgdmFsdWUKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0
aW9uYWxseSwgZnVuY3Rpb24gdmFsdWVzIGdldCBleGVjdXRlZCBpZiBleGVjIGlzIHRydWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGV4ZWMgPSBwYXNzID09PSB1bmRlZmluZWQgJiYgalF1ZXJ5
LmlzRnVuY3Rpb24oIHZhbHVlICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYnVs
ayApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVsayBvcGVyYXRpb25z
IG9ubHkgaXRlcmF0ZSB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBleGVjICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4ZWMgPSBmbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWMuY2Fs
bCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhl
cndpc2UgdGhleSBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZuID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGZuICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8
IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZuKCBlbGVtc1tpXSwga2V5LCBleGVjID8gdmFsdWUuY2FsbCggZWxlbXNbaV0sIGksIGZuKCBl
bGVtc1tpXSwga2V5ICkgKSA6IHZhbHVlLCBwYXNzICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhaW5hYmxlID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gY2hhaW5hYmxlID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zIDoK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0cwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnVsayA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuLmNhbGwoIGVsZW1z
ICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPyBmbiggZWxlbXNb
MF0sIGtleSApIDogZW1wdHlHZXQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbm93OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpOwot
ICAgICAgICB9Ci19KTsKLQotalF1ZXJ5LnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiggb2JqICkg
ewotICAgICAgICBpZiAoICFyZWFkeUxpc3QgKSB7Ci0KLSAgICAgICAgICAgICAgICByZWFkeUxp
c3QgPSBqUXVlcnkuRGVmZXJyZWQoKTsKLQotICAgICAgICAgICAgICAgIC8vIENhdGNoIGNhc2Vz
IHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkIGFmdGVyIHRoZSBicm93c2VyIGV2
ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgotICAgICAgICAgICAgICAgIC8vIHdlIG9uY2UgdHJp
ZWQgdG8gdXNlIHJlYWR5U3RhdGUgImludGVyYWN0aXZlIiBoZXJlLCBidXQgaXQgY2F1c2VkIGlz
c3VlcyBsaWtlIHRoZSBvbmUKLSAgICAgICAgICAgICAgICAvLyBkaXNjb3ZlcmVkIGJ5IENocmlz
UyBoZXJlOiBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjI4MiNjb21tZW50OjE1Ci0g
ICAgICAgICAgICAgICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRv
IGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKLQotICAgICAgICAg
ICAgICAgIC8vIFN0YW5kYXJkcy1iYXNlZCBicm93c2VycyBzdXBwb3J0IERPTUNvbnRlbnRMb2Fk
ZWQKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxs
YmFjawotICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigg
IkRPTUNvbnRlbnRMb2FkZWQiLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSApOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2ls
bCBhbHdheXMgd29yawotICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoICJsb2FkIiwgalF1ZXJ5LnJlYWR5LCBmYWxzZSApOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgSUUgZXZlbnQgbW9kZWwgaXMgdXNlZAotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgZmlyaW5nIGJlZm9yZSBvbmxvYWQsIG1h
eWJlIGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcwotICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBET01Db250ZW50
TG9hZGVkICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgZmFsbGJhY2sgdG8gd2lu
ZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCi0gICAgICAgICAgICAgICAgICAgICAg
ICB3aW5kb3cuYXR0YWNoRXZlbnQoICJvbmxvYWQiLCBqUXVlcnkucmVhZHkgKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgSUUgYW5kIG5vdCBhIGZyYW1lCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjb250aW51YWxseSBjaGVjayB0byBzZWUgaWYgdGhlIGRvY3VtZW50IGlz
IHJlYWR5Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wID0gZmFsc2U7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvcCA9IHdpbmRvdy5mcmFtZUVsZW1lbnQgPT0gbnVsbCAmJiBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdG9wICYmIHRvcC5kb1Njcm9sbCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGRvU2Nyb2xsQ2hlY2soKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzUmVhZHkgKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFVzZSB0aGUgdHJpY2sgYnkgRGllZ28gUGVyaW5pCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9qYXZhc2NyaXB0Lm53
Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5kb1Njcm9sbCgibGVmdCIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzZXRUaW1lb3V0KCBkb1Njcm9sbENoZWNrLCA1MCApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBmdW5jdGlv
bnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5yZWFkeSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlYWR5
TGlzdC5wcm9taXNlKCBvYmogKTsKLX07Ci0KLS8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1h
cAotalF1ZXJ5LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRl
IFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksIGZ1bmN0aW9uKGksIG5hbWUpIHsKLSAgICAgICAg
Y2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2Uo
KTsKLX0pOwotCi0vLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhl
c2UKLXJvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQpOwotLy8gU3RyaW5nIHRvIE9iamVjdCBv
cHRpb25zIGZvcm1hdCBjYWNoZQotdmFyIG9wdGlvbnNDYWNoZSA9IHt9OwotCi0vLyBDb252ZXJ0
IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQg
c3RvcmUgaW4gY2FjaGUKLWZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7Ci0gICAg
ICAgIHZhciBvYmplY3QgPSBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSA9IHt9OwotICAgICAgICBq
UXVlcnkuZWFjaCggb3B0aW9ucy5zcGxpdCggY29yZV9yc3BhY2UgKSwgZnVuY3Rpb24oIF8sIGZs
YWcgKSB7Ci0gICAgICAgICAgICAgICAgb2JqZWN0WyBmbGFnIF0gPSB0cnVlOwotICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIGNhbGxiYWNr
IGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgotICoKLSAqICAgICAgb3B0aW9u
czogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwg
Y2hhbmdlIGhvdwotICogICAgICAgICAgICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGxpc3QgYmVo
YXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdAotICoKLSAqIEJ5IGRlZmF1
bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBh
bmQgY2FuIGJlCi0gKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVzLgotICoKLSAqIFBvc3NpYmxlIG9w
dGlvbnM6Ci0gKgotICogICAgICBvbmNlOiAgICAgICAgICAgICAgICAgICB3aWxsIGVuc3VyZSB0
aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQp
Ci0gKgotICogICAgICBtZW1vcnk6ICAgICAgICAgICAgICAgICB3aWxsIGtlZXAgdHJhY2sgb2Yg
cHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkCi0gKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4g
ZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgIm1lbW9yaXplZCIKLSAqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZCkKLSAq
Ci0gKiAgICAgIHVuaXF1ZTogICAgICAgICAgICAgICAgIHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sg
Y2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQotICoKLSAq
ICAgICAgc3RvcE9uRmFsc2U6ICAgIGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sg
cmV0dXJucyBmYWxzZQotICoKLSAqLwotalF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRp
b25zICkgewotCi0gICAgICAgIC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0
ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWQKLSAgICAgICAgLy8gKHdlIGNoZWNrIGlu
IGNhY2hlIGZpcnN0KQotICAgICAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJp
bmciID8KLSAgICAgICAgICAgICAgICAoIG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0
ZU9wdGlvbnMoIG9wdGlvbnMgKSApIDoKLSAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5kKCB7
fSwgb3B0aW9ucyApOwotCi0gICAgICAgIHZhciAvLyBMYXN0IGZpcmUgdmFsdWUgKGZvciBub24t
Zm9yZ2V0dGFibGUgbGlzdHMpCi0gICAgICAgICAgICAgICAgbWVtb3J5LAotICAgICAgICAgICAg
ICAgIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkCi0gICAgICAgICAg
ICAgICAgZmlyZWQsCi0gICAgICAgICAgICAgICAgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMg
Y3VycmVudGx5IGZpcmluZwotICAgICAgICAgICAgICAgIGZpcmluZywKLSAgICAgICAgICAgICAg
ICAvLyBGaXJzdCBjYWxsYmFjayB0byBmaXJlICh1c2VkIGludGVybmFsbHkgYnkgYWRkIGFuZCBm
aXJlV2l0aCkKLSAgICAgICAgICAgICAgICBmaXJpbmdTdGFydCwKLSAgICAgICAgICAgICAgICAv
LyBFbmQgb2YgdGhlIGxvb3Agd2hlbiBmaXJpbmcKLSAgICAgICAgICAgICAgICBmaXJpbmdMZW5n
dGgsCi0gICAgICAgICAgICAgICAgLy8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFj
ayAobW9kaWZpZWQgYnkgcmVtb3ZlIGlmIG5lZWRlZCkKLSAgICAgICAgICAgICAgICBmaXJpbmdJ
bmRleCwKLSAgICAgICAgICAgICAgICAvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAotICAgICAgICAg
ICAgICAgIGxpc3QgPSBbXSwKLSAgICAgICAgICAgICAgICAvLyBTdGFjayBvZiBmaXJlIGNhbGxz
IGZvciByZXBlYXRhYmxlIGxpc3RzCi0gICAgICAgICAgICAgICAgc3RhY2sgPSAhb3B0aW9ucy5v
bmNlICYmIFtdLAotICAgICAgICAgICAgICAgIC8vIEZpcmUgY2FsbGJhY2tzCi0gICAgICAgICAg
ICAgICAgZmlyZSA9IGZ1bmN0aW9uKCBkYXRhICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
bWVtb3J5ID0gb3B0aW9ucy5tZW1vcnkgJiYgZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZpcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4ID0gZmly
aW5nU3RhcnQgfHwgMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ1N0YXJ0ID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZmlyaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIDsgbGlzdCAmJiBmaXJpbmdJbmRleCA8IGZpcmluZ0xlbmd0aDsgZmlyaW5nSW5k
ZXgrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXN0WyBmaXJp
bmdJbmRleCBdLmFwcGx5KCBkYXRhWyAwIF0sIGRhdGFbIDEgXSApID09PSBmYWxzZSAmJiBvcHRp
b25zLnN0b3BPbkZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1lbW9yeSA9IGZhbHNlOyAvLyBUbyBwcmV2ZW50IGZ1cnRoZXIgY2FsbHMgdXNpbmcgYWRk
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcmluZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBsaXN0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHN0YWNrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
c3RhY2subGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyZSggc3RhY2suc2hpZnQoKSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggbWVtb3J5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3QgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2FibGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgLy8gQWN0dWFsIENhbGxiYWNr
cyBvYmplY3QKLSAgICAgICAgICAgICAgICBzZWxmID0gewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUg
bGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgYWRkOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXN0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0LCB3ZSBzYXZlIHRoZSBjdXJyZW50IGxlbmd0
aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGxp
c3QubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5j
dGlvbiBhZGQoIGFyZ3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5
cGUgPSBqUXVlcnkudHlwZSggYXJnICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdC5wdXNoKCBhcmcgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBh
cmcubGVuZ3RoICYmIHR5cGUgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc3BlY3QgcmVj
dXJzaXZlbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGQoIGFyZyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KSggYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBhZGQgdGhlIGNhbGxiYWNrcyB0byB0aGUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGZpcmluZyBi
YXRjaD8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmlu
ZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
cmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdpdGggbWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgY2FsbCByaWdo
dCBhd2F5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggbWVtb3J5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyaW5nU3RhcnQgPSBzdGFydDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcmUoIG1lbW9yeSApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYSBjYWxs
YmFjayBmcm9tIHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmU6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGxpc3QgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFyZ3Vt
ZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFy
ZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBI
YW5kbGUgZmlyaW5nIGluZGV4ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJpbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmRleCA8
PSBmaXJpbmdMZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdMZW5ndGgtLTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpcmluZ0luZGV4LS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udHJvbCBpZiBhIGdpdmVuIGNhbGxi
YWNrIGlzIGluIHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9u
KCBmbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5p
bkFycmF5KCBmbiwgbGlzdCApID4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlz
dAotICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHN0YWNrID0gbWVtb3J5ID0gdW5kZWZpbmVkOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJcyBpdCBkaXNhYmxl
ZD8KLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFsaXN0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvY2sgdGhlIGxpc3QgaW4g
aXRzIGN1cnJlbnQgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2s6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayA9IHVuZGVmaW5lZDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWVtb3J5ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElzIGl0IGxvY2tlZD8KLSAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAhc3RhY2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFy
Z3VtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250
ZXh0LCBhcmdzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJn
cyB8fCBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFsgY29udGV4
dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBsaXN0ICYmICggIWZpcmVkIHx8IHN0YWNrICkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJpbmcgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKCBh
cmdzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUoIGFy
Z3MgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1
bWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmU6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG8ga25vdyBp
ZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmaXJlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWZpcmVkOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgcmV0dXJuIHNlbGY7Ci19OwotalF1
ZXJ5LmV4dGVuZCh7Ci0KLSAgICAgICAgRGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkgewotICAg
ICAgICAgICAgICAgIHZhciB0dXBsZXMgPSBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICJyZXNvbHZlIiwgImRvbmUiLCBqUXVl
cnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCAicmVzb2x2ZWQiIF0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcygi
b25jZSBtZW1vcnkiKSwgInJlamVjdGVkIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbICJub3RpZnkiLCAicHJvZ3Jlc3MiLCBqUXVlcnkuQ2FsbGJhY2tzKCJtZW1vcnkiKSBd
Ci0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUgPSAicGVuZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbHdheXM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZucyA9IGFyZ3Vt
ZW50czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5LkRlZmVycmVkKGZ1bmN0aW9uKCBuZXdEZWZlciApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9u
KCBpLCB0dXBsZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGFjdGlvbiA9IHR1cGxlWyAwIF0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBmbnNb
IGkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZGVmZXJyZWRbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9yd2FyZGlu
ZyBhY3Rpb25zIHRvIG5ld0RlZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsxXSBdKCBqUXVlcnkuaXNGdW5j
dGlvbiggZm4gKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0
dXJuZWQgPSBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkLnByb21pc2UoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5kb25lKCBuZXdEZWZlci5yZXNvbHZlICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuZmFpbCggbmV3RGVmZXIucmVqZWN0ICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVmZXJbIGFjdGlvbiAr
ICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IG5ld0RlZmVyIDogdGhpcywgWyByZXR1cm5l
ZCBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVmZXJbIGFj
dGlvbiBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZu
cyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkucHJv
bWlzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhl
IHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0
ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZCA9IHt9OwotCi0gICAgICAgICAgICAgICAgLy8gS2VlcCBwaXBlIGZvciBi
YWNrLWNvbXBhdAotICAgICAgICAgICAgICAgIHByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjsK
LQotICAgICAgICAgICAgICAgIC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKLSAgICAgICAg
ICAgICAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHR1cGxlWyAyIF0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlU3RyaW5nID0gdHVwbGVbIDMgXTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdID0gbGlz
dC5hZGQKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VbIHR1cGxlWzFdIF0gPSBsaXN0
LmFkZDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHN0YXRlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHN0YXRlU3RyaW5nICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaXN0LmFkZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVN0cmlu
ZzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbIHJlamVjdF9saXN0IHwg
cmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sIHR1cGxlc1sgaSBeIDEgXVsgMiBdLmRpc2FibGUsIHR1cGxl
c1sgMiBdWyAyIF0ubG9jayApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5vdGlmeSBd
ID0gbGlzdC5maXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbMF0g
XSA9IGxpc3QuZmlyZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsw
XSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAg
ICAgICAgICAgICAgIC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQotICAgICAgICAgICAg
ICAgIHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTsKLQotICAgICAgICAgICAgICAgIC8vIENh
bGwgZ2l2ZW4gZnVuYyBpZiBhbnkKLSAgICAgICAgICAgICAgICBpZiAoIGZ1bmMgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFsbCBkb25lIQotICAgICAgICAg
ICAgICAgIHJldHVybiBkZWZlcnJlZDsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBEZWZlcnJl
ZCBoZWxwZXIKLSAgICAgICAgd2hlbjogZnVuY3Rpb24oIHN1Ym9yZGluYXRlIC8qICwgLi4uLCBz
dWJvcmRpbmF0ZU4gKi8gKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGkgPSAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzb2x2ZVZhbHVlcyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRz
ICksCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSByZXNvbHZlVmFsdWVzLmxlbmd0
aCwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNvdW50IG9mIHVuY29tcGxldGVk
IHN1Ym9yZGluYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gbGVuZ3Ro
ICE9PSAxIHx8ICggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGluYXRl
LnByb21pc2UgKSApID8gbGVuZ3RoIDogMCwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIG1hc3RlciBEZWZlcnJlZC4gSWYgcmVzb2x2ZVZhbHVlcyBjb25zaXN0IG9mIG9ubHkgYSBz
aW5nbGUgRGVmZXJyZWQsIGp1c3QgdXNlIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVk
KCksCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3IgYm90
aCByZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHVw
ZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0c1sgaSBdID0gdGhpczsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbIGkgXSA9IGFyZ3Vt
ZW50cy5sZW5ndGggPiAxID8gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCB2YWx1ZXMgPT09IHBy
b2dyZXNzVmFsdWVzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQubm90aWZ5V2l0aCggY29udGV4dHMsIHZhbHVlcyApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICEoIC0tcmVtYWlu
aW5nICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY29udGV4dHMsIHZhbHVlcyApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2dyZXNzVmFsdWVzLCBwcm9ncmVzc0NvbnRleHRzLCByZXNvbHZlQ29udGV4dHM7
Ci0KLSAgICAgICAgICAgICAgICAvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGlu
YXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCi0gICAgICAgICAgICAgICAgaWYgKCBsZW5n
dGggPiAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMgPSBuZXcg
QXJyYXkoIGxlbmd0aCApOwotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NDb250ZXh0
cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZl
Q29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOwotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZl
VmFsdWVzWyBpIF0ucHJvbWlzZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kb25lKCB1cGRhdGVGdW5jKCBpLCByZXNv
bHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuZmFpbCggZGVmZXJyZWQucmVqZWN0ICkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9ncmVzcyggdXBkYXRl
RnVuYyggaSwgcHJvZ3Jlc3NDb250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0tcmVtYWluaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgbm90IHdhaXRpbmcgb24gYW55dGhpbmcsIHJlc29s
dmUgdGhlIG1hc3RlcgotICAgICAgICAgICAgICAgIGlmICggIXJlbWFpbmluZyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMs
IHJlc29sdmVWYWx1ZXMgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpOwotICAgICAgICB9Ci19KTsKLWpRdWVyeS5zdXBwb3J0
ID0gKGZ1bmN0aW9uKCkgewotCi0gICAgICAgIHZhciBzdXBwb3J0LAotICAgICAgICAgICAgICAg
IGFsbCwKLSAgICAgICAgICAgICAgICBhLAotICAgICAgICAgICAgICAgIHNlbGVjdCwKLSAgICAg
ICAgICAgICAgICBvcHQsCi0gICAgICAgICAgICAgICAgaW5wdXQsCi0gICAgICAgICAgICAgICAg
ZnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgZXZlbnROYW1lLAotICAgICAgICAgICAgICAgIGks
Ci0gICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQsCi0gICAgICAgICAgICAgICAgY2xpY2tGbiwK
LSAgICAgICAgICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQot
ICAgICAgICAvLyBTZXR1cAotICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCAiY2xhc3NOYW1lIiwg
InQiICk7Ci0gICAgICAgIGRpdi5pbm5lckhUTUwgPSAiICA8bGluay8+PHRhYmxlPjwvdGFibGU+
PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IjsKLQotICAgICAgICAv
LyBTdXBwb3J0IHRlc3RzIHdvbid0IHJ1biBpbiBzb21lIGxpbWl0ZWQgb3Igbm9uLWJyb3dzZXIg
ZW52aXJvbm1lbnRzCi0gICAgICAgIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIp
OwotICAgICAgICBhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbIDAgXTsKLSAgICAg
ICAgaWYgKCAhYWxsIHx8ICFhIHx8ICFhbGwubGVuZ3RoICkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpcnN0IGJhdGNoIG9mIHRlc3RzCi0g
ICAgICAgIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgICAg
ICBvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlv
biIpICk7Ci0gICAgICAgIGlucHV0ID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIp
WyAwIF07Ci0KLSAgICAgICAgYS5zdHlsZS5jc3NUZXh0ID0gInRvcDoxcHg7ZmxvYXQ6bGVmdDtv
cGFjaXR5Oi41IjsKLSAgICAgICAgc3VwcG9ydCA9IHsKLSAgICAgICAgICAgICAgICAvLyBJRSBz
dHJpcHMgbGVhZGluZyB3aGl0ZXNwYWNlIHdoZW4gLmlubmVySFRNTCBpcyB1c2VkCi0gICAgICAg
ICAgICAgICAgbGVhZGluZ1doaXRlc3BhY2U6ICggZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09
IDMgKSwKLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRib2R5IGVsZW1lbnRz
IGFyZW4ndCBhdXRvbWF0aWNhbGx5IGluc2VydGVkCi0gICAgICAgICAgICAgICAgLy8gSUUgd2ls
bCBpbnNlcnQgdGhlbSBpbnRvIGVtcHR5IHRhYmxlcwotICAgICAgICAgICAgICAgIHRib2R5OiAh
ZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCwKLQotICAgICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGxpbmsgZWxlbWVudHMgZ2V0IHNlcmlhbGl6ZWQgY29ycmVj
dGx5IGJ5IGlubmVySFRNTAotICAgICAgICAgICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgYSB3cmFw
cGVyIGVsZW1lbnQgaW4gSUUKLSAgICAgICAgICAgICAgICBodG1sU2VyaWFsaXplOiAhIWRpdi5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCwKLQotICAgICAgICAgICAgICAgIC8v
IEdldCB0aGUgc3R5bGUgaW5mb3JtYXRpb24gZnJvbSBnZXRBdHRyaWJ1dGUKLSAgICAgICAgICAg
ICAgICAvLyAoSUUgdXNlcyAuY3NzVGV4dCBpbnN0ZWFkKQotICAgICAgICAgICAgICAgIHN0eWxl
OiAvdG9wLy50ZXN0KCBhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSApLAotCi0gICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgVVJMcyBhcmVuJ3QgbWFuaXB1bGF0ZWQKLSAgICAgICAgICAg
ICAgICAvLyAoSUUgbm9ybWFsaXplcyBpdCBieSBkZWZhdWx0KQotICAgICAgICAgICAgICAgIGhy
ZWZOb3JtYWxpemVkOiAoIGEuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09ICIvYSIgKSwKLQotICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGVsZW1lbnQgb3BhY2l0eSBleGlzdHMKLSAg
ICAgICAgICAgICAgICAvLyAoSUUgdXNlcyBmaWx0ZXIgaW5zdGVhZCkKLSAgICAgICAgICAgICAg
ICAvLyBVc2UgYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1ZS4gU2VlICM1MTQ1
Ci0gICAgICAgICAgICAgICAgb3BhY2l0eTogL14wLjUvLnRlc3QoIGEuc3R5bGUub3BhY2l0eSAp
LAotCi0gICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5jZQotICAg
ICAgICAgICAgICAgIC8vIChJRSB1c2VzIHN0eWxlRmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkK
LSAgICAgICAgICAgICAgICBjc3NGbG9hdDogISFhLnN0eWxlLmNzc0Zsb2F0LAotCi0gICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvciBh
IGNoZWNrYm94Ci0gICAgICAgICAgICAgICAgLy8gdGhhdCBpdCBkZWZhdWx0cyB0byAib24iLgot
ICAgICAgICAgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gIiIgaW5zdGVhZCkKLSAgICAg
ICAgICAgICAgICBjaGVja09uOiAoIGlucHV0LnZhbHVlID09PSAib24iICksCi0KLSAgICAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNlbGVjdGVkLWJ5LWRlZmF1bHQgb3B0aW9uIGhh
cyBhIHdvcmtpbmcgc2VsZWN0ZWQgcHJvcGVydHkuCi0gICAgICAgICAgICAgICAgLy8gKFdlYktp
dCBkZWZhdWx0cyB0byBmYWxzZSBpbnN0ZWFkIG9mIHRydWUsIElFIHRvbywgaWYgaXQncyBpbiBh
biBvcHRncm91cCkKLSAgICAgICAgICAgICAgICBvcHRTZWxlY3RlZDogb3B0LnNlbGVjdGVkLAot
Ci0gICAgICAgICAgICAgICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxDYXNlIGNsYXNz
LiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQvc2V0QXR0cmli
dXRlIChpZTYvNykKLSAgICAgICAgICAgICAgICBnZXRTZXRBdHRyaWJ1dGU6IGRpdi5jbGFzc05h
bWUgIT09ICJ0IiwKLQotICAgICAgICAgICAgICAgIC8vIFRlc3RzIGZvciBlbmN0eXBlIHN1cHBv
cnQgb24gYSBmb3JtICgjNjc0MykKLSAgICAgICAgICAgICAgICBlbmN0eXBlOiAhIWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLAotCi0gICAgICAgICAgICAgICAgLy8gTWFr
ZXMgc3VyZSBjbG9uaW5nIGFuIGh0bWw1IGVsZW1lbnQgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMK
LSAgICAgICAgICAgICAgICAvLyBXaGVyZSBvdXRlckhUTUwgaXMgdW5kZWZpbmVkLCB0aGlzIHN0
aWxsIHdvcmtzCi0gICAgICAgICAgICAgICAgaHRtbDVDbG9uZTogZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgibmF2IikuY2xvbmVOb2RlKCB0cnVlICkub3V0ZXJIVE1MICE9PSAiPDpuYXY+PC86bmF2
PiIsCi0KLSAgICAgICAgICAgICAgICAvLyBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCBERVBSRUNB
VEVEIGluIDEuOCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IFF1aXJrcyBNb2RlCi0gICAgICAgICAg
ICAgICAgYm94TW9kZWw6ICggZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gIkNTUzFDb21wYXQiICks
Ci0KLSAgICAgICAgICAgICAgICAvLyBXaWxsIGJlIGRlZmluZWQgbGF0ZXIKLSAgICAgICAgICAg
ICAgICBzdWJtaXRCdWJibGVzOiB0cnVlLAotICAgICAgICAgICAgICAgIGNoYW5nZUJ1YmJsZXM6
IHRydWUsCi0gICAgICAgICAgICAgICAgZm9jdXNpbkJ1YmJsZXM6IGZhbHNlLAotICAgICAgICAg
ICAgICAgIGRlbGV0ZUV4cGFuZG86IHRydWUsCi0gICAgICAgICAgICAgICAgbm9DbG9uZUV2ZW50
OiB0cnVlLAotICAgICAgICAgICAgICAgIGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6IGZhbHNlLAot
ICAgICAgICAgICAgICAgIHNocmlua1dyYXBCbG9ja3M6IGZhbHNlLAotICAgICAgICAgICAgICAg
IHJlbGlhYmxlTWFyZ2luUmlnaHQ6IHRydWUsCi0gICAgICAgICAgICAgICAgYm94U2l6aW5nUmVs
aWFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgcGl4ZWxQb3NpdGlvbjogZmFsc2UKLSAgICAg
ICAgfTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgY2hlY2tlZCBzdGF0dXMgaXMgcHJvcGVybHkg
Y2xvbmVkCi0gICAgICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlOwotICAgICAgICBzdXBwb3J0Lm5v
Q2xvbmVDaGVja2VkID0gaW5wdXQuY2xvbmVOb2RlKCB0cnVlICkuY2hlY2tlZDsKLQotICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgb3B0aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBh
cmVuJ3QgbWFya2VkIGFzIGRpc2FibGVkCi0gICAgICAgIC8vIChXZWJLaXQgbWFya3MgdGhlbSBh
cyBkaXNhYmxlZCkKLSAgICAgICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKLSAgICAgICAgc3Vw
cG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlzYWJsZWQ7Ci0KLSAgICAgICAgLy8gVGVzdCB0byBz
ZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkZWxldGUgYW4gZXhwYW5kbyBmcm9tIGFuIGVsZW1lbnQK
LSAgICAgICAgLy8gRmFpbHMgaW4gSW50ZXJuZXQgRXhwbG9yZXIKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgICAgICBkZWxldGUgZGl2LnRlc3Q7Ci0gICAgICAgIH0gY2F0Y2goIGUgKSB7Ci0g
ICAgICAgICAgICAgICAgc3VwcG9ydC5kZWxldGVFeHBhbmRvID0gZmFsc2U7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoICFkaXYuYWRkRXZlbnRMaXN0ZW5lciAmJiBkaXYuYXR0YWNoRXZlbnQg
JiYgZGl2LmZpcmVFdmVudCApIHsKLSAgICAgICAgICAgICAgICBkaXYuYXR0YWNoRXZlbnQoICJv
bmNsaWNrIiwgY2xpY2tGbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2xvbmluZyBhIG5vZGUgc2hvdWxkbid0IGNvcHkgb3ZlciBhbnkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGJvdW5kIGV2ZW50IGhhbmRsZXJzIChJRSBkb2VzIHRoaXMpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdXBwb3J0Lm5vQ2xvbmVFdmVudCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGRpdi5jbG9uZU5vZGUoIHRydWUgKS5maXJlRXZl
bnQoIm9uY2xpY2siKTsKLSAgICAgICAgICAgICAgICBkaXYuZGV0YWNoRXZlbnQoICJvbmNsaWNr
IiwgY2xpY2tGbiApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgYSByYWRpbyBt
YWludGFpbnMgaXRzIHZhbHVlCi0gICAgICAgIC8vIGFmdGVyIGJlaW5nIGFwcGVuZGVkIHRvIHRo
ZSBET00KLSAgICAgICAgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwot
ICAgICAgICBpbnB1dC52YWx1ZSA9ICJ0IjsKLSAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAi
dHlwZSIsICJyYWRpbyIgKTsKLSAgICAgICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFs
dWUgPT09ICJ0IjsKLQotICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgImNo
ZWNrZWQiICk7Ci0KLSAgICAgICAgLy8gIzExMjE3IC0gV2ViS2l0IGxvc2VzIGNoZWNrIHdoZW4g
dGhlIG5hbWUgaXMgYWZ0ZXIgdGhlIGNoZWNrZWQgYXR0cmlidXRlCi0gICAgICAgIGlucHV0LnNl
dEF0dHJpYnV0ZSggIm5hbWUiLCAidCIgKTsKLQotICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGlu
cHV0ICk7Ci0gICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dCgpOwotICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2Lmxhc3RDaGlsZCApOwotCi0g
ICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGlu
IGZyYWdtZW50cwotICAgICAgICBzdXBwb3J0LmNoZWNrQ2xvbmUgPSBmcmFnbWVudC5jbG9uZU5v
ZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDsKLQotICAgICAg
ICAvLyBDaGVjayBpZiBhIGRpc2Nvbm5lY3RlZCBjaGVja2JveCB3aWxsIHJldGFpbiBpdHMgY2hl
Y2tlZAotICAgICAgICAvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00g
KElFNi83KQotICAgICAgICBzdXBwb3J0LmFwcGVuZENoZWNrZWQgPSBpbnB1dC5jaGVja2VkOwot
Ci0gICAgICAgIGZyYWdtZW50LnJlbW92ZUNoaWxkKCBpbnB1dCApOwotICAgICAgICBmcmFnbWVu
dC5hcHBlbmRDaGlsZCggZGl2ICk7Ci0KLSAgICAgICAgLy8gVGVjaG5pcXVlIGZyb20gSnVyaXkg
WmF5dHNldgotICAgICAgICAvLyBodHRwOi8vcGVyZmVjdGlvbmtpbGxzLmNvbS9kZXRlY3Rpbmct
ZXZlbnQtc3VwcG9ydC13aXRob3V0LWJyb3dzZXItc25pZmZpbmcvCi0gICAgICAgIC8vIFdlIG9u
bHkgY2FyZSBhYm91dCB0aGUgY2FzZSB3aGVyZSBub24tc3RhbmRhcmQgZXZlbnQgc3lzdGVtcwot
ICAgICAgICAvLyBhcmUgdXNlZCwgbmFtZWx5IGluIElFLiBTaG9ydC1jaXJjdWl0aW5nIGhlcmUg
aGVscHMgdXMgdG8KLSAgICAgICAgLy8gYXZvaWQgYW4gZXZhbCBjYWxsIChpbiBzZXRBdHRyaWJ1
dGUpIHdoaWNoIGNhbiBjYXVzZSBDU1AKLSAgICAgICAgLy8gdG8gZ28gaGF5d2lyZS4gU2VlOiBo
dHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1AKLSAgICAgICAgaWYg
KCBkaXYuYXR0YWNoRXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgZm9yICggaSBpbiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdWJtaXQ6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2U6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2luOiB0cnVlCi0g
ICAgICAgICAgICAgICAgfSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lID0g
Im9uIiArIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggZXZlbnRO
YW1lIGluIGRpdiApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNTdXBwb3J0ZWQg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoIGV2
ZW50TmFtZSwgInJldHVybjsiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
U3VwcG9ydGVkID0gKCB0eXBlb2YgZGl2WyBldmVudE5hbWUgXSA9PT0gImZ1bmN0aW9uIiApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9y
dFsgaSArICJCdWJibGVzIiBdID0gaXNTdXBwb3J0ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gUnVuIHRlc3RzIHRoYXQgbmVlZCBhIGJvZHkgYXQgZG9jIHJl
YWR5Ci0gICAgICAgIGpRdWVyeShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY29u
dGFpbmVyLCBkaXYsIHRkcywgbWFyZ2luRGl2LAotICAgICAgICAgICAgICAgICAgICAgICAgZGl2
UmVzZXQgPSAicGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7b3ZlcmZs
b3c6aGlkZGVuOyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKLQotICAgICAgICAgICAgICAgIGlmICggIWJv
ZHkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gZm9yIGZyYW1lc2V0IGRv
Y3MgdGhhdCBkb24ndCBoYXZlIGEgYm9keQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHls
ZS5jc3NUZXh0ID0gInZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7
cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6MXB4IjsKLSAgICAgICAgICAgICAgICBi
b2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKLQotICAgICAg
ICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgdGVzdCBlbGVtZW50Ci0gICAgICAgICAgICAgICAg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICAgICAgY29u
dGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTsKLQotICAgICAgICAgICAgICAgIC8vIENoZWNrIGlm
IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0IHdoZW4gdGhleSBhcmUg
c2V0Ci0gICAgICAgICAgICAgICAgLy8gdG8gZGlzcGxheTpub25lIGFuZCB0aGVyZSBhcmUgc3Rp
bGwgb3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCi0gICAgICAgICAgICAgICAgLy8gdGFi
bGUgcm93OyBpZiBzbywgb2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9yIHVz
ZSB3aGVuCi0gICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5pbmcgaWYgYW4gZWxlbWVudCBoYXMg
YmVlbiBoaWRkZW4gZGlyZWN0bHkgdXNpbmcKLSAgICAgICAgICAgICAgICAvLyBkaXNwbGF5Om5v
bmUgKGl0IGlzIHN0aWxsIHNhZmUgdG8gdXNlIG9mZnNldHMgaWYgYSBwYXJlbnQgZWxlbWVudCBp
cwotICAgICAgICAgICAgICAgIC8vIGhpZGRlbjsgZG9uIHNhZmV0eSBnb2dnbGVzIGFuZCBzZWUg
YnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KLSAgICAgICAgICAgICAgICAvLyAob25s
eSBJRSA4IGZhaWxzIHRoaXMgdGVzdCkKLSAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0g
Ijx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iOwotICAgICAgICAg
ICAgICAgIHRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKLSAgICAgICAgICAg
ICAgICB0ZHNbIDAgXS5zdHlsZS5jc3NUZXh0ID0gInBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6
MDtkaXNwbGF5Om5vbmUiOwotICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gKCB0ZHNbIDAg
XS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKLQotICAgICAgICAgICAgICAgIHRkc1sgMCBdLnN0eWxl
LmRpc3BsYXkgPSAiIjsKLSAgICAgICAgICAgICAgICB0ZHNbIDEgXS5zdHlsZS5kaXNwbGF5ID0g
Im5vbmUiOwotCi0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZW1wdHkgdGFibGUgY2VsbHMg
c3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWlnaHQKLSAgICAgICAgICAgICAgICAvLyAoSUUgPD0g
OCBmYWlsIHRoaXMgdGVzdCkKLSAgICAgICAgICAgICAgICBzdXBwb3J0LnJlbGlhYmxlSGlkZGVu
T2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBib3gtc2l6aW5nIGFuZCBtYXJnaW4gYmVoYXZp
b3IKLSAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIiI7Ci0gICAgICAgICAgICAgICAg
ZGl2LnN0eWxlLmNzc1RleHQgPSAiYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemlu
Zzpib3JkZXItYm94Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2Jv
cmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjph
YnNvbHV0ZTt0b3A6MSU7IjsKLSAgICAgICAgICAgICAgICBzdXBwb3J0LmJveFNpemluZyA9ICgg
ZGl2Lm9mZnNldFdpZHRoID09PSA0ICk7Ci0gICAgICAgICAgICAgICAgc3VwcG9ydC5kb2VzTm90
SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCA9ICggYm9keS5vZmZzZXRUb3AgIT09IDEgKTsKLQot
ICAgICAgICAgICAgICAgIC8vIE5PVEU6IFRvIGFueSBmdXR1cmUgbWFpbnRhaW5lciwgd2UndmUg
d2luZG93LmdldENvbXB1dGVkU3R5bGUKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIGpzZG9t
IG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0IGl0LgotICAgICAgICAgICAgICAgIGlmICgg
d2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdXBw
b3J0LnBpeGVsUG9zaXRpb24gPSAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwg
KSB8fCB7fSApLnRvcCAhPT0gIjElIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQu
Ym94U2l6aW5nUmVsaWFibGUgPSAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwg
KSB8fCB7IHdpZHRoOiAiNHB4IiB9ICkud2lkdGggPT09ICI0cHgiOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0aCBhbmQgbm8gbWFy
Z2luLXJpZ2h0IGluY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRzIGNv
bXB1dGVkIG1hcmdpbi1yaWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuIEZvciBtb3Jl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmZvIHNlZSBidWcgIzMzMzMKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZhaWxzIGluIFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRs
aWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29t
cHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYu
c3R5bGUuY3NzVGV4dCA9IGRpdlJlc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2lu
RGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gIjAiOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLndpZHRoID0gIjFweCI7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIG1hcmdpbkRpdiApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIXBhcnNlRmxvYXQoICggd2luZG93LmdldENvbXB1dGVkU3R5bGUo
IG1hcmdpbkRpdiwgbnVsbCApIHx8IHt9ICkubWFyZ2luUmlnaHQgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkaXYuc3R5bGUuem9vbSAhPT0gInVu
ZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBuYXRpdmVs
eSBibG9jay1sZXZlbCBlbGVtZW50cyBhY3QgbGlrZSBpbmxpbmUtYmxvY2sKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGVsZW1lbnRzIHdoZW4gc2V0dGluZyB0aGVpciBkaXNwbGF5IHRvICdp
bmxpbmUnIGFuZCBnaXZpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW0gbGF5b3V0
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAoSUUgPCA4IGRvZXMgdGhpcykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2UmVzZXQgKyAid2lkdGg6MXB4O3BhZGRpbmc6MXB4
O2Rpc3BsYXk6aW5saW5lO3pvb206MSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0
LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0gMyApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBlbGVtZW50cyB3aXRoIGxheW91dCBz
aHJpbmstd3JhcCB0aGVpciBjaGlsZHJlbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gKElF
IDYgZG9lcyB0aGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLmRpc3BsYXkg
PSAiYmxvY2siOwotICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLm92ZXJmbG93ID0g
InZpc2libGUiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8ZGl2
PjwvZGl2PiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXYuZmlyc3RDaGlsZC5zdHlsZS53
aWR0aCA9ICI1cHgiOwotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5zaHJpbmtXcmFw
QmxvY2tzID0gKCBkaXYub2Zmc2V0V2lkdGggIT09IDMgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGFpbmVyLnN0eWxlLnpvb20gPSAxOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUKLSAgICAg
ICAgICAgICAgICBib2R5LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKLSAgICAgICAgICAgICAg
ICBjb250YWluZXIgPSBkaXYgPSB0ZHMgPSBtYXJnaW5EaXYgPSBudWxsOwotICAgICAgICB9KTsK
LQotICAgICAgICAvLyBOdWxsIGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCi0gICAgICAg
IGZyYWdtZW50LnJlbW92ZUNoaWxkKCBkaXYgKTsKLSAgICAgICAgYWxsID0gYSA9IHNlbGVjdCA9
IG9wdCA9IGlucHV0ID0gZnJhZ21lbnQgPSBkaXYgPSBudWxsOwotCi0gICAgICAgIHJldHVybiBz
dXBwb3J0OwotfSkoKTsKLXZhciByYnJhY2UgPSAvKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0p
JC8sCi0gICAgICAgIHJtdWx0aURhc2ggPSAvKFtBLVpdKS9nOwotCi1qUXVlcnkuZXh0ZW5kKHsK
LSAgICAgICAgY2FjaGU6IHt9LAotCi0gICAgICAgIGRlbGV0ZWRJZHM6IFtdLAotCi0gICAgICAg
IC8vIFJlbW92ZSBhdCBuZXh0IG1ham9yIHJlbGVhc2UgKDEuOS8yLjApCi0gICAgICAgIHV1aWQ6
IDAsCi0KLSAgICAgICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBw
YWdlCi0gICAgICAgIC8vIE5vbi1kaWdpdHMgcmVtb3ZlZCB0byBtYXRjaCByaW5saW5lalF1ZXJ5
Ci0gICAgICAgIGV4cGFuZG86ICJqUXVlcnkiICsgKCBqUXVlcnkuZm4uanF1ZXJ5ICsgTWF0aC5y
YW5kb20oKSApLnJlcGxhY2UoIC9cRC9nLCAiIiApLAotCi0gICAgICAgIC8vIFRoZSBmb2xsb3dp
bmcgZWxlbWVudHMgdGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKLSAgICAgICAg
Ly8gYXR0ZW1wdCB0byBhZGQgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIHRoZW0uCi0gICAgICAgIG5v
RGF0YTogewotICAgICAgICAgICAgICAgICJlbWJlZCI6IHRydWUsCi0gICAgICAgICAgICAgICAg
Ly8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxhc2ggKHdoaWNoIGhhbmRsZSBleHBhbmRv
cykKLSAgICAgICAgICAgICAgICAib2JqZWN0IjogImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05
NkI4LTQ0NDU1MzU0MDAwMCIsCi0gICAgICAgICAgICAgICAgImFwcGxldCI6IHRydWUKLSAgICAg
ICAgfSwKLQotICAgICAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAg
ICAgICBlbGVtID0gZWxlbS5ub2RlVHlwZSA/IGpRdWVyeS5jYWNoZVsgZWxlbVtqUXVlcnkuZXhw
YW5kb10gXSA6IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICEhZWxlbSAmJiAhaXNFbXB0eURhdGFPYmplY3QoIGVsZW0gKTsKLSAgICAgICAgfSwKLQotICAg
ICAgICBkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSwgcHZ0IC8qIEludGVybmFsIFVz
ZSBPbmx5ICovICkgewotICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBl
bGVtICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHRoaXNDYWNoZSwgcmV0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGdldEJ5TmFtZSA9IHR5cGVvZiBuYW1lID09PSAic3RyaW5nIiwKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBoYW5kbGUgRE9NIG5vZGVzIGFuZCBKUyBv
YmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUgRE9NLUpT
IGJvdW5kYXJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBl
LAotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBn
bG9iYWwgalF1ZXJ5IGNhY2hlOyBKUyBvYmplY3QgZGF0YSBpcwotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8gdGhlIG9iamVjdCBzbyBHQyBjYW4gb2NjdXIg
YXV0b21hdGljYWxseQotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBpc05vZGUgPyBq
UXVlcnkuY2FjaGUgOiBlbGVtLAotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGRl
ZmluaW5nIGFuIElEIGZvciBKUyBvYmplY3RzIGlmIGl0cyBjYWNoZSBhbHJlYWR5IGV4aXN0cyBh
bGxvd3MKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9u
IHRoZSBzYW1lIHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGludGVybmFsS2V5IF0gOiBlbGVtWyBpbnRl
cm5hbEtleSBdICYmIGludGVybmFsS2V5OwotCi0gICAgICAgICAgICAgICAgLy8gQXZvaWQgZG9p
bmcgYW55IG1vcmUgd29yayB0aGFuIHdlIG5lZWQgdG8gd2hlbiB0cnlpbmcgdG8gZ2V0IGRhdGEg
b24gYW4KLSAgICAgICAgICAgICAgICAvLyBvYmplY3QgdGhhdCBoYXMgbm8gZGF0YSBhdCBhbGwK
LSAgICAgICAgICAgICAgICBpZiAoICghaWQgfHwgIWNhY2hlW2lkXSB8fCAoIXB2dCAmJiAhY2Fj
aGVbaWRdLmRhdGEpKSAmJiBnZXRCeU5hbWUgJiYgZGF0YSA9PT0gdW5kZWZpbmVkICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICggIWlkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBE
T00gbm9kZXMgbmVlZCBhIG5ldyB1bmlxdWUgSUQgZm9yIGVhY2ggZWxlbWVudCBzaW5jZSB0aGVp
ciBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmRzIHVwIGluIHRoZSBnbG9iYWwg
Y2FjaGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNOb2RlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBpbnRlcm5hbEtleSBdID0gaWQgPSBqUXVlcnku
ZGVsZXRlZElkcy5wb3AoKSB8fCBqUXVlcnkuZ3VpZCsrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpbnRlcm5h
bEtleTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhY2hlWyBpZCBdID0ge307Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lk
cyBleHBvc2luZyBqUXVlcnkgbWV0YWRhdGEgb24gcGxhaW4gSlMgb2JqZWN0cyB3aGVuIHRoZSBv
YmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHNlcmlhbGl6ZWQgdXNpbmcgSlNP
Ti5zdHJpbmdpZnkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzTm9kZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0udG9KU09OID0galF1ZXJ5
Lm5vb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gQW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8galF1ZXJ5LmRhdGEg
aW5zdGVhZCBvZiBhIGtleS92YWx1ZSBwYWlyOyB0aGlzIGdldHMKLSAgICAgICAgICAgICAgICAv
LyBzaGFsbG93IGNvcGllZCBvdmVyIG9udG8gdGhlIGV4aXN0aW5nIGNhY2hlCi0gICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgbmFtZSA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG5hbWUgPT09ICJm
dW5jdGlvbiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHB2dCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSBqUXVlcnkuZXh0ZW5kKCBj
YWNoZVsgaWQgXSwgbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0uZGF0YSA9IGpRdWVyeS5l
eHRlbmQoIGNhY2hlWyBpZCBdLmRhdGEsIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzQ2FjaGUgPSBjYWNo
ZVsgaWQgXTsKLQotICAgICAgICAgICAgICAgIC8vIGpRdWVyeSBkYXRhKCkgaXMgc3RvcmVkIGlu
IGEgc2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3MgaW50ZXJuYWwgZGF0YQotICAg
ICAgICAgICAgICAgIC8vIGNhY2hlIGluIG9yZGVyIHRvIGF2b2lkIGtleSBjb2xsaXNpb25zIGJl
dHdlZW4gaW50ZXJuYWwgZGF0YSBhbmQgdXNlci1kZWZpbmVkCi0gICAgICAgICAgICAgICAgLy8g
ZGF0YS4KLSAgICAgICAgICAgICAgICBpZiAoICFwdnQgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICF0aGlzQ2FjaGUuZGF0YSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpc0NhY2hlLmRhdGEgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hlID0gdGhpc0NhY2hlLmRhdGE7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBkYXRhICE9PSB1bmRlZmluZWQg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENhc2Uo
IG5hbWUgKSBdID0gZGF0YTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBDaGVjayBmb3IgYm90aCBjb252ZXJ0ZWQtdG8tY2FtZWwgYW5kIG5vbi1jb252ZXJ0ZWQgZGF0
YSBwcm9wZXJ0eSBuYW1lcwotICAgICAgICAgICAgICAgIC8vIElmIGEgZGF0YSBwcm9wZXJ0eSB3
YXMgc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgaWYgKCBnZXRCeU5hbWUgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0IFRyeSB0byBmaW5kIGFzLWlzIHByb3BlcnR5IGRh
dGEKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgbmFtZSBdOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXN0IGZvciBudWxsfHVuZGVmaW5lZCBwcm9wZXJ0
eSBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCA9PSBudWxsICkgewotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBmaW5kIHRoZSBjYW1lbENh
c2VkIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXND
YWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCA9IHRoaXNDYWNoZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OwotICAgICAgICB9LAotCi0gICAgICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdGhp
c0NhY2hlLCBpLCBsLAotCi0gICAgICAgICAgICAgICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5v
ZGVUeXBlLAotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9y
IG1vcmUgaW5mb3JtYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gaXNOb2Rl
ID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaXNO
b2RlID8gZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSA6IGpRdWVyeS5leHBhbmRvOwotCi0gICAgICAg
ICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBubyBjYWNoZSBlbnRyeSBmb3IgdGhpcyBv
YmplY3QsIHRoZXJlIGlzIG5vCi0gICAgICAgICAgICAgICAgLy8gcHVycG9zZSBpbiBjb250aW51
aW5nCi0gICAgICAgICAgICAgICAgaWYgKCAhY2FjaGVbIGlkIF0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKCBuYW1lICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2FjaGUgPSBwdnQg
PyBjYWNoZVsgaWQgXSA6IGNhY2hlWyBpZCBdLmRhdGE7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdGhpc0NhY2hlICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBuYW1lcyBmb3IgZGF0
YSBrZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5pc0Fy
cmF5KCBuYW1lICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0cnkgdGhlIHN0cmluZyBhcyBhIGtleSBiZWZvcmUgYW55IG1hbmlwdWxhdGlvbgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmFtZSBpbiB0aGlzQ2Fj
aGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lID0gWyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc3BsaXQgdGhlIGNhbWVsIGNhc2VkIHZlcnNpb24gYnkgc3BhY2VzIHVubGVzcyBhIGtl
eSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lIGluIHRo
aXNDYWNoZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IFsgbmFtZSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoIiAiKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0g
MCwgbCA9IG5hbWUubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzQ2FjaGVbIG5hbWVbaV0gXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUsIHdlIHdhbnQgdG8g
Y29udGludWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGxldCB0aGUg
Y2FjaGUgb2JqZWN0IGl0c2VsZiBnZXQgZGVzdHJveWVkCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggISggcHZ0ID8gaXNFbXB0eURhdGFPYmplY3QgOiBqUXVlcnkuaXNFbXB0
eU9iamVjdCApKCB0aGlzQ2FjaGUgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgICAgICAgICAg
ICAgICBpZiAoICFwdnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGVb
IGlkIF0uZGF0YTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZGVzdHJveSB0
aGUgcGFyZW50IGNhY2hlIHVubGVzcyB0aGUgaW50ZXJuYWwgZGF0YSBvYmplY3QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGhhZCBiZWVuIHRoZSBvbmx5IHRoaW5nIGxlZnQgaW4gaXQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzRW1wdHlEYXRhT2JqZWN0KCBjYWNoZVsgaWQg
XSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gRGVzdHJveSB0aGUgY2FjaGUKLSAgICAgICAgICAgICAgICBpZiAoIGlzTm9kZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdLCB0cnVlICk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBVc2UgZGVsZXRlIHdoZW4gc3VwcG9ydGVkIGZvciBleHBh
bmRvcyBvciBgY2FjaGVgIGlzIG5vdCBhIHdpbmRvdyBwZXIgaXNXaW5kb3cgKCMxMDA4MCkKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvIHx8
IGNhY2hlICE9IGNhY2hlLndpbmRvdyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBjYWNoZVsgaWQgXTsKLQotICAgICAgICAgICAgICAgIC8vIFdoZW4gYWxsIGVsc2UgZmFpbHMs
IG51bGwKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FjaGVbIGlkIF0gPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAg
ICAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gICAgICAgIF9kYXRhOiBmdW5jdGlvbigg
ZWxlbSwgbmFtZSwgZGF0YSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRhdGEo
IGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBBIG1l
dGhvZCBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBET00gbm9kZSBjYW4gaGFuZGxlIHRoZSBkYXRhIGV4
cGFuZG8KLSAgICAgICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIG5vRGF0YSA9IGVsZW0ubm9kZU5hbWUgJiYgalF1ZXJ5Lm5vRGF0YVsgZWxlbS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07Ci0KLSAgICAgICAgICAgICAgICAvLyBub2RlcyBhY2Nl
cHQgZGF0YSB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZDsgcmVqZWN0aW9uIGNhbiBiZSBjb25k
aXRpb25hbAotICAgICAgICAgICAgICAgIHJldHVybiAhbm9EYXRhIHx8IG5vRGF0YSAhPT0gdHJ1
ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpID09PSBub0RhdGE7Ci0gICAgICAgIH0K
LX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICAgICAgZGF0YTogZnVuY3Rpb24oIGtleSwg
dmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhcnRzLCBwYXJ0LCBhdHRyLCBuYW1lLCBs
LAotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbMF0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBudWxsOwot
Ci0gICAgICAgICAgICAgICAgLy8gR2V0cyBhbGwgdmFsdWVzCi0gICAgICAgICAgICAgICAgaWYg
KCBrZXkgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhp
cy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVl
cnkuZGF0YSggZWxlbSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2VkQXR0cnMi
ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGVs
ZW0uYXR0cmlidXRlczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBsID0gYXR0ci5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gYXR0cltpXS5uYW1lOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFuYW1lLmlu
ZGV4T2YoICJkYXRhLSIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc3Vic3Ry
aW5nKDUpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIsIHRydWUgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXRzIG11bHRpcGxlIHZhbHVlcwotICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5ICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXJ0
cyA9IGtleS5zcGxpdCggIi4iLCAyICk7Ci0gICAgICAgICAgICAgICAgcGFydHNbMV0gPSBwYXJ0
c1sxXSA/ICIuIiArIHBhcnRzWzFdIDogIiI7Ci0gICAgICAgICAgICAgICAgcGFydCA9IHBhcnRz
WzFdICsgIiEiOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMs
IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
ID0gdGhpcy50cmlnZ2VySGFuZGxlciggImdldERhdGEiICsgcGFydCwgWyBwYXJ0c1swXSBdICk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZldGNoIGFueSBp
bnRlcm5hbGx5IHN0b3JlZCBkYXRhIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5kYXRhKCBlbGVtLCBrZXkgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YUF0dHIo
IGVsZW0sIGtleSwgZGF0YSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5l
ZCAmJiBwYXJ0c1sxXSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5kYXRhKCBwYXJ0c1swXSApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwYXJ0c1sxXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
c2VsZiA9IGpRdWVyeSggdGhpcyApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYudHJpZ2dlckhhbmRsZXIoICJzZXREYXRhIiArIHBhcnQsIHBhcnRzICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlzLCBrZXksIHZhbHVlICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlckhhbmRsZXIoICJj
aGFuZ2VEYXRhIiArIHBhcnQsIHBhcnRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51
bGwsIGZhbHNlICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24o
IGtleSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIHRoaXMsIGtleSApOwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci19KTsKLQotZnVuY3Rpb24gZGF0YUF0dHIo
IGVsZW0sIGtleSwgZGF0YSApIHsKLSAgICAgICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50
ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueQotICAgICAgICAvLyBkYXRhIGZyb20gdGhlIEhUTUw1
IGRhdGEtKiBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxl
bS5ub2RlVHlwZSA9PT0gMSApIHsKLQotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gImRhdGEt
IiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7Ci0KLSAg
ICAgICAgICAgICAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsKLQotICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9
IGRhdGEgPT09ICJ0cnVlIiA/IHRydWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhID09PSAiZmFsc2UiID8gZmFsc2UgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhID09PSAibnVsbCIgPyBudWxsIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRo
ZSBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK2RhdGEgKyAiIiA9PT0g
ZGF0YSA/ICtkYXRhIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmJyYWNlLnRl
c3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2goIGUgKSB7fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ug
c2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRhdGEgKTsKLQotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkYXRhOwotfQotCi0v
LyBjaGVja3MgYSBjYWNoZSBvYmplY3QgZm9yIGVtcHRpbmVzcwotZnVuY3Rpb24gaXNFbXB0eURh
dGFPYmplY3QoIG9iaiApIHsKLSAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgIGZvciAoIG5hbWUg
aW4gb2JqICkgewotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHB1YmxpYyBkYXRhIG9iamVj
dCBpcyBlbXB0eSwgdGhlIHByaXZhdGUgaXMgc3RpbGwgZW1wdHkKLSAgICAgICAgICAgICAgICBp
ZiAoIG5hbWUgPT09ICJkYXRhIiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb2JqW25hbWVdICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKCBuYW1lICE9PSAidG9KU09OIiApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gdHJ1ZTsKLX0KLWpRdWVyeS5leHRlbmQoewotICAgICAgICBxdWV1
ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHF1
ZXVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9ICggdHlwZSB8fCAiZngiICkgKyAicXVldWUiOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcXVldWUgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUgKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5
IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBk
YXRhICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFxdWV1ZSB8fCBq
UXVlcnkuaXNBcnJheShkYXRhKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBxdWV1ZSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJh
eShkYXRhKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goIGRhdGEgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVlIHx8IFtdOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxl
bSwgdHlwZSApIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0gICAg
ICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZuID0gcXVldWUuc2hpZnQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksCi0gICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVl
dWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbAotICAgICAgICAgICAgICAg
IGlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZu
ID0gcXVldWUuc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TGVuZ3RoLS07
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBmbiApIHsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVu
dCB0aGUgZnggcXVldWUgZnJvbSBiZWluZwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXV0
b21hdGljYWxseSBkZXF1ZXVlZAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09
PSAiZngiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS51bnNoaWZ0
KCAiaW5wcm9ncmVzcyIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvbgot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGhvb2tzLnN0b3A7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBub3QgaW50ZW5kZWQgZm9yIHB1YmxpYyBjb25z
dW1wdGlvbiAtIGdlbmVyYXRlcyBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm5zIHRoZSBj
dXJyZW50IG9uZQotICAgICAgICBfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGtleSA9IHR5cGUgKyAicXVldWVIb29rcyI7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5fZGF0YSggZWxlbSwga2V5ICkgfHwgalF1ZXJ5Ll9kYXRh
KCBlbGVtLCBrZXksIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5OiBqUXVlcnkuQ2Fs
bGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIHR5cGUgKyAicXVldWUiLCB0
cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRh
KCBlbGVtLCBrZXksIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0KLX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICAg
ICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewotICAgICAgICAgICAgICAgIHZhciBz
ZXR0ZXIgPSAyOwotCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmlu
ZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdHlwZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUgPSAiZngiOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVy
LS07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBhcmd1bWVudHMu
bGVuZ3RoIDwgc2V0dGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5xdWV1ZSggdGhpc1swXSwgdHlwZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgPwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1
ZSggdGhpcywgdHlwZSwgZGF0YSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVswXSAhPT0g
ImlucHJvZ3Jlc3MiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotICAgICAg
ICBkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVl
dWUoIHRoaXMsIHR5cGUgKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLSAgICAg
ICAgLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJt
aXNzaW9uLgotICAgICAgICAvLyBodHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAw
OS8wNy9qcXVlcnktZGVsYXkvCi0gICAgICAgIGRlbGF5OiBmdW5jdGlvbiggdGltZSwgdHlwZSAp
IHsKLSAgICAgICAgICAgICAgICB0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sg
dGltZSBdIHx8IHRpbWUgOiB0aW1lOwotICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJm
eCI7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24o
IG5leHQsIGhvb2tzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSBz
ZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBob29rcy5z
dG9wID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFy
VGltZW91dCggdGltZW91dCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSwKLSAgICAgICAgY2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5
cGUgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4Iiwg
W10gKTsKLSAgICAgICAgfSwKLSAgICAgICAgLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVu
IHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQotICAgICAgICAvLyBhcmUgZW1wdGllZCAoZnggaXMg
dGhlIHR5cGUgYnkgZGVmYXVsdCkKLSAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9i
aiApIHsKLSAgICAgICAgICAgICAgICB2YXIgdG1wLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnQgPSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJy
ZWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzID0gdGhpcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGkgPSB0aGlzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc29sdmUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhKCAtLWNvdW50ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfTsK
LQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgb2JqID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHR5
cGUgPSB0eXBlIHx8ICJmeCI7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSggaS0tICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdG1wID0galF1ZXJ5Ll9kYXRhKCBlbGVtZW50c1sgaSBdLCB0
eXBlICsgInF1ZXVlSG9va3MiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRtcCAm
JiB0bXAuZW1wdHkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5lbXB0eS5hZGQoIHJlc29sdmUg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmVzb2x2ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBkZWZlci5wcm9taXNl
KCBvYmogKTsKLSAgICAgICAgfQotfSk7Ci12YXIgbm9kZUhvb2ssIGJvb2xIb29rLCBmaXhTcGVj
aWZpZWQsCi0gICAgICAgIHJjbGFzcyA9IC9bXHRcclxuXS9nLAotICAgICAgICBycmV0dXJuID0g
L1xyL2csCi0gICAgICAgIHJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLAotICAgICAgICBy
Zm9jdXNhYmxlID0gL14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ks
Ci0gICAgICAgIHJjbGlja2FibGUgPSAvXmEoPzpyZWF8KSQvaSwKLSAgICAgICAgcmJvb2xlYW4g
PSAvXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRp
c2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVk
fHNlbGVjdGVkKSQvaSwKLSAgICAgICAgZ2V0U2V0QXR0cmlidXRlID0galF1ZXJ5LnN1cHBvcnQu
Z2V0U2V0QXR0cmlidXRlOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICAgICAgYXR0cjogZnVu
Y3Rpb24oIG5hbWUsIHZhbHVlICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNj
ZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAx
ICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcHJvcDogZnVuY3Rpb24oIG5hbWUs
IHZhbHVlICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBq
UXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgcmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7Ci0gICAgICAgICAg
ICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdHJ5L2NhdGNoIGhhbmRsZXMgY2FzZXMgd2hlcmUgSUUgYmFsa3MgKHN1Y2ggYXMgcmVt
b3ZpbmcgYSBwcm9wZXJ0eSBvbiB3aW5kb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBuYW1lIF0gPSB1bmRlZmlu
ZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzWyBuYW1lIF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBlICkge30KLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSwKLQotICAgICAgICBhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkg
ewotICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWVzLCBpLCBsLCBlbGVtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0Q2xhc3MsIGMsIGNsOwotCi0gICAgICAgICAgICAgICAgaWYgKCBq
UXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMu
Y2xhc3NOYW1lKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJz
dHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNw
bGl0KCBjb3JlX3JzcGFjZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0g
MCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFlbGVtLmNsYXNzTmFtZSAmJiBjbGFzc05hbWVzLmxl
bmd0aCA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgPSAiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIjsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
YyA9IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNldENs
YXNzLmluZGV4T2YoICIgIiArIGNsYXNzTmFtZXNbIGMgXSArICIgIiApIDwgMCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRDbGFzcyArPSBjbGFzc05hbWVzWyBjIF0gKyAiICI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNl
dENsYXNzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAg
ICAgICAgICAgICB2YXIgcmVtb3ZlcywgY2xhc3NOYW1lLCBlbGVtLCBjLCBjbCwgaSwgbDsKLQot
ICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcygg
dmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoICh2YWx1
ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlcyA9ICggdmFsdWUgfHwgIiIgKS5zcGxp
dCggY29yZV9yc3BhY2UgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAs
IGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbSA9IHRoaXNbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmIGVsZW0uY2xhc3NOYW1lICkgewotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gKCIgIiArIGVs
ZW0uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKCByY2xhc3MsICIgIiApOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCBvdmVyIGVhY2ggaXRlbSBpbiB0
aGUgcmVtb3ZhbCBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggYyA9IDAsIGNsID0gcmVtb3Zlcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHVudGls
IHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVtb3ZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBjbGFzc05hbWUuaW5kZXhPZigiICIgKyByZW1v
dmVzWyBjIF0gKyAiICIpID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCAi
ICIgKyByZW1vdmVzWyBjIF0gKyAiICIgLCAiICIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS5jbGFzc05hbWUgPSB2YWx1ZSA/IGpRdWVyeS50cmltKCBjbGFzc05hbWUgKSA6ICIiOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwg
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpc0Jvb2wgPSB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIjsKLQot
ICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcygg
dmFsdWUuY2FsbCh0aGlzLCBpLCB0aGlzLmNsYXNzTmFtZSwgc3RhdGVWYWwpLCBzdGF0ZVZhbCAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZiA9IGpRdWVyeSggdGhpcyApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVWYWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KCBjb3JlX3JzcGFj
ZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKGNsYXNzTmFt
ZSA9IGNsYXNzTmFtZXNbIGkrKyBdKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBjaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVk
IGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGlz
Qm9vbCA/IHN0YXRlIDogIXNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbIHN0YXRlID8gImFkZENsYXNzIiA6ICJy
ZW1vdmVDbGFzcyIgXSggY2xhc3NOYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gInVu
ZGVmaW5lZCIgfHwgdHlwZSA9PT0gImJvb2xlYW4iICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHRoaXMuY2xhc3NOYW1lICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGNsYXNzTmFtZSBpZiBzZXQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNz
TmFtZV9fIiwgdGhpcy5jbGFzc05hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvZ2dsZSB3aG9sZSBj
bGFzc05hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUg
PSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPyAiIiA6IGpRdWVyeS5fZGF0YSgg
dGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaGFzQ2xhc3M6IGZ1
bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gIiAi
ICsgc2VsZWN0b3IgKyAiICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBmb3Ig
KCA7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbaV0u
bm9kZVR5cGUgPT09IDEgJiYgKCIgIiArIHRoaXNbaV0uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNl
KHJjbGFzcywgIiAiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+PSAwICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtID0gdGhpc1swXTsKLQotICAgICAgICAgICAgICAgIGlmICggIWFyZ3VtZW50cy5sZW5n
dGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUg
XSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9v
a3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgInZhbHVlIiApKSAhPT0gdW5kZWZpbmVkICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBlbGVtLnZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiA/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNl
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5yZXBsYWNlKHJy
ZXR1cm4sICIiKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID09IG51bGwgPyAiIiA6IHJldDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24gPSBq
UXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oIGkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5KHRoaXMpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Z1bmN0aW9uICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBz
ZWxmLnZhbCgpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91bmRlZmluZWQg
YXMgIiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdmFsID09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bCA9ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9
PT0gIm51bWJlciIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCArPSAi
IjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2
YWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1h
cCh2YWwsIGZ1bmN0aW9uICggdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICsgIiI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhp
cy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkg
XTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVk
LCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWhvb2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAi
dmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy52YWx1ZSA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgfQotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotICAgICAgICB2
YWxIb29rczogewotICAgICAgICAgICAgICAgIG9wdGlvbjogewotICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYXR0cmlidXRlcy52YWx1ZSBpcyB1bmRlZmluZWQgaW4gQmxhY2tiZXJyeSA0Ljcg
YnV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZXMgLnZhbHVlLiBTZWUg
IzY5MzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0uYXR0
cmlidXRlcy52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF2
YWwgfHwgdmFsLnNwZWNpZmllZCA/IGVsZW0udmFsdWUgOiBlbGVtLnRleHQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBzZWxl
Y3Q6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwgb3B0aW9uLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBlbGVtLnNl
bGVjdGVkSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25l
ID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIgfHwgaW5kZXggPCAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSBvbmUgPyBpbmRleCAr
IDEgOiBvcHRpb25zLmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpID0gaW5kZXggPCAwID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1heCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbmUgPyBpbmRleCA6IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBvcHRpb25zWyBpIF07Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbGRJRSBkb2Vzbid0
IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09
IGluZGV4ICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3Ig
aW4gYSBkaXNhYmxlZCBvcHRncm91cAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoIGpRdWVyeS5zdXBwb3J0Lm9wdERpc2FibGVkID8gIW9w
dGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgPT09IG51bGwg
KSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAhalF1ZXJ5Lm5vZGVOYW1lKCBv
cHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiApICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUg
Zm9yIHRoZSBvcHRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJh
eSBmb3Igb25lIHNlbGVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggb25lICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMu
cHVzaCggdmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBqUXVlcnkubWFr
ZUFycmF5KCB2YWx1ZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eShlbGVtKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBqUXVlcnkuaW5BcnJheSgg
alF1ZXJ5KHRoaXMpLnZhbCgpLCB2YWx1ZXMgKSA+PSAwOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF2
YWx1ZXMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0g
ICAgICAgIC8vIFVudXNlZCBpbiAxLjgsIGxlZnQgaW4gc28gYXR0ckZuLXN0YWJiZXJzIHdvbid0
IGRpZTsgcmVtb3ZlIGluIDEuOQotICAgICAgICBhdHRyRm46IHt9LAotCi0gICAgICAgIGF0dHI6
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgcGFzcyApIHsKLSAgICAgICAgICAgICAgICB2
YXIgcmV0LCBob29rcywgbm90eG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgblR5cGUgPSBl
bGVtLm5vZGVUeXBlOwotCi0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgZ2V0L3NldCBhdHRyaWJ1
dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwotICAgICAgICAgICAgICAg
IGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCBwYXNzICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBqUXVlcnku
Zm5bIG5hbWUgXSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSgg
ZWxlbSApWyBuYW1lIF0oIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0
ZWQKLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVu
ZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnByb3Ao
IGVsZW0sIG5hbWUsIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApOwotCi0g
ICAgICAgICAgICAgICAgLy8gQWxsIGF0dHJpYnV0ZXMgYXJlIGxvd2VyY2FzZQotICAgICAgICAg
ICAgICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWQKLSAgICAgICAg
ICAgICAgICBpZiAoIG5vdHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBu
YW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVy
eS5hdHRySG9va3NbIG5hbWUgXSB8fCAoIHJib29sZWFuLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29r
IDogbm9kZUhvb2sgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dmFsdWUgPT09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaG9va3Mg
JiYgInNldCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZh
bHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2
YWx1ZSArICIiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIG5vdHhtbCAmJiAocmV0ID0gaG9va3MuZ2V0
KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJldDsKLQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3Jt
YWxpemUgdG8gdW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09
PSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSwKLQotICAgICAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lLCBhdHRyTmFtZXMsIG5hbWUsIGlzQm9vbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCB2
YWx1ZSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhdHRyTmFtZXMgPSB2YWx1ZS5zcGxpdCggY29yZV9yc3BhY2UgKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggOyBpIDwgYXR0ck5hbWVzLmxlbmd0aDsgaSsrICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gYXR0ck5hbWVzWyBpIF07Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUg
XSB8fCBuYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQm9v
bCA9IHJib29sZWFuLnRlc3QoIG5hbWUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNlZSAjOTY5OSBmb3IgZXhwbGFuYXRpb24gb2YgdGhpcyBhcHByb2Fj
aCAoc2V0dGluZyBmaXJzdCwgdGhlbiByZW1vdmFsKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERvIG5vdCBkbyB0aGlzIGZvciBib29sZWFuIGF0dHJpYnV0ZXMg
KHNlZSAjMTA4NzApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhaXNCb29sICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUsICIiICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBnZXRTZXRBdHRyaWJ1dGUgPyBuYW1lIDogcHJv
cE5hbWUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNl
dCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlIGZvciBib29sZWFuIGF0dHJpYnV0ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzQm9vbCAmJiBw
cm9wTmFtZSBpbiBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
fSwKLQotICAgICAgICBhdHRySG9va3M6IHsKLSAgICAgICAgICAgICAgICB0eXBlOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgYWxsb3cgdGhlIHR5cGUgcHJv
cGVydHkgdG8gYmUgY2hhbmdlZCAoc2luY2UgaXQgY2F1c2VzIHByb2JsZW1zIGluIElFKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJ0eXBlLnRlc3QoIGVsZW0ubm9kZU5h
bWUgKSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2Vk
IiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhalF1ZXJ5
LnN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJiBqUXVlcnkubm9kZU5h
bWUoZWxlbSwgImlucHV0IikgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gU2V0dGluZyB0aGUgdHlwZSBvbiBhIHJhZGlvIGJ1dHRvbiBhZnRlciB0aGUgdmFs
dWUgcmVzZXRzIHRoZSB2YWx1ZSBpbiBJRTYtOQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlc2V0IHZhbHVlIHRvIGl0J3MgZGVmYXVsdCBpbiBjYXNlIHR5cGUg
aXMgc2V0IGFmdGVyIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBmb3IgZWxlbWVudCBjcmVhdGlvbgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLnZhbHVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVl
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWwgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnZh
bHVlID0gdmFsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgdmFsdWUgcHJv
cGVydHkgZm9yIGJhY2sgY29tcGF0Ci0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBub2RlSG9v
ayBmb3IgYnV0dG9uIGVsZW1lbnRzIGluIElFNi83ICgjMTk1NCkKLSAgICAgICAgICAgICAgICB2
YWx1ZTogewotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlSG9vayAmJiBq
UXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29rLmdldCggZWxlbSwgbmFtZSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuYW1lIGluIGVsZW0gPwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVO
YW1lKCBlbGVtLCAiYnV0dG9uIiApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRG9lcyBub3QgcmV0dXJuIHNvIHRoYXQgc2V0QXR0cmlidXRlIGlzIGFsc28gdXNl
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAot
Ci0gICAgICAgIHByb3BGaXg6IHsKLSAgICAgICAgICAgICAgICB0YWJpbmRleDogInRhYkluZGV4
IiwKLSAgICAgICAgICAgICAgICByZWFkb25seTogInJlYWRPbmx5IiwKLSAgICAgICAgICAgICAg
ICAiZm9yIjogImh0bWxGb3IiLAotICAgICAgICAgICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUi
LAotICAgICAgICAgICAgICAgIG1heGxlbmd0aDogIm1heExlbmd0aCIsCi0gICAgICAgICAgICAg
ICAgY2VsbHNwYWNpbmc6ICJjZWxsU3BhY2luZyIsCi0gICAgICAgICAgICAgICAgY2VsbHBhZGRp
bmc6ICJjZWxsUGFkZGluZyIsCi0gICAgICAgICAgICAgICAgcm93c3BhbjogInJvd1NwYW4iLAot
ICAgICAgICAgICAgICAgIGNvbHNwYW46ICJjb2xTcGFuIiwKLSAgICAgICAgICAgICAgICB1c2Vt
YXA6ICJ1c2VNYXAiLAotICAgICAgICAgICAgICAgIGZyYW1lYm9yZGVyOiAiZnJhbWVCb3JkZXIi
LAotICAgICAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZTogImNvbnRlbnRFZGl0YWJsZSIKLSAg
ICAgICAgfSwKLQotICAgICAgICBwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHJldCwgaG9va3MsIG5vdHhtbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgICAgICAgICAgICAgIC8vIGRv
bid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9k
ZXMKLSAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09
PSA4IHx8IG5UeXBlID09PSAyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5vdHhtbCA9IG5UeXBlICE9PSAx
IHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKLQotICAgICAgICAgICAgICAgIGlmICggbm90
eG1sICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4IG5hbWUgYW5kIGF0dGFjaCBo
b29rcwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1l
IF0gfHwgbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BI
b29rc1sgbmFtZSBdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgg
dmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaG9v
a3MgJiYgInNldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5h
bWUgKSkgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJldDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChy
ZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtWyBu
YW1lIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9LAotCi0gICAgICAgIHByb3BIb29rczogewotICAgICAgICAgICAgICAgIHRhYkluZGV4
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3
YXlzIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0
bHkgc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9mbHVpZHBy
b2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRh
YmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBhdHRyaWJ1dGVOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRl
eCIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVO
b2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkID8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUludCggYXR0cmlidXRlTm9kZS52YWx1ZSwgMTAgKSA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBl
bGVtLm5vZGVOYW1lICkgfHwgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxl
bS5ocmVmID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5k
ZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotfSk7Ci0KLS8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwotYm9vbEhvb2sg
PSB7Ci0gICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggY29ycmVzcG9uZGluZyBwcm9wZXJ0
aWVzCi0gICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGF0dHJpYnV0ZSBwcmVzZW5jZSB3
aGVyZSBzb21lIGJvb2xlYW5zIGFyZSBub3Qgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgdmFy
IGF0dHJOb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBqUXVlcnkucHJv
cCggZWxlbSwgbmFtZSApOwotICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eSA9PT0gdHJ1
ZSB8fCB0eXBlb2YgcHJvcGVydHkgIT09ICJib29sZWFuIiAmJiAoIGF0dHJOb2RlID0gZWxlbS5n
ZXRBdHRyaWJ1dGVOb2RlKG5hbWUpICkgJiYgYXR0ck5vZGUubm9kZVZhbHVlICE9PSBmYWxzZSA/
Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkgOgotICAgICAgICAg
ICAgICAgICAgICAgICAgdW5kZWZpbmVkOwotICAgICAgICB9LAotICAgICAgICBzZXQ6IGZ1bmN0
aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWU7
Ci0gICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSAp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB2
YWx1ZSBpcyB0cnVlIHNpbmNlIHdlIGtub3cgYXQgdGhpcyBwb2ludCBpdCdzIHR5cGUgYm9vbGVh
biBhbmQgbm90IGZhbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYm9vbGVhbiBh
dHRyaWJ1dGVzIHRvIHRoZSBzYW1lIG5hbWUgYW5kIHNldCB0aGUgRE9NIHByb3BlcnR5Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwg
bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvcE5hbWUgaW4gZWxlbSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBzZXQgdGhlIElETCBzcGVj
aWZpY2FsbHkgaWYgaXQgYWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1lbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmli
dXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICAgIH0KLX07Ci0KLS8vIElFNi83IGRvIG5v
dCBzdXBwb3J0IGdldHRpbmcvc2V0dGluZyBzb21lIGF0dHJpYnV0ZXMgd2l0aCBnZXQvc2V0QXR0
cmlidXRlCi1pZiAoICFnZXRTZXRBdHRyaWJ1dGUgKSB7Ci0KLSAgICAgICAgZml4U3BlY2lmaWVk
ID0gewotICAgICAgICAgICAgICAgIG5hbWU6IHRydWUsCi0gICAgICAgICAgICAgICAgaWQ6IHRy
dWUsCi0gICAgICAgICAgICAgICAgY29vcmRzOiB0cnVlCi0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4gSUU2LzcKLSAgICAgICAgLy8gVGhpcyBm
aXhlcyBhbG1vc3QgZXZlcnkgSUU2LzcgaXNzdWUKLSAgICAgICAgbm9kZUhvb2sgPSBqUXVlcnku
dmFsSG9va3MuYnV0dG9uID0gewotICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0s
IG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ICYmICggZml4U3BlY2lmaWVkWyBuYW1lIF0gPyBy
ZXQudmFsdWUgIT09ICIiIDogcmV0LnNwZWNpZmllZCApID8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0LnZhbHVlIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc2V0OiBmdW5j
dGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBT
ZXQgdGhlIGV4aXN0aW5nIG9yIGNyZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgbm9kZQotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmV0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoIG5hbWUgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGVOb2RlKCByZXQg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAoIHJldC52YWx1ZSA9IHZhbHVlICsgIiIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgLy8gU2V0IHdpZHRoIGFuZCBoZWlnaHQgdG8gYXV0byBpbnN0ZWFk
IG9mIDAgb24gZW1wdHkgc3RyaW5nKCBCdWcgIzgxNTAgKQotICAgICAgICAvLyBUaGlzIGlzIGZv
ciByZW1vdmFscwotICAgICAgICBqUXVlcnkuZWFjaChbICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1
bmN0aW9uKCBpLCBuYW1lICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRySG9va3NbIG5h
bWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSwgewotICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICIiICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCAi
YXV0byIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
Ly8gU2V0IGNvbnRlbnRlZGl0YWJsZSB0byBmYWxzZSBvbiByZW1vdmFscygjMTA0MjkpCi0gICAg
ICAgIC8vIFNldHRpbmcgdG8gZW1wdHkgc3RyaW5nIHRocm93cyBhbiBlcnJvciBhcyBhbiBpbnZh
bGlkIHZhbHVlCi0gICAgICAgIGpRdWVyeS5hdHRySG9va3MuY29udGVudGVkaXRhYmxlID0gewot
ICAgICAgICAgICAgICAgIGdldDogbm9kZUhvb2suZ2V0LAotICAgICAgICAgICAgICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB2YWx1ZSA9PT0gIiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gImZhbHNlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVIb29rLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci19Ci0KLQotLy8gU29tZSBhdHRyaWJ1dGVzIHJlcXVpcmUgYSBz
cGVjaWFsIGNhbGwgb24gSUUKLWlmICggIWpRdWVyeS5zdXBwb3J0LmhyZWZOb3JtYWxpemVkICkg
ewotICAgICAgICBqUXVlcnkuZWFjaChbICJocmVmIiwgInNyYyIsICJ3aWR0aCIsICJoZWlnaHQi
IF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRySG9v
a3NbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSwgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1l
LCAyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51
bGwgPyB1bmRlZmluZWQgOiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotfQotCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5zdHls
ZSApIHsKLSAgICAgICAgalF1ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKLSAgICAgICAgICAgICAg
ICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0
dXJuIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBlbXB0eSBzdHJpbmcKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0byBsb3dlcmNhc2Ugc2luY2UgSUUgdXBwZXJjYXNlcyBj
c3MgcHJvcGVydHkgbmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnN0
eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKSB8fCB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoIGVsZW0uc3R5bGUuY3NzVGV4dCA9IHZhbHVlICsg
IiIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH07Ci19Ci0KLS8vIFNhZmFyaSBtaXMt
cmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBhbiBvcHRpb24KLS8vIEFj
Y2Vzc2luZyB0aGUgcGFyZW50J3Mgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eSBmaXhlcyBpdAotaWYg
KCAhalF1ZXJ5LnN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7Ci0gICAgICAgIGpRdWVyeS5wcm9wSG9v
a3Muc2VsZWN0ZWQgPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkLCB7
Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcGFyZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnQuc2VsZWN0ZWRJbmRleDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3
MDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQucGFyZW50Tm9k
ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQucGFy
ZW50Tm9kZS5zZWxlY3RlZEluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotfQotCi0vLyBJRTYvNyBj
YWxsIGVuY3R5cGUgZW5jb2RpbmcKLWlmICggIWpRdWVyeS5zdXBwb3J0LmVuY3R5cGUgKSB7Ci0g
ICAgICAgIGpRdWVyeS5wcm9wRml4LmVuY3R5cGUgPSAiZW5jb2RpbmciOwotfQotCi0vLyBSYWRp
b3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlcgotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hl
Y2tPbiApIHsKLSAgICAgICAgalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0gewot
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGluIFdlYmtp
dCAiIiBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYgYSB2YWx1ZSBpc24ndCBzcGVjaWZp
ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmli
dXRlKCJ2YWx1ZSIpID09PSBudWxsID8gIm9uIiA6IGVsZW0udmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci19Ci1qUXVlcnku
ZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGpRdWVy
eS52YWxIb29rc1sgdGhpcyBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnZhbEhvb2tzWyB0aGlz
IF0sIHsKLSAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpR
dWVyeS5pbkFycmF5KCBqUXVlcnkoZWxlbSkudmFsKCksIHZhbHVlICkgPj0gMCApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci19KTsK
LXZhciByZm9ybUVsZW1zID0gL14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLAotICAgICAg
ICBydHlwZW5hbWVzcGFjZSA9IC9eKFteXC5dKnwpKD86XC4oLispfCkkLywKLSAgICAgICAgcmhv
dmVySGFjayA9IC8oPzpefFxzKWhvdmVyKFwuXFMrfClcYi8sCi0gICAgICAgIHJrZXlFdmVudCA9
IC9ea2V5LywKLSAgICAgICAgcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfGNvbnRleHRtZW51KXxj
bGljay8sCi0gICAgICAgIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRi
bHVyKSQvLAotICAgICAgICBob3ZlckhhY2sgPSBmdW5jdGlvbiggZXZlbnRzICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBqUXVlcnkuZXZlbnQuc3BlY2lhbC5ob3ZlciA/IGV2ZW50cyA6IGV2
ZW50cy5yZXBsYWNlKCByaG92ZXJIYWNrLCAibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMSIgKTsK
LSAgICAgICAgfTsKLQotLyoKLSAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50
cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4KLSAqIFByb3BzIHRvIERlYW4g
RWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuCi0gKi8KLWpR
dWVyeS5ldmVudCA9IHsKLQotICAgICAgICBhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFu
ZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZWxlbURhdGEs
IGV2ZW50SGFuZGxlLCBldmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICB0LCB0bnMsIHR5
cGUsIG5hbWVzcGFjZXMsIGhhbmRsZU9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZU9iakluLCBoYW5kbGVycywgc3BlY2lhbDsKLQotICAgICAgICAgICAgICAgIC8vIERvbid0IGF0
dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQvY29tbWVudCBub2RlcyAoYWxsb3cgcGxhaW4g
b2JqZWN0cyB0aG8pCi0gICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIXR5cGVzIHx8ICFoYW5kbGVyIHx8ICEoZWxlbURhdGEg
PSBqUXVlcnkuX2RhdGEoIGVsZW0gKSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ2FsbGVyIGNhbiBw
YXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyCi0g
ICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElE
LCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyCi0gICAgICAgICAgICAgICAgaWYgKCAhaGFu
ZGxlci5ndWlkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5ndWlkID0galF1
ZXJ5Lmd1aWQrKzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBJbml0
IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMg
aXMgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzOwot
ICAgICAgICAgICAgICAgIGlmICggIWV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1EYXRhLmV2ZW50cyA9IGV2ZW50cyA9IHt9OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZTsKLSAgICAgICAgICAgICAg
ICBpZiAoICFldmVudEhhbmRsZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1EYXRh
LmhhbmRsZSA9IGV2ZW50SGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5l
dmVudC50cmlnZ2VyKCkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdo
ZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09ICJ1bmRlZmlu
ZWQiICYmICghZSB8fCBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUpID8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2gu
YXBwbHkoIGV2ZW50SGFuZGxlLmVsZW0sIGFyZ3VtZW50cyApIDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBv
ZiB0aGUgaGFuZGxlIGZuIHRvIHByZXZlbnQgYSBtZW1vcnkgbGVhayB3aXRoIElFIG5vbi1uYXRp
dmUgZXZlbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZS5lbGVtID0gZWxl
bTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbXVsdGlw
bGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCi0gICAgICAgICAgICAgICAgLy8galF1ZXJ5
KC4uLikuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOwotICAgICAgICAgICAgICAgIHR5
cGVzID0galF1ZXJ5LnRyaW0oIGhvdmVySGFjayh0eXBlcykgKS5zcGxpdCggIiAiICk7Ci0gICAg
ICAgICAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgdG5zID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbdF0g
KSB8fCBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0bnNbMV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gKCB0bnNbMl0gfHwgIiIgKS5zcGxpdCggIi4i
ICkuc29ydCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBldmVudCBjaGFuZ2Vz
IGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2Vk
IHR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3Bl
Y2lhbFsgdHlwZSBdIHx8IHt9OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzZWxl
Y3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNl
IGdpdmVuIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAoIHNlbGVjdG9yID8g
c3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVz
ZXQgdHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5z
cGVjaWFsWyB0eXBlIF0gfHwge307Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRs
ZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzCi0gICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Jp
Z1R5cGU6IHRuc1sxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZDogaGFuZGxlci5ndWlkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4
cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCIuIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0sIGhhbmRsZU9iakluICk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlcnMgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9h
dHRhY2hFdmVudCBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNwZWNpYWwuc2V0dXAgfHwgc3Bl
Y2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09
PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBC
aW5kIHRoZSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5h
ZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSwgZmFsc2UgKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0uYXR0YWNoRXZl
bnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLmF0dGFjaEV2ZW50KCAib24iICsgdHlwZSwgZXZlbnRIYW5kbGUgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzcGVjaWFsLmFkZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlci5ndWlk
ID0gaGFuZGxlci5ndWlkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0
byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwg
aGFuZGxlT2JqICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCB0
cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGlt
aXphdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlw
ZSBdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBOdWxs
aWZ5IGVsZW0gdG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKLSAgICAgICAgICAgICAgICBl
bGVtID0gbnVsbDsKLSAgICAgICAgfSwKLQotICAgICAgICBnbG9iYWw6IHt9LAotCi0gICAgICAg
IC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAotICAg
ICAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1h
cHBlZFR5cGVzICkgewotCi0gICAgICAgICAgICAgICAgdmFyIHQsIHRucywgdHlwZSwgb3JpZ1R5
cGUsIG5hbWVzcGFjZXMsIG9yaWdDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGosIGV2
ZW50cywgc3BlY2lhbCwgZXZlbnRUeXBlLCBoYW5kbGVPYmosCi0gICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtRGF0YSA9IGpRdWVyeS5oYXNEYXRhKCBlbGVtICkgJiYgalF1ZXJ5Ll9kYXRhKCBl
bGVtICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoICFlbGVtRGF0YSB8fCAhKGV2ZW50cyA9IGVs
ZW1EYXRhLmV2ZW50cykgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gT25jZSBmb3IgZWFjaCB0eXBlLm5h
bWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZAotICAgICAgICAgICAgICAgIHR5
cGVzID0galF1ZXJ5LnRyaW0oIGhvdmVySGFjayggdHlwZXMgfHwgIiIgKSApLnNwbGl0KCIgIik7
Ci0gICAgICAgICAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVz
W3RdICkgfHwgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0
bnNbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gdG5zWzJdOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1l
c3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIXR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IHR5cGUgaW4gZXZlbnRzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVy
LCBzZWxlY3RvciwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2
ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSAoIHNlbGVjdG9yPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8
fCB0eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlID0gZXZlbnRzWyB0eXBl
IF0gfHwgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnQ291bnQgPSBldmVudFR5cGUu
bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IG5hbWVzcGFjZXMg
PyBuZXcgUmVnRXhwKCIoXnxcXC4pIiArIG5hbWVzcGFjZXMuc3BsaXQoIi4iKS5zb3J0KCkuam9p
bigiXFwuKD86LipcXC58KSIpICsgIihcXC58JCkiKSA6IG51bGw7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHMKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGogPSAwOyBqIDwgZXZlbnRUeXBlLmxlbmd0aDsgaisrICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGogXTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5
cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmou
Z3VpZCApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggIW5h
bWVzcGFjZXMgfHwgbmFtZXNwYWNlcy50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFzZWxlY3RvciB8fCBz
ZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAiKioiICYmIGhh
bmRsZU9iai5zZWxlY3RvciApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUuZGVsZWdh
dGVDb3VudC0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3Zl
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bl
Y2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5k
IG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIChhdm9p
ZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVj
aWFsIGV2ZW50IGhhbmRsZXJzKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudFR5
cGUubGVuZ3RoID09PSAwICYmIG9yaWdDb3VudCAhPT0gZXZlbnRUeXBlLmxlbmd0aCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fCBz
cGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSAp
ID09PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGV2ZW50c1sgdHlwZSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5k
byBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCi0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNF
bXB0eU9iamVjdCggZXZlbnRzICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUg
ZWxlbURhdGEuaGFuZGxlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmVEYXRh
IGFsc28gY2hlY2tzIGZvciBlbXB0aW5lc3MgYW5kIGNsZWFycyB0aGUgZXhwYW5kbyBpZiBlbXB0
eQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdXNlIGl0IGluc3RlYWQgb2YgZGVsZXRl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgImV2ZW50
cyIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8g
RXZlbnRzIHRoYXQgYXJlIHNhZmUgdG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUg
YXR0YWNoZWQuCi0gICAgICAgIC8vIE5hdGl2ZSBET00gZXZlbnRzIHNob3VsZCBub3QgYmUgYWRk
ZWQsIHRoZXkgbWF5IGhhdmUgaW5saW5lIGhhbmRsZXJzLgotICAgICAgICBjdXN0b21FdmVudDog
ewotICAgICAgICAgICAgICAgICJnZXREYXRhIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAic2V0
RGF0YSI6IHRydWUsCi0gICAgICAgICAgICAgICAgImNoYW5nZURhdGEiOiB0cnVlCi0gICAgICAg
IH0sCi0KLSAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5
SGFuZGxlcnMgKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQg
YW5kIGNvbW1lbnQgbm9kZXMKLSAgICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgKGVsZW0ubm9k
ZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
RXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKLSAgICAgICAgICAgICAgICB2YXIgY2FjaGUsIGV4
Y2x1c2l2ZSwgaSwgY3VyLCBvbGQsIG9udHlwZSwgc3BlY2lhbCwgaGFuZGxlLCBldmVudFBhdGgs
IGJ1YmJsZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gZXZlbnQudHlwZSB8
fCBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBbXTsKLQotICAg
ICAgICAgICAgICAgIC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUg
d2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vdwotICAgICAgICAgICAgICAgIGlmICggcmZv
Y3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZiggIiEiICkgPj0gMCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEV4Y2x1c2l2ZSBldmVudHMgdHJpZ2dlciBvbmx5IGZvciB0aGUgZXhhY3Qg
ZXZlbnQgKG5vIG5hbWVzcGFjZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlw
ZS5zbGljZSgwLCAtMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNsdXNpdmUgPSB0cnVl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggdHlwZS5pbmRleE9m
KCAiLiIgKSA+PSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmFtZXNwYWNlZCB0
cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIi4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLnNvcnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoICghZWxlbSB8fCBqUXVlcnkuZXZlbnQuY3VzdG9tRXZlbnRb
IHR5cGUgXSkgJiYgIWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE5vIGpRdWVyeSBoYW5kbGVycyBmb3IgdGhpcyBldmVudCB0eXBlLCBh
bmQgaXQgY2FuJ3QgaGF2ZSBpbmxpbmUgaGFuZGxlcnMKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBDYWxsZXIg
Y2FuIHBhc3MgaW4gYW4gRXZlbnQsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmlu
ZwotICAgICAgICAgICAgICAgIGV2ZW50ID0gdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBqUXVlcnkuRXZlbnQgb2JqZWN0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/IGV2ZW50IDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE9iamVjdCBsaXRlcmFsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEp1c3QgdGhlIGV2ZW50IHR5cGUgKHN0cmluZykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUgKTsKLQotICAgICAgICAgICAgICAgIGV2ZW50LnR5
cGUgPSB0eXBlOwotICAgICAgICAgICAgICAgIGV2ZW50LmlzVHJpZ2dlciA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgZXZlbnQuZXhjbHVzaXZlID0gZXhjbHVzaXZlOwotICAgICAgICAgICAgICAg
IGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggIi4iICk7Ci0gICAgICAgICAgICAg
ICAgZXZlbnQubmFtZXNwYWNlX3JlID0gZXZlbnQubmFtZXNwYWNlPyBuZXcgUmVnRXhwKCIoXnxc
XC4pIiArIG5hbWVzcGFjZXMuam9pbigiXFwuKD86LipcXC58KSIpICsgIihcXC58JCkiKSA6IG51
bGw7Ci0gICAgICAgICAgICAgICAgb250eXBlID0gdHlwZS5pbmRleE9mKCAiOiIgKSA8IDAgPyAi
b24iICsgdHlwZSA6ICIiOwotCi0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIGEgZ2xvYmFsIHRy
aWdnZXIKLSAgICAgICAgICAgICAgICBpZiAoICFlbGVtICkgewotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUT0RPOiBTdG9wIHRhdW50aW5nIHRoZSBkYXRhIGNhY2hlOyByZW1vdmUgZ2xv
YmFsIGV2ZW50cyBhbmQgYWx3YXlzIGF0dGFjaCB0byBkb2N1bWVudAotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGUgPSBqUXVlcnkuY2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBpIGluIGNhY2hlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGNhY2hlWyBpIF0uZXZlbnRzICYmIGNhY2hlWyBpIF0uZXZlbnRzWyB0eXBlIF0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIo
IGV2ZW50LCBkYXRhLCBjYWNoZVsgaSBdLmhhbmRsZS5lbGVtLCB0cnVlICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWQK
LSAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKCAhZXZlbnQudGFyZ2V0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
dGFyZ2V0ID0gZWxlbTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBD
bG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRo
ZSBoYW5kbGVyIGFyZyBsaXN0Ci0gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/
IGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSA6IFtdOwotICAgICAgICAgICAgICAgIGRhdGEudW5z
aGlmdCggZXZlbnQgKTsKLQotICAgICAgICAgICAgICAgIC8vIEFsbG93IHNwZWNpYWwgZXZlbnRz
IHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXMKLSAgICAgICAgICAgICAgICBzcGVjaWFsID0galF1
ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKLSAgICAgICAgICAgICAgICBpZiAoIHNw
ZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0g
ZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBh
dGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpCi0gICAgICAgICAgICAg
ICAgLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEg
Z2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKLSAgICAgICAgICAgICAgICBldmVudFBh
dGggPSBbWyBlbGVtLCBzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGUgXV07Ci0gICAgICAgICAgICAg
ICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNX
aW5kb3coIGVsZW0gKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlVHlwZSA9
IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
dXIgPSByZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApID8gZWxlbSA6IGVsZW0u
cGFyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG9sZCA9IGVsZW07IGN1
cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV2ZW50UGF0aC5wdXNoKFsgY3VyLCBidWJibGVUeXBlIF0pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbGQgPSBjdXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8g
ZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKQotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBvbGQgPT09IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1l
bnQpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFBhdGgucHVzaChb
IG9sZC5kZWZhdWx0VmlldyB8fCBvbGQucGFyZW50V2luZG93IHx8IHdpbmRvdywgYnViYmxlVHlw
ZSBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoCi0gICAgICAg
ICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBldmVudFBhdGgubGVuZ3RoICYmICFldmVudC5pc1By
b3BhZ2F0aW9uU3RvcHBlZCgpOyBpKysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1
ciA9IGV2ZW50UGF0aFtpXVswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUg
PSBldmVudFBhdGhbaV1bMV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9ICgg
alF1ZXJ5Ll9kYXRhKCBjdXIsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmIGpR
dWVyeS5fZGF0YSggY3VyLCAiaGFuZGxlIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBoYW5kbGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5hcHBs
eSggY3VyLCBkYXRhICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhcmUgSlMgZnVuY3Rpb24gYW5kIG5v
dCBhIGpRdWVyeSBoYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSBvbnR5
cGUgJiYgY3VyWyBvbnR5cGUgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxl
ICYmIGpRdWVyeS5hY2NlcHREYXRhKCBjdXIgKSAmJiBoYW5kbGUuYXBwbHkgJiYgaGFuZGxlLmFw
cGx5KCBjdXIsIGRhdGEgKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSB0eXBlOwot
Ci0gICAgICAgICAgICAgICAgLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rp
b24sIGRvIGl0IG5vdwotICAgICAgICAgICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZl
bnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggKCFzcGVjaWFsLl9kZWZhdWx0IHx8IHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGVsZW0ub3du
ZXJEb2N1bWVudCwgZGF0YSApID09PSBmYWxzZSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgISh0eXBlID09PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImEi
ICkpICYmIGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQg
d2l0aCB0aGUgc2FtZSBuYW1lIG5hbWUgYXMgdGhlIGV2ZW50LgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgYW4gLmlzRnVuY3Rpb24oKSBjaGVjayBoZXJlIGJl
Y2F1c2UgSUU2LzcgZmFpbHMgdGhhdCB0ZXN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUg
Z2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElFPDkgZGllcyBvbiBmb2N1cy9ibHVyIHRvIGhpZGRlbiBlbGVtZW50ICgjMTQ4NikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbnR5cGUgJiYgZWxlbVsgdHlw
ZSBdICYmICgodHlwZSAhPT0gImZvY3VzIiAmJiB0eXBlICE9PSAiYmx1ciIpIHx8IGV2ZW50LnRh
cmdldC5vZmZzZXRXaWR0aCAhPT0gMCkgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmUtdHJp
Z2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZCA9IGVsZW1bIG9udHlwZSBdOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5
cGUgXSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCByZS10
cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQg
YWJvdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQudHJpZ2dlcmVkID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtWyB0eXBlIF0oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG9sZDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OwotICAgICAgICB9
LAotCi0gICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVu
dCBvYmplY3QKLSAgICAgICAgICAgICAgICBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50
IHx8IHdpbmRvdy5ldmVudCApOwotCi0gICAgICAgICAgICAgICAgdmFyIGksIGosIGN1ciwgcmV0
LCBzZWxNYXRjaCwgbWF0Y2hlZCwgbWF0Y2hlcywgaGFuZGxlT2JqLCBzZWwsIHJlbGF0ZWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycyA9ICggKGpRdWVyeS5fZGF0YSggdGhpcywg
ImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10pLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhcmdzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJ1bl9hbGwgPSAhZXZlbnQuZXhjbHVzaXZlICYmICFldmVu
dC5uYW1lc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2
ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZXJRdWV1ZSA9IFtdOwotCi0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBmaXgtZWQg
alF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQKLSAg
ICAgICAgICAgICAgICBhcmdzWzBdID0gZXZlbnQ7Ci0gICAgICAgICAgICAgICAgZXZlbnQuZGVs
ZWdhdGVUYXJnZXQgPSB0aGlzOwotCi0gICAgICAgICAgICAgICAgLy8gQ2FsbCB0aGUgcHJlRGlz
cGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJl
ZAotICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnBy
ZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIERldGVybWluZSBoYW5kbGVycyB0aGF0IHNob3VsZCBydW4gaWYgdGhlcmUgYXJlIGRlbGVn
YXRlZCBldmVudHMKLSAgICAgICAgICAgICAgICAvLyBBdm9pZCBub24tbGVmdC1jbGljayBidWJi
bGluZyBpbiBGaXJlZm94ICgjMzg2MSkKLSAgICAgICAgICAgICAgICBpZiAoIGRlbGVnYXRlQ291
bnQgJiYgIShldmVudC5idXR0b24gJiYgZXZlbnQudHlwZSA9PT0gImNsaWNrIikgKSB7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGN1ciA9IGV2ZW50LnRhcmdldDsgY3VyICE9IHRo
aXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBjbGlja3MgKE9OTFkpIG9uIGRpc2FibGVk
IGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGN1ci5kaXNhYmxlZCAhPT0gdHJ1ZSB8fCBldmVudC50eXBl
ICE9PSAiY2xpY2siICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbE1hdGNoID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlcyA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbCA9IGhh
bmRsZU9iai5zZWxlY3RvcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzZWxNYXRjaFsgc2VsIF0gPT09IHVuZGVmaW5lZCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsTWF0
Y2hbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWws
IHRoaXMgKS5pbmRleCggY3VyICkgPj0gMCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQoIHNlbCwgdGhp
cywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBdICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goIGhhbmRs
ZU9iaiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXMubGVuZ3RoICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlclF1ZXVl
LnB1c2goeyBlbGVtOiBjdXIsIG1hdGNoZXM6IG1hdGNoZXMgfSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVy
cwotICAgICAgICAgICAgICAgIGlmICggaGFuZGxlcnMubGVuZ3RoID4gZGVsZWdhdGVDb3VudCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogdGhp
cywgbWF0Y2hlczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5
IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1cwotICAgICAgICAgICAgICAg
IGZvciAoIGkgPSAwOyBpIDwgaGFuZGxlclF1ZXVlLmxlbmd0aCAmJiAhZXZlbnQuaXNQcm9wYWdh
dGlvblN0b3BwZWQoKTsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9
IGhhbmRsZXJRdWV1ZVsgaSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY3VycmVu
dFRhcmdldCA9IG1hdGNoZWQuZWxlbTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
aiA9IDA7IGogPCBtYXRjaGVkLm1hdGNoZXMubGVuZ3RoICYmICFldmVudC5pc0ltbWVkaWF0ZVBy
b3BhZ2F0aW9uU3RvcHBlZCgpOyBqKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZU9iaiA9IG1hdGNoZWQubWF0Y2hlc1sgaiBdOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBiZSBub24t
ZXhjbHVzaXZlIGFuZCBoYXZlIG5vIG5hbWVzcGFjZSwgb3IKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gMikgaGF2ZSBuYW1lc3BhY2UocykgYSBzdWJzZXQgb3IgZXF1YWwgdG8g
dGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcnVuX2FsbCB8fCAoIWV2ZW50Lm5h
bWVzcGFjZSAmJiAhaGFuZGxlT2JqLm5hbWVzcGFjZSkgfHwgZXZlbnQubmFtZXNwYWNlX3JlICYm
IGV2ZW50Lm5hbWVzcGFjZV9yZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhID0gaGFuZGxl
T2JqLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQu
aGFuZGxlT2JqID0gaGFuZGxlT2JqOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gKCAoalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlw
ZSBdIHx8IHt9KS5oYW5kbGUgfHwgaGFuZGxlT2JqLmhhbmRsZXIgKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwbHkoIG1hdGNoZWQu
ZWxlbSwgYXJncyApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9IHJldDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQg
dHlwZQotICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVu
dCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5y
ZXN1bHQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gSW5jbHVkZXMgc29tZSBldmVudCBwcm9w
cyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQKLSAgICAgICAgLy8gKioqIGF0dHJD
aGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCAgYXJlIG5vdCBub3JtYWxpemVk
LCBub24tVzNDLCBkZXByZWNhdGVkLCB3aWxsIGJlIHJlbW92ZWQgaW4gMS44ICoqKgotICAgICAg
ICBwcm9wczogImF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCBhbHRL
ZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1l
dGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2gi
LnNwbGl0KCIgIiksCi0KLSAgICAgICAgZml4SG9va3M6IHt9LAotCi0gICAgICAgIGtleUhvb2tz
OiB7Ci0gICAgICAgICAgICAgICAgcHJvcHM6ICJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5z
cGxpdCgiICIpLAotICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmln
aW5hbCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBrZXkg
ZXZlbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LndoaWNoID09IG51bGwg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gb3JpZ2lu
YWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29k
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGV2ZW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBt
b3VzZUhvb2tzOiB7Ci0gICAgICAgICAgICAgICAgcHJvcHM6ICJidXR0b24gYnV0dG9ucyBjbGll
bnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVl
blggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksCi0gICAgICAgICAgICAgICAgZmlsdGVy
OiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGV2ZW50RG9jLCBkb2MsIGJvZHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnJvbUVsZW1lbnQgPSBvcmlnaW5hbC5mcm9tRWxlbWVudDsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2
YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5wYWdlWCA9PSBudWxs
ICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnREb2MgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVu
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gZXZlbnREb2MuZG9jdW1l
bnRFbGVtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZXZlbnRE
b2MuYm9keTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlWCA9
IG9yaWdpbmFsLmNsaWVudFggKyAoIGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJv
ZHkuc2Nyb2xsTGVmdCB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYm
IGJvZHkuY2xpZW50TGVmdCB8fCAwICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50LnBhZ2VZID0gb3JpZ2luYWwuY2xpZW50WSArICggZG9jICYmIGRvYy5zY3JvbGxUb3Ag
IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgIHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRU
b3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRUb3AgIHx8IDAgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHJlbGF0ZWRUYXJnZXQs
IGlmIG5lY2Vzc2FyeQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZXZlbnQucmVsYXRl
ZFRhcmdldCAmJiBmcm9tRWxlbWVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21FbGVtZW50ID09PSBldmVudC50YXJnZXQgPyBv
cmlnaW5hbC50b0VsZW1lbnQgOiBmcm9tRWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9
PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24ndCB1c2UgaXQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5k
ZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC53aGljaCA9
ICggYnV0dG9uICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24gJiA0ID8gMiA6
IDAgKSApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBldmVudDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgZml4OiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBldmVu
dFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
dmVudDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSB3
cml0YWJsZSBjb3B5IG9mIHRoZSBldmVudCBvYmplY3QgYW5kIG5vcm1hbGl6ZSBzb21lIHByb3Bl
cnRpZXMKLSAgICAgICAgICAgICAgICB2YXIgaSwgcHJvcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9yaWdpbmFsRXZlbnQgPSBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpeEhv
b2sgPSBqUXVlcnkuZXZlbnQuZml4SG9va3NbIGV2ZW50LnR5cGUgXSB8fCB7fSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhpcy5wcm9wcy5jb25jYXQo
IGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7Ci0KLSAgICAgICAgICAgICAgICBldmVudCA9
IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApOwotCi0gICAgICAgICAgICAgICAgZm9yICgg
aSA9IGNvcHkubGVuZ3RoOyBpOyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSBj
b3B5WyAtLWkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50WyBwcm9wIF0gPSBvcmln
aW5hbEV2ZW50WyBwcm9wIF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gRml4IHRhcmdldCBwcm9wZXJ0eSwgaWYgbmVjZXNzYXJ5ICgjMTkyNSwgSUUgNi83LzggJiBT
YWZhcmkyKQotICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnRhcmdldCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IG9yaWdpbmFsRXZlbnQuc3JjRWxlbWVudCB8
fCBkb2N1bWVudDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUYXJn
ZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgU2FmYXJpKQotICAgICAgICAgICAg
ICAgIGlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRm9yIG1vdXNlL2tleSBldmVudHMsIG1l
dGFLZXk9PWZhbHNlIGlmIGl0J3MgdW5kZWZpbmVkICgjMzM2OCwgIzExMzI4OyBJRTYvNy84KQot
ICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkgPSAhIWV2ZW50Lm1ldGFLZXk7Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gZml4SG9vay5maWx0ZXI/IGZpeEhvb2suZmlsdGVyKCBldmVudCwg
b3JpZ2luYWxFdmVudCApIDogZXZlbnQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc3BlY2lhbDog
ewotICAgICAgICAgICAgICAgIGxvYWQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBy
ZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93
LmxvYWQKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vQnViYmxlOiB0cnVlCi0gICAgICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgICAgIGZvY3VzOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAg
ICAgICAgICAgYmx1cjogewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiAi
Zm9jdXNvdXQiCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIGJlZm9yZXVu
bG9hZDogewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCBkYXRhLCBu
YW1lc3BhY2VzLCBldmVudEhhbmRsZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIHRoaXMg
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVm
b3JldW5sb2FkID0gZXZlbnRIYW5kbGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHRlYXJkb3duOiBmdW5jdGlvbiggbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5vbmJlZm9yZXVubG9hZCA9PT0gZXZl
bnRIYW5kbGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5vbmJlZm9yZXVubG9hZCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCwgYnVi
YmxlICkgewotICAgICAgICAgICAgICAgIC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRv
IHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZS4KLSAgICAgICAgICAgICAgICAvLyBGYWtlIG9yaWdp
bmFsRXZlbnQgdG8gYXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBpZiB0aGUKLSAg
ICAgICAgICAgICAgICAvLyBzaW11bGF0ZWQgZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVuIHdl
IGRvIHRoZSBzYW1lIG9uIHRoZSBkb25vci4KLSAgICAgICAgICAgICAgICB2YXIgZSA9IGpRdWVy
eS5leHRlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsg
dHlwZTogdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTaW11bGF0ZWQ6
IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IHt9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIGJ1YmJsZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5l
dmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5kaXNwYXRjaC5jYWxsKCBlbGVt
LCBlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggZS5pc0RlZmF1
bHRQcmV2ZW50ZWQoKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci19OwotCi0vLyBTb21lIHBs
dWdpbnMgYXJlIHVzaW5nLCBidXQgaXQncyB1bmRvY3VtZW50ZWQvZGVwcmVjYXRlZCBhbmQgd2ls
bCBiZSByZW1vdmVkLgotLy8gVGhlIDEuNyBzcGVjaWFsIGV2ZW50IGludGVyZmFjZSBzaG91bGQg
cHJvdmlkZSBhbGwgdGhlIGhvb2tzIG5lZWRlZCBub3cuCi1qUXVlcnkuZXZlbnQuaGFuZGxlID0g
alF1ZXJ5LmV2ZW50LmRpc3BhdGNoOwotCi1qUXVlcnkucmVtb3ZlRXZlbnQgPSBkb2N1bWVudC5y
ZW1vdmVFdmVudExpc3RlbmVyID8KLSAgICAgICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRs
ZSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwg
aGFuZGxlLCBmYWxzZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSA6Ci0gICAgICAg
IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5h
bWUgPSAib24iICsgdHlwZTsKLQotICAgICAgICAgICAgICAgIGlmICggZWxlbS5kZXRhY2hFdmVu
dCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gIzg1NDUsICM3MDU0LCBwcmV2ZW50
aW5nIG1lbW9yeSBsZWFrcyBmb3IgY3VzdG9tIGV2ZW50cyBpbiBJRTYtOAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZGV0YWNoRXZlbnQgbmVlZGVkIHByb3BlcnR5IG9uIGVsZW1lbnQsIGJ5
IG5hbWUgb2YgdGhhdCBldmVudCwgdG8gcHJvcGVybHkgZXhwb3NlIGl0IHRvIEdDCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtWyBuYW1lIF0gPT09ICJ1bmRlZmluZWQi
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0gPSBudWxs
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLmRldGFjaEV2ZW50KCBuYW1lLCBoYW5kbGUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgIH07Ci0KLWpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkgewotICAgICAg
ICAvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKLSAgICAg
ICAgaWYgKCAhKHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQpICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBFdmVudCBvYmplY3QKLSAgICAgICAgaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjOwotICAgICAgICAgICAg
ICAgIHRoaXMudHlwZSA9IHNyYy50eXBlOwotCi0gICAgICAgICAgICAgICAgLy8gRXZlbnRzIGJ1
YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQK
LSAgICAgICAgICAgICAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVm
bGVjdCB0aGUgY29ycmVjdCB2YWx1ZS4KLSAgICAgICAgICAgICAgICB0aGlzLmlzRGVmYXVsdFBy
ZXZlbnRlZCA9ICggc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwgc3JjLnJldHVyblZhbHVlID09PSBm
YWxzZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgc3JjLmdldFByZXZlbnREZWZhdWx0ICYm
IHNyYy5nZXRQcmV2ZW50RGVmYXVsdCgpICkgPyByZXR1cm5UcnVlIDogcmV0dXJuRmFsc2U7Ci0K
LSAgICAgICAgLy8gRXZlbnQgdHlwZQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHRoaXMudHlwZSA9IHNyYzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFB1dCBleHBsaWNpdGx5
IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0Ci0gICAgICAgIGlmICgg
cHJvcHMgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBl
dmVudCBkb2Vzbid0IGhhdmUgb25lCi0gICAgICAgIHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNy
Yy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpOwotCi0gICAgICAgIC8vIE1hcmsgaXQgYXMgZml4
ZWQKLSAgICAgICAgdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7Ci19OwotCi1mdW5jdGlv
biByZXR1cm5GYWxzZSgpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotfQotZnVuY3Rpb24gcmV0
dXJuVHJ1ZSgpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIGpRdWVyeS5FdmVudCBp
cyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFu
Z3VhZ2UgQmluZGluZwotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwt
My1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCi1qUXVlcnkuRXZlbnQu
cHJvdG90eXBlID0gewotICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwotCi0gICAg
ICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7Ci0gICAgICAgICAgICAgICAg
aWYgKCAhZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiBwcmV2ZW50RGVmYXVsdCBleGlzdHMgcnVu
IGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAotICAgICAgICAgICAgICAgIGlmICggZS5wcmV2ZW50
RGVmYXVsdCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsK
LQotICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQgdGhlIHJldHVyblZhbHVlIHByb3Bl
cnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBmYWxzZSAoSUUpCi0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIHN0b3BQcm9wYWdhdGlvbjog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9
IHJldHVyblRydWU7Ci0KLSAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVu
dDsKLSAgICAgICAgICAgICAgICBpZiAoICFlICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBpZiBzdG9wUHJv
cGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKLSAgICAgICAgICAg
ICAgICBpZiAoIGUuc3RvcFByb3BhZ2F0aW9uICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZS5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gb3RoZXJ3aXNlIHNldCB0aGUgY2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5h
bCBldmVudCB0byB0cnVlIChJRSkKLSAgICAgICAgICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRy
dWU7Ci0gICAgICAgIH0sCi0gICAgICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBl
ZCA9IHJldHVyblRydWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTsK
LSAgICAgICAgfSwKLSAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSwKLSAg
ICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAotICAgICAgICBpc0ltbWVk
aWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKLX07Ci0KLS8vIENyZWF0ZSBtb3Vz
ZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNo
ZWNrcwotalF1ZXJ5LmVhY2goewotICAgICAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKLSAg
ICAgICAgbW91c2VsZWF2ZTogIm1vdXNlb3V0IgotfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsK
LSAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKLSAgICAgICAgICAgICAg
ICBkZWxlZ2F0ZVR5cGU6IGZpeCwKLSAgICAgICAgICAgICAgICBiaW5kVHlwZTogZml4LAotCi0g
ICAgICAgICAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn
ZXQgPSB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkID0gZXZl
bnQucmVsYXRlZFRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
T2JqID0gZXZlbnQuaGFuZGxlT2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxlY3RvciA9IGhhbmRsZU9iai5zZWxlY3RvcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRm9yIG1vdXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0
c2lkZSB0aGUgdGFyZ2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTkI6IE5vIHJlbGF0
ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3cKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJlbGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRhcmdl
dCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFw
cGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnQudHlwZSA9IGZpeDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Owot
fSk7Ci0KLS8vIElFIHN1Ym1pdCBkZWxlZ2F0aW9uCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5zdWJt
aXRCdWJibGVzICkgewotCi0gICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLnN1Ym1pdCA9IHsK
LSAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPbmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3Jt
IiApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIExh
enktYWRkIGEgc3VibWl0IGhhbmRsZXIgd2hlbiBhIGRlc2NlbmRhbnQgZm9ybSBtYXkgcG90ZW50
aWFsbHkgYmUgc3VibWl0dGVkCi0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
YWRkKCB0aGlzLCAiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IiwgZnVuY3Rpb24oIGUg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgbmFtZSBjaGVjayBh
dm9pZHMgYSBWTUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9ybSA9IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0
IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSA/IGVsZW0uZm9ybSA6IHVu
ZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmb3JtICYmICFq
UXVlcnkuX2RhdGEoIGZvcm0sICJfc3VibWl0X2F0dGFjaGVkIiApICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGZvcm0sICJzdWJt
aXQuX3N1Ym1pdCIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zdWJtaXRfYnViYmxlID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGZvcm0sICJfc3VibWl0X2F0
dGFjaGVkIiwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVy
biB1bmRlZmluZWQgc2luY2Ugd2UgZG9uJ3QgbmVlZCBhbiBldmVudCBsaXN0ZW5lcgotICAgICAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBl
dmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGZvcm0gd2FzIHN1Ym1pdHRl
ZCBieSB0aGUgdXNlciwgYnViYmxlIHRoZSBldmVudCB1cCB0aGUgdHJlZQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBldmVudC5fc3VibWl0X2J1YmJsZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIGV2ZW50Ll9zdWJtaXRfYnViYmxlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNU
cmlnZ2VyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC5zaW11bGF0ZSggInN1Ym1pdCIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICB0ZWFyZG93bjog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IG5lZWQgdGhpcyBm
b3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBkZWxlZ2F0ZWQgaGFuZGxlcnM7
IGNsZWFuRGF0YSBldmVudHVhbGx5IHJlYXBzIHN1Ym1pdCBoYW5kbGVycyBhdHRhY2hlZCBhYm92
ZQotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5f
c3VibWl0IiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLX0KLQotLy8gSUUgY2hh
bmdlIGRlbGVnYXRpb24gYW5kIGNoZWNrYm94L3JhZGlvIGZpeAotaWYgKCAhalF1ZXJ5LnN1cHBv
cnQuY2hhbmdlQnViYmxlcyApIHsKLQotICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFu
Z2UgPSB7Ci0KLSAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGRvZXNuJ3QgZmlyZSBjaGFu
Z2Ugb24gYSBjaGVjay9yYWRpbyB1bnRpbCBibHVyOyB0cmlnZ2VyIGl0IG9uIGNsaWNrCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIGEgcHJvcGVydHljaGFuZ2UuIEVh
dCB0aGUgYmx1ci1jaGFuZ2UgaW4gc3BlY2lhbC5jaGFuZ2UuaGFuZGxlLgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHN0aWxsIGZpcmVzIG9uY2hhbmdlIGEgc2Vjb25k
IHRpbWUgZm9yIGNoZWNrL3JhZGlvIGFmdGVyIGJsdXIuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdGhpcy50eXBlID09PSAiY2hlY2tib3giIHx8IHRoaXMudHlwZSA9PT0g
InJhZGlvIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZXZlbnQuYWRkKCB0aGlzLCAicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uKCBl
dmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZXZlbnQub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUgPT09ICJjaGVja2VkIiApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fanVzdF9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5f
anVzdF9jaGFuZ2VkICYmICFldmVudC5pc1RyaWdnZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxs
b3cgdHJpZ2dlcmVkLCBzaW11bGF0ZWQgY2hhbmdlIGV2ZW50cyAoIzExNTAwKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVs
YXRlKCAiY2hhbmdlIiwgdGhpcywgZXZlbnQsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxlZ2F0ZWQg
ZXZlbnQ7IGxhenktYWRkIGEgY2hhbmdlIGhhbmRsZXIgb24gZGVzY2VuZGFudCBpbnB1dHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJiZWZvcmVhY3Rp
dmF0ZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCByZm9ybUVsZW1zLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiAhalF1ZXJ5Ll9k
YXRhKCBlbGVtLCAiX2NoYW5nZV9hdHRhY2hlZCIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCBlbGVtLCAiY2hhbmdlLl9jaGFu
Z2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11bGF0
ZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdl
IiwgdGhpcy5wYXJlbnROb2RlLCBldmVudCwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfYXR0YWNoZWQiLCB0cnVlICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uKCBl
dmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZXZlbnQudGFyZ2V0
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTd2FsbG93IG5hdGl2ZSBjaGFuZ2UgZXZl
bnRzIGZyb20gY2hlY2tib3gvcmFkaW8sIHdlIGFscmVhZHkgdHJpZ2dlcmVkIHRoZW0gYWJvdmUK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcyAhPT0gZWxlbSB8fCBldmVudC5pc1Np
bXVsYXRlZCB8fCBldmVudC5pc1RyaWdnZXIgfHwgKGVsZW0udHlwZSAhPT0gInJhZGlvIiAmJiBl
bGVtLnR5cGUgIT09ICJjaGVja2JveCIpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXZlbnQuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50
cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9jaGFuZ2UiICk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotfQotCi0vLyBDcmVhdGUgImJ1YmJsaW5n
IiBmb2N1cyBhbmQgYmx1ciBldmVudHMKLWlmICggIWpRdWVyeS5zdXBwb3J0LmZvY3VzaW5CdWJi
bGVzICkgewotICAgICAgICBqUXVlcnkuZWFjaCh7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJm
b2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKLQotICAgICAgICAgICAgICAgIC8v
IEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciB3aGlsZSBzb21lb25lIHdhbnRzIGZv
Y3VzaW4vZm9jdXNvdXQKLSAgICAgICAgICAgICAgICB2YXIgYXR0YWNoZXMgPSAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50
LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBm
aXggXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhdHRhY2hlcysrID09PSAwICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAtLWF0dGFjaGVzID09PSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRs
ZXIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgIH0pOwotfQotCi1q
UXVlcnkuZm4uZXh0ZW5kKHsKLQotICAgICAgICBvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3Rv
ciwgZGF0YSwgZm4sIC8qSU5URVJOQUwqLyBvbmUgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG9y
aWdGbiwgdHlwZTsKLQotICAgICAgICAgICAgICAgIC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0
eXBlcy9oYW5kbGVycwotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2Jq
ZWN0IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICggdHlwZXMtT2JqZWN0LCBzZWxl
Y3RvciwgZGF0YSApCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3Rv
ciAhPT0gInN0cmluZyIgKSB7IC8vICYmIHNlbGVjdG9yICE9IG51bGwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSB8fCBzZWxlY3RvcjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIHR5cGVz
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCB0eXBlLCBzZWxl
Y3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCB0eXBlcywgZm4gKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZm4gPSBzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEg
PSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBmbiA9
PSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3Ig
PT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoIHR5
cGVzLCBzZWxlY3RvciwgZm4gKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9
IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAoIHR5cGVzLCBkYXRhLCBmbiApCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZuID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSA9IHNlbGVjdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9
IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKCBmbiA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmbiA9IHJldHVybkZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFm
biApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggb25lID09PSAxICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgb3JpZ0ZuID0gZm47Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGZ1
bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fu
IHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgpLm9mZiggZXZlbnQgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1l
bnRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5n
dWlkID0galF1ZXJ5Lmd1aWQrKyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLSAgICAgICAgb25lOiBmdW5jdGlvbiggdHlw
ZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5v
biggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOwotICAgICAgICB9LAotICAgICAgICBv
ZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkgewotICAgICAgICAgICAgICAgIHZh
ciBoYW5kbGVPYmosIHR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5w
cmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID8gaGFuZGxlT2JqLm9yaWdU
eXBlICsgIi4iICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6IGhhbmRsZU9iai5vcmlnVHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLnNlbGVjdG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlcgotICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9i
amVjdCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAoIHR5cGVzLW9iamVjdCBbLCBz
ZWxlY3Rvcl0gKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmYoIHR5cGUsIHNlbGVj
dG9yLCB0eXBlc1sgdHlwZSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAi
ZnVuY3Rpb24iICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCB0eXBlcyBbLCBmbl0g
KQotICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBzZWxlY3RvcjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoIGZuID09PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZuID0gcmV0dXJuRmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYmluZDogZnVuY3Rpb24oIHR5cGVzLCBk
YXRhLCBmbiApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGws
IGRhdGEsIGZuICk7Ci0gICAgICAgIH0sCi0gICAgICAgIHVuYmluZDogZnVuY3Rpb24oIHR5cGVz
LCBmbiApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBm
biApOwotICAgICAgICB9LAotCi0gICAgICAgIGxpdmU6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwg
Zm4gKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzLmNvbnRleHQgKS5vbiggdHlwZXMs
IHRoaXMuc2VsZWN0b3IsIGRhdGEsIGZuICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgIH0sCi0gICAgICAgIGRpZTogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsKLSAgICAg
ICAgICAgICAgICBqUXVlcnkoIHRoaXMuY29udGV4dCApLm9mZiggdHlwZXMsIHRoaXMuc2VsZWN0
b3IgfHwgIioqIiwgZm4gKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
fSwKLQotICAgICAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwg
Zm4gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3Rvciwg
ZGF0YSwgZm4gKTsKLSAgICAgICAgfSwKLSAgICAgICAgdW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNl
bGVjdG9yLCB0eXBlcywgZm4gKSB7Ci0gICAgICAgICAgICAgICAgLy8gKCBuYW1lc3BhY2UgKSBv
ciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKQotICAgICAgICAgICAgICAgIHJldHVybiBhcmd1
bWVudHMubGVuZ3RoID09PSAxID8gdGhpcy5vZmYoIHNlbGVjdG9yLCAiKioiICkgOiB0aGlzLm9m
ZiggdHlwZXMsIHNlbGVjdG9yIHx8ICIqKiIsIGZuICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5l
dmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0sCi0gICAgICAgIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0gKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXNbMF0sIHRy
dWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgdG9nZ2xlOiBm
dW5jdGlvbiggZm4gKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJn
dW1lbnRzIGZvciBhY2Nlc3MgaW4gY2xvc3VyZQotICAgICAgICAgICAgICAgIHZhciBhcmdzID0g
YXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZCA9IGZuLmd1aWQgfHwgalF1
ZXJ5Lmd1aWQrKywKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgdG9nZ2xlciA9IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiB0byBleGVjdXRl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0VG9nZ2xlID0gKCBqUXVl
cnkuX2RhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1aWQgKSB8fCAwICkgJSBpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIHRoaXMsICJsYXN0VG9n
Z2xlIiArIGZuLmd1aWQsIGxhc3RUb2dnbGUgKyAxICk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgY2xpY2tzIHN0b3AKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZXhlY3V0ZSB0aGUgZnVuY3Rpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbIGxhc3RUb2dnbGUgXS5hcHBseSgg
dGhpcywgYXJndW1lbnRzICkgfHwgZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Owot
Ci0gICAgICAgICAgICAgICAgLy8gbGluayBhbGwgdGhlIGZ1bmN0aW9ucywgc28gYW55IG9mIHRo
ZW0gY2FuIHVuYmluZCB0aGlzIGNsaWNrIGhhbmRsZXIKLSAgICAgICAgICAgICAgICB0b2dnbGVy
Lmd1aWQgPSBndWlkOwotICAgICAgICAgICAgICAgIHdoaWxlICggaSA8IGFyZ3MubGVuZ3RoICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sgaSsrIF0uZ3VpZCA9IGd1aWQ7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xpY2soIHRvZ2ds
ZXIgKTsKLSAgICAgICAgfSwKLQotICAgICAgICBob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5P
dXQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICku
bW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7Ci0gICAgICAgIH0KLX0pOwotCi1qUXVlcnku
ZWFjaCggKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVu
bG9hZCBjbGljayBkYmxjbGljayAiICsKLSAgICAgICAgIm1vdXNlZG93biBtb3VzZXVwIG1vdXNl
bW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlICIgKwotICAgICAg
ICAiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250
ZXh0bWVudSIpLnNwbGl0KCIgIiksIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotCi0gICAgICAgIC8v
IEhhbmRsZSBldmVudCBiaW5kaW5nCi0gICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rp
b24oIGRhdGEsIGZuICkgewotICAgICAgICAgICAgICAgIGlmICggZm4gPT0gbnVsbCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZuID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGEgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biBhcmd1bWVudHMubGVuZ3RoID4gMCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9u
KCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
dHJpZ2dlciggbmFtZSApOwotICAgICAgICB9OwotCi0gICAgICAgIGlmICggcmtleUV2ZW50LnRl
c3QoIG5hbWUgKSApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbIG5h
bWUgXSA9IGpRdWVyeS5ldmVudC5rZXlIb29rczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgg
cm1vdXNlRXZlbnQudGVzdCggbmFtZSApICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50Lm1vdXNlSG9va3M7Ci0gICAgICAgIH0K
LX0pOwotLyohCi0gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZQotICogQ29weXJpZ2h0IDIw
MTIgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwotICogUmVsZWFzZWQg
dW5kZXIgdGhlIE1JVCBsaWNlbnNlCi0gKiBodHRwOi8vc2l6emxlanMuY29tLwotICovCi0oZnVu
Y3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgewotCi12YXIgY2FjaGVkcnVucywKLSAgICAgICAg
YXNzZXJ0R2V0SWROb3ROYW1lLAotICAgICAgICBFeHByLAotICAgICAgICBnZXRUZXh0LAotICAg
ICAgICBpc1hNTCwKLSAgICAgICAgY29udGFpbnMsCi0gICAgICAgIGNvbXBpbGUsCi0gICAgICAg
IHNvcnRPcmRlciwKLSAgICAgICAgaGFzRHVwbGljYXRlLAotICAgICAgICBvdXRlcm1vc3RDb250
ZXh0LAotCi0gICAgICAgIGJhc2VIYXNEdXBsaWNhdGUgPSB0cnVlLAotICAgICAgICBzdHJ1bmRl
ZmluZWQgPSAidW5kZWZpbmVkIiwKLQotICAgICAgICBleHBhbmRvID0gKCAic2l6Y2FjaGUiICsg
TWF0aC5yYW5kb20oKSApLnJlcGxhY2UoICIuIiwgIiIgKSwKLQotICAgICAgICBUb2tlbiA9IFN0
cmluZywKLSAgICAgICAgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsCi0gICAgICAgIGRvY0Vs
ZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCi0gICAgICAgIGRpcnJ1bnMgPSAwLAotICAg
ICAgICBkb25lID0gMCwKLSAgICAgICAgcG9wID0gW10ucG9wLAotICAgICAgICBwdXNoID0gW10u
cHVzaCwKLSAgICAgICAgc2xpY2UgPSBbXS5zbGljZSwKLSAgICAgICAgLy8gVXNlIGEgc3RyaXBw
ZWQtZG93biBpbmRleE9mIGlmIGEgbmF0aXZlIG9uZSBpcyB1bmF2YWlsYWJsZQotICAgICAgICBp
bmRleE9mID0gW10uaW5kZXhPZiB8fCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmxlbmd0aDsK
LSAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdGhpc1tpXSA9PT0gZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSwKLQotICAg
ICAgICAvLyBBdWdtZW50IGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZQotICAg
ICAgICBtYXJrRnVuY3Rpb24gPSBmdW5jdGlvbiggZm4sIHZhbHVlICkgewotICAgICAgICAgICAg
ICAgIGZuWyBleHBhbmRvIF0gPSB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmbjsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVDYWNoZSA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBjYWNoZSA9IHt9LAotICAgICAgICAgICAgICAg
ICAgICAgICAga2V5cyA9IFtdOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlv
bihmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9u
bHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllcwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBrZXlzLnB1c2goIGtleSApID4gRXhwci5jYWNoZUxlbmd0aCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0cmll
dmUgd2l0aCAoa2V5ICsgIiAiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgT2JqZWN0
LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAoY2FjaGVbIGtleSArICIgIiBdID0gdmFsdWUpOwotICAgICAgICAgICAg
ICAgIH0sIGNhY2hlICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY2xhc3NDYWNoZSA9IGNyZWF0
ZUNhY2hlKCksCi0gICAgICAgIHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotICAgICAgICBj
b21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKLQotICAgICAgICAvLyBSZWdleAotCi0gICAg
ICAgIC8vIFdoaXRlc3BhY2UgY2hhcmFjdGVycyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNl
bGVjdG9ycy8jd2hpdGVzcGFjZQotICAgICAgICB3aGl0ZXNwYWNlID0gIltcXHgyMFxcdFxcclxc
blxcZl0iLAotICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXN5bnRheC8jY2hh
cmFjdGVycwotICAgICAgICBjaGFyYWN0ZXJFbmNvZGluZyA9ICIoPzpcXFxcLnxbLVxcd118W15c
XHgwMC1cXHhhMF0pKyIsCi0KLSAgICAgICAgLy8gTG9vc2VseSBtb2RlbGVkIG9uIENTUyBpZGVu
dGlmaWVyIGNoYXJhY3RlcnMKLSAgICAgICAgLy8gQW4gdW5xdW90ZWQgdmFsdWUgc2hvdWxkIGJl
IGEgQ1NTIGlkZW50aWZpZXIgKGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyNh
dHRyaWJ1dGUtc2VsZWN0b3JzKQotICAgICAgICAvLyBQcm9wZXIgc3ludGF4OiBodHRwOi8vd3d3
LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXIKLSAgICAg
ICAgaWRlbnRpZmllciA9IGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncjIiApLAot
Ci0gICAgICAgIC8vIEFjY2VwdGFibGUgb3BlcmF0b3JzIGh0dHA6Ly93d3cudzMub3JnL1RSL3Nl
bGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9ycwotICAgICAgICBvcGVyYXRvcnMgPSAiKFsqXiR8
IX5dPz0pIiwKLSAgICAgICAgYXR0cmlidXRlcyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIg
KyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiArIHdoaXRlc3BhY2UgKwotICAgICAgICAgICAgICAg
ICIqKD86IiArIG9wZXJhdG9ycyArIHdoaXRlc3BhY2UgKyAiKig/OihbJ1wiXSkoKD86XFxcXC58
W15cXFxcXSkqPylcXDN8KCIgKyBpZGVudGlmaWVyICsgIil8KXwpIiArIHdoaXRlc3BhY2UgKyAi
KlxcXSIsCi0KLSAgICAgICAgLy8gUHJlZmVyIGFyZ3VtZW50cyBub3QgaW4gcGFyZW5zL2JyYWNr
ZXRzLAotICAgICAgICAvLyAgIHRoZW4gYXR0cmlidXRlIHNlbGVjdG9ycyBhbmQgbm9uLXBzZXVk
b3MgKGRlbm90ZWQgYnkgOiksCi0gICAgICAgIC8vICAgdGhlbiBhbnl0aGluZyBlbHNlCi0gICAg
ICAgIC8vIFRoZXNlIHByZWZlcmVuY2VzIGFyZSBoZXJlIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9m
IHNlbGVjdG9ycwotICAgICAgICAvLyAgIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIFBTRVVETyBw
cmVGaWx0ZXIKLSAgICAgICAgcHNldWRvcyA9ICI6KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIp
KD86XFwoKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzoo
PzoiICsgYXR0cmlidXRlcyArICIpfFteOl18XFxcXC4pKnwuKikpXFwpfCkiLAotCi0gICAgICAg
IC8vIEZvciBtYXRjaEV4cHIuUE9TIGFuZCBtYXRjaEV4cHIubmVlZHNDb250ZXh0Ci0gICAgICAg
IHBvcyA9ICI6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIgKyB3aGl0
ZXNwYWNlICsKLSAgICAgICAgICAgICAgICAiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNl
ICsgIipcXCl8KSg/PVteLV18JCkiLAotCi0gICAgICAgIC8vIExlYWRpbmcgYW5kIG5vbi1lc2Nh
cGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXIKLSAgICAgICAgcnRyaW0gPSBuZXcgUmVnRXhw
KCAiXiIgKyB3aGl0ZXNwYWNlICsgIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIgKyB3aGl0
ZXNwYWNlICsgIiskIiwgImciICksCi0KLSAgICAgICAgcmNvbW1hID0gbmV3IFJlZ0V4cCggIl4i
ICsgd2hpdGVzcGFjZSArICIqLCIgKyB3aGl0ZXNwYWNlICsgIioiICksCi0gICAgICAgIHJjb21i
aW5hdG9ycyA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKihbXFx4MjBcXHRcXHJc
XG5cXGY+K35dKSIgKyB3aGl0ZXNwYWNlICsgIioiICksCi0gICAgICAgIHJwc2V1ZG8gPSBuZXcg
UmVnRXhwKCBwc2V1ZG9zICksCi0KLSAgICAgICAgLy8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2
YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCi0gICAgICAgIHJxdWlja0V4cHIgPSAv
Xig/OiMoW1x3XC1dKyl8KFx3Kyl8XC4oW1x3XC1dKykpJC8sCi0KLSAgICAgICAgcm5vdCA9IC9e
Om5vdC8sCi0gICAgICAgIHJzaWJsaW5nID0gL1tceDIwXHRcclxuXGZdKlsrfl0vLAotICAgICAg
ICByZW5kc1dpdGhOb3QgPSAvOm5vdFwoJC8sCi0KLSAgICAgICAgcmhlYWRlciA9IC9oXGQvaSwK
LSAgICAgICAgcmlucHV0cyA9IC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksCi0KLSAg
ICAgICAgcmJhY2tzbGFzaCA9IC9cXCg/IVxcKS9nLAotCi0gICAgICAgIG1hdGNoRXhwciA9IHsK
LSAgICAgICAgICAgICAgICAiSUQiOiBuZXcgUmVnRXhwKCAiXiMoIiArIGNoYXJhY3RlckVuY29k
aW5nICsgIikiICksCi0gICAgICAgICAgICAgICAgIkNMQVNTIjogbmV3IFJlZ0V4cCggIl5cXC4o
IiArIGNoYXJhY3RlckVuY29kaW5nICsgIikiICksCi0gICAgICAgICAgICAgICAgIk5BTUUiOiBu
ZXcgUmVnRXhwKCAiXlxcW25hbWU9WydcIl0/KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpWydc
Il0/XFxdIiApLAotICAgICAgICAgICAgICAgICJUQUciOiBuZXcgUmVnRXhwKCAiXigiICsgY2hh
cmFjdGVyRW5jb2RpbmcucmVwbGFjZSggInciLCAidyoiICkgKyAiKSIgKSwKLSAgICAgICAgICAg
ICAgICAiQVRUUiI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKLSAgICAgICAgICAg
ICAgICAiUFNFVURPIjogbmV3IFJlZ0V4cCggIl4iICsgcHNldWRvcyApLAotICAgICAgICAgICAg
ICAgICJQT1MiOiBuZXcgUmVnRXhwKCBwb3MsICJpIiApLAotICAgICAgICAgICAgICAgICJDSElM
RCI6IG5ldyBSZWdFeHAoICJeOihvbmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIgKyB3
aGl0ZXNwYWNlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIqKGV2ZW58b2RkfCgoWystXXwp
KFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/OihbKy1dfCkiICsgd2hpdGVzcGFjZSArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAiKihcXGQrKXwpKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8
KSIsICJpIiApLAotICAgICAgICAgICAgICAgIC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxl
bWVudGluZyAuaXMoKQotICAgICAgICAgICAgICAgICJuZWVkc0NvbnRleHQiOiBuZXcgUmVnRXhw
KCAiXiIgKyB3aGl0ZXNwYWNlICsgIipbPit+XXwiICsgcG9zLCAiaSIgKQotICAgICAgICB9LAot
Ci0gICAgICAgIC8vIFN1cHBvcnQKLQotICAgICAgICAvLyBVc2VkIGZvciB0ZXN0aW5nIHNvbWV0
aGluZyBvbiBhbiBlbGVtZW50Ci0gICAgICAgIGFzc2VydCA9IGZ1bmN0aW9uKCBmbiApIHsKLSAg
ICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0K
LSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZu
KCBkaXYgKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkaXYgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQot
ICAgICAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpIHJldHVybnMgb25s
eSBlbGVtZW50cwotICAgICAgICBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA9IGFzc2VydChmdW5j
dGlvbiggZGl2ICkgewotICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQu
Y3JlYXRlQ29tbWVudCgiIikgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIWRpdi5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aDsKLSAgICAgICAgfSksCi0KLSAgICAgICAgLy8gQ2hl
Y2sgaWYgZ2V0QXR0cmlidXRlIHJldHVybnMgbm9ybWFsaXplZCBocmVmIGF0dHJpYnV0ZXMKLSAg
ICAgICAgYXNzZXJ0SHJlZk5vdE5vcm1hbGl6ZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsK
LSAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iOwotICAg
ICAgICAgICAgICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0Q2hp
bGQuZ2V0QXR0cmlidXRlICE9PSBzdHJ1bmRlZmluZWQgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpID09PSAiIyI7Ci0gICAgICAg
IH0pLAotCi0gICAgICAgIC8vIENoZWNrIGlmIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJldHJpZXZl
ZCBieSBhdHRyaWJ1dGUgbm9kZXMKLSAgICAgICAgYXNzZXJ0QXR0cmlidXRlcyA9IGFzc2VydChm
dW5jdGlvbiggZGl2ICkgewotICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPHNlbGVj
dD48L3NlbGVjdD4iOwotICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIGRpdi5sYXN0
Q2hpbGQuZ2V0QXR0cmlidXRlKCJtdWx0aXBsZSIpOwotICAgICAgICAgICAgICAgIC8vIElFOCBy
ZXR1cm5zIGEgc3RyaW5nIGZvciBzb21lIGF0dHJpYnV0ZXMgZXZlbiB3aGVuIG5vdCBwcmVzZW50
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgIT09ICJib29sZWFuIiAmJiB0eXBlICE9PSAi
c3RyaW5nIjsKLSAgICAgICAgfSksCi0KLSAgICAgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSBjYW4gYmUgdHJ1c3RlZAotICAgICAgICBhc3NlcnRVc2FibGVDbGFzc05hbWUg
PSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICAgICAgICAgICAgICAvLyBPcGVyYSBjYW4n
dCBmaW5kIGEgc2Vjb25kIGNsYXNzbmFtZSAoaW4gOS42KQotICAgICAgICAgICAgICAgIGRpdi5p
bm5lckhUTUwgPSAiPGRpdiBjbGFzcz0naGlkZGVuIGUnPjwvZGl2PjxkaXYgY2xhc3M9J2hpZGRl
bic+PC9kaXY+IjsKLSAgICAgICAgICAgICAgICBpZiAoICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSB8fCAhZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gU2FmYXJpIDMuMiBjYWNoZXMgY2xhc3MgYXR0cmlidXRlcyBhbmQg
ZG9lc24ndCBjYXRjaCBjaGFuZ2VzCi0gICAgICAgICAgICAgICAgZGl2Lmxhc3RDaGlsZC5jbGFz
c05hbWUgPSAiZSI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRpdi5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKCJlIikubGVuZ3RoID09PSAyOwotICAgICAgICB9KSwKLQotICAgICAgICAvLyBDaGVj
ayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUKLSAgICAgICAgLy8g
Q2hlY2sgaWYgZ2V0RWxlbWVudHNCeU5hbWUgcHJpdmlsZWdlcyBmb3JtIGNvbnRyb2xzIG9yIHJl
dHVybnMgZWxlbWVudHMgYnkgSUQKLSAgICAgICAgYXNzZXJ0VXNhYmxlTmFtZSA9IGFzc2VydChm
dW5jdGlvbiggZGl2ICkgewotICAgICAgICAgICAgICAgIC8vIEluamVjdCBjb250ZW50Ci0gICAg
ICAgICAgICAgICAgZGl2LmlkID0gZXhwYW5kbyArIDA7Ci0gICAgICAgICAgICAgICAgZGl2Lmlu
bmVySFRNTCA9ICI8YSBuYW1lPSciICsgZXhwYW5kbyArICInPjwvYT48ZGl2IG5hbWU9JyIgKyBl
eHBhbmRvICsgIic+PC9kaXY+IjsKLSAgICAgICAgICAgICAgICBkb2NFbGVtLmluc2VydEJlZm9y
ZSggZGl2LCBkb2NFbGVtLmZpcnN0Q2hpbGQgKTsKLQotICAgICAgICAgICAgICAgIC8vIFRlc3QK
LSAgICAgICAgICAgICAgICB2YXIgcGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBidWdneSBicm93c2VycyB3aWxsIHJldHVybiBm
ZXdlciB0aGFuIHRoZSBjb3JyZWN0IDIKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoID09PSAyICsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGJ1Z2d5IGJyb3dzZXJzIHdpbGwgcmV0dXJuIG1vcmUgdGhhbiB0aGUg
Y29ycmVjdCAwCi0gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5
TmFtZSggZXhwYW5kbyArIDAgKS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0R2V0SWRO
b3ROYW1lID0gIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBleHBhbmRvICk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBDbGVhbnVwCi0gICAgICAgICAgICAgICAgZG9jRWxlbS5yZW1vdmVDaGlsZCgg
ZGl2ICk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcGFzczsKLSAgICAgICAgfSk7Ci0KLS8v
IElmIHNsaWNlIGlzIG5vdCBhdmFpbGFibGUsIHByb3ZpZGUgYSBiYWNrdXAKLXRyeSB7Ci0gICAg
ICAgIHNsaWNlLmNhbGwoIGRvY0VsZW0uY2hpbGROb2RlcywgMCApWzBdLm5vZGVUeXBlOwotfSBj
YXRjaCAoIGUgKSB7Ci0gICAgICAgIHNsaWNlID0gZnVuY3Rpb24oIGkgKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW107Ci0g
ICAgICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IHRoaXNbaV0pOyBpKysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgIH07Ci19Ci0KLWZ1bmN0
aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Ci0gICAgICAg
IHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOwotICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBk
b2N1bWVudDsKLSAgICAgICAgdmFyIG1hdGNoLCBlbGVtLCB4bWwsIG0sCi0gICAgICAgICAgICAg
ICAgbm9kZVR5cGUgPSBjb250ZXh0Lm5vZGVUeXBlOwotCi0gICAgICAgIGlmICggIXNlbGVjdG9y
IHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdHM7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIG5vZGVUeXBlICE9PSAxICYm
IG5vZGVUeXBlICE9PSA5ICkgewotICAgICAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAgICAg
fQotCi0gICAgICAgIHhtbCA9IGlzWE1MKCBjb250ZXh0ICk7Ci0KLSAgICAgICAgaWYgKCAheG1s
ICYmICFzZWVkICkgewotICAgICAgICAgICAgICAgIGlmICggKG1hdGNoID0gcnF1aWNrRXhwci5l
eGVjKCBzZWxlY3RvciApKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVw
OiBTaXp6bGUoIiNJRCIpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChtID0gbWF0Y2hb
MV0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGVUeXBlID09
PSA5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBj
b250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkg
NC42IHJldHVybnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBu
b2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9k
ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSwgT3BlcmEsIGFuZCBXZWJraXQgcmV0dXJuIGl0ZW1z
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBu
YW1lIGluc3RlYWQgb2YgSUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbS5pZCA9PT0gbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGV4dCBpcyBub3QgYSBkb2N1bWVudAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udGV4dC5vd25lckRvY3Vt
ZW50ICYmIChlbGVtID0gY29udGV4dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtICkp
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
YWlucyggY29udGV4dCwgZWxlbSApICYmIGVsZW0uaWQgPT09IG0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBTcGVlZC11cDogU2l6emxlKCJUQUciKQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggbWF0Y2hbMl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2gu
YXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgg
c2VsZWN0b3IgKSwgMCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUo
Ii5DTEFTUyIpCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAobSA9IG1hdGNo
WzNdKSAmJiBhc3NlcnRVc2FibGVDbGFzc05hbWUgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCBy
ZXN1bHRzLCBzbGljZS5jYWxsKGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApLCAw
KSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBBbGwgb3RoZXJzCi0gICAgICAgIHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJl
cGxhY2UoIHJ0cmltLCAiJDEiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQsIHhtbCApOwotfQot
Ci1TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHsKLSAgICAgICAg
cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTsKLX07Ci0KLVNpenps
ZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHsKLSAgICAgICAgcmV0
dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwOwotfTsK
LQotLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBl
cwotZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7Ci0gICAgICAgIHJldHVybiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5h
bWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0
IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7Ci0gICAgICAgIH07Ci19Ci0KLS8vIFJldHVybnMgYSBm
dW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucwotZnVuY3Rpb24gY3JlYXRlQnV0
dG9uUHNldWRvKCB0eXBlICkgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0
b24iKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7Ci0gICAgICAgIH07Ci19Ci0KLS8vIFJldHVybnMg
YSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHMKLWZ1bmN0aW9uIGNy
ZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgewotICAgICAgICByZXR1cm4gbWFya0Z1bmN0aW9u
KGZ1bmN0aW9uKCBhcmd1bWVudCApIHsKLSAgICAgICAgICAgICAgICBhcmd1bWVudCA9ICthcmd1
bWVudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVk
LCBtYXRjaGVzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGosCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgs
IGFyZ3VtZW50ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXRjaElu
ZGV4ZXMubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaCBlbGVtZW50
cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdoaWxlICggaS0tICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNl
ZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlZWRbal0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLX0KLQotLyoqCi0gKiBVdGlsaXR5IGZ1
bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBu
b2RlcwotICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtCi0gKi8KLWdldFRleHQgPSBTaXp6
bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICB2YXIgbm9kZSwKLSAgICAg
ICAgICAgICAgICByZXQgPSAiIiwKLSAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAg
ICAgICBub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7Ci0KLSAgICAgICAgaWYgKCBub2RlVHlwZSAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5
IHx8IG5vZGVUeXBlID09PSAxMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0
ZXh0Q29udGVudCBmb3IgZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlubmVy
VGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKHNlZSAjMTEx
NTMpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50
ID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW0udGV4dENvbnRlbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGls
ZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGdldFRleHQoIGVsZW0gKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVZhbHVlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9y
IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXMKLSAgICAgICAgfSBlbHNlIHsKLQotICAgICAg
ICAgICAgICAgIC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFy
cmF5Ci0gICAgICAgICAgICAgICAgZm9yICggOyAobm9kZSA9IGVsZW1baV0pOyBpKysgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlcwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGdldFRleHQoIG5vZGUgKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldDsKLX07Ci0KLWlzWE1MID0g
U2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIC8vIGRvY3VtZW50RWxl
bWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKLSAg
ICAgICAgLy8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpCi0gICAgICAg
IHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxl
bSkuZG9jdW1lbnRFbGVtZW50OwotICAgICAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9j
dW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKLX07Ci0KLS8vIEVsZW1l
bnQgY29udGFpbnMgYW5vdGhlcgotY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnMgPSBkb2NFbGVt
LmNvbnRhaW5zID8KLSAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlOwotICAgICAgICAg
ICAgICAgIHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEg
JiYgYWRvd24uY29udGFpbnMgJiYgYWRvd24uY29udGFpbnMoYnVwKSApOwotICAgICAgICB9IDoK
LSAgICAgICAgZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/Ci0gICAgICAgIGZ1bmN0
aW9uKCBhLCBiICkgewotICAgICAgICAgICAgICAgIHJldHVybiBiICYmICEhKCBhLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKCBiICkgJiAxNiApOwotICAgICAgICB9IDoKLSAgICAgICAgZnVuY3Rp
b24oIGEsIGIgKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGIgPT09IGEgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH07Ci0KLVNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAg
ICAgIHZhciB2YWwsCi0gICAgICAgICAgICAgICAgeG1sID0gaXNYTUwoIGVsZW0gKTsKLQotICAg
ICAgICBpZiAoICF4bWwgKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNh
c2UoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoICh2YWwgPSBFeHByLmF0dHJIYW5kbGVbIG5h
bWUgXSkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbCggZWxlbSApOwotICAgICAgICB9
Ci0gICAgICAgIGlmICggeG1sIHx8IGFzc2VydEF0dHJpYnV0ZXMgKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0gICAgICAgIH0KLSAgICAgICAg
dmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7Ci0gICAgICAgIHJldHVybiB2YWwg
PwotICAgICAgICAgICAgICAgIHR5cGVvZiBlbGVtWyBuYW1lIF0gPT09ICJib29sZWFuIiA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0gPyBuYW1lIDogbnVsbCA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YWwuc3BlY2lmaWVkID8gdmFsLnZhbHVlIDogbnVsbCA6Ci0g
ICAgICAgICAgICAgICAgbnVsbDsKLX07Ci0KLUV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0gewot
Ci0gICAgICAgIC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlcgotICAgICAgICBjYWNoZUxl
bmd0aDogNTAsCi0KLSAgICAgICAgY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sCi0KLSAgICAg
ICAgbWF0Y2g6IG1hdGNoRXhwciwKLQotICAgICAgICAvLyBJRTYvNyByZXR1cm4gYSBtb2RpZmll
ZCBocmVmCi0gICAgICAgIGF0dHJIYW5kbGU6IGFzc2VydEhyZWZOb3ROb3JtYWxpemVkID8KLSAg
ICAgICAgICAgICAgICB7fSA6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgImhyZWYiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAiaHJlZiIsIDIgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bS5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9LAotCi0gICAgICAgIGZpbmQ6IHsKLSAgICAgICAgICAgICAgICAiSUQiOiBh
c3NlcnRHZXRJZE5vdE5hbWUgPwotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGlk
LCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVuZGVmaW5lZCAmJiAheG1sICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4
dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYg
cmV0dXJucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVz
IHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSAmJiBtLnBhcmVudE5vZGUgPyBbbV0g
OiBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiggaWQsIGNvbnRl
eHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Yg
Y29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gc3RydW5kZWZpbmVkICYmICF4bWwgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVs
ZW1lbnRCeUlkKCBpZCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG0gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbS5pZCA9PT0gaWQgfHwgdHlwZW9mIG0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gc3RydW5k
ZWZpbmVkICYmIG0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZSA9PT0gaWQgPwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbV0gOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bmRlZmluZWQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiVEFHIjogYXNzZXJ0VGFnTmFtZU5vQ29t
bWVudHMgPwotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gc3RydW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCB0YWcgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiggdGFn
LCBjb250ZXh0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0
cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0YWcgPT09ICIqIiApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFtdLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7
IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnB1c2goIGVsZW0gKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdG1wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJOQU1FIjogYXNzZXJ0
VXNhYmxlTmFtZSAmJiBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gc3RydW5k
ZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC5nZXRFbGVtZW50c0J5TmFtZSggbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiQ0xBU1MiOiBhc3NlcnRVc2Fi
bGVDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCwgeG1sICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NO
YW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9LAotCi0gICAgICAgIHJlbGF0aXZlOiB7Ci0gICAgICAgICAgICAgICAgIj4iOiB7IGRp
cjogInBhcmVudE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICIgIjogeyBk
aXI6ICJwYXJlbnROb2RlIiB9LAotICAgICAgICAgICAgICAgICIrIjogeyBkaXI6ICJwcmV2aW91
c1NpYmxpbmciLCBmaXJzdDogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICJ+IjogeyBkaXI6ICJw
cmV2aW91c1NpYmxpbmciIH0KLSAgICAgICAgfSwKLQotICAgICAgICBwcmVGaWx0ZXI6IHsKLSAg
ICAgICAgICAgICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0
Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWQKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoWzNdID0gKCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJiYWNr
c2xhc2gsICIiICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbMl0gPT09
ICJ+PSIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzNdID0gIiAi
ICsgbWF0Y2hbM10gKyAiICI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApOwotICAgICAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggbWF0Y2ggKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJd
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgdHlwZSAob25seXxudGh8Li4uKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIGFyZ3VtZW50IChldmVufG9kZHxcZCp8
XGQqbihbKy1dXGQrKT98Li4uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIHhu
LWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xkKm58KQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0IHNpZ24gb2YgeG4tY29tcG9uZW50Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDUgeCBvZiB4bi1jb21wb25lbnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNiBzaWduIG9mIHktY29tcG9uZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDcgeSBvZiB5LWNvbXBvbmVudAotICAgICAgICAgICAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dlckNhc2Uo
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG50aC1jaGlsZCByZXF1aXJlcyBh
cmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFtYXRjaFsyXSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3Io
IG1hdGNoWzBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBm
b3IgRXhwci5maWx0ZXIuQ0hJTEQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICsoIG1hdGNoWzNdID8gbWF0Y2hb
NF0gKyAobWF0Y2hbNV0gfHwgMSkgOiAyICogKCBtYXRjaFsyXSA9PT0gImV2ZW4iIHx8IG1hdGNo
WzJdID09PSAib2RkIiApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
WzRdID0gKyggKCBtYXRjaFs2XSArIG1hdGNoWzddICkgfHwgbWF0Y2hbMl0gPT09ICJvZGQiICk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3Vt
ZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiUFNFVURP
IjogZnVuY3Rpb24oIG1hdGNoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVucXVv
dGVkLCBleGNlc3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoRXhwclsiQ0hJ
TEQiXS50ZXN0KCBtYXRjaFswXSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBtYXRjaFszXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hbMl0gPSBtYXRjaFszXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoICh1bnF1b3RlZCA9IG1hdGNoWzRdKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT25seSBjaGVjayBhcmd1bWVudHMgdGhhdCBjb250YWluIGEgcHNldWRvCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcnBzZXVkby50ZXN0KHVucXVvdGVk
KSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBleGNl
c3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgdG8gdGhl
IG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCAiKSIsIHVucXVvdGVkLmxlbmd0
aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5xdW90ZWQgPSB1bnF1b3RlZC5z
bGljZSggMCwgZXhjZXNzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hbMl0gPSB1bnF1b3RlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1
ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgZmlsdGVyOiB7Ci0gICAgICAgICAgICAgICAgIklEIjogYXNzZXJ0
R2V0SWROb3ROYW1lID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3Ns
YXNoLCAiIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBpZDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gOgotICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oIGlkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZCA9IGlkLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJp
YnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUgJiYg
bm9kZS52YWx1ZSA9PT0gaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgIlRBRyI6IGZ1bmN0
aW9uKCBub2RlTmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZU5hbWUg
PT09ICIqIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVOYW1lID0gbm9kZU5hbWUucmVwbGFjZSggcmJhY2tzbGFz
aCwgIiIgKS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5h
bWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgICAgICAiQ0xBU1MiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBleHBhbmRvIF1bIGNsYXNz
TmFtZSArICIgIiBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0dGVybiB8
fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0dGVybiA9IG5ldyBSZWdFeHAo
ICIoXnwiICsgd2hpdGVzcGFjZSArICIpIiArIGNsYXNzTmFtZSArICIoIiArIHdoaXRlc3BhY2Ug
KyAifCQpIiApKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0NhY2hl
KCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoIGVsZW0uY2xhc3NOYW1lIHx8ICh0
eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IHN0cnVuZGVmaW5lZCAmJiBlbGVtLmdldEF0dHJp
YnV0ZSgiY2xhc3MiKSkgfHwgIiIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJBVFRSIjogZnVuY3Rp
b24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiggZWxlbSwgY29udGV4dCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gbnVsbCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICIh
PSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhb3BlcmF0b3IgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiI7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09PSAi
PSIgPyByZXN1bHQgPT09IGNoZWNrIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAhPT0gY2hlY2sgOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiXj0iID8gY2hlY2sg
JiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiKj0iID8gY2hlY2sgJiYgcmVzdWx0Lmlu
ZGV4T2YoIGNoZWNrICkgPiAtMSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0b3IgPT09ICIkPSIgPyBjaGVjayAmJiByZXN1bHQuc3Vic3RyKCByZXN1bHQu
bGVuZ3RoIC0gY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIn49IiA/ICggIiAiICsgcmVzdWx0ICsg
IiAiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gInw9IiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVz
dWx0LnN1YnN0ciggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiQ0hJ
TEQiOiBmdW5jdGlvbiggdHlwZSwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJudGgiICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGRpZmYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVudE5v
ZGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0
ID09PSAxICYmIGxhc3QgPT09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHBhcmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmYgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggbm9kZSA9IHBhcmVudC5maXJzdENoaWxkOyBub2RlOyBub2RlID0g
bm9kZS5uZXh0U2libGluZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpZmYrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gPT09IG5vZGUgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmNvcnBvcmF0ZSB0
aGUgb2Zmc2V0IChvciBjYXN0IHRvIE5hTiksIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXpl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiAtPSBsYXN0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWZmID09PSBm
aXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gZWxlbTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCB0eXBlICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIm9ubHkiOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImZpcnN0IjoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlLnByZXZp
b3VzU2libGluZykgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0eXBlID09PSAiZmlyc3QiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW07Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJsYXN0IjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUg
PSBub2RlLm5leHRTaWJsaW5nKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0
aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxl
Y3RvcnMvI3BzZXVkby1jbGFzc2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmlvcml0
aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQg
d2l0aCB1cHBlcmNhc2UgbGV0dGVycwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtZW1i
ZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcwotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0g
RXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2Vy
Q2FzZSgpIF0gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6
bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1ZG8gKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNh
dGUgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQg
dG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGp1c3QgYXMgU2l6emxlIGRvZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZm5bIGV4
cGFuZG8gXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBh
cmd1bWVudCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZm4ubGVuZ3RoID4gMSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sICIiLCBhcmd1bWVudCBd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhwci5zZXRGaWx0ZXJz
Lmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1h
dGNoZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXRjaGVkLmxl
bmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggaS0tICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZHggPSBpbmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbaV0gKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vl
ZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIHBzZXVkb3M6IHsKLSAgICAgICAgICAgICAg
ICAibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFp
bGluZwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzCi0g
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBbXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0cyA9IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSAp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBz
ZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtd
ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0g
c2VlZC5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ld
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwg
eG1sICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0WzBd
ID0gZWxlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVy
KCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHRzLnBvcCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAg
ImhhcyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfSksCi0KLSAgICAg
ICAgICAgICAgICAiY29udGFpbnMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZWxl
bS5pbm5lclRleHQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0pLAotCi0gICAgICAg
ICAgICAgICAgImVuYWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAgICAgImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgImNoZWNrZWQiOiBmdW5jdGlvbiggZWxl
bSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIENTUzMsIDpjaGVja2VkIHNob3Vs
ZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50cwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3Rv
cnMtMjAxMTA5MjkvI2NoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlTmFt
ZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAobm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2Rl
TmFtZSA9PT0gIm9wdGlvbiIgJiYgISFlbGVtLnNlbGVjdGVkKTsKLSAgICAgICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAgICAgInNlbGVjdGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxl
Y3RlZC1ieS1kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zIGluIFNh
ZmFyaSB3b3JrIHByb3Blcmx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFy
ZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnRO
b2RlLnNlbGVjdGVkSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAicGFyZW50IjogZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUV4cHIucHNldWRvc1siZW1wdHkiXSgg
ZWxlbSApOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiZW1wdHkiOiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyA6ZW1wdHkgaXMgb25seSBhZmZlY3RlZCBieSBlbGVtZW50IG5vZGVzIGFuZCBjb250ZW50
IG5vZGVzKGluY2x1ZGluZyB0ZXh0KDMpLCBjZGF0YSg0KSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyAgIG5vdCBjb21tZW50LCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgb3Igb3RoZXJz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGFua3MgdG8gRGllZ28gUGVyaW5pIGZvciB0
aGUgbm9kZU5hbWUgc2hvcnRjdXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgR3JlYXRl
ciB0aGFuICJAIiBtZWFucyBhbHBoYSBjaGFyYWN0ZXJzIChzcGVjaWZpY2FsbHkgbm90IHN0YXJ0
aW5nIHdpdGggIiMiIG9yICI/IikKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlVHlw
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZSA+ICJAIiB8fCAobm9kZVR5cGUgPSBlbGVt
Lm5vZGVUeXBlKSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVs
ZW0ubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAgICAgImhlYWRlciI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApOwotICAgICAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgICAgICAidGV4dCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHR5cGUsIGF0dHI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJRTYgYW5kIDcgd2lsbCBtYXAgZWxlbS50eXBlIHRvICd0ZXh0JyBmb3IgbmV3IEhUTUw1
IHR5cGVzIChzZWFyY2gsIGV0YykKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBnZXRB
dHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0IHRoaXMgY2FzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSA9IGVsZW0udHlwZSkgPT09ICJ0ZXh0
IiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIChhdHRyID0gZWxlbS5nZXRB
dHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IHR5cGUg
KTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgLy8gSW5wdXQgdHlwZXMK
LSAgICAgICAgICAgICAgICAicmFkaW8iOiBjcmVhdGVJbnB1dFBzZXVkbygicmFkaW8iKSwKLSAg
ICAgICAgICAgICAgICAiY2hlY2tib3giOiBjcmVhdGVJbnB1dFBzZXVkbygiY2hlY2tib3giKSwK
LSAgICAgICAgICAgICAgICAiZmlsZSI6IGNyZWF0ZUlucHV0UHNldWRvKCJmaWxlIiksCi0gICAg
ICAgICAgICAgICAgInBhc3N3b3JkIjogY3JlYXRlSW5wdXRQc2V1ZG8oInBhc3N3b3JkIiksCi0g
ICAgICAgICAgICAgICAgImltYWdlIjogY3JlYXRlSW5wdXRQc2V1ZG8oImltYWdlIiksCi0KLSAg
ICAgICAgICAgICAgICAic3VibWl0IjogY3JlYXRlQnV0dG9uUHNldWRvKCJzdWJtaXQiKSwKLSAg
ICAgICAgICAgICAgICAicmVzZXQiOiBjcmVhdGVCdXR0b25Qc2V1ZG8oInJlc2V0IiksCi0KLSAg
ICAgICAgICAgICAgICAiYnV0dG9uIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9
PT0gImJ1dHRvbiIgfHwgbmFtZSA9PT0gImJ1dHRvbiI7Ci0gICAgICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgICAgICJpbnB1dCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApOwotICAgICAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiZm9jdXMiOiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9jLmFjdGl2ZUVsZW1l
bnQgJiYgKCFkb2MuaGFzRm9jdXMgfHwgZG9jLmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8
fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpOwotICAgICAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgICAgICAiYWN0aXZlIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZWxlbS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQ7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIC8vIFBvc2l0aW9uYWwg
dHlwZXMKLSAgICAgICAgICAgICAgICAiZmlyc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgMCBdOwotICAgICAg
ICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAgImxhc3QiOiBjcmVhdGVQb3NpdGlvbmFs
UHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBbIGxlbmd0aCAtIDEgXTsKLSAgICAgICAgICAgICAgICB9KSwKLQot
ICAgICAgICAgICAgICAgICJlcSI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1h
dGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTsK
LSAgICAgICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgICAgICJldmVuIjogY3JlYXRlUG9z
aXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtYXRjaEluZGV4ZXM7Ci0gICAgICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgICAgICAi
b2RkIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5n
dGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDE7IGkgPCBsZW5n
dGg7IGkgKz0gMiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hJbmRl
eGVzLnB1c2goIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgICAgICAgICAgICAgfSksCi0KLSAg
ICAgICAgICAgICAgICAibHQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRj
aEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7
IC0taSA+PSAwOyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hJbmRl
eGVzLnB1c2goIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgICAgICAgICAgICAgfSksCi0KLSAg
ICAgICAgICAgICAgICAiZ3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRj
aEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7
ICsraSA8IGxlbmd0aDsgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
SW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgICAgICAgICAgICAgIH0pCi0g
ICAgICAgIH0KLX07Ci0KLWZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiwgcmV0ICkgewotICAg
ICAgICBpZiAoIGEgPT09IGIgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBjdXIgPSBhLm5leHRTaWJsaW5nOwotCi0gICAgICAgIHdoaWxl
ICggY3VyICkgewotICAgICAgICAgICAgICAgIGlmICggY3VyID09PSBiICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGN1ciA9IGN1ci5uZXh0U2libGluZzsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biAxOwotfQotCi1zb3J0T3JkZXIgPSBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8K
LSAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBhID09PSBi
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiAoICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGEuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24gOgotICAgICAgICAgICAgICAgICAgICAgICAgYS5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbihiKSAmIDQKLSAgICAgICAgICAgICAgICApID8gLTEgOiAxOwotICAgICAgICB9
IDoKLSAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG5v
ZGVzIGFyZSBpZGVudGljYWwsIHdlIGNhbiBleGl0IGVhcmx5Ci0gICAgICAgICAgICAgICAgaWYg
KCBhID09PSBiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICAgICAg
Ly8gRmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5kZXggKGluIElFKSBpZiBpdCdzIGF2YWlsYWJs
ZSBvbiBib3RoIG5vZGVzCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYS5zb3VyY2VJbmRl
eCAmJiBiLnNvdXJjZUluZGV4ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEu
c291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhciBhbCwgYmwsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcCA9IFtdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgYnAgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGF1cCA9IGEucGFyZW50Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1cCA9IGIucGFy
ZW50Tm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGF1cDsKLQotICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MgKG9yIGlkZW50aWNhbCkgd2UgY2Fu
IGRvIGEgcXVpY2sgY2hlY2sKLSAgICAgICAgICAgICAgICBpZiAoIGF1cCA9PT0gYnVwICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApOwotCi0g
ICAgICAgICAgICAgICAgLy8gSWYgbm8gcGFyZW50cyB3ZXJlIGZvdW5kIHRoZW4gdGhlIG5vZGVz
IGFyZSBkaXNjb25uZWN0ZWQKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhYXVwICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggIWJ1cCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5J3JlIHNv
bWV3aGVyZSBlbHNlIGluIHRoZSB0cmVlIHNvIHdlIG5lZWQKLSAgICAgICAgICAgICAgICAvLyB0
byBidWlsZCB1cCBhIGZ1bGwgbGlzdCBvZiB0aGUgcGFyZW50Tm9kZXMgZm9yIGNvbXBhcmlzb24K
LSAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFwLnVuc2hpZnQoIGN1ciApOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBh
cmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY3VyID0gYnVw
OwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicC51bnNoaWZ0KCBjdXIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1
ci5wYXJlbnROb2RlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFsID0g
YXAubGVuZ3RoOwotICAgICAgICAgICAgICAgIGJsID0gYnAubGVuZ3RoOwotCi0gICAgICAgICAg
ICAgICAgLy8gU3RhcnQgd2Fsa2luZyBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3Jl
cGFuY3kKLSAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhbCAmJiBpIDwgYmw7
IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXBbaV0gIT09IGJwW2ldICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBh
cFtpXSwgYnBbaV0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBlbmRlZCBzb21lcGxhY2UgdXAgdGhlIHRyZWUg
c28gZG8gYSBzaWJsaW5nIGNoZWNrCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IGFsID8K
LSAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYSwgYnBbaV0sIC0xICkgOgot
ICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZ0NoZWNrKCBhcFtpXSwgYiwgMSApOwotICAg
ICAgICB9OwotCi0vLyBBbHdheXMgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBkdXBsaWNhdGVzIGlm
IHNvcnQgZG9lc24ndAotLy8gcGFzcyB0aGVtIHRvIG91ciBjb21wYXJpc29uIGZ1bmN0aW9uIChh
cyBpbiBHb29nbGUgQ2hyb21lKS4KLVswLCAwXS5zb3J0KCBzb3J0T3JkZXIgKTsKLWJhc2VIYXNE
dXBsaWNhdGUgPSAhaGFzRHVwbGljYXRlOwotCi0vLyBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1v
dmluZyBkdXBsaWNhdGVzCi1TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkg
ewotICAgICAgICB2YXIgZWxlbSwKLSAgICAgICAgICAgICAgICBkdXBsaWNhdGVzID0gW10sCi0g
ICAgICAgICAgICAgICAgaSA9IDEsCi0gICAgICAgICAgICAgICAgaiA9IDA7Ci0KLSAgICAgICAg
aGFzRHVwbGljYXRlID0gYmFzZUhhc0R1cGxpY2F0ZTsKLSAgICAgICAgcmVzdWx0cy5zb3J0KCBz
b3J0T3JkZXIgKTsKLQotICAgICAgICBpZiAoIGhhc0R1cGxpY2F0ZSApIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSAtIDEgXSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaiA9IGR1cGxpY2F0ZXMucHVzaCggaSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGls
ZSAoIGotLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuc3BsaWNlKCBkdXBs
aWNhdGVzWyBqIF0sIDEgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gcmVzdWx0czsKLX07Ci0KLVNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7
Ci0gICAgICAgIHRocm93IG5ldyBFcnJvciggIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4
cHJlc3Npb246ICIgKyBtc2cgKTsKLX07Ci0KLWZ1bmN0aW9uIHRva2VuaXplKCBzZWxlY3Rvciwg
cGFyc2VPbmx5ICkgewotICAgICAgICB2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSwK
LSAgICAgICAgICAgICAgICBzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLAotICAgICAgICAgICAg
ICAgIGNhY2hlZCA9IHRva2VuQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAiICIgXTsKLQot
ICAgICAgICBpZiAoIGNhY2hlZCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VPbmx5
ID8gMCA6IGNhY2hlZC5zbGljZSggMCApOwotICAgICAgICB9Ci0KLSAgICAgICAgc29GYXIgPSBz
ZWxlY3RvcjsKLSAgICAgICAgZ3JvdXBzID0gW107Ci0gICAgICAgIHByZUZpbHRlcnMgPSBFeHBy
LnByZUZpbHRlcjsKLQotICAgICAgICB3aGlsZSAoIHNvRmFyICkgewotCi0gICAgICAgICAgICAg
ICAgLy8gQ29tbWEgYW5kIGZpcnN0IHJ1bgotICAgICAgICAgICAgICAgIGlmICggIW1hdGNoZWQg
fHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBtYXRjaCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbMF0ubGVuZ3RoICkgfHwg
c29GYXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBncm91cHMucHVzaCggdG9rZW5zID0gW10gKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBtYXRjaGVkID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAvLyBDb21iaW5h
dG9ycwotICAgICAgICAgICAgICAgIGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNv
RmFyICkpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goIG1hdGNoZWQg
PSBuZXcgVG9rZW4oIG1hdGNoLnNoaWZ0KCkgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVkLnR5cGUgPSBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwg
IiAiICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRmlsdGVycwot
ICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFy
ICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkgewotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKCBtYXRjaGVkID0gbmV3IFRv
a2VuKCBtYXRjaC5zaGlmdCgpICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlZC50eXBlID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlZC5tYXRjaGVzID0gbWF0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hl
ZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlk
IGV4Y2VzcwotICAgICAgICAvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmcKLSAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zCi0gICAgICAgIHJldHVybiBw
YXJzZU9ubHkgPwotICAgICAgICAgICAgICAgIHNvRmFyLmxlbmd0aCA6Ci0gICAgICAgICAgICAg
ICAgc29GYXIgPwotICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBzZWxlY3Rv
ciApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSB0b2tlbnMKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSgg
MCApOwotfQotCi1mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBi
YXNlICkgewotICAgICAgICB2YXIgZGlyID0gY29tYmluYXRvci5kaXIsCi0gICAgICAgICAgICAg
ICAgY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgY29tYmluYXRvci5kaXIgPT09ICJwYXJlbnRO
b2RlIiwKLSAgICAgICAgICAgICAgICBkb25lTmFtZSA9IGRvbmUrKzsKLQotICAgICAgICByZXR1
cm4gY29tYmluYXRvci5maXJzdCA/Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgYWdhaW5zdCBj
bG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50Ci0gICAgICAgICAgICAgICAgZnVuY3Rp
b24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY2hlY2tOb25FbGVtZW50cyB8fCBlbGVtLm5vZGVUeXBlID09PSAxICApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlciggZWxl
bSwgY29udGV4dCwgeG1sICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IDoKLQotICAgICAgICAg
ICAgICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50cwot
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5v
ZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBkaXIgY2FjaGluZwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAheG1sICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
a2V5ID0gZGlycnVucyArICIgIiArIGRvbmVOYW1lICsgIiAiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZGtleSA9IGRpcmtleSArIGNhY2hlZHJ1bnM7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIg
XSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjaGVj
a05vbkVsZW1lbnRzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChjYWNoZSA9IGVsZW1bIGV4cGFu
ZG8gXSkgPT09IGNhY2hlZGtleSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uc2l6c2V0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGNh
Y2hlID09PSAic3RyaW5nIiAmJiBjYWNoZS5pbmRleE9mKGRpcmtleSkgPT09IDAgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbS5zaXpzZXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIGV4cGFuZG8gXSA9
IGNhY2hlZGtleTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtLnNpenNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpzZXQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBk
aXIgXSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBj
aGVja05vbkVsZW1lbnRzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNv
bnRleHQsIHhtbCApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotfQotCi1mdW5jdGlvbiBlbGVtZW50
TWF0Y2hlciggbWF0Y2hlcnMgKSB7Ci0gICAgICAgIHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAx
ID8KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfSA6Ci0g
ICAgICAgICAgICAgICAgbWF0Y2hlcnNbMF07Ci19Ci0KLWZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1h
dGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgIHZhciBlbGVtLAot
ICAgICAgICAgICAgICAgIG5ld1VubWF0Y2hlZCA9IFtdLAotICAgICAgICAgICAgICAgIGkgPSAw
LAotICAgICAgICAgICAgICAgIGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsCi0gICAgICAgICAgICAg
ICAgbWFwcGVkID0gbWFwICE9IG51bGw7Ci0KLSAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysg
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0
LCB4bWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VW5tYXRjaGVk
LnB1c2goIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXBw
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwLnB1c2go
IGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBuZXdVbm1hdGNoZWQ7Ci19Ci0KLWZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2Vs
ZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHsK
LSAgICAgICAgaWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7Ci0g
ICAgICAgICAgICAgICAgcG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8g
XSApIHsKLSAgICAgICAgICAgICAgICBwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRl
ciwgcG9zdFNlbGVjdG9yICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlv
bihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAg
ICAgIHZhciB0ZW1wLCBpLCBlbGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlTWFwID0g
W10sCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWFwID0gW10sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMo
IHNlbGVjdG9yIHx8ICIqIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4
dCwgW10gKSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZmlsdGVyIHRvIGdldCBt
YXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25p
emF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYg
KCBzZWVkIHx8ICFzZWxlY3RvciApID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtcywKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hlck91dCA9IG1hdGNoZXIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9u
LXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4
aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSA6Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMg
ZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRz
IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlckluOwotCi0gICAgICAg
ICAgICAgICAgLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKLSAgICAgICAgICAgICAgICBpZiAoIG1h
dGNoZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyKCBtYXRjaGVySW4sIG1h
dGNoZXJPdXQsIGNvbnRleHQsIHhtbCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKLSAgICAgICAgICAgICAgICBpZiAoIHBvc3RGaWx0
ZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJP
dXQsIHBvc3RNYXAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RGaWx0ZXIoIHRlbXAs
IFtdLCBjb250ZXh0LCB4bWwgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW4tbWF0
Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJbgotICAg
ICAgICAgICAgICAgICAgICAgICAgaSA9IHRlbXAubGVuZ3RoOwotICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtp
XSBdID0gZWxlbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIHNlZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBvc3RGaW5kZXIgfHwg
cHJlRmlsdGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBvc3RG
aW5kZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0
IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50
byBwb3N0RmluZGVyIGNvbnRleHRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcCA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9y
ZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2gKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNo
KCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEZpbmRl
ciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBz
eW5jaHJvbml6ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG1hdGNoZXJP
dXQubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0g
bWF0Y2hlck91dFtpXSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YuY2FsbCggc2VlZCwgZWxlbSAp
IDogcHJlTWFwW2ldKSA+IC0xICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlm
IGRlZmluZWQKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlck91dCA9IGNvbmRlbnNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRjaGVyT3V0ID09PSByZXN1bHRzID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVu
Z3RoICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJP
dXQKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHBvc3RGaW5kZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RG
aW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5h
cHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIG1hdGNoZXJGcm9t
VG9rZW5zKCB0b2tlbnMgKSB7Ci0gICAgICAgIHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGos
Ci0gICAgICAgICAgICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKLSAgICAgICAgICAgICAgICBs
ZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMF0udHlwZSBdLAotICAgICAg
ICAgICAgICAgIGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxh
dGl2ZVsiICJdLAotICAgICAgICAgICAgICAgIGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCwK
LQotICAgICAgICAgICAgICAgIC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRo
YXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpCi0gICAg
ICAgICAgICAgICAgbWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0
OwotICAgICAgICAgICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKLSAgICAgICAg
ICAgICAgICBtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleE9mLmNhbGwoIGNoZWNrQ29u
dGV4dCwgZWxlbSApID4gLTE7Ci0gICAgICAgICAgICAgICAgfSwgaW1wbGljaXRSZWxhdGl2ZSwg
dHJ1ZSApLAotICAgICAgICAgICAgICAgIG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29u
dGV4dCwgeG1sICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggIWxlYWRpbmdS
ZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja0NvbnRleHQgPSBjb250ZXh0
KS5ub2RlVHlwZSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSAp
OwotICAgICAgICAgICAgICAgIH0gXTsKLQotICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5z
W2ldLnR5cGUgXSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVycyA9IFsgYWRk
Q29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyID0g
RXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1tpXS5tYXRj
aGVzICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBzcGVjaWFsIHVwb24g
c2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG1hdGNoZXJbIGV4cGFuZG8gXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhh
bmRsaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSArK2k7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaiA8IGxlbjsgaisrICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggRXhwci5yZWxhdGl2ZVsgdG9r
ZW5zW2pdLnR5cGUgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc2V0TWF0Y2hlcigKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID4gMSAmJiB0b2tlbnMuc2xp
Y2UoIDAsIGkgLSAxICkuam9pbigiIikucmVwbGFjZSggcnRyaW0sICIkMSIgKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tl
bnMuc2xpY2UoIGksIGogKSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2Uo
IGogKSkgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIDwgbGVu
ICYmIHRva2Vucy5qb2luKCIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
cnMucHVzaCggbWF0Y2hlciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTsKLX0KLQotZnVuY3Rpb24gbWF0
Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgewot
ICAgICAgICB2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAotICAgICAgICAgICAg
ICAgIGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLAotICAgICAgICAgICAg
ICAgIHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMs
IGV4cGFuZENvbnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSwgaiwg
bWF0Y2hlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IFtd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQgPSAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gIjAiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bm1hdGNoZWQgPSBzZWVkICYmIFtdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRlcm1vc3QgPSBleHBhbmRDb250ZXh0ICE9IG51bGwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IGFsd2F5cyBoYXZl
IGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIGNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbIlRBRyJdKCAi
KiIsIGV4cGFuZENvbnRleHQgJiYgY29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQgKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVzdGVkIG1hdGNoZXJzIHNob3VsZCB1
c2Ugbm9uLWludGVnZXIgZGlycnVucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1h
dGguRSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCAh
PT0gZG9jdW1lbnQgJiYgY29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FjaGVkcnVucyA9IHN1cGVyTWF0Y2hlci5lbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVu
dE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyAobWF0Y2hlciA9IGVsZW1l
bnRNYXRjaGVyc1tqXSk7IGorKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHMucHVzaCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvdXRl
cm1vc3QgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlZHJ1bnMgPSArK3N1cGVyTWF0Y2hlci5lbDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmFj
ayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggYnlTZXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBt
YXRjaGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGVs
ZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDb3VudC0tOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBv
ciBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlZWQg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1h
dGNoZWQucHVzaCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSBzZXQgZmlsdGVy
cyB0byB1bm1hdGNoZWQgZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRD
b3VudCArPSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBieVNldCAmJiBpICE9PSBt
YXRjaGVkQ291bnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGog
PSAwOyAobWF0Y2hlciA9IHNldE1hdGNoZXJzW2pdKTsgaisrICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwg
Y29udGV4dCwgeG1sICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVz
IHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlZENvdW50ID4gMCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoZWRb
aV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlz
Y2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaGVkID0gY29u
ZGVuc2UoIHNldE1hdGNoZWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBtYXRjaGVzIHRvIHJlc3Vs
dHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywg
c2V0TWF0Y2hlZCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZWRs
ZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBz
dGlwdWxhdGUgc29ydGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG91
dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJz
Lmxlbmd0aCApID4gMSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1h
dGNoZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFj
a3VwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdW5tYXRjaGVkOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgc3VwZXJN
YXRjaGVyLmVsID0gMDsKLSAgICAgICAgcmV0dXJuIGJ5U2V0ID8KLSAgICAgICAgICAgICAgICBt
YXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoKLSAgICAgICAgICAgICAgICBzdXBlck1hdGNo
ZXI7Ci19Ci0KLWNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
Z3JvdXAgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7Ci0gICAgICAgIHZhciBpLAotICAgICAg
ICAgICAgICAgIHNldE1hdGNoZXJzID0gW10sCi0gICAgICAgICAgICAgICAgZWxlbWVudE1hdGNo
ZXJzID0gW10sCi0gICAgICAgICAgICAgICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZVsgZXhwYW5k
byBdWyBzZWxlY3RvciArICIgIiBdOwotCi0gICAgICAgIGlmICggIWNhY2hlZCApIHsKLSAgICAg
ICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMg
dGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnQKLSAgICAgICAgICAgICAgICBp
ZiAoICFncm91cCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gdG9rZW5pemUo
IHNlbGVjdG9yICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGkgPSBncm91
cC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggZ3JvdXBbaV0gKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBj
b21waWxlZCBmdW5jdGlvbgotICAgICAgICAgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUo
IHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0
TWF0Y2hlcnMgKSApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjYWNoZWQ7Ci19OwotCi1m
dW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7
Ci0gICAgICAgIHZhciBpID0gMCwKLSAgICAgICAgICAgICAgICBsZW4gPSBjb250ZXh0cy5sZW5n
dGg7Ci0gICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgICAgICAgICAgICAgIFNp
enpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7Ci19Ci0KLWZ1bmN0aW9uIHNlbGVjdCggc2VsZWN0b3IsIGNvbnRl
eHQsIHJlc3VsdHMsIHNlZWQsIHhtbCApIHsKLSAgICAgICAgdmFyIGksIHRva2VucywgdG9rZW4s
IHR5cGUsIGZpbmQsCi0gICAgICAgICAgICAgICAgbWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3Ig
KSwKLSAgICAgICAgICAgICAgICBqID0gbWF0Y2gubGVuZ3RoOwotCi0gICAgICAgIGlmICggIXNl
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYg
dGhlcmUgaXMgb25seSBvbmUgZ3JvdXAKLSAgICAgICAgICAgICAgICBpZiAoIG1hdGNoLmxlbmd0
aCA9PT0gMSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFrZSBhIHNob3J0Y3V0
IGFuZCBzZXQgdGhlIGNvbnRleHQgaWYgdGhlIHJvb3Qgc2VsZWN0b3IgaXMgYW4gSUQKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRv
a2VuID0gdG9rZW5zWzBdKS50eXBlID09PSAiSUQiICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiAheG1sICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwci5yZWxhdGl2ZVsgdG9rZW5z
WzFdLnR5cGUgXSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
ID0gRXhwci5maW5kWyJJRCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJiYWNrc2xhc2gs
ICIiICksIGNvbnRleHQsIHhtbCApWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFjb250ZXh0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGlj
ZSggdG9rZW5zLnNoaWZ0KCkubGVuZ3RoICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRv
LWxlZnQgbWF0Y2hpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSBtYXRjaEV4
cHJbIlBPUyJdLnRlc3QoIHNlbGVjdG9yICkgPyAtMSA6IHRva2Vucy5sZW5ndGggLSAxOyBpID49
IDA7IGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tl
bnNbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWJvcnQgaWYgd2Ug
aGl0IGEgY29tYmluYXRvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIEV4
cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChmaW5kID0gRXhw
ci5maW5kWyB0eXBlIF0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21i
aW5hdG9ycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKHNl
ZWQgPSBmaW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNpYmxpbmcudGVzdCggdG9r
ZW5zWzBdLnR5cGUgKSAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwgY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRv
a2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoIGksIDEgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VlZC5s
ZW5ndGggJiYgdG9rZW5zLmpvaW4oIiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMs
IHNsaWNlLmNhbGwoIHNlZWQsIDAgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbgot
ICAgICAgICAvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2Ug
bW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlCi0gICAgICAgIGNvbXBpbGUoIHNlbGVjdG9yLCBt
YXRjaCApKAotICAgICAgICAgICAgICAgIHNlZWQsCi0gICAgICAgICAgICAgICAgY29udGV4dCwK
LSAgICAgICAgICAgICAgICB4bWwsCi0gICAgICAgICAgICAgICAgcmVzdWx0cywKLSAgICAgICAg
ICAgICAgICByc2libGluZy50ZXN0KCBzZWxlY3RvciApCi0gICAgICAgICk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHRzOwotfQotCi1pZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7Ci0g
ICAgICAgIChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGlzY29ubmVjdGVkTWF0
Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICBvbGRTZWxlY3QgPSBzZWxlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXNjYXBlID0gLyd8XFwvZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJhdHRyaWJ1dGVRdW90ZXMgPSAvXD1bXHgyMFx0XHJcblxmXSooW14nIlxdXSopW1x4MjBc
dFxyXG5cZl0qXF0vZywKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcVNhKDpmb2N1cykg
cmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSksIG5vIG5lZWQgdG8gYWxzbyBhZGQg
dG8gYnVnZ3lNYXRjaGVzIHNpbmNlIG1hdGNoZXMgY2hlY2tzIGJ1Z2d5UVNBCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRvbyBtdWNoIGNv
ZGUgKHdvdWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByYnVnZ3lRU0EgPSBbICI6Zm9jdXMiIF0sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09w
ZXJhIDExLjUpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3Vs
ZCByZXF1aXJlIHRvbyBtdWNoIGNvZGUgKHdvdWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IHNraXAgbWF0Y2hlc1NlbGVjdG9yIGZvciA6
YWN0aXZlCi0gICAgICAgICAgICAgICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gWyAiOmFjdGl2
ZSIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXNT
ZWxlY3RvciB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVtLm1vek1h
dGNoZXNTZWxlY3RvciB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NFbGVt
LndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcjsKLQotICAgICAgICAgICAgICAgIC8vIEJ1
aWxkIFFTQSByZWdleAotICAgICAgICAgICAgICAgIC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQg
ZnJvbSBEaWVnbyBQZXJpbmkKLSAgICAgICAgICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3Ry
aW5nIG9uIHB1cnBvc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gdGVz
dCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljdGx5Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OQot
ICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0PjxvcHRpb24g
c2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IjsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSUU4IC0gU29tZSBib29sZWFuIGF0dHJpYnV0ZXMgYXJlIG5vdCB0cmVhdGVkIGNvcnJl
Y3RseQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwo
IltzZWxlY3RlZF0iKS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJidWdneVFTQS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKig/OmNoZWNrZWR8ZGlzYWJs
ZWR8aXNtYXB8bXVsdGlwbGV8cmVhZG9ubHl8c2VsZWN0ZWR8dmFsdWUpIiApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWJraXQvT3Bl
cmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50cwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3Nz
My1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IElFOCB0aHJvd3MgZXJyb3IgaGVyZSAoZG8gbm90IHB1dCB0ZXN0cyBhZnRlciB0aGlzIG9uZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hl
Y2tlZCIpLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5
UVNBLnB1c2goIjpjaGVja2VkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmEgMTAtMTIvSUU5IC0gXj0gJD0gKj0g
YW5kIGVtcHR5IHZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBz
ZWxlY3QgYW55dGhpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAi
PHAgdGVzdD0nJz48L3A+IjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGl2LnF1ZXJ5
U2VsZWN0b3JBbGwoIlt0ZXN0Xj0nJ10iKS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAiWypeJF09IiArIHdoaXRlc3BhY2UgKyAiKig/
OlwiXCJ8JycpIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVt
ZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIChkbyBub3QgcHV0IHRlc3RzIGFmdGVy
IHRoaXMgb25lKQotICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8aW5w
dXQgdHlwZT0naGlkZGVuJy8+IjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWRpdi5x
dWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxlZCIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICAgICAgLy8gcmJ1Z2d5UVNBIGFsd2F5cyBjb250YWlucyA6Zm9jdXMsIHNvIG5vIG5lZWQg
Zm9yIGEgbGVuZ3RoIGNoZWNrCi0gICAgICAgICAgICAgICAgcmJ1Z2d5UVNBID0gLyogcmJ1Z2d5
UVNBLmxlbmd0aCAmJiAqLyBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbigifCIpICk7Ci0KLSAg
ICAgICAgICAgICAgICBzZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3Vs
dHMsIHNlZWQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlIHF1
ZXJ5U2VsZWN0b3JBbGwgd2hlbiBub3QgZmlsdGVyaW5nLAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2hlbiB0aGlzIGlzIG5vdCB4bWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBh
bmQgd2hlbiBubyBRU0EgYnVncyBhcHBseQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
c2VlZCAmJiAheG1sICYmICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwcywgaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvbGQgPSB0cnVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5pZCA9IGV4cGFuZG8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0b3IgPSBjb250ZXh0Lm5vZGVUeXBlID09
PSA5ICYmIHNlbGVjdG9yOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHFT
QSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVudC1yb290ZWQgcXVlcmllcwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5
aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFuZCB3b3JraW5nIHVwIGZyb20gdGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250
IGZvciB0aGUgdGVjaG5pcXVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
RSA4IGRvZXNuJ3Qgd29yayBvbiBvYmplY3QgZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBjb250ZXh0Lm5vZGVUeXBlID09PSAxICYmIGNvbnRleHQubm9kZU5h
bWUudG9Mb3dlckNhc2UoKSAhPT0gIm9iamVjdCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChvbGQgPSBjb250ZXh0Lmdl
dEF0dHJpYnV0ZSgiaWQiKSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuaWQgPSBvbGQucmVwbGFjZSggcmVzY2FwZSwgIlxcJCYiICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRl
KCAiaWQiLCBuaWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gIltpZD0nIiAr
IG5pZCArICInXSAiOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aSA9IGdyb3Vwcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncm91cHNbaV0gPSBuaWQgKyBncm91cHNbaV0uam9pbigiIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciAp
ICYmIGNvbnRleHQucGFyZW50Tm9kZSB8fCBjb250ZXh0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIiwiKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbmV3U2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoIG5ld0NvbnRleHQucXVl
cnlTZWxlY3RvckFsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3U2VsZWN0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICksIDAgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChxc2FFcnJvcikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvbGQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVtb3Zl
QXR0cmlidXRlKCJpZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkU2VsZWN0KCBzZWxlY3Rvciwg
Y29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgICAgIGlmICggbWF0Y2hlcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFz
c2VydChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3IKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAo
SUUgOSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdGVkTWF0Y2gg
PSBtYXRjaGVzLmNhbGwoIGRpdiwgImRpdiIgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZh
bHNlIGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmNhbGwoIGRpdiwgIlt0
ZXN0IT0nJ106c2l6emxlIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHt9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmJ1Z2d5TWF0Y2hlcyBhbHdheXMg
Y29udGFpbnMgOmFjdGl2ZSBhbmQgOmZvY3VzLCBzbyBubyBuZWVkIGZvciBhIGxlbmd0aCBjaGVj
awotICAgICAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5TWF0Y2hlcyA9IC8qIHJidWdneU1hdGNo
ZXMubGVuZ3RoICYmICovIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbigifCIpICk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIFNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlv
biggZWxlbSwgZXhwciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMs
ICI9JyQxJ10iICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmJ1Z2d5
TWF0Y2hlcyBhbHdheXMgY29udGFpbnMgOmFjdGl2ZSwgc28gbm8gbmVlZCBmb3IgYW4gZXhpc3Rl
bmNlIGNoZWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzWE1MKCBl
bGVtICkgJiYgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICYmICFyYnVnZ3lRU0EudGVzdCgg
ZXhwciApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0
ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJu
cyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0IHx8IGRpc2Nvbm5lY3RlZE1hdGNoIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEg
ZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmcmFnbWVudCBpbiBJRSA5Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5kb2N1bWVu
dCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSko
KTsKLX0KLQotLy8gRGVwcmVjYXRlZAotRXhwci5wc2V1ZG9zWyJudGgiXSA9IEV4cHIucHNldWRv
c1siZXEiXTsKLQotLy8gQmFjay1jb21wYXQKLWZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fQotRXhw
ci5maWx0ZXJzID0gc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLnBzZXVkb3M7Ci1FeHByLnNl
dEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpOwotCi0vLyBPdmVycmlkZSBzaXp6bGUgYXR0cmli
dXRlIHJldHJpZXZhbAotU2l6emxlLmF0dHIgPSBqUXVlcnkuYXR0cjsKLWpRdWVyeS5maW5kID0g
U2l6emxlOwotalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOwotalF1ZXJ5LmV4cHJbIjoi
XSA9IGpRdWVyeS5leHByLnBzZXVkb3M7Ci1qUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNv
cnQ7Ci1qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OwotalF1ZXJ5LmlzWE1MRG9jID0gU2l6
emxlLmlzWE1MOwotalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOwotCi0KLX0pKCB3
aW5kb3cgKTsKLXZhciBydW50aWwgPSAvVW50aWwkLywKLSAgICAgICAgcnBhcmVudHNwcmV2ID0g
L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sCi0gICAgICAgIGlzU2ltcGxlID0gL14u
W146I1xbXC4sXSokLywKLSAgICAgICAgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNo
Lm5lZWRzQ29udGV4dCwKLSAgICAgICAgLy8gbWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2Ug
YSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXQKLSAgICAgICAgZ3Vh
cmFudGVlZFVuaXF1ZSA9IHsKLSAgICAgICAgICAgICAgICBjaGlsZHJlbjogdHJ1ZSwKLSAgICAg
ICAgICAgICAgICBjb250ZW50czogdHJ1ZSwKLSAgICAgICAgICAgICAgICBuZXh0OiB0cnVlLAot
ICAgICAgICAgICAgICAgIHByZXY6IHRydWUKLSAgICAgICAgfTsKLQotalF1ZXJ5LmZuLmV4dGVu
ZCh7Ci0gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaSwgbCwgbGVuZ3RoLCBuLCByLCByZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmID0gdGhpczsKLQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAi
c3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkoIHNlbGVj
dG9yICkuZmlsdGVyKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBpID0gMCwgbCA9IHNlbGYubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxm
WyBpIF0sIHRoaXMgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0
ID0gdGhpcy5wdXNoU3RhY2soICIiLCAiZmluZCIsIHNlbGVjdG9yICk7Ci0KLSAgICAgICAgICAg
ICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcmV0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5maW5kKCBzZWxlY3RvciwgdGhpc1tpXSwgcmV0ICk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaSA+IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXN1bHRzIGFyZSB1bmlxdWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbiA9IGxlbmd0aDsgbiA8IHJldC5sZW5ndGg7
IG4rKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBy
ID0gMDsgciA8IGxlbmd0aDsgcisrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCByZXRbcl0gPT09IHJldFtuXSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZShu
LS0sIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAg
ICB9LAotCi0gICAgICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdl
dCwgdGhpcyApLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gdGFyZ2V0cy5sZW5ndGg7
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFy
Z2V0c1tpXSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgbm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSwgIm5vdCIsIHNlbGVj
dG9yKTsKLSAgICAgICAgfSwKLQotICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0aGlzLCBz
ZWxlY3RvciwgdHJ1ZSksICJmaWx0ZXIiLCBzZWxlY3RvciApOwotICAgICAgICB9LAotCi0gICAg
ICAgIGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEh
c2VsZWN0b3IgJiYgKAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHNlbGVjdG9yID09
PSAic3RyaW5nIiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRo
ZSByZXR1cm5lZCBzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gJCgi
cDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0
d28gInAiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybmVlZHNDb250ZXh0LnRl
c3QoIHNlbGVjdG9yICkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeSggc2VsZWN0b3IsIHRoaXMuY29udGV4dCApLmluZGV4KCB0aGlzWzBdICkgPj0gMCA6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbHRlcigg
c2VsZWN0b3IsIHRoaXMgKS5sZW5ndGggPiAwIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5maWx0ZXIoIHNlbGVjdG9yICkubGVuZ3RoID4gMCApOwotICAgICAgICB9LAot
Ci0gICAgICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGN1ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gW10sCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBybmVlZHNDb250
ZXh0LnRlc3QoIHNlbGVjdG9ycyApIHx8IHR5cGVvZiBzZWxlY3RvcnMgIT09ICJzdHJpbmciID8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRl
eHQgfHwgdGhpcy5jb250ZXh0ICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
OwotCi0gICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY3VyID0gdGhpc1tpXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBjb250ZXh0ICYmIGN1ci5u
b2RlVHlwZSAhPT0gMTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
cG9zID8gcG9zLmluZGV4KGN1cikgPiAtMSA6IGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3Rvcihj
dXIsIHNlbGVjdG9ycykgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0LnB1c2goIGN1ciApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldCA9
IHJldC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQ7Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgImNsb3Nlc3QiLCBzZWxlY3RvcnMg
KTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFu
IGVsZW1lbnQgd2l0aGluCi0gICAgICAgIC8vIHRoZSBtYXRjaGVkIHNldCBvZiBlbGVtZW50cwot
ICAgICAgICBpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBO
byBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudAotICAgICAgICAgICAgICAgIGlmICgg
IWVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCB0aGlzWzBdICYmIHRo
aXNbMF0ucGFyZW50Tm9kZSApID8gdGhpcy5wcmV2QWxsKCkubGVuZ3RoIDogLTE7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gaW5kZXggaW4gc2VsZWN0b3IKLSAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSggdGhpc1swXSwgalF1ZXJ5KCBlbGVt
ICkgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhl
IHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnQKLSAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LmluQXJyYXkoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZl
cyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTsKLSAgICAg
ICAgfSwKLQotICAgICAgICBhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc2V0ID0gdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQg
KSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXkoIHNl
bGVjdG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3RvciBdIDogc2VsZWN0b3IgKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA9IGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwg
c2V0ICk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGlzRGlzY29u
bmVjdGVkKCBzZXRbMF0gKSB8fCBpc0Rpc2Nvbm5lY3RlZCggYWxsWzBdICkgPwotICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS51bmlx
dWUoIGFsbCApICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYWRkQmFjazogZnVuY3Rpb24oIHNl
bGVjdG9yICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0g
bnVsbCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnBy
ZXZPYmplY3QuZmlsdGVyKHNlbGVjdG9yKQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0K
LX0pOwotCi1qUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrOwotCi0vLyBBIHBh
aW5mdWxseSBzaW1wbGUgY2hlY2sgdG8gc2VlIGlmIGFuIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVk
Ci0vLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBiZSBpbXByb3ZlZCwgd2hlcmUgZmVhc2libGUp
LgotZnVuY3Rpb24gaXNEaXNjb25uZWN0ZWQoIG5vZGUgKSB7Ci0gICAgICAgIHJldHVybiAhbm9k
ZSB8fCAhbm9kZS5wYXJlbnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMTE7
Ci19Ci0KLWZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkgewotICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICAgICAgY3VyID0gY3VyWyBkaXIgXTsKLSAgICAgICAgfSB3aGlsZSAoIGN1ciAmJiBj
dXIubm9kZVR5cGUgIT09IDEgKTsKLQotICAgICAgICByZXR1cm4gY3VyOwotfQotCi1qUXVlcnku
ZWFjaCh7Ci0gICAgICAgIHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOwotICAgICAg
ICB9LAotICAgICAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUiICk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIsIHVudGlsICk7
Ci0gICAgICAgIH0sCi0gICAgICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAibmV4dFNpYmxpbmciICk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIHByZXY6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHJldHVy
biBzaWJsaW5nKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOwotICAgICAgICB9LAotICAgICAg
ICBuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiApOwotICAgICAgICB9LAotICAgICAgICBwcmV2
QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRp
ciggZWxlbSwgInByZXZpb3VzU2libGluZyIgKTsKLSAgICAgICAgfSwKLSAgICAgICAgbmV4dFVu
dGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIsIHVudGlsICk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiwgdW50aWwg
KTsKLSAgICAgICAgfSwKLSAgICAgICAgc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuc2libGluZyggKCBlbGVtLnBhcmVudE5vZGUgfHwg
e30gKS5maXJzdENoaWxkLCBlbGVtICk7Ci0gICAgICAgIH0sCi0gICAgICAgIGNoaWxkcmVuOiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmco
IGVsZW0uZmlyc3RDaGlsZCApOwotICAgICAgICB9LAotICAgICAgICBjb250ZW50czogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZWxl
bSwgImlmcmFtZSIgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNvbnRlbnREb2N1
bWVudCB8fCBlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOgotICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7Ci0gICAgICAgIH0KLX0s
IGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKLSAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5j
dGlvbiggdW50aWwsIHNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgIHZhciByZXQgPSBqUXVl
cnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTsKLQotICAgICAgICAgICAgICAgIGlmICggIXJ1bnRp
bC50ZXN0KCBuYW1lICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHVu
dGlsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggc2VsZWN0b3Ig
JiYgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCByZXQgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmxlbmd0aCA+IDEgJiYgIWd1YXJhbnRl
ZWRVbmlxdWVbIG5hbWUgXSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OwotCi0gICAgICAg
ICAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCA+IDEgJiYgcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUg
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldC5yZXZlcnNlKCk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBy
ZXQsIG5hbWUsIGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkuam9pbigiLCIpICk7Ci0gICAg
ICAgIH07Ci19KTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0gICAgICAgIGZpbHRlcjogZnVuY3Rpb24o
IGV4cHIsIGVsZW1zLCBub3QgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBub3QgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBleHByID0gIjpub3QoIiArIGV4cHIgKyAiKSI7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1zLmxlbmd0aCA9PT0gMSA/
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoZWxl
bXNbMF0sIGV4cHIpID8gWyBlbGVtc1swXSBdIDogW10gOgotICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmZpbmQubWF0Y2hlcyhleHByLCBlbGVtcyk7Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHsKLSAgICAgICAgICAgICAgICB2
YXIgbWF0Y2hlZCA9IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gZWxlbVsgZGly
IF07Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkg
JiYgKHVudGlsID09PSB1bmRlZmluZWQgfHwgY3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnko
IGN1ciApLmlzKCB1bnRpbCApKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3Vy
Lm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aGVkLnB1c2goIGN1ciApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgY3VyID0gY3VyW2Rpcl07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiBtYXRjaGVkOwotICAgICAgICB9LAotCi0gICAgICAgIHNpYmxpbmc6IGZ1
bmN0aW9uKCBuLCBlbGVtICkgewotICAgICAgICAgICAgICAgIHZhciByID0gW107Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIucHVzaCggbiApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBy
OwotICAgICAgICB9Ci19KTsKLQotLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25h
bGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKLWZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxp
Zmllciwga2VlcCApIHsKLQotICAgICAgICAvLyBDYW4ndCBwYXNzIG51bGwgb3IgdW5kZWZpbmVk
IHRvIGluZGV4T2YgaW4gRmlyZWZveCA0Ci0gICAgICAgIC8vIFNldCB0byAwIHRvIHNraXAgc3Ry
aW5nIGNoZWNrCi0gICAgICAgIHF1YWxpZmllciA9IHF1YWxpZmllciB8fCAwOwotCi0gICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkgewotICAgICAgICAgICAgICAg
IHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcmV0VmFsID0gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwg
aSwgZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbCA9PT0ga2Vl
cDsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICB9IGVsc2UgaWYgKCBxdWFsaWZpZXIu
bm9kZVR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRz
LCBmdW5jdGlvbiggZWxlbSwgaSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
IGVsZW0gPT09IHF1YWxpZmllciApID09PSBrZWVwOwotICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgewotICAg
ICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlv
biggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBl
ID09PSAxOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCBpc1Np
bXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBqUXVlcnkuZmlsdGVyKHF1YWxpZmllciwgZmlsdGVyZWQsICFrZWVwKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVyID0galF1ZXJ5
LmZpbHRlciggcXVhbGlmaWVyLCBmaWx0ZXJlZCApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVs
ZW0sIGkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICggalF1ZXJ5LmluQXJyYXkoIGVsZW0s
IHF1YWxpZmllciApID49IDAgKSA9PT0ga2VlcDsKLSAgICAgICAgfSk7Ci19Ci1mdW5jdGlvbiBj
cmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICkgewotICAgICAgICB2YXIgbGlzdCA9IG5vZGVO
YW1lcy5zcGxpdCggInwiICksCi0gICAgICAgIHNhZmVGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9j
dW1lbnRGcmFnbWVudCgpOwotCi0gICAgICAgIGlmICggc2FmZUZyYWcuY3JlYXRlRWxlbWVudCAp
IHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIGxpc3QubGVuZ3RoICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgc2FmZUZyYWcuY3JlYXRlRWxlbWVudCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlzdC5wb3AoKQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNhZmVGcmFnOwotfQotCi12
YXIgbm9kZU5hbWVzID0gImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8
ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8IiArCi0gICAgICAgICAg
ICAgICAgImhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rp
b258c3VtbWFyeXx0aW1lfHZpZGVvIiwKLSAgICAgICAgcmlubGluZWpRdWVyeSA9IC8galF1ZXJ5
XGQrPSIoPzpudWxsfFxkKykiL2csCi0gICAgICAgIHJsZWFkaW5nV2hpdGVzcGFjZSA9IC9eXHMr
LywKLSAgICAgICAgcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5w
dXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSwKLSAgICAgICAgcnRhZ05h
bWUgPSAvPChbXHc6XSspLywKLSAgICAgICAgcnRib2R5ID0gLzx0Ym9keS9pLAotICAgICAgICBy
aHRtbCA9IC88fCYjP1x3KzsvLAotICAgICAgICBybm9Jbm5lcmh0bWwgPSAvPCg/OnNjcmlwdHxz
dHlsZXxsaW5rKS9pLAotICAgICAgICBybm9jYWNoZSA9IC88KD86c2NyaXB0fG9iamVjdHxlbWJl
ZHxvcHRpb258c3R5bGUpL2ksCi0gICAgICAgIHJub3NoaW1jYWNoZSA9IG5ldyBSZWdFeHAoIjwo
PzoiICsgbm9kZU5hbWVzICsgIilbXFxzLz5dIiwgImkiKSwKLSAgICAgICAgcmNoZWNrYWJsZVR5
cGUgPSAvXig/OmNoZWNrYm94fHJhZGlvKSQvLAotICAgICAgICAvLyBjaGVja2VkPSJjaGVja2Vk
IiBvciBjaGVja2VkCi0gICAgICAgIHJjaGVja2VkID0gL2NoZWNrZWRccyooPzpbXj1dfD1ccyou
Y2hlY2tlZC4pL2ksCi0gICAgICAgIHJzY3JpcHRUeXBlID0gL1wvKGphdmF8ZWNtYSlzY3JpcHQv
aSwKLSAgICAgICAgcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKXxbXF1c
LV17Mn0+XHMqJC9nLAotICAgICAgICB3cmFwTWFwID0gewotICAgICAgICAgICAgICAgIG9wdGlv
bjogWyAxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iIF0sCi0g
ICAgICAgICAgICAgICAgbGVnZW5kOiBbIDEsICI8ZmllbGRzZXQ+IiwgIjwvZmllbGRzZXQ+IiBd
LAotICAgICAgICAgICAgICAgIHRoZWFkOiBbIDEsICI8dGFibGU+IiwgIjwvdGFibGU+IiBdLAot
ICAgICAgICAgICAgICAgIHRyOiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFi
bGU+IiBdLAotICAgICAgICAgICAgICAgIHRkOiBbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAi
PC90cj48L3Rib2R5PjwvdGFibGU+IiBdLAotICAgICAgICAgICAgICAgIGNvbDogWyAyLCAiPHRh
YmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwK
LSAgICAgICAgICAgICAgICBhcmVhOiBbIDEsICI8bWFwPiIsICI8L21hcD4iIF0sCi0gICAgICAg
ICAgICAgICAgX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KLSAgICAgICAgfSwKLSAgICAgICAgc2Fm
ZUZyYWdtZW50ID0gY3JlYXRlU2FmZUZyYWdtZW50KCBkb2N1bWVudCApLAotICAgICAgICBmcmFn
bWVudERpdiA9IHNhZmVGcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2IikgKTsKLQotd3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOwotd3JhcE1h
cC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0
aW9uID0gd3JhcE1hcC50aGVhZDsKLXdyYXBNYXAudGggPSB3cmFwTWFwLnRkOwotCi0vLyBJRTYt
OCBjYW4ndCBzZXJpYWxpemUgbGluaywgc2NyaXB0LCBzdHlsZSwgb3IgYW55IGh0bWw1IChOb1Nj
b3BlKSB0YWdzLAotLy8gdW5sZXNzIHdyYXBwZWQgaW4gYSBkaXYgd2l0aCBub24tYnJlYWtpbmcg
Y2hhcmFjdGVycyBpbiBmcm9udCBvZiBpdC4KLWlmICggIWpRdWVyeS5zdXBwb3J0Lmh0bWxTZXJp
YWxpemUgKSB7Ci0gICAgICAgIHdyYXBNYXAuX2RlZmF1bHQgPSBbIDEsICJYPGRpdj4iLCAiPC9k
aXY+IiBdOwotfQotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICAgICAgdGV4dDogZnVuY3Rpb24o
IHZhbHVlICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBm
dW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUg
PT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS50
ZXh0KCB0aGlzICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5
KCkuYXBwZW5kKCAoIHRoaXNbMF0gJiYgdGhpc1swXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50
ICkuY3JlYXRlVGV4dE5vZGUoIHZhbHVlICkgKTsKLSAgICAgICAgICAgICAgICB9LCBudWxsLCB2
YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOwotICAgICAgICB9LAotCi0gICAgICAgIHdyYXBBbGw6
IGZ1bmN0aW9uKCBodG1sICkgewotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIGh0bWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oaSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhp
cykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0g
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUg
dGFyZ2V0IGFyb3VuZAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXAgPSBqUXVlcnko
IGh0bWwsIHRoaXNbMF0ub3duZXJEb2N1bWVudCApLmVxKDApLmNsb25lKHRydWUpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbMF0gKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcC5t
YXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVt
ID0gdGhpczsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0u
Zmlyc3RDaGlsZCAmJiBlbGVtLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXBw
ZW5kKCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgd3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLndyYXBJbm5lciggaHRt
bC5jYWxsKHRoaXMsIGkpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udGVudHMubGVuZ3RoICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cy53cmFwQWxsKCBodG1sICk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbGYuYXBwZW5kKCBodG1sICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgd3JhcDogZnVuY3Rp
b24oIGh0bWwgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNG
dW5jdGlvbiggaHRtbCApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbihpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS53cmFwQWxs
KCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKHRoaXMsIGkpIDogaHRtbCApOwotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAgIHVud3JhcDogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgImJvZHkiICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlcGxh
Y2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9KS5lbmQoKTsKLSAgICAgICAgfSwKLQotICAgICAgICBhcHBlbmQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50
cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLQot
ICAgICAgICBwcmVwZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUg
PT09IDExICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydEJl
Zm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYmVmb3JlOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSAp
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1l
bnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBzZXQgPSBqUXVlcnkuY2xlYW4oIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWVyZ2UoIHNldCwgdGhpcyApLCAiYmVm
b3JlIiwgdGhpcy5zZWxlY3RvciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQot
ICAgICAgICBhZnRlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhaXNEaXNj
b25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBl
bGVtLCB0aGlzLm5leHRTaWJsaW5nICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGgg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2V0ID0galF1ZXJ5LmNsZWFuKCBhcmd1
bWVudHMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjaygg
alF1ZXJ5Lm1lcmdlKCB0aGlzLCBzZXQgKSwgImFmdGVyIiwgdGhpcy5zZWxlY3RvciApOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBrZWVwRGF0YSBpcyBmb3Ig
aW50ZXJuYWwgdXNlIG9ubHktLWRvIG5vdCBkb2N1bWVudAotICAgICAgICByZW1vdmU6IGZ1bmN0
aW9uKCBzZWxlY3Rvciwga2VlcERhdGEgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVsZW0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKLQotICAgICAgICAgICAgICAgIGZvciAoIDsg
KGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFzZWxlY3RvciB8fCBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgWyBlbGVtIF0gKS5s
ZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWtlZXBEYXRh
ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
KiIpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNs
ZWFuRGF0YSggWyBlbGVtIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZW1wdHk6IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBlbGVtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgaSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gdGhpc1tpXSkgIT0g
bnVsbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQg
bm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KCBlbGVtLmZpcnN0Q2hpbGQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICB9LAotCi0gICAgICAgIGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVl
cERhdGFBbmRFdmVudHMgKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUFuZEV2ZW50cyA9IGRhdGFB
bmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKLSAgICAgICAgICAgICAg
ICBkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5k
RXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5tYXAoIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaHRtbDogZnVuY3Rpb24oIHZh
bHVlICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5j
dGlvbiggdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNb
MF0gfHwge30sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGg7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgPwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MLnJlcGxhY2UoIHJp
bmxpbmVqUXVlcnksICIiICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNl
IGlubmVySFRNTAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09
ICJzdHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoIGpRdWVyeS5zdXBwb3J0Lmh0bWxTZXJpYWxpemUgfHwgIXJu
b3NoaW1jYWNoZS50ZXN0KCB2YWx1ZSApICApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICggalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwgIXJsZWFkaW5nV2hp
dGVzcGFjZS50ZXN0KCB2YWx1ZSApICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIiIsICIiXSApWzFdLnRv
TG93ZXJDYXNlKCkgXSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHZhbHVlLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHBy
ZXZlbnQgbWVtb3J5IGxlYWtzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtID0gdGhpc1tpXSB8fCB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5p
bm5lckhUTUwgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gMDsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dz
IGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50
cy5sZW5ndGggKTsKLSAgICAgICAgfSwKLQotICAgICAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24o
IHZhbHVlICkgewotICAgICAgICAgICAgICAgIGlmICggIWlzRGlzY29ubmVjdGVkKCB0aGlzWzBd
ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZWxl
bWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NIGJlZm9yZSB0aGV5IGFyZSBpbnNlcnRlZAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBjYW4gaGVscCBmaXggcmVwbGFjaW5nIGEg
cGFyZW50IHdpdGggY2hpbGQgZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpLCBvbGQgPSBzZWxm
Lmh0bWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJl
cGxhY2VXaXRoKCB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBvbGQgKSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggdmFsdWUgKS5kZXRh
Y2goKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmUoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5leHQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KG5leHQpLmJlZm9yZSggdmFsdWUgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkocGFyZW50KS5hcHBlbmQoIHZhbHVlICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
Lmxlbmd0aCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hTdGFjayggalF1ZXJ5
KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlKCkgOiB2YWx1ZSksICJyZXBsYWNlV2l0
aCIsIHZhbHVlICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpczsKLSAgICAgICAgfSwK
LQotICAgICAgICBkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCi0gICAgICAgICAgICAg
ICAgYXJncyA9IFtdLmNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTsKLQotICAgICAgICAgICAgICAg
IHZhciByZXN1bHRzLCBmaXJzdCwgZnJhZ21lbnQsIGlOb0Nsb25lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbMF0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzID0gW10sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsID0gdGhpcy5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBj
bG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXQKLSAgICAg
ICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lICYmIGwgPiAxICYmIHR5
cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5kb21NYW5pcCggYXJncywg
dGFibGUsIGNhbGxiYWNrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVl
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSh0
aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHZhbHVlLmNh
bGwoIHRoaXMsIGksIHRhYmxlID8gc2VsZi5odG1sKCkgOiB1bmRlZmluZWQgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxi
YWNrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIHRoaXNbMF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRzID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIGFyZ3MsIHRoaXMsIHNjcmlwdHMgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gcmVzdWx0cy5mcmFnbWVudDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0g
MSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBmaXJzdDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBmaXJzdCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgPSB0YWJs
ZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3Qg
aXRlbSBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBj
ZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRnJhZ21lbnRzIGZyb20gdGhlIGZyYWdtZW50IGNhY2hlIG11c3QgYWx3YXlzIGJlIGNs
b25lZCBhbmQgbmV2ZXIgdXNlZCBpbiBwbGFjZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggaU5vQ2xvbmUgPSByZXN1bHRzLmNhY2hlYWJsZSB8fCBsIC0gMTsgaSA8IGw7
IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ay5jYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzW2ldLCAidGFibGUiICkgPwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kT3JBcHBl
bmQoIHRoaXNbaV0sICJ0Ym9keSIgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpID09PSBpTm9DbG9uZSA/Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50IDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmNsb25lKCBmcmFnbWVudCwgdHJ1ZSwgdHJ1ZSApCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBG
aXggIzExODA5OiBBdm9pZCBsZWFraW5nIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAgICAg
ZnJhZ21lbnQgPSBmaXJzdCA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
c2NyaXB0cy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5lYWNoKCBzY3JpcHRzLCBmdW5jdGlvbiggaSwgZWxlbSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc3JjICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuYWpheCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmFqYXgoewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVybDogZWxlbS5zcmMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YVR5cGU6ICJzY3JpcHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bG9iYWw6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0aHJvd3MiOiB0cnVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCJu
byBhamF4Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9i
YWxFdmFsKCAoIGVsZW0udGV4dCB8fCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJIVE1M
IHx8ICIiICkucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiIiApICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
IGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICB9Ci19KTsKLQotZnVuY3Rpb24gZmluZE9yQXBwZW5kKCBlbGVtLCB0YWcgKSB7Ci0gICAg
ICAgIHJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKVswXSB8fCBlbGVtLmFw
cGVuZENoaWxkKCBlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCggdGFnICkgKTsKLX0K
LQotZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKLQotICAgICAgICBpZiAo
IGRlc3Qubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeS5oYXNEYXRhKCBzcmMgKSApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdHlwZSwgaSwgbCwK
LSAgICAgICAgICAgICAgICBvbGREYXRhID0galF1ZXJ5Ll9kYXRhKCBzcmMgKSwKLSAgICAgICAg
ICAgICAgICBjdXJEYXRhID0galF1ZXJ5Ll9kYXRhKCBkZXN0LCBvbGREYXRhICksCi0gICAgICAg
ICAgICAgICAgZXZlbnRzID0gb2xkRGF0YS5ldmVudHM7Ci0KLSAgICAgICAgaWYgKCBldmVudHMg
KSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGN1ckRhdGEuaGFuZGxlOwotICAgICAgICAgICAg
ICAgIGN1ckRhdGEuZXZlbnRzID0ge307Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGlu
IGV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gZXZl
bnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsg
aSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gbWFrZSB0aGUgY2xvbmVkIHB1YmxpYyBkYXRhIG9iamVjdCBh
IGNvcHkgZnJvbSB0aGUgb3JpZ2luYWwKLSAgICAgICAgaWYgKCBjdXJEYXRhLmRhdGEgKSB7Ci0g
ICAgICAgICAgICAgICAgY3VyRGF0YS5kYXRhID0galF1ZXJ5LmV4dGVuZCgge30sIGN1ckRhdGEu
ZGF0YSApOwotICAgICAgICB9Ci19Ci0KLWZ1bmN0aW9uIGNsb25lRml4QXR0cmlidXRlcyggc3Jj
LCBkZXN0ICkgewotICAgICAgICB2YXIgbm9kZU5hbWU7Ci0KLSAgICAgICAgLy8gV2UgZG8gbm90
IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIG5vbi1FbGVtZW50cwotICAgICAgICBpZiAoIGRlc3Qu
bm9kZVR5cGUgIT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gY2xlYXJBdHRyaWJ1dGVzIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZXMsIHdoaWNo
IHdlIGRvbid0IHdhbnQsCi0gICAgICAgIC8vIGJ1dCBhbHNvIHJlbW92ZXMgdGhlIGF0dGFjaEV2
ZW50IGV2ZW50cywgd2hpY2ggd2UgKmRvKiB3YW50Ci0gICAgICAgIGlmICggZGVzdC5jbGVhckF0
dHJpYnV0ZXMgKSB7Ci0gICAgICAgICAgICAgICAgZGVzdC5jbGVhckF0dHJpYnV0ZXMoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIG1lcmdlQXR0cmlidXRlcywgaW4gY29udHJhc3QsIG9ubHkg
bWVyZ2VzIGJhY2sgb24gdGhlCi0gICAgICAgIC8vIG9yaWdpbmFsIGF0dHJpYnV0ZXMsIG5vdCB0
aGUgZXZlbnRzCi0gICAgICAgIGlmICggZGVzdC5tZXJnZUF0dHJpYnV0ZXMgKSB7Ci0gICAgICAg
ICAgICAgICAgZGVzdC5tZXJnZUF0dHJpYnV0ZXMoIHNyYyApOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgaWYg
KCBub2RlTmFtZSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgICAgICAgICAgICAgLy8gSUU2LTEwIGlt
cHJvcGVybHkgY2xvbmVzIGNoaWxkcmVuIG9mIG9iamVjdCBlbGVtZW50cyB1c2luZyBjbGFzc2lk
LgotICAgICAgICAgICAgICAgIC8vIElFMTAgdGhyb3dzIE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVy
cm9yIGlmIHBhcmVudCBpcyBudWxsLCAjMTIxMzIuCi0gICAgICAgICAgICAgICAgaWYgKCBkZXN0
LnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Lm91dGVySFRNTCA9
IHNyYy5vdXRlckhUTUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
VGhpcyBwYXRoIGFwcGVhcnMgdW5hdm9pZGFibGUgZm9yIElFOS4gV2hlbiBjbG9uaW5nIGFuIG9i
amVjdAotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgaW4gSUU5LCB0aGUgb3V0ZXJIVE1MIHN0
cmF0ZWd5IGFib3ZlIGlzIG5vdCBzdWZmaWNpZW50LgotICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBzcmMgaGFzIGlubmVySFRNTCBhbmQgdGhlIGRlc3RpbmF0aW9uIGRvZXMgbm90LAotICAgICAg
ICAgICAgICAgIC8vIGNvcHkgdGhlIHNyYy5pbm5lckhUTUwgaW50byB0aGUgZGVzdC5pbm5lckhU
TUwuICMxMDMyNAotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9u
ZSAmJiAoc3JjLmlubmVySFRNTCAmJiAhalF1ZXJ5LnRyaW0oZGVzdC5pbm5lckhUTUwpKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVySFRNTDsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJp
bnB1dCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHsKLSAgICAgICAgICAg
ICAgICAvLyBJRTYtOCBmYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xv
bmVkIGNoZWNrYm94Ci0gICAgICAgICAgICAgICAgLy8gb3IgcmFkaW8gYnV0dG9uLiBXb3JzZSwg
SUU2LTcgZmFpbCB0byBnaXZlIHRoZSBjbG9uZWQgZWxlbWVudAotICAgICAgICAgICAgICAgIC8v
IGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1ZSBpc24ndCBh
bHNvIHNldAotCi0gICAgICAgICAgICAgICAgZGVzdC5kZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hl
Y2tlZCA9IHNyYy5jaGVja2VkOwotCi0gICAgICAgICAgICAgICAgLy8gSUU2LTcgZ2V0IGNvbmZ1
c2VkIGFuZCBlbmQgdXAgc2V0dGluZyB0aGUgdmFsdWUgb2YgYSBjbG9uZWQKLSAgICAgICAgICAg
ICAgICAvLyBjaGVja2JveC9yYWRpbyBidXR0b24gdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQg
b2YgIm9uIgotICAgICAgICAgICAgICAgIGlmICggZGVzdC52YWx1ZSAhPT0gc3JjLnZhbHVlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC52YWx1ZSA9IHNyYy52YWx1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxl
Y3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQKLSAgICAgICAgLy8gc3RhdGUgd2hl
biBjbG9uaW5nIG9wdGlvbnMKLSAgICAgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJvcHRp
b24iICkgewotICAgICAgICAgICAgICAgIGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVj
dGVkOwotCi0gICAgICAgIC8vIElFNi04IGZhaWxzIHRvIHNldCB0aGUgZGVmYXVsdFZhbHVlIHRv
IHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4KLSAgICAgICAgLy8gY2xvbmluZyBvdGhlciB0eXBlcyBv
ZiBpbnB1dCBmaWVsZHMKLSAgICAgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIg
fHwgbm9kZU5hbWUgPT09ICJ0ZXh0YXJlYSIgKSB7Ci0gICAgICAgICAgICAgICAgZGVzdC5kZWZh
dWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOwotCi0gICAgICAgIC8vIElFIGJsYW5rcyBjb250
ZW50cyB3aGVuIGNsb25pbmcgc2NyaXB0cwotICAgICAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9
PT0gInNjcmlwdCIgJiYgZGVzdC50ZXh0ICE9PSBzcmMudGV4dCApIHsKLSAgICAgICAgICAgICAg
ICBkZXN0LnRleHQgPSBzcmMudGV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEV2ZW50IGRh
dGEgZ2V0cyByZWZlcmVuY2VkIGluc3RlYWQgb2YgY29waWVkIGlmIHRoZSBleHBhbmRvCi0gICAg
ICAgIC8vIGdldHMgY29waWVkIHRvbwotICAgICAgICBkZXN0LnJlbW92ZUF0dHJpYnV0ZSggalF1
ZXJ5LmV4cGFuZG8gKTsKLX0KLQotalF1ZXJ5LmJ1aWxkRnJhZ21lbnQgPSBmdW5jdGlvbiggYXJn
cywgY29udGV4dCwgc2NyaXB0cyApIHsKLSAgICAgICAgdmFyIGZyYWdtZW50LCBjYWNoZWFibGUs
IGNhY2hlaGl0LAotICAgICAgICAgICAgICAgIGZpcnN0ID0gYXJnc1sgMCBdOwotCi0gICAgICAg
IC8vIFNldCBjb250ZXh0IGZyb20gd2hhdCBtYXkgY29tZSBpbiBhcyB1bmRlZmluZWQgb3IgYSBq
UXVlcnkgY29sbGVjdGlvbiBvciBhIG5vZGUKLSAgICAgICAgLy8gVXBkYXRlZCB0byBmaXggIzEy
MjY2IHdoZXJlIGFjY2Vzc2luZyBjb250ZXh0WzBdIGNvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBp
biBJRTkvMTAgJgotICAgICAgICAvLyBhbHNvIGRvdWJsZXMgYXMgZml4IGZvciAjODk1MCB3aGVy
ZSBwbGFpbiBvYmplY3RzIGNhdXNlZCBjcmVhdGVEb2N1bWVudEZyYWdtZW50IGV4Y2VwdGlvbgot
ICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKLSAgICAgICAgY29udGV4dCA9
ICFjb250ZXh0Lm5vZGVUeXBlICYmIGNvbnRleHRbMF0gfHwgY29udGV4dDsKLSAgICAgICAgY29u
dGV4dCA9IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0OwotCi0gICAgICAgIC8vIE9u
bHkgY2FjaGUgInNtYWxsIiAoMS8yIEtCKSBIVE1MIHN0cmluZ3MgdGhhdCBhcmUgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBtYWluIGRvY3VtZW50Ci0gICAgICAgIC8vIENsb25pbmcgb3B0aW9ucyBsb3Nl
cyB0aGUgc2VsZWN0ZWQgc3RhdGUsIHNvIGRvbid0IGNhY2hlIHRoZW0KLSAgICAgICAgLy8gSUUg
NiBkb2Vzbid0IGxpa2UgaXQgd2hlbiB5b3UgcHV0IDxvYmplY3Q+IG9yIDxlbWJlZD4gZWxlbWVu
dHMgaW4gYSBmcmFnbWVudAotICAgICAgICAvLyBBbHNvLCBXZWJLaXQgZG9lcyBub3QgY2xvbmUg
J2NoZWNrZWQnIGF0dHJpYnV0ZXMgb24gY2xvbmVOb2RlLCBzbyBkb24ndCBjYWNoZQotICAgICAg
ICAvLyBMYXN0bHksIElFNiw3LDggd2lsbCBub3QgY29ycmVjdGx5IHJldXNlIGNhY2hlZCBmcmFn
bWVudHMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSB1bmtub3duIGVsZW1zICMxMDUwMQotICAgICAg
ICBpZiAoIGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBmaXJzdCA9PT0gInN0cmluZyIgJiYg
Zmlyc3QubGVuZ3RoIDwgNTEyICYmIGNvbnRleHQgPT09IGRvY3VtZW50ICYmCi0gICAgICAgICAg
ICAgICAgZmlyc3QuY2hhckF0KDApID09PSAiPCIgJiYgIXJub2NhY2hlLnRlc3QoIGZpcnN0ICkg
JiYKLSAgICAgICAgICAgICAgICAoalF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9uZSB8fCAhcmNoZWNr
ZWQudGVzdCggZmlyc3QgKSkgJiYKLSAgICAgICAgICAgICAgICAoalF1ZXJ5LnN1cHBvcnQuaHRt
bDVDbG9uZSB8fCAhcm5vc2hpbWNhY2hlLnRlc3QoIGZpcnN0ICkpICkgewotCi0gICAgICAgICAg
ICAgICAgLy8gTWFyayBjYWNoZWFibGUgYW5kIGxvb2sgZm9yIGEgaGl0Ci0gICAgICAgICAgICAg
ICAgY2FjaGVhYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGpRdWVyeS5m
cmFnbWVudHNbIGZpcnN0IF07Ci0gICAgICAgICAgICAgICAgY2FjaGVoaXQgPSBmcmFnbWVudCAh
PT0gdW5kZWZpbmVkOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhZnJhZ21lbnQgKSB7Ci0g
ICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKLSAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW4oIGFyZ3MsIGNvbnRleHQsIGZyYWdtZW50
LCBzY3JpcHRzICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlLCBidXQg
b25seSBzdG9yZSBmYWxzZQotICAgICAgICAgICAgICAgIC8vIHVubGVzcyB0aGlzIGlzIGEgc2Vj
b25kIHBhcnNpbmcgb2YgdGhlIHNhbWUgY29udGVudAotICAgICAgICAgICAgICAgIGlmICggY2Fj
aGVhYmxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZyYWdtZW50c1sgZmly
c3QgXSA9IGNhY2hlaGl0ICYmIGZyYWdtZW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiB7IGZyYWdtZW50OiBmcmFnbWVudCwgY2FjaGVhYmxlOiBjYWNo
ZWFibGUgfTsKLX07Ci0KLWpRdWVyeS5mcmFnbWVudHMgPSB7fTsKLQotalF1ZXJ5LmVhY2goewot
ICAgICAgICBhcHBlbmRUbzogImFwcGVuZCIsCi0gICAgICAgIHByZXBlbmRUbzogInByZXBlbmQi
LAotICAgICAgICBpbnNlcnRCZWZvcmU6ICJiZWZvcmUiLAotICAgICAgICBpbnNlcnRBZnRlcjog
ImFmdGVyIiwKLSAgICAgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgotfSwgZnVuY3Rpb24o
IG5hbWUsIG9yaWdpbmFsICkgewotICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9u
KCBzZWxlY3RvciApIHsKLSAgICAgICAgICAgICAgICB2YXIgZWxlbXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFtdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLAotICAgICAg
ICAgICAgICAgICAgICAgICAgbCA9IGluc2VydC5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnQgPSB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLnBhcmVudE5vZGU7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIChwYXJlbnQgPT0gbnVsbCB8fCBwYXJlbnQgJiYgcGFyZW50
Lm5vZGVUeXBlID09PSAxMSAmJiBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpICYmIGwg
PT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRbIG9yaWdpbmFsIF0oIHRo
aXNbMF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBp
KysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zID0gKCBpID4gMCA/
IHRoaXMuY2xvbmUodHJ1ZSkgOiB0aGlzICkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeSggaW5zZXJ0W2ldIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldC5jb25jYXQoIGVsZW1zICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBpbnNlcnQuc2VsZWN0b3IgKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH07Ci19KTsKLQotZnVuY3Rpb24gZ2V0QWxsKCBlbGVtICkgewot
ICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZp
bmVkIiApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSggIioiICk7Ci0KLSAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGVsZW0ucXVlcnlTZWxlY3Rv
ckFsbCAhPT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ucXVl
cnlTZWxlY3RvckFsbCggIioiICk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gW107Ci0gICAgICAgIH0KLX0KLQotLy8gVXNlZCBpbiBjbGVhbiwgZml4ZXMgdGhl
IGRlZmF1bHRDaGVja2VkIHByb3BlcnR5Ci1mdW5jdGlvbiBmaXhEZWZhdWx0Q2hlY2tlZCggZWxl
bSApIHsKLSAgICAgICAgaWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsK
LSAgICAgICAgICAgICAgICBlbGVtLmRlZmF1bHRDaGVja2VkID0gZWxlbS5jaGVja2VkOwotICAg
ICAgICB9Ci19Ci0KLWpRdWVyeS5leHRlbmQoewotICAgICAgICBjbG9uZTogZnVuY3Rpb24oIGVs
ZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgewotICAgICAgICAgICAgICAg
IHZhciBzcmNFbGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cywK
LSAgICAgICAgICAgICAgICAgICAgICAgIGksCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG9u
ZTsKLQotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9uZSB8fCBq
UXVlcnkuaXNYTUxEb2MoZWxlbSkgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCAiPCIgKyBlbGVtLm5v
ZGVOYW1lICsgIj4iICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IGVsZW0u
Y2xvbmVOb2RlKCB0cnVlICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJRTw9OCBkb2VzIG5vdCBw
cm9wZXJseSBjbG9uZSBkZXRhY2hlZCwgdW5rbm93biBlbGVtZW50IG5vZGVzCi0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50RGl2LmlubmVy
SFRNTCA9IGVsZW0ub3V0ZXJIVE1MOwotICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRE
aXYucmVtb3ZlQ2hpbGQoIGNsb25lID0gZnJhZ21lbnREaXYuZmlyc3RDaGlsZCApOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggKCFqUXVlcnkuc3VwcG9ydC5ub0Ns
b25lRXZlbnQgfHwgIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVU
eXBlID09PSAxMSkgJiYgIWpRdWVyeS5pc1hNTERvYyhlbGVtKSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElFIGNvcGllcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50IHdoZW4g
dXNpbmcgY2xvbmVOb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGluZyBkZXRh
Y2hFdmVudCBvbiB0aGUgY2xvbmUgd2lsbCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBvcmlnaW5hbC4gSW4gb3JkZXIgdG8gZ2V0IGFy
b3VuZCB0aGlzLCB3ZSB1c2Ugc29tZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcHJp
ZXRhcnkgbWV0aG9kcyB0byBjbGVhciB0aGUgZXZlbnRzLiBUaGFua3MgdG8gTW9vVG9vbHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGd1eXMgZm9yIHRoaXMgaG90bmVzcy4KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBlbGVtLCBjbG9uZSApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2luZyBTaXp6bGUgaGVyZSBpcyBjcmF6eSBzbG93
LCBzbyB3ZSB1c2UgZ2V0RWxlbWVudHNCeVRhZ05hbWUgaW5zdGVhZAotICAgICAgICAgICAgICAg
ICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2VpcmQgaXRlcmF0aW9uIGJlY2F1c2UgSUUgd2lsbCByZXBsYWNlIHRoZSBs
ZW5ndGggcHJvcGVydHkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYW4gZWxlbWVu
dCBpZiB5b3UgYXJlIGNsb25pbmcgdGhlIGJvZHkgYW5kIG9uZSBvZiB0aGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGVsZW1lbnRzIG9uIHRoZSBwYWdlIGhhcyBhIG5hbWUgb3IgaWQgb2Yg
Imxlbmd0aCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBzcmNFbGVtZW50
c1tpXTsgKytpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUg
dGhhdCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsgRml4ZXMgIzk1ODcKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZXN0RWxlbWVudHNbaV0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBz
cmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwg
dG8gdGhlIGNsb25lCi0gICAgICAgICAgICAgICAgaWYgKCBkYXRhQW5kRXZlbnRzICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xv
bmUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgc3Jj
RWxlbWVudHNbaV07ICsraSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBk
ZXN0RWxlbWVudHMgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBjbG9u
ZWQgc2V0Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lOwotICAgICAgICB9LAotCi0gICAg
ICAgIGNsZWFuOiBmdW5jdGlvbiggZWxlbXMsIGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICkg
ewotICAgICAgICAgICAgICAgIHZhciBpLCBqLCBlbGVtLCB0YWcsIHdyYXAsIGRlcHRoLCBkaXYs
IGhhc0JvZHksIHRib2R5LCBsZW4sIGhhbmRsZVNjcmlwdCwganNUYWdzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgc2FmZSA9IGNvbnRleHQgPT09IGRvY3VtZW50ICYmIHNhZmVGcmFnbWVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFtdOwotCi0gICAgICAgICAgICAgICAgLy8g
RW5zdXJlIHRoYXQgY29udGV4dCBpcyBhIGRvY3VtZW50Ci0gICAgICAgICAgICAgICAgaWYgKCAh
Y29udGV4dCB8fCB0eXBlb2YgY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID09PSAidW5k
ZWZpbmVkIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBkb2N1bWVudDsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGFscmVhZHkt
Y3JlYXRlZCBzYWZlIGZyYWdtZW50IGlmIGNvbnRleHQgcGVybWl0cwotICAgICAgICAgICAgICAg
IGZvciAoIGkgPSAwOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAibnVtYmVyIiApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSArPSAiIjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxlbSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgaHRtbCBzdHJpbmcg
aW50byBET00gbm9kZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0g
PT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFy
aHRtbC50ZXN0KCBlbGVtICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbSA9IGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBFbnN1cmUgYSBzYWZlIGNvbnRhaW5lciBpbiB3aGljaCB0byByZW5k
ZXIgdGhlIGh0bWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZl
ID0gc2FmZSB8fCBjcmVhdGVTYWZlRnJhZ21lbnQoIGNvbnRleHQgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmUuYXBwZW5k
Q2hpbGQoIGRpdiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRml4ICJYSFRNTCItc3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5yZXBsYWNlKHJ4aHRtbFRhZywg
IjwkMT48LyQyPiIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gR28gdG8gaHRtbCBhbmQgYmFjaywgdGhlbiBwZWVsIG9mZiBleHRyYSB3cmFwcGVycwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9ICggcnRhZ05hbWUuZXhl
YyggZWxlbSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1h
cC5fZGVmYXVsdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0
aCA9IHdyYXBbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2
LmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtICsgd3JhcFsyXTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIHJpZ2h0IGRlcHRoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBkZXB0aC0tICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gZGl2
Lmxhc3RDaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgSUUncyBh
dXRvaW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxlIGZyYWdtZW50cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnRib2R5ICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJp
bmcgd2FzIGEgPHRhYmxlPiwgKm1heSogaGF2ZSBzcHVyaW91cyA8dGJvZHk+Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCb2R5ID0gcnRib2R5LnRl
c3QoZWxlbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRib2R5ID0gdGFnID09PSAidGFibGUiICYmICFoYXNCb2R5ID8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXYuZmlyc3RDaGlsZCAmJiBkaXYuZmlyc3RDaGlsZC5jaGlsZE5vZGVzIDoKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBbMV0gPT09
ICI8dGFibGU+IiAmJiAhaGFzQm9keSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuY2hpbGROb2RlcyA6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggaiA9IHRib2R5Lmxlbmd0aCAtIDE7IGogPj0gMCA7IC0taiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0sICJ0Ym9keSIgKSAmJiAhdGJvZHlb
IGogXS5jaGlsZE5vZGVzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ym9keVsgaiBdLnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQoIHRib2R5WyBqIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElF
IGNvbXBsZXRlbHkga2lsbHMgbGVhZGluZyB3aGl0ZXNwYWNlIHdoZW4gaW5uZXJIVE1MIGlzIHVz
ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnku
c3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSAmJiBybGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxl
bSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggcmxlYWRpbmdXaGl0ZXNw
YWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0Q2hpbGQgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtID0gZGl2LmNoaWxkTm9kZXM7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUYWtlIG91dCBvZiBmcmFnbWVudCBjb250YWluZXIgKHdl
IG5lZWQgYSBmcmVzaCBkaXYgZWFjaCB0aW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBkaXYgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
bWVyZ2UoIHJldCwgZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZpeCAjMTEzNTY6IENsZWFyIGVsZW1lbnRz
IGZyb20gc2FmZUZyYWdtZW50Ci0gICAgICAgICAgICAgICAgaWYgKCBkaXYgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtID0gZGl2ID0gc2FmZSA9IG51bGw7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgLy8gUmVzZXQgZGVmYXVsdENoZWNrZWQgZm9yIGFueSBy
YWRpb3MgYW5kIGNoZWNrYm94ZXMKLSAgICAgICAgICAgICAgICAvLyBhYm91dCB0byBiZSBhcHBl
bmRlZCB0byB0aGUgRE9NIGluIElFIDYvNyAoIzgwNjApCi0gICAgICAgICAgICAgICAgaWYgKCAh
alF1ZXJ5LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGkgPSAwOyAoZWxlbSA9IHJldFtpXSkgIT0gbnVsbDsgaSsrICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0
IiApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeERlZmF1
bHRDaGVja2VkKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIHR5cGVvZiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ3JlcCgg
ZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSwgZml4RGVmYXVsdENoZWNrZWQgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBlbGVt
ZW50cyB0byBhIHByb3ZpZGVkIGRvY3VtZW50IGZyYWdtZW50Ci0gICAgICAgICAgICAgICAgaWYg
KCBmcmFnbWVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgaGFuZGxp
bmcgb2YgZWFjaCBzY3JpcHQgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
U2NyaXB0ID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENoZWNrIGlmIHdlIGNvbnNpZGVyIGl0IGV4ZWN1dGFibGUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhZWxlbS50eXBlIHx8IHJzY3JpcHRUeXBlLnRlc3QoIGVs
ZW0udHlwZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IERldGFjaCB0aGUgc2NyaXB0IGFuZCBzdG9yZSBpdCBpbiB0aGUgc2NyaXB0cyBhcnJheSAoaWYg
cHJvdmlkZWQpIG9yIHRoZSBmcmFnbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJldHVybiB0cnV0aHkgdG8gaW5kaWNhdGUgdGhhdCBpdCBoYXMgYmVlbiBo
YW5kbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNj
cmlwdHMgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2NyaXB0cy5wdXNoKCBlbGVtLnBhcmVudE5vZGUgPyBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQoIGVsZW0gKSA6IGVsZW0gKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSByZXRbaV0pICE9IG51bGw7
IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Un
cmUgZG9uZSBhZnRlciBoYW5kbGluZyBhbiBleGVjdXRhYmxlIHNjcmlwdAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICEoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNjcmlw
dCIgKSAmJiBoYW5kbGVTY3JpcHQoIGVsZW0gKSApICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0byBmcmFnbWVudCBhbmQgaGFuZGxlIGVtYmVk
ZGVkIHNjcmlwdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFn
bWVudC5hcHBlbmRDaGlsZCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRl
ZmluZWQiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaGFuZGxlU2NyaXB0IGFsdGVycyB0aGUgRE9NLCBzbyB1c2UgalF1ZXJ5Lm1lcmdlIHRv
IGVuc3VyZSBzbmFwc2hvdCBpdGVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpzVGFncyA9IGpRdWVyeS5ncmVwKCBqUXVlcnkubWVyZ2UoIFtd
LCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSApLCBoYW5kbGVTY3JpcHQgKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Bs
aWNlIHRoZSBzY3JpcHRzIGludG8gcmV0IGFmdGVyIHRoZWlyIGZvcm1lciBhbmNlc3RvciBhbmQg
YWR2YW5jZSBvdXIgaW5kZXggYmV5b25kIHRoZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldC5zcGxpY2UuYXBwbHkoIHJldCwgW2kgKyAxLCAwXS5j
b25jYXQoIGpzVGFncyApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpICs9IGpzVGFncy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKLSAgICAgICAgfSwKLQotICAgICAgICBjbGVhbkRhdGE6IGZ1bmN0aW9u
KCBlbGVtcywgLyogaW50ZXJuYWwgKi8gYWNjZXB0RGF0YSApIHsKLSAgICAgICAgICAgICAgICB2
YXIgZGF0YSwgaWQsIGVsZW0sIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IGpRdWVyeS5jYWNoZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRv
LAotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFs
OwotCi0gICAgICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBp
KysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYWNjZXB0RGF0YSB8fCBqUXVl
cnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlkID0gZWxlbVsgaW50ZXJuYWxLZXkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YSA9IGlkICYmIGNhY2hlWyBpZCBdOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZGF0YSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGRhdGEuZXZlbnRzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
cGVjaWFsWyB0eXBlIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlw
ZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3Zl
J3Mgb3ZlcmhlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5
cGUsIGRhdGEuaGFuZGxlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY2Fj
aGUgb25seSBpZiBpdCB3YXMgbm90IGFscmVhZHkgcmVtb3ZlZCBieSBqUXVlcnkuZXZlbnQucmVt
b3ZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsg
aWQgXSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIGNhY2hlWyBpZCBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJRSBkb2VzIG5vdCBhbGxvdyB1cyB0byBkZWxldGUgZXhwYW5k
byBwcm9wZXJ0aWVzIGZyb20gbm9kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBub3IgZG9lcyBpdCBoYXZlIGEgcmVtb3ZlQXR0cmlidXRlIGZ1
bmN0aW9uIG9uIERvY3VtZW50IG5vZGVzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2UgbXVzdCBoYW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlbGV0
ZUV4cGFuZG8gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBpbnRlcm5hbEtleSBdOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVtLnJlbW92
ZUF0dHJpYnV0ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGludGVybmFsS2V5ICk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW1bIGludGVybmFsS2V5IF0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZGVsZXRlZElkcy5wdXNoKCBpZCApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotfSk7Ci0vLyBMaW1pdCBzY29wZSBwb2xsdXRpb24gZnJvbSBhbnkgZGVwcmVjYXRl
ZCBBUEkKLShmdW5jdGlvbigpIHsKLQotdmFyIG1hdGNoZWQsIGJyb3dzZXI7Ci0KLS8vIFVzZSBv
ZiBqUXVlcnkuYnJvd3NlciBpcyBmcm93bmVkIHVwb24uCi0vLyBNb3JlIGRldGFpbHM6IGh0dHA6
Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkuYnJvd3NlcgotLy8galF1ZXJ5LnVhTWF0Y2ggbWFpbnRh
aW5lZCBmb3IgYmFjay1jb21wYXQKLWpRdWVyeS51YU1hdGNoID0gZnVuY3Rpb24oIHVhICkgewot
ICAgICAgICB1YSA9IHVhLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgdmFyIG1hdGNoID0gLyhj
aHJvbWUpWyBcL10oW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAotICAgICAgICAgICAgICAgIC8od2Vi
a2l0KVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKLSAgICAgICAgICAgICAgICAvKG9wZXJh
KSg/Oi4qdmVyc2lvbnwpWyBcL10oW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAotICAgICAgICAgICAg
ICAgIC8obXNpZSkgKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKLSAgICAgICAgICAgICAgICB1YS5p
bmRleE9mKCJjb21wYXRpYmxlIikgPCAwICYmIC8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKyl8
KS8uZXhlYyggdWEgKSB8fAotICAgICAgICAgICAgICAgIFtdOwotCi0gICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAgICAgYnJvd3NlcjogbWF0Y2hbIDEgXSB8fCAiIiwKLSAgICAgICAgICAg
ICAgICB2ZXJzaW9uOiBtYXRjaFsgMiBdIHx8ICIwIgotICAgICAgICB9OwotfTsKLQotbWF0Y2hl
ZCA9IGpRdWVyeS51YU1hdGNoKCBuYXZpZ2F0b3IudXNlckFnZW50ICk7Ci1icm93c2VyID0ge307
Ci0KLWlmICggbWF0Y2hlZC5icm93c2VyICkgewotICAgICAgICBicm93c2VyWyBtYXRjaGVkLmJy
b3dzZXIgXSA9IHRydWU7Ci0gICAgICAgIGJyb3dzZXIudmVyc2lvbiA9IG1hdGNoZWQudmVyc2lv
bjsKLX0KLQotLy8gQ2hyb21lIGlzIFdlYmtpdCwgYnV0IFdlYmtpdCBpcyBhbHNvIFNhZmFyaS4K
LWlmICggYnJvd3Nlci5jaHJvbWUgKSB7Ci0gICAgICAgIGJyb3dzZXIud2Via2l0ID0gdHJ1ZTsK
LX0gZWxzZSBpZiAoIGJyb3dzZXIud2Via2l0ICkgewotICAgICAgICBicm93c2VyLnNhZmFyaSA9
IHRydWU7Ci19Ci0KLWpRdWVyeS5icm93c2VyID0gYnJvd3NlcjsKLQotalF1ZXJ5LnN1YiA9IGZ1
bmN0aW9uKCkgewotICAgICAgICBmdW5jdGlvbiBqUXVlcnlTdWIoIHNlbGVjdG9yLCBjb250ZXh0
ICkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5U3ViLmZuLmluaXQoIHNlbGVj
dG9yLCBjb250ZXh0ICk7Ci0gICAgICAgIH0KLSAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwg
alF1ZXJ5U3ViLCB0aGlzICk7Ci0gICAgICAgIGpRdWVyeVN1Yi5zdXBlcmNsYXNzID0gdGhpczsK
LSAgICAgICAgalF1ZXJ5U3ViLmZuID0galF1ZXJ5U3ViLnByb3RvdHlwZSA9IHRoaXMoKTsKLSAg
ICAgICAgalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOwotICAgICAgICBqUXVl
cnlTdWIuc3ViID0gdGhpcy5zdWI7Ci0gICAgICAgIGpRdWVyeVN1Yi5mbi5pbml0ID0gZnVuY3Rp
b24gaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBjb250
ZXh0ICYmIGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgJiYgIShjb250ZXh0IGluc3RhbmNlb2Yg
alF1ZXJ5U3ViKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBqUXVlcnlT
dWIoIGNvbnRleHQgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LmZuLmluaXQuY2FsbCggdGhpcywgc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVl
cnlTdWIgKTsKLSAgICAgICAgfTsKLSAgICAgICAgalF1ZXJ5U3ViLmZuLmluaXQucHJvdG90eXBl
ID0galF1ZXJ5U3ViLmZuOwotICAgICAgICB2YXIgcm9vdGpRdWVyeVN1YiA9IGpRdWVyeVN1Yihk
b2N1bWVudCk7Ci0gICAgICAgIHJldHVybiBqUXVlcnlTdWI7Ci19OwotCi19KSgpOwotdmFyIGN1
ckNTUywgaWZyYW1lLCBpZnJhbWVEb2MsCi0gICAgICAgIHJhbHBoYSA9IC9hbHBoYVwoW14pXSpc
KS9pLAotICAgICAgICByb3BhY2l0eSA9IC9vcGFjaXR5PShbXildKikvLAotICAgICAgICBycG9z
aXRpb24gPSAvXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC8sCi0gICAgICAgIC8vIHN3YXBwYWJs
ZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGUgZXhjZXB0ICJ0YWJsZSIs
ICJ0YWJsZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCi0gICAgICAgIC8vIHNlZSBoZXJlIGZv
ciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9DU1MvZGlzcGxheQotICAgICAgICByZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNb
ZWFdKS4rKS8sCi0gICAgICAgIHJtYXJnaW4gPSAvXm1hcmdpbi8sCi0gICAgICAgIHJudW1zcGxp
dCA9IG5ldyBSZWdFeHAoICJeKCIgKyBjb3JlX3BudW0gKyAiKSguKikkIiwgImkiICksCi0gICAg
ICAgIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBjb3JlX3BudW0gKyAiKSg/IXB4KVth
LXolXSskIiwgImkiICksCi0gICAgICAgIHJyZWxOdW0gPSBuZXcgUmVnRXhwKCAiXihbLStdKT0o
IiArIGNvcmVfcG51bSArICIpIiwgImkiICksCi0gICAgICAgIGVsZW1kaXNwbGF5ID0geyBCT0RZ
OiAiYmxvY2siIH0sCi0KLSAgICAgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIs
IHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCi0gICAgICAgIGNzc05v
cm1hbFRyYW5zZm9ybSA9IHsKLSAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwLAotICAg
ICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDQwMAotICAgICAgICB9LAotCi0gICAgICAgIGNzc0V4
cGFuZCA9IFsgIlRvcCIsICJSaWdodCIsICJCb3R0b20iLCAiTGVmdCIgXSwKLSAgICAgICAgY3Nz
UHJlZml4ZXMgPSBbICJXZWJraXQiLCAiTyIsICJNb3oiLCAibXMiIF0sCi0KLSAgICAgICAgZXZl
bnRzVG9nZ2xlID0galF1ZXJ5LmZuLnRvZ2dsZTsKLQotLy8gcmV0dXJuIGEgY3NzIHByb3BlcnR5
IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eQotZnVuY3Rp
b24gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBuYW1lICkgewotCi0gICAgICAgIC8vIHNob3J0Y3V0
IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkCi0gICAgICAgIGlmICggbmFt
ZSBpbiBzdHlsZSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIGNoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKLSAgICAgICAgdmFy
IGNhcE5hbWUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSwK
LSAgICAgICAgICAgICAgICBvcmlnTmFtZSA9IG5hbWUsCi0gICAgICAgICAgICAgICAgaSA9IGNz
c1ByZWZpeGVzLmxlbmd0aDsKLQotICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAg
ICAgICBuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7Ci0gICAgICAgICAgICAgICAg
aWYgKCBuYW1lIGluIHN0eWxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5h
bWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG9yaWdO
YW1lOwotfQotCi1mdW5jdGlvbiBpc0hpZGRlbiggZWxlbSwgZWwgKSB7Ci0gICAgICAgIGVsZW0g
PSBlbCB8fCBlbGVtOwotICAgICAgICByZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXki
ICkgPT09ICJub25lIiB8fCAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVs
ZW0gKTsKLX0KLQotZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkgewotICAgICAg
ICB2YXIgZWxlbSwgZGlzcGxheSwKLSAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbXSwKLSAgICAg
ICAgICAgICAgICBpbmRleCA9IDAsCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gZWxlbWVudHMu
bGVuZ3RoOwotCi0gICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7Ci0g
ICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdOwotICAgICAgICAgICAgICAg
IGlmICggIWVsZW0uc3R5bGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFsdWVzWyBpbmRleCBdID0galF1
ZXJ5Ll9kYXRhKCBlbGVtLCAib2xkZGlzcGxheSIgKTsKLSAgICAgICAgICAgICAgICBpZiAoIHNo
b3cgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgaW5saW5lIGRpc3Bs
YXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVsZXMgb3Igbm90Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZWxlbS5zdHlsZS5kaXNwbGF5
ID09PSAibm9uZSIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5
bGUuZGlzcGxheSA9ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTZXQgZWxlbWVudHMgd2hpY2ggaGF2ZSBiZWVuIG92ZXJyaWRkZW4g
d2l0aCBkaXNwbGF5OiBub25lCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIHN0eWxl
c2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpcwotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICYmIGlzSGlkZGVuKCBlbGVtICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGpR
dWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBjc3NfZGVmYXVsdERpc3BsYXkoZWxlbS5u
b2RlTmFtZSkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGN1ckNTUyggZWxlbSwg
ImRpc3BsYXkiICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXZhbHVlc1sgaW5k
ZXggXSAmJiBkaXNwbGF5ICE9PSAibm9uZSIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBkaXNwbGF5ICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gU2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vj
b25kIGxvb3AKLSAgICAgICAgLy8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvdwotICAgICAg
ICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgewotICAgICAgICAg
ICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKLSAgICAgICAgICAgICAgICBpZiAoICFl
bGVtLnN0eWxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggIXNob3cgfHwgZWxlbS5zdHlsZS5kaXNw
bGF5ID09PSAibm9uZSIgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4
IF0gfHwgIiIgOiAibm9uZSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIGVsZW1lbnRzOwotfQotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICAgICAgY3Nz
OiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSAp
OwotICAgICAgICAgICAgICAgIH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSAp
OwotICAgICAgICB9LAotICAgICAgICBzaG93OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTsKLSAgICAgICAgfSwKLSAgICAgICAgaGlk
ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3dIaWRlKCB0aGlzICk7
Ci0gICAgICAgIH0sCi0gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlLCBmbjIgKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGJvb2wgPSB0eXBlb2Ygc3RhdGUgPT09ICJib29sZWFuIjsKLQot
ICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHN0YXRlICkgJiYgalF1ZXJ5
LmlzRnVuY3Rpb24oIGZuMiApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2
ZW50c1RvZ2dsZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggYm9vbCA/IHN0YXRlIDogaXNIaWRkZW4oIHRoaXMgKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuc2hvdygpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5KCB0aGlzICkuaGlkZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci19KTsKLQotalF1ZXJ5LmV4dGVuZCh7
Ci0gICAgICAgIC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0
aGUgZGVmYXVsdAotICAgICAgICAvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEg
c3R5bGUgcHJvcGVydHkKLSAgICAgICAgY3NzSG9va3M6IHsKLSAgICAgICAgICAgICAgICBvcGFj
aXR5OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21w
dXRlZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQg
YWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09
ICIiID8gIjEiIDogcmV0OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgLy8gRXhjbHVkZSB0aGUgZm9sbG93aW5nIGNzcyBwcm9wZXJ0aWVzIHRvIGFkZCBw
eAotICAgICAgICBjc3NOdW1iZXI6IHsKLSAgICAgICAgICAgICAgICAiZmlsbE9wYWNpdHkiOiB0
cnVlLAotICAgICAgICAgICAgICAgICJmb250V2VpZ2h0IjogdHJ1ZSwKLSAgICAgICAgICAgICAg
ICAibGluZUhlaWdodCI6IHRydWUsCi0gICAgICAgICAgICAgICAgIm9wYWNpdHkiOiB0cnVlLAot
ICAgICAgICAgICAgICAgICJvcnBoYW5zIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAid2lkb3dz
IjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAiekluZGV4IjogdHJ1ZSwKLSAgICAgICAgICAgICAg
ICAiem9vbSI6IHRydWUKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBBZGQgaW4gcHJvcGVydGll
cyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCi0gICAgICAgIC8vIHNldHRpbmcg
b3IgZ2V0dGluZyB0aGUgdmFsdWUKLSAgICAgICAgY3NzUHJvcHM6IHsKLSAgICAgICAgICAgICAg
ICAvLyBub3JtYWxpemUgZmxvYXQgY3NzIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgImZsb2F0
IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxvYXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiCi0g
ICAgICAgIH0sCi0KLSAgICAgICAgLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9u
IGEgRE9NIE5vZGUKLSAgICAgICAgc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwg
ZXh0cmEgKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFu
ZCBjb21tZW50IG5vZGVzCi0gICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVU
eXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBu
YW1lCi0gICAgICAgICAgICAgICAgdmFyIHJldCwgdHlwZSwgaG9va3MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKLQotICAgICAgICAgICAgICAgIG5h
bWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9y
aWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTsKLQotICAgICAg
ICAgICAgICAgIC8vIGdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KLSAgICAgICAg
ICAgICAgICAvLyBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCB2ZXJzaW9uCi0gICAgICAgICAg
ICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3Nb
IG9yaWdOYW1lIF07Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5n
IGEgdmFsdWUKLSAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZW9mIHZhbHVlOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjb252ZXJ0IHJlbGF0aXZlIG51bWJlciBzdHJpbmdzICgrPSBvciAt
PSkgdG8gcmVsYXRpdmUgbnVtYmVycy4gIzczNDUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdHlwZSA9PT0gInN0cmluZyIgJiYgKHJldCA9IHJyZWxOdW0uZXhlYyggdmFsdWUgKSkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKCByZXRbMV0gKyAxICkg
KiByZXRbMl0gKyBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM5MjM3Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAibnVtYmVyIjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgTmFO
IGFuZCBudWxsIHZhbHVlcyBhcmVuJ3Qgc2V0LiBTZWU6ICM3MTE2Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlID09IG51bGwgfHwgdHlwZSA9PT0gIm51bWJlciIgJiYgaXNOYU4o
IHZhbHVlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
YSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkICdweCcgdG8gdGhlIChleGNlcHQgZm9yIGNlcnRh
aW4gQ1NTIHByb3BlcnRpZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09
ICJudW1iZXIiICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSAicHgiOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3Zp
ZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFs
dWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhvb2tzIHx8ICEoInNldCIgaW4gaG9v
a3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkpICE9PSB1bmRl
ZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdyYXBwZWQgdG8g
cHJldmVudCBJRSBmcm9tIHRocm93aW5nIGVycm9ycyB3aGVuICdpbnZhbGlkJyB2YWx1ZXMgYXJl
IHByb3ZpZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAj
NTUwOQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFs
dWUgZnJvbSB0aGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0
IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSkgIT09
IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBu
dW1lcmljLCBleHRyYSApIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsLCBudW0sIGhvb2tzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1l
ICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdp
dGggdGhlIHJpZ2h0IG5hbWUKLSAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3Bz
WyBvcmlnTmFtZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJv
cE5hbWUoIGVsZW0uc3R5bGUsIG9yaWdOYW1lICkgKTsKLQotICAgICAgICAgICAgICAgIC8vIGdl
dHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KLSAgICAgICAgICAgICAgICAvLyBmb2xs
b3dlZCBieSB0aGUgdW5wcmVmaXhlZCB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgaG9va3MgPSBq
UXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07Ci0K
LSAgICAgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0
ZWQgdmFsdWUgZnJvbSB0aGVyZQotICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdldCIg
aW4gaG9va3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBob29rcy5nZXQoIGVs
ZW0sIHRydWUsIGV4dHJhICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywg
dXNlIHRoYXQKLSAgICAgICAgICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lICk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9jb252ZXJ0ICJub3JtYWwiIHRvIGNvbXB1
dGVkIHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKCB2YWwgPT09ICJub3JtYWwiICYmIG5hbWUg
aW4gY3NzTm9ybWFsVHJhbnNmb3JtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0g
Y3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gUmV0dXJuLCBjb252ZXJ0aW5nIHRvIG51bWJlciBpZiBmb3JjZWQgb3IgYSBx
dWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYwotICAgICAgICAgICAg
ICAgIGlmICggbnVtZXJpYyB8fCBleHRyYSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtID0gcGFyc2VGbG9hdCggdmFsICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVtZXJpYyB8fCBqUXVlcnkuaXNOdW1lcmljKCBudW0gKSA/IG51bSB8fCAw
IDogdmFsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsOwot
ICAgICAgICB9LAotCi0gICAgICAgIC8vIEEgbWV0aG9kIGZvciBxdWlja2x5IHN3YXBwaW5nIGlu
L291dCBDU1MgcHJvcGVydGllcyB0byBnZXQgY29ycmVjdCBjYWxjdWxhdGlvbnMKLSAgICAgICAg
c3dhcDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkgewotICAgICAgICAgICAg
ICAgIHZhciByZXQsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBvbGQgPSB7fTsKLQot
ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRo
ZSBuZXcgb25lcwotICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFt
ZSBdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNr
LmNhbGwoIGVsZW0gKTsKLQotICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgb2xkIHZhbHVl
cwotICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLX0pOwot
Ci0vLyBOT1RFOiBUbyBhbnkgZnV0dXJlIG1haW50YWluZXIsIHdlJ3ZlIHdpbmRvdy5nZXRDb21w
dXRlZFN0eWxlCi0vLyBiZWNhdXNlIGpzZG9tIG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0
IGl0LgotaWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKLSAgICAgICAgY3VyQ1NTID0g
ZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldCwgd2lkdGgs
IG1pbldpZHRoLCBtYXhXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkID0g
d2luZG93LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKLQotICAgICAgICAgICAgICAgIGlmICggY29tcHV0
ZWQgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldFByb3BlcnR5VmFsdWUgaXMg
b25seSBuZWVkZWQgZm9yIC5jc3MoJ2ZpbHRlcicpIGluIElFOSwgc2VlICMxMjUzNwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSAp
IHx8IGNvbXB1dGVkWyBuYW1lIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0
ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1ZXJ5LnN0eWxlKCBl
bGVtLCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEEgdHJpYnV0ZSB0byB0aGUgImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2Fy
ZHMiCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaHJvbWUgPCAxNyBhbmQgU2FmYXJpIDUu
MCB1c2VzICJjb21wdXRlZCB2YWx1ZSIgaW5zdGVhZCBvZiAidXNlZCB2YWx1ZSIgZm9yIG1hcmdp
bi1yaWdodAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDUuMS43IChhdCBsZWFz
dCkgcmV0dXJucyBwZXJjZW50YWdlIGZvciBhIGxhcmdlciBzZXQgb2YgdmFsdWVzLCBidXQgd2lk
dGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyB0aGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6IGh0dHA6Ly9kZXYudzMub3Jn
L2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJtYXJnaW4udGVzdCggbmFtZSApICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHN0eWxlLndpZHRoOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0gc3R5bGUu
bWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGUud2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAg
ICAgICB9OwotfSBlbHNlIGlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHls
ZSApIHsKLSAgICAgICAgY3VyQ1NTID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGxlZnQsIHJzTGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
IGVsZW0uY3VycmVudFN0eWxlICYmIGVsZW0uY3VycmVudFN0eWxlWyBuYW1lIF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICAgICAgICAgICAgICAv
LyBBdm9pZCBzZXR0aW5nIHJldCB0byBlbXB0eSBzdHJpbmcgaGVyZQotICAgICAgICAgICAgICAg
IC8vIHNvIHdlIGRvbid0IGRlZmF1bHQgdG8gYXV0bwotICAgICAgICAgICAgICAgIGlmICggcmV0
ID09IG51bGwgJiYgc3R5bGUgJiYgc3R5bGVbIG5hbWUgXSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCA9IHN0eWxlWyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gRnJvbSB0aGUgYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcwotICAgICAg
ICAgICAgICAgIC8vIGh0dHA6Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41
NC4xNS8jY29tbWVudC0xMDIyOTEKLQotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBk
ZWFsaW5nIHdpdGggYSByZWd1bGFyIHBpeGVsIG51bWJlcgotICAgICAgICAgICAgICAgIC8vIGJ1
dCBhIG51bWJlciB0aGF0IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0
IHRvIHBpeGVscwotICAgICAgICAgICAgICAgIC8vIGJ1dCBub3QgcG9zaXRpb24gY3NzIGF0dHJp
YnV0ZXMsIGFzIHRob3NlIGFyZSBwcm9wb3J0aW9uYWwgdG8gdGhlIHBhcmVudCBlbGVtZW50IGlu
c3RlYWQKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2UgY2FuJ3QgbWVhc3VyZSB0aGUgcGFyZW50
IGluc3RlYWQgYmVjYXVzZSBpdCBtaWdodCB0cmlnZ2VyIGEgInN0YWNraW5nIGRvbGxzIiBwcm9i
bGVtCi0gICAgICAgICAgICAgICAgaWYgKCBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgIXJwb3Np
dGlvbi50ZXN0KCBuYW1lICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbWVt
YmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBz
dHlsZS5sZWZ0OwotICAgICAgICAgICAgICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1l
U3R5bGUgJiYgZWxlbS5ydW50aW1lU3R5bGUubGVmdDsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByc0xlZnQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0ucnVudGltZVN0eWxlLmxlZnQgPSBlbGVtLmN1cnJlbnRTdHls
ZS5sZWZ0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGUubGVmdCA9IG5hbWUgPT09ICJmb250U2l6ZSIgPyAiMWVtIiA6IHJldDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCA9IHN0eWxlLnBpeGVsTGVmdCArICJweCI7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCByc0xlZnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0u
cnVudGltZVN0eWxlLmxlZnQgPSByc0xlZnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gIiIgPyAi
YXV0byIgOiByZXQ7Ci0gICAgICAgIH07Ci19Ci0KLWZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVy
KCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7Ci0gICAgICAgIHZhciBtYXRjaGVzID0gcm51bXNw
bGl0LmV4ZWMoIHZhbHVlICk7Ci0gICAgICAgIHJldHVybiBtYXRjaGVzID8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIE1hdGgubWF4KCAwLCBtYXRjaGVzWyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAg
KSApICsgKCBtYXRjaGVzWyAyIF0gfHwgInB4IiApIDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlOwotfQotCi1mdW5jdGlvbiBhdWdtZW50V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwg
ZXh0cmEsIGlzQm9yZGVyQm94ICkgewotICAgICAgICB2YXIgaSA9IGV4dHJhID09PSAoIGlzQm9y
ZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSA/Ci0gICAgICAgICAgICAgICAgLy8gSWYg
d2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9u
Ci0gICAgICAgICAgICAgICAgNCA6Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGluaXRp
YWxpemUgZm9yIGhvcml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGllcwotICAgICAgICAgICAg
ICAgIG5hbWUgPT09ICJ3aWR0aCIgPyAxIDogMCwKLQotICAgICAgICAgICAgICAgIHZhbCA9IDA7
Ci0KLSAgICAgICAgZm9yICggOyBpIDwgNDsgaSArPSAyICkgewotICAgICAgICAgICAgICAgIC8v
IGJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQgaXQK
LSAgICAgICAgICAgICAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHdlIHVzZSBqUXVlcnkuY3NzIGluc3RlYWQgb2YgY3VyQ1NTIGhlcmUK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlIHJlbGlhYmxlTWFyZ2lu
UmlnaHQgQ1NTIGhvb2shCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0galF1ZXJ5LmNz
cyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSApOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIEZyb20gdGhpcyBwb2ludCBvbiB3ZSB1c2UgY3VyQ1NT
IGZvciBtYXhpbXVtIHBlcmZvcm1hbmNlIChyZWxldmFudCBpbiBhbmltYXRpb25zKQotICAgICAg
ICAgICAgICAgIGlmICggaXNCb3JkZXJCb3ggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBib3JkZXItYm94IGluY2x1ZGVzIHBhZGRpbmcsIHNvIHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNv
bnRlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXh0cmEgPT09ICJjb250ZW50IiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGN1
ckNTUyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMg
cG9pbnQsIGV4dHJhIGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVyCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAibWFyZ2luIiApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxl
bSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIgKSApIHx8IDA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFk
ZCBwYWRkaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggY3Vy
Q1NTKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSApICkgfHwgMDsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBu
b3IgcGFkZGluZywgc28gYWRkIGJvcmRlcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
eHRyYSAhPT0gInBhZGRpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWwgKz0gcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBd
ICsgIldpZHRoIiApICkgfHwgMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdmFsOwotfQotCi1mdW5jdGlv
biBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHsKLQotICAgICAgICAvLyBT
dGFydCB3aXRoIG9mZnNldCBwcm9wZXJ0eSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgYm9y
ZGVyLWJveCB2YWx1ZQotICAgICAgICB2YXIgdmFsID0gbmFtZSA9PT0gIndpZHRoIiA/IGVsZW0u
b2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhlaWdodCwKLSAgICAgICAgICAgICAgICB2YWx1ZUlz
Qm9yZGVyQm94ID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICBpc0JvcmRlckJveCA9IGpRdWVyeS5z
dXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiApID09PSAi
Ym9yZGVyLWJveCI7Ci0KLSAgICAgICAgLy8gc29tZSBub24taHRtbCBlbGVtZW50cyByZXR1cm4g
dW5kZWZpbmVkIGZvciBvZmZzZXRXaWR0aCwgc28gY2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkCi0g
ICAgICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dp
P2lkPTY0OTI4NQotICAgICAgICAvLyBNYXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTE2NjgKLSAgICAgICAgaWYgKCB2YWwgPD0gMCB8fCB2YWwg
PT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhl
biB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICB2YWwgPSBjdXJD
U1MoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAgICBpZiAoIHZhbCA8IDAgfHwgdmFsID09
IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBlbGVtLnN0eWxlWyBuYW1l
IF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZWQgdW5p
dCBpcyBub3QgcGl4ZWxzLiBTdG9wIGhlcmUgYW5kIHJldHVybi4KLSAgICAgICAgICAgICAgICBp
ZiAoIHJudW1ub25weC50ZXN0KHZhbCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdmFsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQg
dGhlIGNoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEgYnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVs
aWFibGUgdmFsdWVzCi0gICAgICAgICAgICAgICAgLy8gZm9yIGdldENvbXB1dGVkU3R5bGUgc2ls
ZW50bHkgZmFsbHMgYmFjayB0byB0aGUgcmVsaWFibGUgZWxlbS5zdHlsZQotICAgICAgICAgICAg
ICAgIHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJiAoIGpRdWVyeS5zdXBwb3J0LmJv
eFNpemluZ1JlbGlhYmxlIHx8IHZhbCA9PT0gZWxlbS5zdHlsZVsgbmFtZSBdICk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQot
ICAgICAgICAgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyB1c2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFkZC9zdWJ0
cmFjdCBpcnJlbGV2YW50IHN0eWxlcwotICAgICAgICByZXR1cm4gKCB2YWwgKwotICAgICAgICAg
ICAgICAgIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KAotICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlSXNCb3JkZXJCb3gKLSAgICAgICAgICAgICAgICApCi0g
ICAgICAgICkgKyAicHgiOwotfQotCi0KLS8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQg
ZGlzcGxheSB2YWx1ZSBvZiBhbiBlbGVtZW50Ci1mdW5jdGlvbiBjc3NfZGVmYXVsdERpc3BsYXko
IG5vZGVOYW1lICkgewotICAgICAgICBpZiAoIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdICkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZhciBlbGVtID0galF1ZXJ5KCAiPCIgKyBub2RlTmFtZSArICI+IiApLmFw
cGVuZFRvKCBkb2N1bWVudC5ib2R5ICksCi0gICAgICAgICAgICAgICAgZGlzcGxheSA9IGVsZW0u
Y3NzKCJkaXNwbGF5Iik7Ci0gICAgICAgIGVsZW0ucmVtb3ZlKCk7Ci0KLSAgICAgICAgLy8gSWYg
dGhlIHNpbXBsZSB3YXkgZmFpbHMsCi0gICAgICAgIC8vIGdldCBlbGVtZW50J3MgcmVhbCBkZWZh
dWx0IGRpc3BsYXkgYnkgYXR0YWNoaW5nIGl0IHRvIGEgdGVtcCBpZnJhbWUKLSAgICAgICAgaWYg
KCBkaXNwbGF5ID09PSAibm9uZSIgfHwgZGlzcGxheSA9PT0gIiIgKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxlCi0gICAgICAg
ICAgICAgICAgaWZyYW1lID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmcmFtZSB8fCBqUXVlcnkuZXh0ZW5kKCBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJpZnJhbWUiKSwgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUJv
cmRlcjogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMAotICAgICAgICAgICAgICAgICAg
ICAgICAgfSkKLSAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAgICAgLy8gQ3JlYXRl
IGEgY2FjaGVhYmxlIGNvcHkgb2YgdGhlIGlmcmFtZSBkb2N1bWVudCBvbiBmaXJzdCBjYWxsLgot
ICAgICAgICAgICAgICAgIC8vIElFIGFuZCBPcGVyYSB3aWxsIGFsbG93IHVzIHRvIHJldXNlIHRo
ZSBpZnJhbWVEb2Mgd2l0aG91dCByZS13cml0aW5nIHRoZSBmYWtlIEhUTUwKLSAgICAgICAgICAg
ICAgICAvLyBkb2N1bWVudCB0byBpdDsgV2ViS2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVz
aW5nIHRoZSBpZnJhbWUgZG9jdW1lbnQuCi0gICAgICAgICAgICAgICAgaWYgKCAhaWZyYW1lRG9j
IHx8ICFpZnJhbWUuY3JlYXRlRWxlbWVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
cmFtZURvYyA9ICggaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVu
dCApLmRvY3VtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jLndyaXRlKCI8
IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
cmFtZURvYy5jbG9zZSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGVs
ZW0gPSBpZnJhbWVEb2MuYm9keS5hcHBlbmRDaGlsZCggaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQo
bm9kZU5hbWUpICk7Ci0KLSAgICAgICAgICAgICAgICBkaXNwbGF5ID0gY3VyQ1NTKCBlbGVtLCAi
ZGlzcGxheSIgKTsKLSAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKCBp
ZnJhbWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN0b3JlIHRoZSBjb3JyZWN0IGRlZmF1
bHQgZGlzcGxheQotICAgICAgICBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7Ci0K
LSAgICAgICAgcmV0dXJuIGRpc3BsYXk7Ci19Ci0KLWpRdWVyeS5lYWNoKFsgImhlaWdodCIsICJ3
aWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgICAgIGpRdWVyeS5jc3NIb29rc1sg
bmFtZSBdID0gewotICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVk
LCBleHRyYSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4gZWxlbWVudHMgY2FuIGhh
dmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyLCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRp
c3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gdGhpcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ub2Zmc2V0V2lkdGggPT09IDAgJiYgcmRpc3BsYXlz
d2FwLnRlc3QoIGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICkgKSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnN3YXAoIGVsZW0sIGNzc1No
b3csIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlv
biggZWxlbSwgdmFsdWUsIGV4dHJhICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgZXh0cmEgPwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhdWdtZW50V2lkdGhPckhlaWdodCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0cmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LnN1cHBvcnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciICkgPT09
ICJib3JkZXItYm94IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogMAotICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH07Ci19
KTsKLQotaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3BhY2l0eSApIHsKLSAgICAgICAgalF1ZXJ5LmNz
c0hvb2tzLm9wYWNpdHkgPSB7Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwg
Y29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSB1c2VzIGZpbHRlcnMg
Zm9yIG9wYWNpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3BhY2l0eS50ZXN0
KCAoY29tcHV0ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0
ZXIgOiBlbGVtLnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICggMC4wMSAqIHBhcnNlRmxvYXQoIFJlZ0V4cC4kMSApICkgKyAiIiA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkID8gIjEiIDogIiI7Ci0gICAgICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVl
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0eWxlID0gZWxlbS5jdXJyZW50
U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgPSBqUXVlcnku
aXNOdW1lcmljKCB2YWx1ZSApID8gImFscGhhKG9wYWNpdHk9IiArIHZhbHVlICogMTAwICsgIiki
IDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGN1cnJlbnRT
dHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0
IGRvZXMgbm90IGhhdmUgbGF5b3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBp
dCBieSBzZXR0aW5nIHRoZSB6b29tIGxldmVsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZS56b29tID0gMTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2V0dGluZyBvcGFj
aXR5IHRvIDEsIGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0ZW1wdCB0byByZW1vdmUg
ZmlsdGVyIGF0dHJpYnV0ZSAjNjY1MgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSA+PSAxICYmIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCAiIiApICkgPT09
ICIiICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJp
YnV0ZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIHN0
eWxlLmZpbHRlciB0byBudWxsLCAiIiAmICIgIiBzdGlsbCBsZWF2ZSAiZmlsdGVyOiIgaW4gdGhl
IGNzc1RleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgImZpbHRlcjoi
IGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gYXZv
aWQgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHlsZS5yZW1vdmVB
dHRyaWJ1dGUgaXMgSUUgT25seSwgYnV0IHNvIGFwcGFyZW50bHkgaXMgdGhpcyBjb2RlIHBhdGgu
Li4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRl
KCAiZmlsdGVyIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRo
ZXJlIHRoZXJlIGlzIG5vIGZpbHRlciBzdHlsZSBhcHBsaWVkIGluIGEgY3NzIHJ1bGUsIHdlIGFy
ZSBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudFN0eWxl
ICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBv
dGhlcndpc2UsIHNldCBuZXcgZmlsdGVyIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGUuZmlsdGVyID0gcmFscGhhLnRlc3QoIGZpbHRlciApID8KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgb3BhY2l0eSApIDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyICsgIiAiICsgb3BhY2l0eTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgIH07Ci19Ci0KLS8vIFRoZXNlIGhvb2tzIGNhbm5vdCBiZSBh
ZGRlZCB1bnRpbCBET00gcmVhZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0Ci0vLyBmb3IgaXQg
aXMgbm90IHJ1biB1bnRpbCBhZnRlciBET00gcmVhZHkKLWpRdWVyeShmdW5jdGlvbigpIHsKLSAg
ICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCApIHsKLSAgICAg
ICAgICAgICAgICBqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5
bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kIGJ5IHRlbXBvcmFyaWx5IHNldHRpbmcgZWxl
bWVudCBkaXNwbGF5IHRvIGlubGluZS1ibG9jawotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LnN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAiaW5saW5lLWJsb2Nr
IiB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNvbXB1dGVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1ckNTUyggZWxlbSwgIm1hcmdpblJpZ2h0IiApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAotICAgICAgICAvLyBnZXRDb21wdXRlZFN0
eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3Jp
Z2h0Ci0gICAgICAgIC8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9u
IHRoZSBvZmZzZXQgbW9kdWxlLCB3ZSBqdXN0IGNoZWNrIGZvciBpdCBoZXJlCi0gICAgICAgIGlm
ICggIWpRdWVyeS5zdXBwb3J0LnBpeGVsUG9zaXRpb24gJiYgalF1ZXJ5LmZuLnBvc2l0aW9uICkg
ewotICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBbICJ0b3AiLCAibGVmdCIgXSwgZnVuY3Rp
b24oIGksIHByb3AgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzSG9va3Nb
IHByb3AgXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlv
biggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGN1ckNTUyByZXR1
cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJudW1ub25weC50ZXN0KCByZXQgKSA/
IGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArICJweCIgOiByZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICB9Ci0KLX0pOwotCi1pZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHBy
LmZpbHRlcnMgKSB7Ci0gICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS5vZmZzZXRXaWR0aCA9
PT0gMCAmJiBlbGVtLm9mZnNldEhlaWdodCA9PT0gMCApIHx8ICghalF1ZXJ5LnN1cHBvcnQucmVs
aWFibGVIaWRkZW5PZmZzZXRzICYmICgoZWxlbS5zdHlsZSAmJiBlbGVtLnN0eWxlLmRpc3BsYXkp
IHx8IGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICkpID09PSAibm9uZSIpOwotICAgICAgICB9Owot
Ci0gICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgICAgICAgICAgICAgIHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVs
ZW0gKTsKLSAgICAgICAgfTsKLX0KLQotLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0
ZSB0byBleHBhbmQgcHJvcGVydGllcwotalF1ZXJ5LmVhY2goewotICAgICAgICBtYXJnaW46ICIi
LAotICAgICAgICBwYWRkaW5nOiAiIiwKLSAgICAgICAgYm9yZGVyOiAiV2lkdGgiCi19LCBmdW5j
dGlvbiggcHJlZml4LCBzdWZmaXggKSB7Ci0gICAgICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4
ICsgc3VmZml4IF0gPSB7Ci0gICAgICAgICAgICAgICAgZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgPSB0eXBlb2YgdmFsdWUgPT09
ICJzdHJpbmciID8gdmFsdWUuc3BsaXQoIiAiKSA6IFsgdmFsdWUgXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgPSB7fTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1sgaSBdIHx8IHBhcnRz
WyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBhbmRlZDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCAhcm1hcmdpbi50ZXN0KCBwcmVmaXggKSApIHsK
LSAgICAgICAgICAgICAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9
IHNldFBvc2l0aXZlTnVtYmVyOwotICAgICAgICB9Ci19KTsKLXZhciByMjAgPSAvJTIwL2csCi0g
ICAgICAgIHJicmFja2V0ID0gL1xbXF0kLywKLSAgICAgICAgckNSTEYgPSAvXHI/XG4vZywKLSAg
ICAgICAgcmlucHV0ID0gL14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVt
YWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRp
bWV8dXJsfHdlZWspJC9pLAotICAgICAgICByc2VsZWN0VGV4dGFyZWEgPSAvXig/OnNlbGVjdHx0
ZXh0YXJlYSkvaTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgICAgIHNlcmlhbGl6ZTogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJp
YWxpemVBcnJheSgpICk7Ci0gICAgICAgIH0sCi0gICAgICAgIHNlcmlhbGl6ZUFycmF5OiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzID8galF1ZXJ5Lm1ha2VB
cnJheSggdGhpcy5lbGVtZW50cyApIDogdGhpczsKLSAgICAgICAgICAgICAgICB9KQotICAgICAg
ICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLm5hbWUgJiYgIXRoaXMuZGlzYWJsZWQgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCB0aGlzLmNoZWNrZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMu
bm9kZU5hbWUgKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJp
bnB1dC50ZXN0KCB0aGlzLnR5cGUgKSApOwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAg
ICAgICAgLm1hcChmdW5jdGlvbiggaSwgZWxlbSApewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsID09IG51bGwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dWxsIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzQXJyYXkoIHZh
bCApID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFw
KCB2YWwsIGZ1bmN0aW9uKCB2YWwsIGkgKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5y
ZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07
Ci0gICAgICAgICAgICAgICAgfSkuZ2V0KCk7Ci0gICAgICAgIH0KLX0pOwotCi0vL1NlcmlhbGl6
ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCi0vL2tleS92YWx1ZXMgaW50
byBhIHF1ZXJ5IHN0cmluZwotalF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFs
ICkgewotICAgICAgICB2YXIgcHJlZml4LAotICAgICAgICAgICAgICAgIHMgPSBbXSwKLSAgICAg
ICAgICAgICAgICBhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgcmV0dXJu
IGl0cyB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkuaXNGdW5j
dGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9u
ZW50KCBrZXkgKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKLSAgICAgICAg
ICAgICAgICB9OwotCi0gICAgICAgIC8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVl
cnkgPD0gMS4zLjIgYmVoYXZpb3IuCi0gICAgICAgIGlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVm
aW5lZCApIHsKLSAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGlu
Z3MgJiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFy
cmF5IG9mIGZvcm0gZWxlbWVudHMuCi0gICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8
fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAg
alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRk
KCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhl
ICJvbGQiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlcgotICAgICAgICAgICAgICAgIC8vIGRp
ZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgotICAgICAgICAgICAg
ICAgIGZvciAoIHByZWZpeCBpbiBhICkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQ
YXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBz
ZXJpYWxpemF0aW9uCi0gICAgICAgIHJldHVybiBzLmpvaW4oICImIiApLnJlcGxhY2UoIHIyMCwg
IisiICk7Ci19OwotCi1mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlv
bmFsLCBhZGQgKSB7Ci0gICAgICAgIHZhciBuYW1lOwotCi0gICAgICAgIGlmICggalF1ZXJ5Lmlz
QXJyYXkoIG9iaiApICkgewotICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVt
LgotICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0
KCBwcmVmaXggKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQg
ZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhZGQoIHByZWZpeCwgdiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhcnJheSBpdGVtIGlzIG5v
bi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbnVtZXJpYyBpbmRleCB0byByZXNvbHZlIGRlc2VyaWFsaXphdGlv
biBhbWJpZ3VpdHkgaXNzdWVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgcmFjayAoYXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXN0ZWQgYXJyYXlzIHByb3Blcmx5
LCBhbmQgYXR0ZW1wdGluZyB0byBkbyBzbyBtYXkgY2F1c2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYSBzZXJ2ZXIgZXJyb3IuIFBvc3NpYmxlIGZpeGVzIGFyZSB0byBtb2Rp
ZnkgcmFjaydzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlc2VyaWFsaXph
dGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBmb3JjZSBhcnJheSBzZXJpYWxpemF0aW9uIHRv
IGJlIHNoYWxsb3cuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1z
KCBwcmVmaXggKyAiWyIgKyAoIHR5cGVvZiB2ID09PSAib2JqZWN0IiA/IGkgOiAiIiApICsgIl0i
LCB2LCB0cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpR
dWVyeS50eXBlKCBvYmogKSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2Vy
aWFsaXplIG9iamVjdCBpdGVtLgotICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5h
bWUgKyAiXSIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIHNj
YWxhciBpdGVtLgotICAgICAgICAgICAgICAgIGFkZCggcHJlZml4LCBvYmogKTsKLSAgICAgICAg
fQotfQotdmFyCi0gICAgICAgIC8vIERvY3VtZW50IGxvY2F0aW9uCi0gICAgICAgIGFqYXhMb2NQ
YXJ0cywKLSAgICAgICAgYWpheExvY2F0aW9uLAotCi0gICAgICAgIHJoYXNoID0gLyMuKiQvLAot
ICAgICAgICByaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsIC8vIElF
IGxlYXZlcyBhbiBcciBjaGFyYWN0ZXIgYXQgRU9MCi0gICAgICAgIC8vICM3NjUzLCAjODEyNSwg
IzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgotICAgICAgICBybG9jYWxQcm90b2NvbCA9
IC9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdl
dCk6JC8sCi0gICAgICAgIHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAotICAgICAgICBy
cHJvdG9jb2wgPSAvXlwvXC8vLAotICAgICAgICBycXVlcnkgPSAvXD8vLAotICAgICAgICByc2Ny
aXB0ID0gLzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4v
Z2ksCi0gICAgICAgIHJ0cyA9IC8oWz8mXSlfPVteJl0qLywKLSAgICAgICAgcnVybCA9IC9eKFtc
d1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLywKLQotICAgICAgICAv
LyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kCi0gICAgICAgIF9sb2FkID0galF1
ZXJ5LmZuLmxvYWQsCi0KLSAgICAgICAgLyogUHJlZmlsdGVycwotICAgICAgICAgKiAxKSBUaGV5
IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25w
LmpzIGZvciBhbiBleGFtcGxlKQotICAgICAgICAgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOgotICAg
ICAgICAgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0Ci0gICAgICAgICAqICAg
IC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJv
Y2Vzc0RhdGEgaXMgdHJ1ZSkKLSAgICAgICAgICogMykga2V5IGlzIHRoZSBkYXRhVHlwZQotICAg
ICAgICAgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAotICAgICAgICAg
KiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhF
TiBjb250aW51ZSBkb3duIHRvICIqIiBpZiBuZWVkZWQKLSAgICAgICAgICovCi0gICAgICAgIHBy
ZWZpbHRlcnMgPSB7fSwKLQotICAgICAgICAvKiBUcmFuc3BvcnRzIGJpbmRpbmdzCi0gICAgICAg
ICAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKLSAgICAgICAgICogMikgdGhlIGNhdGNoYWxsIHN5
bWJvbCAiKiIgY2FuIGJlIHVzZWQKLSAgICAgICAgICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQg
d2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gIioiIGlmIG5lZWRlZAotICAg
ICAgICAgKi8KLSAgICAgICAgdHJhbnNwb3J0cyA9IHt9LAotCi0gICAgICAgIC8vIEF2b2lkIGNv
bW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFu
ZCBldmFkZSBjb21wcmVzc2lvbgotICAgICAgICBhbGxUeXBlcyA9IFsiKi8iXSArIFsiKiJdOwot
Ci0vLyAjODEzOCwgSUUgbWF5IHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwotLy8g
YSBmaWVsZCBmcm9tIHdpbmRvdy5sb2NhdGlvbiBpZiBkb2N1bWVudC5kb21haW4gaGFzIGJlZW4g
c2V0Ci10cnkgewotICAgICAgICBhamF4TG9jYXRpb24gPSBsb2NhdGlvbi5ocmVmOwotfSBjYXRj
aCggZSApIHsKLSAgICAgICAgLy8gVXNlIHRoZSBocmVmIGF0dHJpYnV0ZSBvZiBhbiBBIGVsZW1l
bnQKLSAgICAgICAgLy8gc2luY2UgSUUgd2lsbCBtb2RpZnkgaXQgZ2l2ZW4gZG9jdW1lbnQubG9j
YXRpb24KLSAgICAgICAgYWpheExvY2F0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEi
ICk7Ci0gICAgICAgIGFqYXhMb2NhdGlvbi5ocmVmID0gIiI7Ci0gICAgICAgIGFqYXhMb2NhdGlv
biA9IGFqYXhMb2NhdGlvbi5ocmVmOwotfQotCi0vLyBTZWdtZW50IGxvY2F0aW9uIGludG8gcGFy
dHMKLWFqYXhMb2NQYXJ0cyA9IHJ1cmwuZXhlYyggYWpheExvY2F0aW9uLnRvTG93ZXJDYXNlKCkg
KSB8fCBbXTsKLQotLy8gQmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWpheFByZWZpbHRl
ciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKLWZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJh
bnNwb3J0cyggc3RydWN0dXJlICkgewotCi0gICAgICAgIC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBp
cyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCi0gICAgICAgIHJldHVybiBmdW5jdGlvbigg
ZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkgewotCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBl
b2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgdmFyIGRhdGFUeXBlLCBsaXN0LCBwbGFjZUJlZm9yZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLnNw
bGl0KCBjb3JlX3JzcGFjZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBkYXRhVHlwZXMubGVuZ3RoOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZnVuYyApICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lv
bgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpIF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNvbnRyb2wgaWYgd2UncmUg
YXNrZWQgdG8gYWRkIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBh
bnkgZXhpc3RpbmcgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFj
ZUJlZm9yZSA9IC9eXCsvLnRlc3QoIGRhdGFUeXBlICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcGxhY2VCZWZvcmUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZS5zdWJzdHIoIDEgKSB8fCAiKiI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5
cGUgXSB8fCBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBh
ZGQgdG8gdGhlIHN0cnVjdHVyZSBhY2NvcmRpbmdseQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaXN0WyBwbGFjZUJlZm9yZSA/ICJ1bnNoaWZ0IiA6ICJwdXNoIiBdKCBmdW5jICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9
OwotfQotCi0vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRy
YW5zcG9ydHMKLWZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1
cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsCi0gICAgICAgICAgICAgICAgZGF0
YVR5cGUgLyogaW50ZXJuYWwgKi8sIGluc3BlY3RlZCAvKiBpbnRlcm5hbCAqLyApIHsKLQotICAg
ICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlIHx8IG9wdGlvbnMuZGF0YVR5cGVzWyAwIF07Ci0gICAg
ICAgIGluc3BlY3RlZCA9IGluc3BlY3RlZCB8fCB7fTsKLQotICAgICAgICBpbnNwZWN0ZWRbIGRh
dGFUeXBlIF0gPSB0cnVlOwotCi0gICAgICAgIHZhciBzZWxlY3Rpb24sCi0gICAgICAgICAgICAg
ICAgbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSwKLSAgICAgICAgICAgICAgICBpID0gMCwK
LSAgICAgICAgICAgICAgICBsZW5ndGggPSBsaXN0ID8gbGlzdC5sZW5ndGggOiAwLAotICAgICAg
ICAgICAgICAgIGV4ZWN1dGVPbmx5ID0gKCBzdHJ1Y3R1cmUgPT09IHByZWZpbHRlcnMgKTsKLQot
ICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGggJiYgKCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9u
ICk7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBsaXN0WyBpIF0oIG9wdGlv
bnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBn
b3QgcmVkaXJlY3RlZCB0byBhbm90aGVyIGRhdGFUeXBlCi0gICAgICAgICAgICAgICAgLy8gd2Ug
dHJ5IHRoZXJlIGlmIGV4ZWN1dGluZyBvbmx5IGFuZCBub3QgZG9uZSBhbHJlYWR5Ci0gICAgICAg
ICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0aW9uID09PSAic3RyaW5nIiApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWV4ZWN1dGVPbmx5IHx8IGluc3BlY3RlZFsgc2VsZWN0aW9u
IF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHVuZGVm
aW5lZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIHNlbGVjdGlvbiApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmls
dGVyc09yVHJhbnNwb3J0cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwgc2Vs
ZWN0aW9uLCBpbnNwZWN0ZWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgd2UncmUgb25seSBleGVjdXRpbmcg
b3Igbm90aGluZyB3YXMgc2VsZWN0ZWQKLSAgICAgICAgLy8gd2UgdHJ5IHRoZSBjYXRjaGFsbCBk
YXRhVHlwZSBpZiBub3QgZG9uZSBhbHJlYWR5Ci0gICAgICAgIGlmICggKCBleGVjdXRlT25seSB8
fCAhc2VsZWN0aW9uICkgJiYgIWluc3BlY3RlZFsgIioiIF0gKSB7Ci0gICAgICAgICAgICAgICAg
c2VsZWN0aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBq
cVhIUiwgIioiLCBpbnNwZWN0ZWQgKTsKLSAgICAgICAgfQotICAgICAgICAvLyB1bm5lY2Vzc2Fy
eSB3aGVuIG9ubHkgZXhlY3V0aW5nIChwcmVmaWx0ZXJzKQotICAgICAgICAvLyBidXQgaXQnbGwg
YmUgaWdub3JlZCBieSB0aGUgY2FsbGVyIGluIHRoYXQgY2FzZQotICAgICAgICByZXR1cm4gc2Vs
ZWN0aW9uOwotfQotCi0vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnMKLS8vIHRo
YXQgdGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQotLy8gRml4
ZXMgIzk4ODcKLWZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkgewotICAgICAgICB2
YXIga2V5LCBkZWVwLAotICAgICAgICAgICAgICAgIGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhT
ZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTsKLSAgICAgICAgZm9yICgga2V5IGluIHNyYyApIHsK
LSAgICAgICAgICAgICAgICBpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVw
IHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICggZGVlcCApIHsKLSAgICAgICAgICAgICAgICBq
UXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTsKLSAgICAgICAgfQotfQotCi1qUXVl
cnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7Ci0gICAgICAg
IGlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYgX2xvYWQgKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIERvbid0IGRvIGEgcmVxdWVzdCBpZiBubyBlbGVtZW50cyBhcmUgYmVpbmcgcmVx
dWVzdGVkCi0gICAgICAgIGlmICggIXRoaXMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHNlbGVjdG9yLCB0eXBlLCByZXNw
b25zZSwKLSAgICAgICAgICAgICAgICBzZWxmID0gdGhpcywKLSAgICAgICAgICAgICAgICBvZmYg
PSB1cmwuaW5kZXhPZigiICIpOwotCi0gICAgICAgIGlmICggb2ZmID49IDAgKSB7Ci0gICAgICAg
ICAgICAgICAgc2VsZWN0b3IgPSB1cmwuc2xpY2UoIG9mZiwgdXJsLmxlbmd0aCApOwotICAgICAg
ICAgICAgICAgIHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24KLSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbigg
cGFyYW1zICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRo
ZSBjYWxsYmFjawotICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zOwotICAgICAgICAg
ICAgICAgIHBhcmFtcyA9IHVuZGVmaW5lZDsKLQotICAgICAgICAvLyBPdGhlcndpc2UsIGJ1aWxk
IGEgcGFyYW0gc3RyaW5nCi0gICAgICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFy
YW1zID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gIlBPU1QiOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gUmVxdWVzdCB0aGUgcmVtb3RlIGRvY3VtZW50Ci0gICAgICAg
IGpRdWVyeS5hamF4KHsKLSAgICAgICAgICAgICAgICB1cmw6IHVybCwKLQotICAgICAgICAgICAg
ICAgIC8vIGlmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9k
IHdpbGwgYmUgdXNlZAotICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgICAg
ICAgZGF0YVR5cGU6ICJodG1sIiwKLSAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbXMsCi0gICAg
ICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNw
b25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSkuZG9uZShmdW5jdGlvbiggcmVzcG9uc2VUZXh0
ICkgewotCi0gICAgICAgICAgICAgICAgLy8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBs
ZXRlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhcmd1bWVudHM7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBTZWUgaWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkCi0gICAgICAg
ICAgICAgICAgc2VsZi5odG1sKCBzZWxlY3RvciA/Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIENyZWF0ZSBhIGR1bW15IGRpdiB0byBob2xkIHRoZSByZXN1bHRzCi0gICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkoIjxkaXY+IikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBpbmplY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3Zpbmcg
dGhlIHNjcmlwdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQg
YW55ICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzIGluIElFCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5hcHBlbmQoIHJlc3BvbnNlVGV4dC5yZXBsYWNlKCByc2NyaXB0LCAiIiAp
ICkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHNwZWNp
ZmllZCBlbGVtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZCggc2Vs
ZWN0b3IgKSA6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCwganVzdCBpbmpl
Y3QgdGhlIGZ1bGwgcmVzdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVRleHQg
KTsKLQotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gdGhpczsKLX07Ci0KLS8vIEF0dGFj
aCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCi1q
UXVlcnkuZWFjaCggImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFq
YXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCggIiAiICksIGZ1bmN0aW9uKCBpLCBvICl7Ci0gICAg
ICAgIGpRdWVyeS5mblsgbyBdID0gZnVuY3Rpb24oIGYgKXsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5vbiggbywgZiApOwotICAgICAgICB9OwotfSk7Ci0KLWpRdWVyeS5lYWNoKCBbICJn
ZXQiLCAicG9zdCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHsKLSAgICAgICAgalF1ZXJ5WyBt
ZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgewotICAgICAg
ICAgICAgICAgIC8vIHNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVk
Ci0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
YXRhID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJl
dHVybiBqUXVlcnkuYWpheCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBtZXRob2Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGE6IGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBjYWxsYmFj
aywKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiB0eXBlCi0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH07Ci19KTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0KLSAgICAgICAgZ2V0
U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCAic2NyaXB0IiApOwotICAg
ICAgICB9LAotCi0gICAgICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNr
ICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxi
YWNrLCAianNvbiIgKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBDcmVhdGVzIGEgZnVsbCBm
bGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAotICAgICAgICAvLyB3aXRoIGJvdGgg
YWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuCi0gICAgICAgIC8vIElmIHRhcmdldCBp
cyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuCi0gICAgICAgIGFqYXhTZXR1cDog
ZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBzZXR0
aW5ncyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mg
b2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVy
eS5hamF4U2V0dGluZ3MgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5ncwotICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0dGluZ3MgPSB0YXJnZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQg
PSBqUXVlcnkuYWpheFNldHRpbmdzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBhamF4RXh0ZW5kKCB0YXJnZXQsIHNldHRpbmdzICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRhcmdldDsKLSAgICAgICAgfSwKLQotICAgICAgICBhamF4U2V0dGluZ3M6IHsKLSAgICAgICAg
ICAgICAgICB1cmw6IGFqYXhMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICBpc0xvY2FsOiBybG9j
YWxQcm90b2NvbC50ZXN0KCBhamF4TG9jUGFydHNbIDEgXSApLAotICAgICAgICAgICAgICAgIGds
b2JhbDogdHJ1ZSwKLSAgICAgICAgICAgICAgICB0eXBlOiAiR0VUIiwKLSAgICAgICAgICAgICAg
ICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNl
dD1VVEYtOCIsCi0gICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IHRydWUsCi0gICAgICAgICAg
ICAgICAgYXN5bmM6IHRydWUsCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICB0
aW1lb3V0OiAwLAotICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsCi0gICAgICAgICAgICAgICAg
ZGF0YVR5cGU6IG51bGwsCi0gICAgICAgICAgICAgICAgdXNlcm5hbWU6IG51bGwsCi0gICAgICAg
ICAgICAgICAgcGFzc3dvcmQ6IG51bGwsCi0gICAgICAgICAgICAgICAgY2FjaGU6IG51bGwsCi0g
ICAgICAgICAgICAgICAgdGhyb3dzOiBmYWxzZSwKLSAgICAgICAgICAgICAgICB0cmFkaXRpb25h
bDogZmFsc2UsCi0gICAgICAgICAgICAgICAgaGVhZGVyczoge30sCi0gICAgICAgICAgICAgICAg
Ki8KLQotICAgICAgICAgICAgICAgIGFjY2VwdHM6IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgaHRtbDogInRleHQvaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAidGV4
dC9wbGFpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBqc29uOiAiYXBwbGljYXRpb24vanNv
biwgdGV4dC9qYXZhc2NyaXB0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICIqIjogYWxsVHlw
ZXMKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgY29udGVudHM6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHhtbDogL3htbC8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBodG1sOiAvaHRtbC8sCi0gICAgICAgICAgICAgICAgICAgICAgICBqc29uOiAvanNvbi8KLSAg
ICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgcmVzcG9uc2VGaWVsZHM6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHhtbDogInJlc3BvbnNlWE1MIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHQ6ICJyZXNwb25zZVRleHQiCi0gICAgICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgICAgIC8vIExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCi0gICAgICAgICAgICAgICAg
Ly8gMSkga2V5IGZvcm1hdCBpcyAic291cmNlX3R5cGUgZGVzdGluYXRpb25fdHlwZSIgKGEgc2lu
Z2xlIHNwYWNlIGluLWJldHdlZW4pCi0gICAgICAgICAgICAgICAgLy8gMikgdGhlIGNhdGNoYWxs
IHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQgZm9yIHNvdXJjZV90eXBlCi0gICAgICAgICAgICAgICAg
Y29udmVydGVyczogewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGFueXRo
aW5nIHRvIHRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICIqIHRleHQiOiB3aW5kb3cuU3Ry
aW5nLAotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBu
byB0cmFuc2Zvcm1hdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0
cnVlLAotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNv
biBleHByZXNzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAidGV4dCBqc29uIjogalF1ZXJ5
LnBhcnNlSlNPTiwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4
bWwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAot
ICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBGb3Igb3B0aW9ucyB0aGF0
IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOgotICAgICAgICAgICAgICAgIC8vIHlvdSBjYW4g
YWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKLSAgICAgICAgICAgICAgICAvLyBh
bmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQotICAgICAgICAgICAgICAg
IC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKQotICAgICAgICAgICAgICAgIGZsYXRP
cHRpb25zOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB0cnVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgdXJsOiB0cnVlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICB9
LAotCi0gICAgICAgIGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cygg
cHJlZmlsdGVycyApLAotICAgICAgICBhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRy
YW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKLQotICAgICAgICAvLyBNYWluIG1ldGhvZAotICAgICAg
ICBhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgewotCi0gICAgICAgICAgICAgICAgLy8g
SWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKLSAgICAgICAg
ICAgICAgICBpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3QiICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9ucyA9IHVybDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVu
ZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBGb3JjZSBv
cHRpb25zIHRvIGJlIGFuIG9iamVjdAotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25z
IHx8IHt9OwotCi0gICAgICAgICAgICAgICAgdmFyIC8vIGlmTW9kaWZpZWQga2V5Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUmVzcG9uc2UgaGVhZGVycwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFk
ZXJzU3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0cmFuc3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aW1lb3V0IGhhbmRsZQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ3Jvc3MtZG9tYWluIGRldGVjdGlvbiB2YXJzCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJ0cywKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgZ2xvYmFs
IGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZAotICAgICAgICAgICAgICAgICAgICAgICAgZmly
ZUdsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHZhcmlhYmxlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRl
IHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGpR
dWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBDYWxsYmFja3MgY29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tDb250
ZXh0ID0gcy5jb250ZXh0IHx8IHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb250ZXh0
IGZvciBnbG9iYWwgZXZlbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHRoZSBj
YWxsYmFja0NvbnRleHQgaWYgb25lIHdhcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucwotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYW5kIGlmIGl0J3MgYSBET00gbm9kZSBvciBhIGpRdWVyeSBj
b2xsZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQgPSBj
YWxsYmFja0NvbnRleHQgIT09IHMgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0IGluc3RhbmNlb2Yg
alF1ZXJ5ICkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6IGpRdWVyeS5ldmVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIERlZmVycmVkcwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRl
RGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVycyA9IHt9LAotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlIGpxWEhSIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ckFib3J0ID0gImNhbmNlbGVkIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZha2UgeGhyCi0gICAgICAgICAgICAgICAgICAgICAgICBqcVhIUiA9IHsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAwLAotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlcyB0aGUgaGVhZGVyCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1l
LCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFzdGF0ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBs
bmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbIG5h
bWUgXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSYXcgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJz
U3RyaW5nIDogbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUg
aWYgbmVlZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlc3BvbnNlSGVh
ZGVyOiBmdW5jdGlvbigga2V5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBtYXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHN0YXRlID09PSAyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMg
PSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJp
bmcgKSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2Uo
KSBdID0gbWF0Y2hbIDIgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6
IG1hdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUg
aGVhZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlTWltZVR5cGU6
IGZ1bmN0aW9uKCB0eXBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggIXN0YXRlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcy5taW1lVHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbmNlbCB0aGUgcmVxdWVzdAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHN0
YXR1c1RleHQgfHwgc3RyQWJvcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0cmFuc3BvcnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuYWJvcnQoIHN0YXR1c1RleHQgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG9uZSggMCwgc3RhdHVzVGV4dCApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICAgICAgLy8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lCi0gICAgICAgICAg
ICAgICAgLy8gSXQgaXMgZGVmaW5lZCBoZXJlIGJlY2F1c2UganNsaW50IGNvbXBsYWlucyBpZiBp
dCBpcyBkZWNsYXJlZAotICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0
aW9uICh3aGljaCB3b3VsZCBiZSBtb3JlIGxvZ2ljYWwgYW5kIHJlYWRhYmxlKQotICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2Vz
LCBoZWFkZXJzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzU3VjY2Vzcywgc3Vj
Y2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENhbGxlZCBvbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0
YXRlID09PSAyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0
YXRlIGlzICJkb25lIiBub3cKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMjsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdGltZW91dFRpbWVyICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXJlZmVy
ZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwg
YmUgdXNlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydCA9IHVuZGVmaW5lZDsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCAi
IjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHJlYWR5U3RhdGUKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCByZXNwb25zZSBkYXRhCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9u
c2VzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9
PT0gMzA0ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUg
SWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1v
ZGlmaWVkIG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5pZk1v
ZGlmaWVkICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9k
aWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbW9kaWZpZWQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubGFzdE1v
ZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gPSBtb2RpZmllZDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbW9kaWZpZWQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXRhZ1sg
aWZNb2RpZmllZEtleSBdID0gbW9kaWZpZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90IG1vZGlmaWVkCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAzMDQgKSB7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gIm5vdG1vZGlmaWVk
IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSB0
cnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZGF0
YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdWNjZXNzID0gYWpheENvbnZlcnQoIHMs
IHJlc3BvbnNlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dHVzVGV4dCA9IGlzU3VjY2Vzcy5zdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gaXNTdWNjZXNzLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBpc1N1Y2Nlc3MuZXJyb3I7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdWNjZXNzID0gIWVycm9yOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHRyYWN0IGVycm9y
IGZyb20gc3RhdHVzVGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVu
IG5vcm1hbGl6ZSBzdGF0dXNUZXh0IGFuZCBzdGF0dXMgZm9yIG5vbi1hYm9ydHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBzdGF0dXNUZXh0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0dXNUZXh0IHx8IHN0YXR1cyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gImVycm9yIjsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
dXMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9i
amVjdAotICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc3RhdHVzID0gc3RhdHVzOwotICAg
ICAgICAgICAgICAgICAgICAgICAganFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4
dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Vj
Y2Vzcy9FcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1N1Y2Nlc3MgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxs
YmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0
LCBlcnJvciBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCi0gICAgICAgICAgICAgICAg
ICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGZpcmVHbG9iYWxzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXgiICsgKCBpc1N1Y2Nlc3MgPyAiU3VjY2Vz
cyIgOiAiRXJyb3IiICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21w
bGV0ZQotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCgg
Y2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4Q29tcGxldGUiLCBbIGpx
WEhSLCBzIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRo
ZSBnbG9iYWwgQUpBWCBjb3VudGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBkZWZlcnJlZHMKLSAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApOwotICAgICAgICAgICAgICAg
IGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOwotICAgICAgICAgICAgICAgIGpxWEhSLmVycm9y
ID0ganFYSFIuZmFpbDsKLSAgICAgICAgICAgICAgICBqcVhIUi5jb21wbGV0ZSA9IGNvbXBsZXRl
RGVmZXJyZWQuYWRkOwotCi0gICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxs
YmFja3MKLSAgICAgICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlID0gZnVuY3Rpb24oIG1hcCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWFwICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdG1wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHN0YXRlIDwgMiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCB0bXAgaW4gbWFwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZVsgdG1wIF0gPSBbIHN0YXR1c0NvZGVbdG1wXSwg
bWFwW3RtcF0gXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gbWFwWyBqcVhIUi5zdGF0dXMgXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5hbHdheXMoIHRtcCApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAg
ICB9OwotCi0gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTog
YW5kIHN0cmluZyBwcm9tb3Rpb24pCi0gICAgICAgICAgICAgICAgLy8gQWRkIHByb3RvY29sIGlm
IG5vdCBwcm92aWRlZCAoIzU4NjY6IElFNyBpc3N1ZSB3aXRoIHByb3RvY29sLWxlc3MgdXJscykK
LSAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFp
bGFibGUKLSAgICAgICAgICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgKSArICIiICku
cmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9jUGFydHNbIDEg
XSArICIvLyIgKTsKLQotICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QK
LSAgICAgICAgICAgICAgICBzLmRhdGFUeXBlcyA9IGpRdWVyeS50cmltKCBzLmRhdGFUeXBlIHx8
ICIqIiApLnRvTG93ZXJDYXNlKCkuc3BsaXQoIGNvcmVfcnNwYWNlICk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gd2UgaGF2ZSBh
IHByb3RvY29sOmhvc3Q6cG9ydCBtaXNtYXRjaAotICAgICAgICAgICAgICAgIGlmICggcy5jcm9z
c0RvbWFpbiA9PSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgPSBydXJs
LmV4ZWMoIHMudXJsLnRvTG93ZXJDYXNlKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMu
Y3Jvc3NEb21haW4gPSAhISggcGFydHMgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCBwYXJ0c1sgMSBdICE9PSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9PSBh
amF4TG9jUGFydHNbIDIgXSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICggcGFydHNbIDMgXSB8fCAoIHBhcnRzWyAxIF0gPT09ICJodHRwOiIgPyA4MCA6IDQ0MyAp
ICkgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgg
YWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgw
IDogNDQzICkgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0
cmluZwotICAgICAgICAgICAgICAgIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlw
ZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzLmRh
dGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKLSAgICAgICAgICAg
ICAgICBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9u
cywganFYSFIgKTsKLQotICAgICAgICAgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQg
aW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlCi0gICAgICAgICAgICAgICAgaWYgKCBzdGF0
ZSA9PT0gMiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqcVhIUjsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZl
bnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0bwotICAgICAgICAgICAgICAgIGZpcmVHbG9iYWxzID0g
cy5nbG9iYWw7Ci0KLSAgICAgICAgICAgICAgICAvLyBVcHBlcmNhc2UgdGhlIHR5cGUKLSAgICAg
ICAgICAgICAgICBzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKLQotICAgICAgICAgICAg
ICAgIC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50Ci0gICAgICAgICAgICAgICAg
cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzCi0gICAgICAgICAgICAgICAg
aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcg
Zm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAotICAgICAgICAgICAgICAgIGlmICggIXMuaGFz
Q29udGVudCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZGF0YSBpcyBhdmFp
bGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
LmRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMudXJsICs9ICggcnF1
ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArIHMuZGF0YTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3Qg
dXNlZCBpbiBhbiBldmVudHVhbCByZXRyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgcy5kYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBHZXQgaWZNb2RpZmllZEtleSBiZWZvcmUgYWRkaW5nIHRoZSBhbnRp
LWNhY2hlIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9
IHMudXJsOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYW50aS1jYWNoZSBpbiB1
cmwgaWYgbmVlZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuY2FjaGUgPT09IGZh
bHNlICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cyA9IGpRdWVy
eS5ub3coKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkg
cmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gcy51cmwucmVwbGFjZSggcnRzLCAiJDFfPSIgKyB0cyApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdGhpbmcgd2FzIHJlcGxhY2Vk
LCBhZGQgdGltZXN0YW1wIHRvIHRoZSBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcy51cmwgPSByZXQgKyAoICggcmV0ID09PSBzLnVybCApID8gKCBycXVlcnkudGVzdCggcy51
cmwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIHRzIDogIiIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXQgdGhl
IGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnQKLSAgICAgICAgICAgICAgICBp
ZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwg
b3B0aW9ucy5jb250ZW50VHlwZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnNl
dFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5j
ZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KLSAg
ICAgICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmTW9kaWZpZWRLZXkgPSBpZk1vZGlmaWVkS2V5IHx8IHMudXJsOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIo
ICJJZi1Nb2RpZmllZC1TaW5jZSIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkg
XSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpR
dWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIEFjY2VwdHMg
aGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlCi0gICAgICAg
ICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKLSAgICAgICAgICAgICAgICAgICAgICAg
ICJBY2NlcHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSAmJiBz
LmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09
ICIqIiA/ICIsICIgKyBhbGxUeXBlcyArICI7IHE9MC4wMSIgOiAiIiApIDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcy5hY2NlcHRzWyAiKiIgXQotICAgICAgICAgICAgICAgICk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KLSAgICAgICAg
ICAgICAgICBmb3IgKCBpIGluIHMuaGVhZGVycyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5
cGVzIGFuZCBlYXJseSBhYm9ydAotICAgICAgICAgICAgICAgIGlmICggcy5iZWZvcmVTZW5kICYm
ICggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFs
c2UgfHwgc3RhdGUgPT09IDIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpOwotCi0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gYWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0
aW9uCi0gICAgICAgICAgICAgICAgc3RyQWJvcnQgPSAiYWJvcnQiOwotCi0gICAgICAgICAgICAg
ICAgLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCi0gICAgICAgICAgICAgICAgZm9y
ICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAganFYSFJbIGkgXSggc1sgaSBdICk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gR2V0IHRyYW5zcG9ydAotICAgICAgICAgICAgICAgIHRy
YW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBv
cHRpb25zLCBqcVhIUiApOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgbm8gdHJhbnNwb3J0LCB3
ZSBhdXRvLWFib3J0Ci0gICAgICAgICAgICAgICAgaWYgKCAhdHJhbnNwb3J0ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZG9uZSggLTEsICJObyBUcmFuc3BvcnQiICk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUg
PSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCBnbG9iYWwgZXZlbnQKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBb
IGpxWEhSLCBzIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRpbWVvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5hc3lu
YyAmJiBzLnRpbWVvdXQgPiAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLmFib3J0KCAidGltZW91dCIgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwgcy50aW1lb3V0ICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSggLTEsIGUgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU2ltcGx5IHJldGhyb3cgb3RoZXJ3aXNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiBqcVhIUjsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBDb3VudGVy
IGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXMKLSAgICAgICAgYWN0aXZl
OiAwLAotCi0gICAgICAgIC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJl
cXVlc3QKLSAgICAgICAgbGFzdE1vZGlmaWVkOiB7fSwKLSAgICAgICAgZXRhZzoge30KLQotfSk7
Ci0KLS8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDoKLSAqIC0gc2V0cyBh
bGwgcmVzcG9uc2VYWFggZmllbGRzIGFjY29yZGluZ2x5Ci0gKiAtIGZpbmRzIHRoZSByaWdodCBk
YXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFU
eXBlKQotICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCi0gKi8KLWZ1bmN0
aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7Ci0KLSAgICAg
ICAgdmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLAotICAgICAgICAg
ICAgICAgIGNvbnRlbnRzID0gcy5jb250ZW50cywKLSAgICAgICAgICAgICAgICBkYXRhVHlwZXMg
PSBzLmRhdGFUeXBlcywKLSAgICAgICAgICAgICAgICByZXNwb25zZUZpZWxkcyA9IHMucmVzcG9u
c2VGaWVsZHM7Ci0KLSAgICAgICAgLy8gRmlsbCByZXNwb25zZVhYWCBmaWVsZHMKLSAgICAgICAg
Zm9yICggdHlwZSBpbiByZXNwb25zZUZpZWxkcyApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHR5
cGUgaW4gcmVzcG9uc2VzICkgewotICAgICAgICAgICAgICAgICAgICAgICAganFYSFJbIHJlc3Bv
bnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5cGUgXTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNv
bnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcwotICAgICAgICB3aGlsZSggZGF0YVR5cGVzWyAwIF0g
PT09ICIqIiApIHsKLSAgICAgICAgICAgICAgICBkYXRhVHlwZXMuc2hpZnQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJjb250ZW50LXR5
cGUiICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sg
aWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlCi0gICAgICAgIGlmICgg
Y3QgKSB7Ci0gICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlw
ZSBdLnRlc3QoIGN0ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFU
eXBlcy51bnNoaWZ0KCB0eXBlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9y
IHRoZSBleHBlY3RlZCBkYXRhVHlwZQotICAgICAgICBpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJl
c3BvbnNlcyApIHsKLSAgICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAw
IF07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJ5IGNvbnZlcnRpYmxl
IGRhdGFUeXBlcwotICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0
ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWzBdIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUgPSB0eXBlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWZpcnN0RGF0YVR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0eXBlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBPciBqdXN0IHVzZSBm
aXJzdCBvbmUKLSAgICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8
fCBmaXJzdERhdGFUeXBlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBk
YXRhVHlwZQotICAgICAgICAvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5l
ZWRlZAotICAgICAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCi0g
ICAgICAgIGlmICggZmluYWxEYXRhVHlwZSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGZpbmFs
RGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdOwotICAgICAg
ICB9Ci19Ci0KLS8vIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUg
b3JpZ2luYWwgcmVzcG9uc2UKLWZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsK
LQotICAgICAgICB2YXIgY29udiwgY29udjIsIGN1cnJlbnQsIHRtcCwKLSAgICAgICAgICAgICAg
ICAvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9k
aWZ5IGl0IGZvciBjb252ZXJzaW9uCi0gICAgICAgICAgICAgICAgZGF0YVR5cGVzID0gcy5kYXRh
VHlwZXMuc2xpY2UoKSwKLSAgICAgICAgICAgICAgICBwcmV2ID0gZGF0YVR5cGVzWyAwIF0sCi0g
ICAgICAgICAgICAgICAgY29udmVydGVycyA9IHt9LAotICAgICAgICAgICAgICAgIGkgPSAwOwot
Ci0gICAgICAgIC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCi0gICAgICAgIGlm
ICggcy5kYXRhRmlsdGVyICkgewotICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcy5kYXRhRmls
dGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ3Jl
YXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzCi0gICAgICAgIGlmICggZGF0
YVR5cGVzWyAxIF0gKSB7Ci0gICAgICAgICAgICAgICAgZm9yICggY29udiBpbiBzLmNvbnZlcnRl
cnMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJD
YXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlLCB0
b2xlcmF0aW5nIGxpc3QgbW9kaWZpY2F0aW9uCi0gICAgICAgIGZvciAoIDsgKGN1cnJlbnQgPSBk
YXRhVHlwZXNbKytpXSk7ICkgewotCi0gICAgICAgICAgICAgICAgLy8gVGhlcmUncyBvbmx5IHdv
cmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0bwotICAgICAgICAgICAgICAg
IGlmICggY3VycmVudCAhPT0gIioiICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBD
b252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMg
ZnJvbSBjdXJyZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHByZXYgIT09ICIqIiAm
JiBwcmV2ICE9PSBjdXJyZW50ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgY3VycmVudCBdIHx8IGNvbnZlcnRl
cnNbICIqICIgKyBjdXJyZW50IF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhY29udiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGNv
bnYyLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkgewotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXYgY2FuIGJl
IGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIg
IiArIHRtcFsgMCBdIF0gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjb252ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGNvbnYgPT09IHRydWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29u
dmVydGVyc1sgY29udjIgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRl
cm1lZGlhdGUgZGF0YVR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBd
ICE9PSB0cnVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRtcFsgMCBdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YVR5cGVzLnNwbGljZSggaS0tLCAwLCBjdXJyZW50ICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICE9PSB0cnVlICkgewotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGVycm9ycyBh
cmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udiAmJiBzWyJ0aHJvd3MiXSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
ID0gY29udiggcmVzcG9uc2UgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
IHN0YXRlOiAicGFyc2VyZXJyb3IiLCBlcnJvcjogY29udiA/IGUgOiAiTm8gY29udmVyc2lvbiBm
cm9tICIgKyBwcmV2ICsgIiB0byAiICsgY3VycmVudCB9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUg
cHJldiBmb3IgbmV4dCBpdGVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBj
dXJyZW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7
IHN0YXRlOiAic3VjY2VzcyIsIGRhdGE6IHJlc3BvbnNlIH07Ci19Ci12YXIgb2xkQ2FsbGJhY2tz
ID0gW10sCi0gICAgICAgIHJxdWVzdGlvbiA9IC9cPy8sCi0gICAgICAgIHJqc29ucCA9IC8oPSlc
Pyg/PSZ8JCl8XD9cPy8sCi0gICAgICAgIG5vbmNlID0galF1ZXJ5Lm5vdygpOwotCi0vLyBEZWZh
dWx0IGpzb25wIHNldHRpbmdzCi1qUXVlcnkuYWpheFNldHVwKHsKLSAgICAgICAganNvbnA6ICJj
YWxsYmFjayIsCi0gICAgICAgIGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBh
bmRvICsgIl8iICsgKCBub25jZSsrICkgKTsKLSAgICAgICAgICAgICAgICB0aGlzWyBjYWxsYmFj
ayBdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2s7Ci0gICAgICAgIH0K
LX0pOwotCi0vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNr
cyBmb3IganNvbnAgcmVxdWVzdHMKLWpRdWVyeS5hamF4UHJlZmlsdGVyKCAianNvbiBqc29ucCIs
IGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHsKLQotICAgICAgICB2YXIg
Y2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsCi0gICAgICAgICAg
ICAgICAgZGF0YSA9IHMuZGF0YSwKLSAgICAgICAgICAgICAgICB1cmwgPSBzLnVybCwKLSAgICAg
ICAgICAgICAgICBoYXNDYWxsYmFjayA9IHMuanNvbnAgIT09IGZhbHNlLAotICAgICAgICAgICAg
ICAgIHJlcGxhY2VJblVybCA9IGhhc0NhbGxiYWNrICYmIHJqc29ucC50ZXN0KCB1cmwgKSwKLSAg
ICAgICAgICAgICAgICByZXBsYWNlSW5EYXRhID0gaGFzQ2FsbGJhY2sgJiYgIXJlcGxhY2VJblVy
bCAmJiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
ICEoIHMuY29udGVudFR5cGUgfHwgIiIgKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQiKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgcmpzb25wLnRlc3QoIGRh
dGEgKTsKLQotICAgICAgICAvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMg
Impzb25wIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldAotICAgICAgICBpZiAoIHMuZGF0
YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgfHwgcmVwbGFjZUluVXJsIHx8IHJlcGxhY2VJbkRhdGEg
KSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcg
cHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0Ci0gICAgICAgICAgICAgICAgY2Fs
bGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBD
YWxsYmFjayApID8KLSAgICAgICAgICAgICAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjaygpIDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjazsKLSAgICAgICAgICAgICAg
ICBvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07Ci0KLSAgICAgICAgICAgICAg
ICAvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhCi0gICAgICAgICAgICAg
ICAgaWYgKCByZXBsYWNlSW5VcmwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzLnVybCA9
IHVybC5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05hbWUgKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCByZXBsYWNlSW5EYXRhICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcy5kYXRhID0gZGF0YS5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05hbWUgKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBoYXNDYWxsYmFjayApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHMudXJsICs9ICggcnF1ZXN0aW9uLnRlc3QoIHVybCApID8gIiYiIDogIj8i
ICkgKyBzLmpzb25wICsgIj0iICsgY2FsbGJhY2tOYW1lOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFm
dGVyIHNjcmlwdCBleGVjdXRpb24KLSAgICAgICAgICAgICAgICBzLmNvbnZlcnRlcnNbInNjcmlw
dCBqc29uIl0gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJl
c3BvbnNlQ29udGFpbmVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VD
b250YWluZXJbIDAgXTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgLy8g
Zm9yY2UganNvbiBkYXRhVHlwZQotICAgICAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gPSAi
anNvbiI7Ci0KLSAgICAgICAgICAgICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrCi0gICAgICAgICAg
ICAgICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7Ci0gICAgICAgICAgICAg
ICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRl
ciBjb252ZXJ0ZXJzKQotICAgICAgICAgICAgICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRl
bjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2F2ZSBiYWNrIGFzIGZyZWUKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRp
b25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2F2ZSB0aGUgY2FsbGJhY2sg
bmFtZSBmb3IgZnV0dXJlIHVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRD
YWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24g
YW5kIHdlIGhhdmUgYSByZXNwb25zZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNw
b25zZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFp
bmVyWyAwIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDsKLSAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIC8vIERlbGVnYXRlIHRvIHNjcmlw
dAotICAgICAgICAgICAgICAgIHJldHVybiAic2NyaXB0IjsKLSAgICAgICAgfQotfSk7Ci0vLyBJ
bnN0YWxsIHNjcmlwdCBkYXRhVHlwZQotalF1ZXJ5LmFqYXhTZXR1cCh7Ci0gICAgICAgIGFjY2Vw
dHM6IHsKLSAgICAgICAgICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0
aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNt
YXNjcmlwdCIKLSAgICAgICAgfSwKLSAgICAgICAgY29udGVudHM6IHsKLSAgICAgICAgICAgICAg
ICBzY3JpcHQ6IC9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvCi0gICAgICAgIH0sCi0gICAgICAgIGNv
bnZlcnRlcnM6IHsKLSAgICAgICAgICAgICAgICAidGV4dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4
dCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH0KLX0pOwotCi0vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGds
b2JhbAotalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKLSAg
ICAgICAgaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgcy5j
YWNoZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsK
LSAgICAgICAgICAgICAgICBzLnR5cGUgPSAiR0VUIjsKLSAgICAgICAgICAgICAgICBzLmdsb2Jh
bCA9IGZhbHNlOwotICAgICAgICB9Ci19KTsKLQotLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJh
bnNwb3J0Ci1qUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKHMpIHsKLQot
ICAgICAgICAvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIHJl
cXVlc3RzCi0gICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKLQotICAgICAgICAgICAgICAg
IHZhciBzY3JpcHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gZG9jdW1lbnQuaGVh
ZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggImhlYWQiIClbMF0gfHwgZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgewotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoICJzY3JpcHQiICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0
LmFzeW5jID0gImFzeW5jIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHMuc2NyaXB0Q2hhcnNldCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JpcHQuY2hhcnNldCA9IHMuc2NyaXB0Q2hhcnNldDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlw
dC5zcmMgPSBzLnVybDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRh
Y2ggaGFuZGxlcnMgZm9yIGFsbCBicm93c2VycwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9u
KCBfLCBpc0Fib3J0ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBpc0Fib3J0IHx8ICFzY3JpcHQucmVhZHlTdGF0ZSB8fCAvbG9hZGVkfGNvbXBsZXRl
Ly50ZXN0KCBzY3JpcHQucmVhZHlTdGF0ZSApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbWVtb3J5IGxlYWsgaW4gSUUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxv
YWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzY3JpcHQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGVhZCAm
JiBzY3JpcHQucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlcmVmZXJlbmNlIHRo
ZSBzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmlwdCA9IHVuZGVmaW5lZDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2sgaWYgbm90IGFib3J0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayggMjAwLCAic3VjY2VzcyIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiBhcHBlbmRDaGlsZCAg
dG8gY2lyY3VtdmVudCBhbiBJRTYgYnVnLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5IGFuZCAjNDM3
OCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKCBz
Y3JpcHQsIGhlYWQuZmlyc3RDaGlsZCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHNjcmlwdCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkKCAwLCAxICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9OwotICAgICAgICB9Ci19KTsKLXZhciB4aHJDYWxsYmFja3MsCi0gICAgICAgIC8v
ICM1MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUgaWYg
d2UgZG9uJ3QgYWJvcnQgb24gdW5sb2FkCi0gICAgICAgIHhock9uVW5sb2FkQWJvcnQgPSB3aW5k
b3cuQWN0aXZlWE9iamVjdCA/IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIEFib3J0
IGFsbCBwZW5kaW5nIHJlcXVlc3RzCi0gICAgICAgICAgICAgICAgZm9yICggdmFyIGtleSBpbiB4
aHJDYWxsYmFja3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3NbIGtl
eSBdKCAwLCAxICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9IDogZmFsc2UsCi0gICAg
ICAgIHhocklkID0gMDsKLQotLy8gRnVuY3Rpb25zIHRvIGNyZWF0ZSB4aHJzCi1mdW5jdGlvbiBj
cmVhdGVTdGFuZGFyZFhIUigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOwotICAgICAgICB9IGNhdGNoKCBlICkge30K
LX0KLQotZnVuY3Rpb24gY3JlYXRlQWN0aXZlWEhSKCkgewotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1M
SFRUUCIgKTsKLSAgICAgICAgfSBjYXRjaCggZSApIHt9Ci19Ci0KLS8vIENyZWF0ZSB0aGUgcmVx
dWVzdCBvYmplY3QKLS8vIChUaGlzIGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFqYXhTZXR0aW5ncyBm
b3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKLWpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gd2lu
ZG93LkFjdGl2ZVhPYmplY3QgPwotICAgICAgICAvKiBNaWNyb3NvZnQgZmFpbGVkIHRvIHByb3Bl
cmx5Ci0gICAgICAgICAqIGltcGxlbWVudCB0aGUgWE1MSHR0cFJlcXVlc3QgaW4gSUU3IChjYW4n
dCByZXF1ZXN0IGxvY2FsIGZpbGVzKSwKLSAgICAgICAgICogc28gd2UgdXNlIHRoZSBBY3RpdmVY
T2JqZWN0IHdoZW4gaXQgaXMgYXZhaWxhYmxlCi0gICAgICAgICAqIEFkZGl0aW9uYWxseSBYTUxI
dHRwUmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbwotICAgICAgICAgKiB3ZSBu
ZWVkIGEgZmFsbGJhY2suCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMb2NhbCAmJiBjcmVhdGVTdGFuZGFyZFhIUigpIHx8
IGNyZWF0ZUFjdGl2ZVhIUigpOwotICAgICAgICB9IDoKLSAgICAgICAgLy8gRm9yIGFsbCBvdGhl
ciBicm93c2VycywgdXNlIHRoZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVzdCBvYmplY3QKLSAgICAg
ICAgY3JlYXRlU3RhbmRhcmRYSFI7Ci0KLS8vIERldGVybWluZSBzdXBwb3J0IHByb3BlcnRpZXMK
LShmdW5jdGlvbiggeGhyICkgewotICAgICAgICBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuc3VwcG9y
dCwgewotICAgICAgICAgICAgICAgIGFqYXg6ICEheGhyLAotICAgICAgICAgICAgICAgIGNvcnM6
ICEheGhyICYmICggIndpdGhDcmVkZW50aWFscyIgaW4geGhyICkKLSAgICAgICAgfSk7Ci19KSgg
alF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKSApOwotCi0vLyBDcmVhdGUgdHJhbnNwb3J0IGlmIHRo
ZSBicm93c2VyIGNhbiBwcm92aWRlIGFuIHhocgotaWYgKCBqUXVlcnkuc3VwcG9ydC5hamF4ICkg
ewotCi0gICAgICAgIGpRdWVyeS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBzICkgewotICAgICAg
ICAgICAgICAgIC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91
Z2ggWE1MSHR0cFJlcXVlc3QKLSAgICAgICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWluIHx8
IGpRdWVyeS5zdXBwb3J0LmNvcnMgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBj
YWxsYmFjazsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkg
ewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3
IHhocgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGUs
IGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIg
PSBzLnhocigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T3BlbiB0aGUgc29ja2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUGFzc2luZyBudWxsIHVzZXJuYW1lLCBnZW5lcmF0ZXMgYSBsb2dpbiBwb3B1cCBvbiBPcGVy
YSAoIzI4NjUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
LnVzZXJuYW1lICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFz
c3dvcmQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9w
ZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5bmMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnhockZpZWxkcyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gcy54aHJGaWVsZHMg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhoclsgaSBdID0gcy54aHJGaWVsZHNbIGkgXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm92
ZXJyaWRlTWltZVR5cGUoIHMubWltZVR5cGUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25k
aXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNl
dCBpdCB0byBiZSBzdXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4g
dXNpbmcgYWpheFNldHVwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJl
YWR5IHByb3ZpZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIXMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgiXSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbICJY
LVJlcXVlc3RlZC1XaXRoIiBdID0gIlhNTEh0dHBSZXF1ZXN0IjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBOZWVkIGFuIGV4dHJhIHRyeS9jYXRjaCBmb3IgY3Jvc3MgZG9tYWluIHJl
cXVlc3RzIGluIEZpcmVmb3ggMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJz
WyBpIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBfICkg
e30KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHNlbmQg
dGhlIHJlcXVlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24gd2hpY2ggaXMgYWN0dWFsbHkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGluIGpRdWVyeS5hamF4IChz
byBubyB0cnkvY2F0Y2ggaGVyZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4aHIuc2VuZCggKCBzLmhhc0NvbnRlbnQgJiYgcy5kYXRhICkgfHwgbnVsbCApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGlzdGVuZXIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBf
LCBpc0Fib3J0ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeG1sOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGaXJlZm94IHRocm93cyBleGNlcHRpb25zIHdoZW4gYWNjZXNzaW5nIHByb3BlcnRpZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIGFu
IHhociB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cnJlZAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2hlbHBmdWwua25vYnMtZGlhbHMu
Y29tL2luZGV4LnBocC9Db21wb25lbnRfcmV0dXJuZWRfZmFpbHVyZV9jb2RlOl8weDgwMDQwMTEx
XyhOU19FUlJPUl9OT1RfQVZBSUxBQkxFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYXMgbmV2ZXIgY2FsbGVkIGFuZCBpcyBhYm9y
dGVkIG9yIGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8IHhoci5yZWFkeVN0
YXRlID09PSA0ICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGNhbGxlZCBvbmNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sgPSB1bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3Qga2VlcCBhcyBhY3RpdmUgYW55
bW9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggaGFuZGxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlz
dGF0ZWNoYW5nZSA9IGpRdWVyeS5ub29wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4aHJPblVubG9h
ZEFib3J0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgeGhyQ2FsbGJhY2tzWyBo
YW5kbGUgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdz
IGFuIGFib3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpc0Fib3J0ICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWJv
cnQgaXQgbWFudWFsbHkgaWYgbmVlZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhoci5yZWFkeVN0
YXRlICE9PSA0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0geGhy
LnN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNw
b25zZUhlYWRlcnMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcyA9IHt9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeG1sID0geGhyLnJlc3BvbnNlWE1MOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zdHJ1
Y3QgcmVzcG9uc2UgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4bWwgJiYgeG1sLmRvY3VtZW50
RWxlbWVudCAvKiAjNDk1OCAqLyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Vz
LnhtbCA9IHhtbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBy
ZXF1ZXN0aW5nIGJpbmFyeSBkYXRhLCBJRTYtOSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gb24gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHJlc3BvbnNlVGV4dCAoIzEx
NDI2KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCB0aHJvd3Mg
YW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0dXNUZXh0
IGZvciBmYXVsdHkgY3Jvc3MtZG9tYWluIHJlcXVlc3RzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0geGhyLnN0YXR1c1RleHQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBu
b3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGaWx0ZXIgc3RhdHVzIGZvciBub24gc3RhbmRhcmQgYmVoYXZpb3JzCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzIGxvY2FsIGFuZCB3ZSBoYXZlIGRh
dGE6IGFzc3VtZSBhIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChzdWNjZXNzIHdpdGggbm8g
ZGF0YSB3b24ndCBnZXQgbm90aWZpZWQsIHRoYXQncyB0aGUgYmVzdCB3ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY2FuIGRvIGdpdmVuIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhc3RhdHVzICYmIHMuaXNMb2NhbCAmJiAhcy5jcm9zc0RvbWFpbiApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmVzcG9uc2VzLnRleHQgPyAyMDAgOiA0MDQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJRSAtICMxNDUwOiBzb21ldGltZXMgcmV0dXJucyAxMjIzIHdoZW4g
aXQgc2hvdWxkIGJlIDIwNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RhdHVzID09PSAx
MjIzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyMDQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fi
b3J0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBsZXRlKCAtMSwgZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgY29t
cGxldGUgaWYgbmVlZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHJlc3BvbnNlcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoIHN0YXR1cywgc3RhdHVzVGV4dCwg
cmVzcG9uc2VzLCByZXNwb25zZUhlYWRlcnMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhcy5hc3luYyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGlmIHdlJ3JlIGluIHN5bmMgbW9kZSB3ZSBmaXJlIHRoZSBjYWxsYmFjawotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB4aHIu
cmVhZHlTdGF0ZSA9PT0gNCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIChJRTYgJiBJRTcpIGlmIGl0J3MgaW4gY2FjaGUgYW5kIGhhcyBiZWVu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRy
aWV2ZWQgZGlyZWN0bHkgd2UgbmVlZCB0byBmaXJlIHRoZSBjYWxsYmFjawotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggY2FsbGJhY2ss
IDAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0g
Kyt4aHJJZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3RpdmUgeGhycyBjYWxs
YmFja3MgbGlzdCBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGF0dGFjaCB0aGUgdW5sb2FkIGhhbmRsZXIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAheGhyQ2FsbGJhY2tzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrcyA9IHt9OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeSggd2luZG93ICkudW5sb2FkKCB4aHJPblVubG9hZEFib3J0ICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRvIGxp
c3Qgb2YgYWN0aXZlIHhocnMgY2FsbGJhY2tzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrc1sgaGFuZGxlIF0gPSBjYWxs
YmFjazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBjYWxsYmFjazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygwLDEpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotfQotdmFyIGZ4Tm93LCB0aW1lcklkLAotICAgICAgICBy
Znh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKLSAgICAgICAgcmZ4bnVtID0gbmV3
IFJlZ0V4cCggIl4oPzooWy0rXSk9fCkoIiArIGNvcmVfcG51bSArICIpKFthLXolXSopJCIsICJp
IiApLAotICAgICAgICBycnVuID0gL3F1ZXVlSG9va3MkLywKLSAgICAgICAgYW5pbWF0aW9uUHJl
ZmlsdGVycyA9IFsgZGVmYXVsdFByZWZpbHRlciBdLAotICAgICAgICB0d2VlbmVycyA9IHsKLSAg
ICAgICAgICAgICAgICAiKiI6IFtmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZW5kLCB1bml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcmZ4bnVtLmV4ZWMoIHZhbHVlICksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHR3ZWVuLmN1cigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9ICt0YXJnZXQgfHwgMCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhJdGVyYXRpb25zID0gMjA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcGFydHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9ICtw
YXJ0c1syXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCA9IHBhcnRzWzNd
IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21wdXRlIHN0YXJ0aW5nIHZh
bHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdW5pdCAhPT0gInB4IiAm
JiBzdGFydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
dGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWZlciB0aGUgY3VycmVu
dCBwcm9wZXJ0eSwgYmVjYXVzZSB0aGlzIHByb2Nlc3Mgd2lsbCBiZSB0cml2aWFsIGlmIGl0IHVz
ZXMgdGhlIHNhbWUgdW5pdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGYWxsYmFjayB0byBlbmQgb3IgYSBzaW1wbGUgY29uc3RhbnQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0s
IHByb3AsIHRydWUgKSB8fCBlbmQgfHwgMTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50
aWwgd2UgZ2V0ICpzb21ldGhpbmcqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBVc2UgYSBzdHJpbmcgZm9yIGRvdWJsaW5nIGZhY3RvciBzbyB3ZSBk
b24ndCBhY2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvdwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBzY2FsZSB8fCAi
LjUiOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBBZGp1c3QgYW5kIGFwcGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydCA9IHN0YXJ0IC8gc2NhbGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHByb3As
IHN0YXJ0ICsgdW5pdCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVXBkYXRlIHNjYWxlLCB0b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3Vy
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmQgYnJlYWtp
bmcgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3Zl
IGp1c3QgaGFkIGVub3VnaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gd2hpbGUgKCBzY2FsZSAhPT0gKHNjYWxlID0gdHdlZW4uY3VyKCkgLyB0YXJnZXQpICYmIHNj
YWxlICE9PSAxICYmIC0tbWF4SXRlcmF0aW9ucyApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW4udW5pdCA9
IHVuaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gc3Rh
cnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgKz0vLT0gdG9rZW4g
d2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0aXZlIGFuaW1hdGlvbgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0d2Vlbi5lbmQgPSBwYXJ0c1sxXSA/IHN0YXJ0ICsgKCBw
YXJ0c1sxXSArIDEgKSAqIGVuZCA6IGVuZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0d2VlbjsKLSAgICAgICAgICAgICAgICB9XQot
ICAgICAgICB9OwotCi0vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1
biBzeW5jaHJvbm91c2x5Ci1mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHsKLSAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBmeE5vdyA9IHVuZGVmaW5lZDsKLSAg
ICAgICAgfSwgMCApOwotICAgICAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5ub3coKSApOwot
fQotCi1mdW5jdGlvbiBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMgKSB7Ci0gICAgICAg
IGpRdWVyeS5lYWNoKCBwcm9wcywgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkgewotICAgICAgICAg
ICAgICAgIHZhciBjb2xsZWN0aW9uID0gKCB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0
KCB0d2VlbmVyc1sgIioiIF0gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOwotICAg
ICAgICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9u
LCBwcm9wLCB2YWx1ZSApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0pOwotfQotCi1mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRp
ZXMsIG9wdGlvbnMgKSB7Ci0gICAgICAgIHZhciByZXN1bHQsCi0gICAgICAgICAgICAgICAgaW5k
ZXggPSAwLAotICAgICAgICAgICAgICAgIHR3ZWVuZXJJbmRleCA9IDAsCi0gICAgICAgICAgICAg
ICAgbGVuZ3RoID0gYW5pbWF0aW9uUHJlZmlsdGVycy5sZW5ndGgsCi0gICAgICAgICAgICAgICAg
ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNl
bGVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGljay5lbGVtOwotICAgICAg
ICAgICAgICAgIH0pLAotICAgICAgICAgICAgICAgIHRpY2sgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IE1hdGgubWF4
KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRp
bWUgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJjaGFpYyBjcmFzaCBi
dWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIDEgLSAoIDAuNSB8fCAwICkgKCMxMjQ5NykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5k
dXJhdGlvbiB8fCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50ID0g
MSAtIHRlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gMCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5s
ZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGgg
OyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24u
dHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBb
IGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0pOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVX
aXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9LAotICAgICAgICAgICAgICAgIGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2Uoewot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbTogZWxlbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLAotICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgeyBzcGVjaWFsRWFzaW5nOiB7
fSB9LCBvcHRpb25zICksCi0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFByb3BlcnRp
ZXM6IHByb3BlcnRpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbE9wdGlvbnM6
IG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWU6IGZ4Tm93IHx8IGNy
ZWF0ZUZ4Tm93KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5k
dXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuczogW10sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCwgZWFzaW5nICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHdlZW4gPSBqUXVlcnkuVHdl
ZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5n
WyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR3ZWVuOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGFyZSBnb2luZyB0byB0
aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVucwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGdvdG9FbmQgPyBh
bmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4o
IDEgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJh
bWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCByZWplY3QK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBnb3RvRW5kICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBl
bGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0pLAotICAgICAgICAgICAgICAgIHByb3BzID0gYW5pbWF0aW9uLnByb3BzOwotCi0g
ICAgICAgIHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7
Ci0KLSAgICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gYW5pbWF0aW9uUHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmlt
YXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApOwotICAgICAgICAgICAgICAgIGlm
ICggcmVzdWx0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjcmVhdGVUd2VlbnMoIGFuaW1h
dGlvbiwgcHJvcHMgKTsKLQotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRp
b24ub3B0cy5zdGFydCApICkgewotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0
LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOwotICAgICAgICB9Ci0KLSAgICAgICAgalF1ZXJ5LmZ4
LnRpbWVyKAotICAgICAgICAgICAgICAgIGpRdWVyeS5leHRlbmQoIHRpY2ssIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFuaW06IGFuaW1hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW06IGVsZW0KLSAgICAgICAgICAgICAgICB9KQotICAgICAgICApOwotCi0gICAgICAgIC8vIGF0
dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCi0gICAgICAgIHJldHVybiBhbmltYXRpb24ucHJv
Z3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzICkKLSAgICAgICAgICAgICAgICAuZG9uZSgg
YW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQotICAgICAgICAg
ICAgICAgIC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsICkKLSAgICAgICAgICAgICAgICAuYWx3
YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTsKLX0KLQotZnVuY3Rpb24gcHJvcEZpbHRlcigg
cHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7Ci0gICAgICAgIHZhciBpbmRleCwgbmFtZSwgZWFzaW5n
LCB2YWx1ZSwgaG9va3M7Ci0KLSAgICAgICAgLy8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFu
ZCBleHBhbmQgY3NzSG9vayBwYXNzCi0gICAgICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgewot
ICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApOwotICAgICAg
ICAgICAgICAgIGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTsKLSAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOwotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lmlz
QXJyYXkoIHZhbHVlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlYXNpbmcgPSB2YWx1
ZVsgMSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9
IHZhbHVlWyAwIF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBp
bmRleCAhPT0gbmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzWyBuYW1lIF0g
PSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgaW5kZXggXTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NI
b29rc1sgbmFtZSBdOwotICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgImV4cGFuZCIgaW4g
aG9va3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGhvb2tzLmV4cGFuZCgg
dmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgbmFtZSBdOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29u
dCBvdmVyd3JpdGUga2V5cyBhbHJlYWR5IHByZXNlbnQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbHNvIC0gcmV1c2luZyAnaW5kZXgnIGZyb20gYWJvdmUgYmVjYXVzZSB3ZSBoYXZlIHRo
ZSBjb3JyZWN0ICJuYW1lIgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaW5kZXggaW4g
dmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISggaW5kZXgg
aW4gcHJvcHMgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbEVh
c2luZ1sgbmFtZSBdID0gZWFzaW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotfQot
Ci1qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7Ci0KLSAgICAg
ICAgdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwcm9wcyApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2sgPSBwcm9wczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzID0g
WyAiKiIgXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcHMgPSBwcm9wcy5zcGxpdCgiICIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhciBwcm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAwLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOwotCi0gICAgICAg
ICAgICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wID0gcHJvcHNbIGluZGV4IF07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0d2VlbmVyc1sgcHJvcCBdID0gdHdlZW5lcnNbIHByb3AgXSB8fCBbXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcHJlZmlsdGVyOiBmdW5jdGlv
biggY2FsbGJhY2ssIHByZXBlbmQgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBwcmVwZW5kICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUHJlZmlsdGVycy51bnNoaWZ0KCBj
YWxsYmFjayApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhbmltYXRpb25QcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICB9Ci19KTsKLQotZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwg
cHJvcHMsIG9wdHMgKSB7Ci0gICAgICAgIHZhciBpbmRleCwgcHJvcCwgdmFsdWUsIGxlbmd0aCwg
ZGF0YVNob3csIHRvZ2dsZSwgdHdlZW4sIGhvb2tzLCBvbGRmaXJlLAotICAgICAgICAgICAgICAg
IGFuaW0gPSB0aGlzLAotICAgICAgICAgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZSwKLSAgICAg
ICAgICAgICAgICBvcmlnID0ge30sCi0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IFtdLAotICAg
ICAgICAgICAgICAgIGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW4oIGVsZW0gKTsK
LQotICAgICAgICAvLyBoYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzCi0gICAgICAgIGlmICgg
IW9wdHMucXVldWUgKSB7Ci0gICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9v
a3MoIGVsZW0sICJmeCIgKTsKLSAgICAgICAgICAgICAgICBpZiAoIGhvb2tzLnVucXVldWVkID09
IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBob29rcy51bnF1ZXVlZCA9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkZmlyZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBob29rcy51bnF1ZXVlZCsrOwotCi0gICAg
ICAgICAgICAgICAgYW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBkb2luZyB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgY29tcGxldGUgaGFuZGxlciB3
aWxsIGJlIGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoaXMgY29t
cGxldGVzCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MudW5xdWV1ZWQtLTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCAiZngi
ICkubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhv
b2tzLmVtcHR5LmZpcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBoZWlnaHQvd2lkdGggb3ZlcmZsb3cgcGFzcwotICAgICAgICBpZiAoIGVs
ZW0ubm9kZVR5cGUgPT09IDEgJiYgKCAiaGVpZ2h0IiBpbiBwcm9wcyB8fCAid2lkdGgiIGluIHBy
b3BzICkgKSB7Ci0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVh
a3Mgb3V0Ci0gICAgICAgICAgICAgICAgLy8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0
ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdAotICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgb3Zl
cmZsb3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZAotICAgICAgICAgICAgICAgIC8vIG92
ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCi0gICAgICAgICAgICAgICAgb3B0cy5v
dmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZs
b3dZIF07Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxp
bmUtYmxvY2sgZm9yIGhlaWdodC93aWR0aAotICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbnMg
b24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQK
LSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAi
aW5saW5lIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBl
bGVtLCAiZmxvYXQiICkgPT09ICJub25lIiApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaW5saW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBpbmxpbmUtYmxvY2s7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBibG9jay1sZXZlbCBlbGVtZW50cyBuZWVkIHRvIGJlIGlubGluZSB3
aXRoIGxheW91dAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
aW5saW5lQmxvY2tOZWVkc0xheW91dCB8fCBjc3NfZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5h
bWUgKSA9PT0gImlubGluZSIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuem9vbSA9IDE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCBvcHRzLm92ZXJmbG93ICkgewotICAgICAgICAgICAgICAgIHN0eWxl
Lm92ZXJmbG93ID0gImhpZGRlbiI7Ci0gICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBv
cnQuc2hyaW5rV3JhcEJsb2NrcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW0uZG9u
ZShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUub3Zl
cmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLQotICAgICAgICAvLyBzaG93L2hpZGUgcGFzcwotICAgICAgICBmb3IgKCBpbmRleCBpbiBw
cm9wcyApIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOwotICAgICAg
ICAgICAgICAgIGlmICggcmZ4dHlwZXMuZXhlYyggdmFsdWUgKSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gInRvZ2dsZSI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/ICJoaWRlIiA6ICJzaG93IiApICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQucHVzaCggaW5kZXgg
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBsZW5ndGggPSBoYW5k
bGVkLmxlbmd0aDsKLSAgICAgICAgaWYgKCBsZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgZGF0
YVNob3cgPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJmeHNob3ciICkgfHwgalF1ZXJ5Ll9kYXRhKCBl
bGVtLCAiZnhzaG93Iiwge30gKTsKLSAgICAgICAgICAgICAgICBpZiAoICJoaWRkZW4iIGluIGRh
dGFTaG93ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuID0gZGF0YVNob3cuaGlk
ZGVuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHN0b3JlIHN0YXRl
IGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVyc2UiCi0g
ICAgICAgICAgICAgICAgaWYgKCB0b2dnbGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
YXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIGhpZGRlbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggZWxl
bSApLnNob3coKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkoIGVsZW0gKS5oaWRlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3A7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgImZ4c2hvdyIsIHRydWUgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoIHByb3AgaW4gb3JpZyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICBmb3IgKCBpbmRleCA9IDAgOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0gaGFuZGxlZFsgaW5kZXggXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHR3ZWVuID0gYW5pbS5jcmVhdGVUd2VlbiggcHJvcCwgaGlkZGVuID8g
ZGF0YVNob3dbIHByb3AgXSA6IDAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdbIHBy
b3AgXSA9IGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU2hvd1sgcHJvcCBdID0gdHdlZW4u
c3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGlkZGVuICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuLmVuZCA9IHR3ZWVu
LnN0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuLnN0
YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8fCBwcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci19Ci0KLWZ1bmN0aW9uIFR3ZWVuKCBlbGVt
LCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUd2Vl
bi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTsKLX0K
LWpRdWVyeS5Ud2VlbiA9IFR3ZWVuOwotCi1Ud2Vlbi5wcm90b3R5cGUgPSB7Ci0gICAgICAgIGNv
bnN0cnVjdG9yOiBUd2VlbiwKLSAgICAgICAgaW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMs
IHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkgewotICAgICAgICAgICAgICAgIHRoaXMuZWxlbSA9
IGVsZW07Ci0gICAgICAgICAgICAgICAgdGhpcy5wcm9wID0gcHJvcDsKLSAgICAgICAgICAgICAg
ICB0aGlzLmVhc2luZyA9IGVhc2luZyB8fCAic3dpbmciOwotICAgICAgICAgICAgICAgIHRoaXMu
b3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgICAgICAgICAgICAgdGhpcy5zdGFydCA9IHRoaXMubm93
ID0gdGhpcy5jdXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IGVuZDsKLSAgICAgICAg
ICAgICAgICB0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8g
IiIgOiAicHgiICk7Ci0gICAgICAgIH0sCi0gICAgICAgIGN1cjogZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTsKLQot
ICAgICAgICAgICAgICAgIHJldHVybiBob29rcyAmJiBob29rcy5nZXQgPwotICAgICAgICAgICAg
ICAgICAgICAgICAgaG9va3MuZ2V0KCB0aGlzICkgOgotICAgICAgICAgICAgICAgICAgICAgICAg
VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOwotICAgICAgICB9LAotICAgICAg
ICBydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkgewotICAgICAgICAgICAgICAgIHZhciBlYXNlZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnBy
b3AgXTsKLQotICAgICAgICAgICAgICAgIGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdb
IHRoaXMuZWFzaW5nIF0oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQs
IHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJh
dGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXMubm93ID0gKCB0aGlzLmVuZCAt
IHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDsKLQotICAgICAgICAgICAgICAgIGlm
ICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9w
dGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBob29rcy5zZXQoIHRoaXMgKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZh
dWx0LnNldCggdGhpcyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfQotfTsKLQotVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBl
ID0gVHdlZW4ucHJvdG90eXBlOwotCi1Ud2Vlbi5wcm9wSG9va3MgPSB7Ci0gICAgICAgIF9kZWZh
dWx0OiB7Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICghdHdlZW4uZWxlbS5zdHlsZSB8fCB0d2Vlbi5lbGVtLnN0eWxlWyB0
d2Vlbi5wcm9wIF0gPT0gbnVsbCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgYW55IHZhbHVlIGFzIGEg
NHRoIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5n
IGlmIHRoZSBwYXJzZSBmYWlscwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28sIHNpbXBs
ZSB2YWx1ZXMgc3VjaCBhcyAiMTBweCIgYXJlIHBhcnNlZCB0byBGbG9hdC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgInJvdGF0ZSgxcmFkKSIgYXJl
IHJldHVybmVkIGFzIGlzLgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0galF1ZXJ5
LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgZmFsc2UsICIiICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kICJhdXRvIiBh
cmUgY29udmVydGVkIHRvIDAuCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJlc3Vs
dCB8fCByZXN1bHQgPT09ICJhdXRvIiA/IDAgOiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0IC0gdXNlIGNzc0hvb2sg
aWYgaXRzIHRoZXJlIC0gdXNlIC5zdHlsZSBpZiBpdHMKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0g
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5meC5zdGVwWyB0d2Vl
bi5wcm9wIF0oIHR3ZWVuICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0
d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0
d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggdHdlZW4u
ZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdl
ZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotfTsKLQotLy8gUmVtb3ZlIGluIDIu
MCAtIHRoaXMgc3VwcG9ydHMgSUU4J3MgcGFuaWMgYmFzZWQgYXBwcm9hY2gKLS8vIHRvIHNldHRp
bmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2RlcwotCi1Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xs
VG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7Ci0gICAgICAgIHNldDogZnVuY3Rp
b24oIHR3ZWVuICkgewotICAgICAgICAgICAgICAgIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAm
JiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0d2Vl
bi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9Ci19OwotCi1qUXVlcnkuZWFjaChbICJ0b2dnbGUiLCAic2hvdyIsICJoaWRlIiBdLCBm
dW5jdGlvbiggaSwgbmFtZSApIHsKLSAgICAgICAgdmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1l
IF07Ci0gICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrICkgewotICAgICAgICAgICAgICAgIHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5
cGVvZiBzcGVlZCA9PT0gImJvb2xlYW4iIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBz
cGVjaWFsIGNoZWNrIGZvciAudG9nZ2xlKCBoYW5kbGVyLCBoYW5kbGVyLCAuLi4gKQotICAgICAg
ICAgICAgICAgICAgICAgICAgKCAhaSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBq
UXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
c3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFj
ayApOwotICAgICAgICB9OwotfSk7Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgICAgICBmYWRl
VG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBzaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5
IHRvIDAKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3Nz
KCAib3BhY2l0eSIsIDAgKS5zaG93KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5p
bWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAuZW5k
KCkuYW5pbWF0ZSh7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7Ci0g
ICAgICAgIH0sCi0gICAgICAgIGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5n
LCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAgICB2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0
eU9iamVjdCggcHJvcCApLAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0YWxsID0galF1ZXJ5
LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5n
IHdvbid0IGJlIGxvc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFuaW0g
PSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtcHR5IGFuaW1hdGlvbnMgcmVz
b2x2ZSBpbW1lZGlhdGVseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVt
cHR5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW0uc3Rv
cCggdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5IHx8IG9wdGFs
bC5xdWV1ZSA9PT0gZmFsc2UgPwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lYWNoKCBk
b0FuaW1hdGlvbiApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUoIG9wdGFs
bC5xdWV1ZSwgZG9BbmltYXRpb24gKTsKLSAgICAgICAgfSwKLSAgICAgICAgc3RvcDogZnVuY3Rp
b24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0
b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBzdG9wID0gaG9va3Muc3RvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBob29r
cy5zdG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCggZ290b0VuZCApOwotICAgICAg
ICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3Ry
aW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJRdWV1ZSA9IHR5cGU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXF1ZXVlID0gdHJ1ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1
ZUhvb2tzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJzID0galF1ZXJ5
LnRpbWVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5f
ZGF0YSggdGhpcyApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGluZGV4ICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0
YVsgaW5kZXggXS5zdG9wICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpbmRleCBpbiBkYXRhICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBp
bmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGltZXJzWyBpbmRleCBd
LmVsZW0gPT09IHRoaXMgJiYgKHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUg
PT09IHR5cGUpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXF1ZXVlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYg
dGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNo
IHdpbGwgZGVxdWV1ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IG9ubHkgaWYgdGhl
eSB3ZXJlIGdvdG9FbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVxdWV1ZSB8fCAh
Z290b0VuZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVl
dWUoIHRoaXMsIHR5cGUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgfQotfSk7Ci0KLS8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3Jl
YXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uCi1mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdp
ZHRoICkgewotICAgICAgICB2YXIgd2hpY2gsCi0gICAgICAgICAgICAgICAgYXR0cnMgPSB7IGhl
aWdodDogdHlwZSB9LAotICAgICAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAgIC8vIGlmIHdl
IGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVl
cywKLSAgICAgICAgLy8gaWYgd2UgZG9uJ3QgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAy
IHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodAotICAgICAgICBpbmNsdWRlV2lkdGggPSBpbmNs
dWRlV2lkdGg/IDEgOiAwOwotICAgICAgICBmb3IoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRl
V2lkdGggKSB7Ci0gICAgICAgICAgICAgICAgd2hpY2ggPSBjc3NFeHBhbmRbIGkgXTsKLSAgICAg
ICAgICAgICAgICBhdHRyc1sgIm1hcmdpbiIgKyB3aGljaCBdID0gYXR0cnNbICJwYWRkaW5nIiAr
IHdoaWNoIF0gPSB0eXBlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBpbmNsdWRlV2lkdGgg
KSB7Ci0gICAgICAgICAgICAgICAgYXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBhdHRyczsKLX0KLQotLy8gR2VuZXJhdGUgc2hv
cnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9ucwotalF1ZXJ5LmVhY2goewotICAgICAgICBzbGlk
ZURvd246IGdlbkZ4KCJzaG93IiksCi0gICAgICAgIHNsaWRlVXA6IGdlbkZ4KCJoaWRlIiksCi0g
ICAgICAgIHNsaWRlVG9nZ2xlOiBnZW5GeCgidG9nZ2xlIiksCi0gICAgICAgIGZhZGVJbjogeyBv
cGFjaXR5OiAic2hvdyIgfSwKLSAgICAgICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwK
LSAgICAgICAgZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiAidG9nZ2xlIiB9Ci19LCBmdW5jdGlvbigg
bmFtZSwgcHJvcHMgKSB7Ci0gICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNw
ZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFu
aW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwotICAgICAgICB9OwotfSk7
Ci0KLWpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHsKLSAgICAg
ICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnku
ZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKLSAgICAgICAgICAgICAgICBjb21wbGV0ZTogZm4gfHwg
IWZuICYmIGVhc2luZyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rp
b24oIHNwZWVkICkgJiYgc3BlZWQsCi0gICAgICAgICAgICAgICAgZHVyYXRpb246IHNwZWVkLAot
ICAgICAgICAgICAgICAgIGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5
LmlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZwotICAgICAgICB9OwotCi0gICAgICAgIG9w
dC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0g
Im51bWJlciIgPyBvcHQuZHVyYXRpb24gOgotICAgICAgICAgICAgICAgIG9wdC5kdXJhdGlvbiBp
biBqUXVlcnkuZnguc3BlZWRzID8galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBq
UXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0OwotCi0gICAgICAgIC8vIG5vcm1hbGl6ZSBvcHQucXVl
dWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+ICJmeCIKLSAgICAgICAgaWYgKCBvcHQucXVldWUg
PT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7Ci0gICAgICAgICAgICAgICAgb3B0LnF1
ZXVlID0gImZ4IjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFF1ZXVlaW5nCi0gICAgICAgIG9w
dC5vbGQgPSBvcHQuY29tcGxldGU7Ci0KLSAgICAgICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgb3B0Lm9sZC5jYWxsKCB0aGlzICk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBvcHQucXVldWUgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHJldHVybiBvcHQ7Ci19OwotCi1q
UXVlcnkuZWFzaW5nID0gewotICAgICAgICBsaW5lYXI6IGZ1bmN0aW9uKCBwICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9LAotICAgICAgICBzd2luZzogZnVuY3Rpb24o
IHAgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAuNSAtIE1hdGguY29zKCBwKk1hdGguUEkg
KSAvIDI7Ci0gICAgICAgIH0KLX07Ci0KLWpRdWVyeS50aW1lcnMgPSBbXTsKLWpRdWVyeS5meCA9
IFR3ZWVuLnByb3RvdHlwZS5pbml0OwotalF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgdmFyIHRpbWVyLAotICAgICAgICAgICAgICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnMs
Ci0gICAgICAgICAgICAgICAgaSA9IDA7Ci0KLSAgICAgICAgZnhOb3cgPSBqUXVlcnkubm93KCk7
Ci0KLSAgICAgICAgZm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkgewotICAgICAgICAg
ICAgICAgIHRpbWVyID0gdGltZXJzWyBpIF07Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2tzIHRo
ZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCi0gICAgICAgICAgICAgICAgaWYg
KCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoICF0aW1lcnMubGVuZ3RoICkgewotICAgICAgICAgICAgICAg
IGpRdWVyeS5meC5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZnhOb3cgPSB1bmRlZmluZWQ7
Ci19OwotCi1qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7Ci0gICAgICAgIGlm
ICggdGltZXIoKSAmJiBqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICkgJiYgIXRpbWVySWQgKSB7
Ci0gICAgICAgICAgICAgICAgdGltZXJJZCA9IHNldEludGVydmFsKCBqUXVlcnkuZngudGljaywg
alF1ZXJ5LmZ4LmludGVydmFsICk7Ci0gICAgICAgIH0KLX07Ci0KLWpRdWVyeS5meC5pbnRlcnZh
bCA9IDEzOwotCi1qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkgewotICAgICAgICBjbGVhcklu
dGVydmFsKCB0aW1lcklkICk7Ci0gICAgICAgIHRpbWVySWQgPSBudWxsOwotfTsKLQotalF1ZXJ5
LmZ4LnNwZWVkcyA9IHsKLSAgICAgICAgc2xvdzogNjAwLAotICAgICAgICBmYXN0OiAyMDAsCi0g
ICAgICAgIC8vIERlZmF1bHQgc3BlZWQKLSAgICAgICAgX2RlZmF1bHQ6IDQwMAotfTsKLQotLy8g
QmFjayBDb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnQKLWpRdWVyeS5meC5zdGVwID0ge307Ci0K
LWlmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKLSAgICAgICAgalF1
ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKLSAgICAg
ICAgICAgICAgICB9KS5sZW5ndGg7Ci0gICAgICAgIH07Ci19Ci12YXIgcnJvb3QgPSAvXig/OmJv
ZHl8aHRtbCkkL2k7Ci0KLWpRdWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsK
LSAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgIHJldHVy
biBvcHRpb25zID09PSB1bmRlZmluZWQgPwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyA6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlz
LCBvcHRpb25zLCBpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciBkb2NFbGVtLCBib2R5LCB3aW4sIGNsaWVudFRvcCwgY2xpZW50TGVmdCwg
c2Nyb2xsVG9wLCBzY3JvbGxMZWZ0LAotICAgICAgICAgICAgICAgIGJveCA9IHsgdG9wOiAwLCBs
ZWZ0OiAwIH0sCi0gICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXSwKLSAgICAgICAgICAg
ICAgICBkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDsKLQotICAgICAgICBpZiAoICFk
b2MgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCAoYm9keSA9IGRvYy5ib2R5KSA9PT0gZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5Lm9mZnNldC5ib2R5T2Zmc2V0KCBlbGVtICk7Ci0gICAgICAgIH0KLQotICAgICAgICBk
b2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgaXQn
cyBub3QgYSBkaXNjb25uZWN0ZWQgRE9NIG5vZGUKLSAgICAgICAgaWYgKCAhalF1ZXJ5LmNvbnRh
aW5zKCBkb2NFbGVtLCBlbGVtICkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJveDsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgZ0JDUiwganVzdCB1c2UgMCww
IHJhdGhlciB0aGFuIGVycm9yCi0gICAgICAgIC8vIEJsYWNrQmVycnkgNSwgaU9TIDMgKG9yaWdp
bmFsIGlQaG9uZSkKLSAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QgIT09ICJ1bmRlZmluZWQiICkgewotICAgICAgICAgICAgICAgIGJveCA9IGVsZW0uZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgd2luID0gZ2V0V2luZG93KCBk
b2MgKTsKLSAgICAgICAgY2xpZW50VG9wICA9IGRvY0VsZW0uY2xpZW50VG9wICB8fCBib2R5LmNs
aWVudFRvcCAgfHwgMDsKLSAgICAgICAgY2xpZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVmdCB8
fCBib2R5LmNsaWVudExlZnQgfHwgMDsKLSAgICAgICAgc2Nyb2xsVG9wICA9IHdpbi5wYWdlWU9m
ZnNldCB8fCBkb2NFbGVtLnNjcm9sbFRvcDsKLSAgICAgICAgc2Nyb2xsTGVmdCA9IHdpbi5wYWdl
WE9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbExlZnQ7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgdG9wOiBib3gudG9wICArIHNjcm9sbFRvcCAgLSBjbGllbnRUb3AsCi0gICAgICAg
ICAgICAgICAgbGVmdDogYm94LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdAotICAgICAg
ICB9OwotfTsKLQotalF1ZXJ5Lm9mZnNldCA9IHsKLQotICAgICAgICBib2R5T2Zmc2V0OiBmdW5j
dGlvbiggYm9keSApIHsKLSAgICAgICAgICAgICAgICB2YXIgdG9wID0gYm9keS5vZmZzZXRUb3As
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gYm9keS5vZmZzZXRMZWZ0OwotCi0gICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9k
eU9mZnNldCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gcGFyc2VGbG9hdCgg
alF1ZXJ5LmNzcyhib2R5LCAibWFyZ2luVG9wIikgKSB8fCAwOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5MZWZ0Iikg
KSB8fCAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB7IHRv
cDogdG9wLCBsZWZ0OiBsZWZ0IH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0T2Zmc2V0OiBm
dW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHsKLSAgICAgICAgICAgICAgICB2YXIgcG9zaXRp
b24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBzZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0
YXRpYyBlbGVtCi0gICAgICAgICAgICAgICAgaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZl
IjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgY3VyRWxlbSA9IGpR
dWVyeSggZWxlbSApLAotICAgICAgICAgICAgICAgICAgICAgICAgY3VyT2Zmc2V0ID0gY3VyRWxl
bS5vZmZzZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ckNTU1RvcCA9IGpRdWVyeS5j
c3MoIGVsZW0sICJ0b3AiICksCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJDU1NMZWZ0ID0g
alF1ZXJ5LmNzcyggZWxlbSwgImxlZnQiICksCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxj
dWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24gPT09
ICJmaXhlZCIgKSAmJiBqUXVlcnkuaW5BcnJheSgiYXV0byIsIFtjdXJDU1NUb3AsIGN1ckNTU0xl
ZnRdKSA+IC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMgPSB7fSwgY3VyUG9zaXRp
b24gPSB7fSwgY3VyVG9wLCBjdXJMZWZ0OwotCi0gICAgICAgICAgICAgICAgLy8gbmVlZCB0byBi
ZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIgdG9wIG9yIGxlZnQgaXMgYXV0
byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCi0gICAgICAgICAgICAg
ICAgaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1
clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGVm
dCA9IGN1clBvc2l0aW9uLmxlZnQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCAp
IHx8IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggb3B0aW9ucyApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50
b3AgKSArIGN1clRvcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBv
cHRpb25zLmxlZnQgIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmxl
ZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0OwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9w
cyApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
dXJFbGVtLmNzcyggcHJvcHMgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLX07Ci0K
LQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0KLSAgICAgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIGlmICggIXRoaXNbMF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGVsZW0g
PSB0aGlzWzBdLAotCi0gICAgICAgICAgICAgICAgLy8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQK
LSAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpLAotCi0g
ICAgICAgICAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cwotICAgICAgICAgICAgICAgIG9m
ZnNldCAgICAgICA9IHRoaXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0
ID0gcnJvb3QudGVzdChvZmZzZXRQYXJlbnRbMF0ubm9kZU5hbWUpID8geyB0b3A6IDAsIGxlZnQ6
IDAgfSA6IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKLQotICAgICAgICAgICAgICAgIC8vIFN1YnRy
YWN0IGVsZW1lbnQgbWFyZ2lucwotICAgICAgICAgICAgICAgIC8vIG5vdGU6IHdoZW4gYW4gZWxl
bWVudCBoYXMgbWFyZ2luOiBhdXRvIHRoZSBvZmZzZXRMZWZ0IGFuZCBtYXJnaW5MZWZ0Ci0gICAg
ICAgICAgICAgICAgLy8gYXJlIHRoZSBzYW1lIGluIFNhZmFyaSBjYXVzaW5nIG9mZnNldC5sZWZ0
IHRvIGluY29ycmVjdGx5IGJlIDAKLSAgICAgICAgICAgICAgICBvZmZzZXQudG9wICAtPSBwYXJz
ZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5Ub3AiKSApIHx8IDA7Ci0gICAgICAgICAg
ICAgICAgb2Zmc2V0LmxlZnQgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAibWFyZ2lu
TGVmdCIpICkgfHwgMDsKLQotICAgICAgICAgICAgICAgIC8vIEFkZCBvZmZzZXRQYXJlbnQgYm9y
ZGVycwotICAgICAgICAgICAgICAgIHBhcmVudE9mZnNldC50b3AgICs9IHBhcnNlRmxvYXQoIGpR
dWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVyVG9wV2lkdGgiKSApIHx8IDA7Ci0gICAg
ICAgICAgICAgICAgcGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhv
ZmZzZXRQYXJlbnRbMF0sICJib3JkZXJMZWZ0V2lkdGgiKSApIHx8IDA7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTdWJ0cmFjdCB0aGUgdHdvIG9mZnNldHMKLSAgICAgICAgICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRPZmZz
ZXQudG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJl
bnRPZmZzZXQubGVmdAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5t
YXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0UGFyZW50
ID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJlbnQu
bm9kZU5hbWUpICYmIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0gInN0
YXRpYyIpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQg
PSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5i
b2R5OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci19KTsKLQotCi0vLyBDcmVhdGUg
c2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHMKLWpRdWVyeS5lYWNoKCB7c2Nyb2xsTGVm
dDogInBhZ2VYT2Zmc2V0Iiwgc2Nyb2xsVG9wOiAicGFnZVlPZmZzZXQifSwgZnVuY3Rpb24oIG1l
dGhvZCwgcHJvcCApIHsKLSAgICAgICAgdmFyIHRvcCA9IC9ZLy50ZXN0KCBwcm9wICk7Ci0KLSAg
ICAgICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2Qs
IHZhbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aW4gPSBnZXRXaW5kb3coIGVs
ZW0gKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbiA/IChwcm9wIGlu
IHdpbikgPyB3aW5bIHByb3AgXSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgbWV0aG9kIF0gOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG1ldGhvZCBdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHdpbiApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luLnNjcm9sbFRvKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiAp
LnNjcm9sbExlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXSA9IHZhbDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCBtZXRob2QsIHZhbCwgYXJn
dW1lbnRzLmxlbmd0aCwgbnVsbCApOwotICAgICAgICB9OwotfSk7Ci0KLWZ1bmN0aW9uIGdldFdp
bmRvdyggZWxlbSApIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8K
LSAgICAgICAgICAgICAgICBlbGVtIDoKLSAgICAgICAgICAgICAgICBlbGVtLm5vZGVUeXBlID09
PSA5ID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZGVmYXVsdFZpZXcgfHwgZWxlbS5w
YXJlbnRXaW5kb3cgOgotICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2U7Ci19Ci0vLyBDcmVh
dGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFu
ZCBvdXRlcldpZHRoIG1ldGhvZHMKLWpRdWVyeS5lYWNoKCB7IEhlaWdodDogImhlaWdodCIsIFdp
ZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkgewotICAgICAgICBqUXVlcnku
ZWFjaCggeyBwYWRkaW5nOiAiaW5uZXIiICsgbmFtZSwgY29udGVudDogdHlwZSwgIiI6ICJvdXRl
ciIgKyBuYW1lIH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkgewotICAgICAg
ICAgICAgICAgIC8vIG1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aAot
ICAgICAgICAgICAgICAgIGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4s
IHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYWluYWJsZSA9IGFyZ3Vt
ZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xl
YW4iICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZGVmYXVsdEV4
dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gIm1hcmdpbiIgOiAi
Ym9yZGVyIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2Vz
cyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZG9jOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQXMgb2YgNS84LzIwMTIgdGhpcyB3aWxsIHlpZWxkIGlu
Y29ycmVjdCByZXN1bHRzIGZvciBNb2JpbGUgU2FmYXJpLCBidXQgdGhlcmUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpc24ndCBhIHdob2xlIGxvdCB3ZSBjYW4g
ZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1c3Npb246Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2px
dWVyeS9qcXVlcnkvcHVsbC83NjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGllbnQiICsgbmFt
ZSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gZWxlbS5kb2N1bWVu
dEVsZW1lbnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBF
aXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xp
ZW50W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZlciBpcyBncmVhdGVzdAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuZm9ydHVuYXRlbHksIHRoaXMgY2F1c2VzIGJ1
ZyAjMzgzOCBpbiBJRTYvOCBvbmx5LCBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIGdvb2QsIHNt
YWxsIHdheSB0byBmaXggaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE1hdGgubWF4KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9jWyAic2Nyb2xsIiAr
IG5hbWUgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0sIGRvY1sgIm9mZnNldCIgKyBuYW1lIF0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NbICJjbGll
bnQiICsgbmFtZSBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBl
bGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgdmFs
dWUsIGV4dHJhICkgOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4
dHJhICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJn
aW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSwgbnVsbCApOwotICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0pOwotfSk7Ci0vLyBFeHBvc2UgalF1ZXJ5IHRvIHRoZSBnbG9iYWwgb2JqZWN0Ci13
aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7Ci0KLS8vIEV4cG9zZSBqUXVlcnkgYXMg
YW4gQU1EIG1vZHVsZSwgYnV0IG9ubHkgZm9yIEFNRCBsb2FkZXJzIHRoYXQKLS8vIHVuZGVyc3Rh
bmQgdGhlIGlzc3VlcyB3aXRoIGxvYWRpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgalF1ZXJ5Ci0v
LyBpbiBhIHBhZ2UgdGhhdCBhbGwgbWlnaHQgY2FsbCBkZWZpbmUoKS4gVGhlIGxvYWRlciB3aWxs
IGluZGljYXRlCi0vLyB0aGV5IGhhdmUgc3BlY2lhbCBhbGxvd2FuY2VzIGZvciBtdWx0aXBsZSBq
UXVlcnkgdmVyc2lvbnMgYnkKLS8vIHNwZWNpZnlpbmcgZGVmaW5lLmFtZC5qUXVlcnkgPSB0cnVl
LiBSZWdpc3RlciBhcyBhIG5hbWVkIG1vZHVsZSwKLS8vIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29u
Y2F0ZW5hdGVkIHdpdGggb3RoZXIgZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwKLS8vIGJ1dCBu
b3QgdXNlIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXQgdW5kZXJzdGFuZHMgYW5v
bnltb3VzCi0vLyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJv
YnVzdCB3YXkgdG8gcmVnaXN0ZXIuCi0vLyBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVz
ZSBBTUQgbW9kdWxlIG5hbWVzIGFyZSBkZXJpdmVkIGZyb20KLS8vIGZpbGUgbmFtZXMsIGFuZCBq
UXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlIGZpbGUgbmFtZS4KLS8v
IERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1
bGUgd2FudHMgdG8gY2FsbAotLy8gbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBq
UXVlcnksIGl0IHdpbGwgd29yay4KLWlmICggdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAm
JiBkZWZpbmUuYW1kICYmIGRlZmluZS5hbWQualF1ZXJ5ICkgewotICAgICAgICBkZWZpbmUoICJq
cXVlcnkiLCBbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4galF1ZXJ5OyB9ICk7Ci19Ci0KLX0pKCB3
aW5kb3cgKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9y
ZXF1aXJlanMtdGV4dC90ZXh0LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRz
L3JlcXVpcmVqcy10ZXh0L3RleHQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFl
NGZjOTY2MTM1Mzc0MmY3NjA3N2Y2NjQxYTc4YmZhZmU4ZWU0OTguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21w
b25lbnRzL3JlcXVpcmVqcy10ZXh0L3RleHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzODYgKzAs
MCBAQAotLyoqCi0gKiBAbGljZW5zZSBSZXF1aXJlSlMgdGV4dCAyLjAuMTAgQ29weXJpZ2h0IChj
KSAyMDEwLTIwMTIsIFRoZSBEb2pvIEZvdW5kYXRpb24gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
IEF2YWlsYWJsZSB2aWEgdGhlIE1JVCBvciBuZXcgQlNEIGxpY2Vuc2UuCi0gKiBzZWU6IGh0dHA6
Ly9naXRodWIuY29tL3JlcXVpcmVqcy90ZXh0IGZvciBkZXRhaWxzCi0gKi8KLS8qanNsaW50IHJl
Z2V4cDogdHJ1ZSAqLwotLypnbG9iYWwgcmVxdWlyZSwgWE1MSHR0cFJlcXVlc3QsIEFjdGl2ZVhP
YmplY3QsCi0gIGRlZmluZSwgd2luZG93LCBwcm9jZXNzLCBQYWNrYWdlcywKLSAgamF2YSwgbG9j
YXRpb24sIENvbXBvbmVudHMsIEZpbGVVdGlscyAqLwotCi1kZWZpbmUoWydtb2R1bGUnXSwgZnVu
Y3Rpb24gKG1vZHVsZSkgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHZhciB0ZXh0LCBmcywg
Q2MsIENpLCB4cGNJc1dpbmRvd3MsCi0gICAgICAgIHByb2dJZHMgPSBbJ01zeG1sMi5YTUxIVFRQ
JywgJ01pY3Jvc29mdC5YTUxIVFRQJywgJ01zeG1sMi5YTUxIVFRQLjQuMCddLAotICAgICAgICB4
bWxSZWdFeHAgPSAvXlxzKjxcP3htbChccykrdmVyc2lvbj1bXCdcIl0oXGQpKi4oXGQpKltcJ1wi
XShccykqXD8+L2ltLAotICAgICAgICBib2R5UmVnRXhwID0gLzxib2R5W14+XSo+XHMqKFtcc1xT
XSspXHMqPFwvYm9keT4vaW0sCi0gICAgICAgIGhhc0xvY2F0aW9uID0gdHlwZW9mIGxvY2F0aW9u
ICE9PSAndW5kZWZpbmVkJyAmJiBsb2NhdGlvbi5ocmVmLAotICAgICAgICBkZWZhdWx0UHJvdG9j
b2wgPSBoYXNMb2NhdGlvbiAmJiBsb2NhdGlvbi5wcm90b2NvbCAmJiBsb2NhdGlvbi5wcm90b2Nv
bC5yZXBsYWNlKC9cOi8sICcnKSwKLSAgICAgICAgZGVmYXVsdEhvc3ROYW1lID0gaGFzTG9jYXRp
b24gJiYgbG9jYXRpb24uaG9zdG5hbWUsCi0gICAgICAgIGRlZmF1bHRQb3J0ID0gaGFzTG9jYXRp
b24gJiYgKGxvY2F0aW9uLnBvcnQgfHwgdW5kZWZpbmVkKSwKLSAgICAgICAgYnVpbGRNYXAgPSB7
fSwKLSAgICAgICAgbWFzdGVyQ29uZmlnID0gKG1vZHVsZS5jb25maWcgJiYgbW9kdWxlLmNvbmZp
ZygpKSB8fCB7fTsKLQotICAgIHRleHQgPSB7Ci0gICAgICAgIHZlcnNpb246ICcyLjAuMTAnLAot
Ci0gICAgICAgIHN0cmlwOiBmdW5jdGlvbiAoY29udGVudCkgewotICAgICAgICAgICAgLy9TdHJp
cHMgPD94bWwgLi4uPz4gZGVjbGFyYXRpb25zIHNvIHRoYXQgZXh0ZXJuYWwgU1ZHIGFuZCBYTUwK
LSAgICAgICAgICAgIC8vZG9jdW1lbnRzIGNhbiBiZSBhZGRlZCB0byBhIGRvY3VtZW50IHdpdGhv
dXQgd29ycnkuIEFsc28sIGlmIHRoZSBzdHJpbmcKLSAgICAgICAgICAgIC8vaXMgYW4gSFRNTCBk
b2N1bWVudCwgb25seSB0aGUgcGFydCBpbnNpZGUgdGhlIGJvZHkgdGFnIGlzIHJldHVybmVkLgot
ICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICBjb250ZW50ID0gY29u
dGVudC5yZXBsYWNlKHhtbFJlZ0V4cCwgIiIpOwotICAgICAgICAgICAgICAgIHZhciBtYXRjaGVz
ID0gY29udGVudC5tYXRjaChib2R5UmVnRXhwKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2hl
cykgewotICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gbWF0Y2hlc1sxXTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRlbnQg
PSAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjb250ZW50OwotICAgICAg
ICB9LAotCi0gICAgICAgIGpzRXNjYXBlOiBmdW5jdGlvbiAoY29udGVudCkgewotICAgICAgICAg
ICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvKFsnXFxdKS9nLCAnXFwkMScpCi0gICAgICAgICAg
ICAgICAgLnJlcGxhY2UoL1tcZl0vZywgIlxcZiIpCi0gICAgICAgICAgICAgICAgLnJlcGxhY2Uo
L1tcYl0vZywgIlxcYiIpCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcbl0vZywgIlxcbiIp
Ci0gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcdF0vZywgIlxcdCIpCi0gICAgICAgICAgICAg
ICAgLnJlcGxhY2UoL1tccl0vZywgIlxcciIpCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tc
dTIwMjhdL2csICJcXHUyMDI4IikKLSAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1x1MjAyOV0v
ZywgIlxcdTIwMjkiKTsKLSAgICAgICAgfSwKLQotICAgICAgICBjcmVhdGVYaHI6IG1hc3RlckNv
bmZpZy5jcmVhdGVYaHIgfHwgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgLy9Xb3VsZCBsb3Zl
IHRvIGR1bXAgdGhlIEFjdGl2ZVggY3JhcCBpbiBoZXJlLiBOZWVkIElFIDYgdG8gZGllIGZpcnN0
LgotICAgICAgICAgICAgdmFyIHhociwgaSwgcHJvZ0lkOwotICAgICAgICAgICAgaWYgKHR5cGVv
ZiBYTUxIdHRwUmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBB
Y3RpdmVYT2JqZWN0ICE9PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCAzOyBpICs9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvZ0lkID0gcHJvZ0lk
c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KHByb2dJZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2ggKGUpIHt9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHhocikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ0lkcyA9IFtwcm9nSWRdOyAgLy8gc28gZmFzdGVyIG5leHQgdGlt
ZQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB4
aHI7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFBhcnNlcyBhIHJlc291
cmNlIG5hbWUgaW50byBpdHMgY29tcG9uZW50IHBhcnRzLiBSZXNvdXJjZSBuYW1lcwotICAgICAg
ICAgKiBsb29rIGxpa2U6IG1vZHVsZS9uYW1lLmV4dCFzdHJpcCwgd2hlcmUgdGhlICFzdHJpcCBw
YXJ0IGlzCi0gICAgICAgICAqIG9wdGlvbmFsLgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30g
bmFtZSB0aGUgcmVzb3VyY2UgbmFtZQotICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB3aXRo
IHByb3BlcnRpZXMgIm1vZHVsZU5hbWUiLCAiZXh0IiBhbmQgInN0cmlwIgotICAgICAgICAgKiB3
aGVyZSBzdHJpcCBpcyBhIGJvb2xlYW4uCi0gICAgICAgICAqLwotICAgICAgICBwYXJzZU5hbWU6
IGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICAgICAgICB2YXIgbW9kTmFtZSwgZXh0LCB0ZW1wLAot
ICAgICAgICAgICAgICAgIHN0cmlwID0gZmFsc2UsCi0gICAgICAgICAgICAgICAgaW5kZXggPSBu
YW1lLmluZGV4T2YoIi4iKSwKLSAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gbmFtZS5pbmRl
eE9mKCcuLycpID09PSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuaW5k
ZXhPZignLi4vJykgPT09IDA7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgKCFp
c1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKLSAgICAgICAgICAgICAgICBtb2ROYW1lID0gbmFt
ZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgICAgICAgICAgIGV4dCA9IG5hbWUuc3Vic3Ry
aW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBtb2ROYW1lID0gbmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dGVtcCA9IGV4dCB8fCBtb2ROYW1lOwotICAgICAgICAgICAgaW5kZXggPSB0ZW1wLmluZGV4T2Yo
IiEiKTsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAv
L1B1bGwgb2ZmIHRoZSBzdHJpcCBhcmcuCi0gICAgICAgICAgICAgICAgc3RyaXAgPSB0ZW1wLnN1
YnN0cmluZyhpbmRleCArIDEpID09PSAic3RyaXAiOwotICAgICAgICAgICAgICAgIHRlbXAgPSB0
ZW1wLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4dCkgewotICAg
ICAgICAgICAgICAgICAgICBleHQgPSB0ZW1wOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1vZE5hbWUgPSB0ZW1wOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBtb2R1
bGVOYW1lOiBtb2ROYW1lLAotICAgICAgICAgICAgICAgIGV4dDogZXh0LAotICAgICAgICAgICAg
ICAgIHN0cmlwOiBzdHJpcAotICAgICAgICAgICAgfTsKLSAgICAgICAgfSwKLQotICAgICAgICB4
ZFJlZ0V4cDogL14oKFx3KylcOik/XC9cLyhbXlwvXFxdKykvLAotCi0gICAgICAgIC8qKgotICAg
ICAgICAgKiBJcyBhbiBVUkwgb24gYW5vdGhlciBkb21haW4uIE9ubHkgd29ya3MgZm9yIGJyb3dz
ZXIgdXNlLCByZXR1cm5zCi0gICAgICAgICAqIGZhbHNlIGluIG5vbi1icm93c2VyIGVudmlyb25t
ZW50cy4gT25seSB1c2VkIHRvIGtub3cgaWYgYW4KLSAgICAgICAgICogb3B0aW1pemVkIC5qcyB2
ZXJzaW9uIG9mIGEgdGV4dCByZXNvdXJjZSBzaG91bGQgYmUgbG9hZGVkCi0gICAgICAgICAqIGlu
c3RlYWQuCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwKLSAgICAgICAgICogQHJldHVy
bnMgQm9vbGVhbgotICAgICAgICAgKi8KLSAgICAgICAgdXNlWGhyOiBmdW5jdGlvbiAodXJsLCBw
cm90b2NvbCwgaG9zdG5hbWUsIHBvcnQpIHsKLSAgICAgICAgICAgIHZhciB1UHJvdG9jb2wsIHVI
b3N0TmFtZSwgdVBvcnQsCi0gICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZXh0LnhkUmVnRXhwLmV4
ZWModXJsKTsKLSAgICAgICAgICAgIGlmICghbWF0Y2gpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVQcm90b2NvbCA9IG1hdGNoWzJd
OwotICAgICAgICAgICAgdUhvc3ROYW1lID0gbWF0Y2hbM107Ci0KLSAgICAgICAgICAgIHVIb3N0
TmFtZSA9IHVIb3N0TmFtZS5zcGxpdCgnOicpOwotICAgICAgICAgICAgdVBvcnQgPSB1SG9zdE5h
bWVbMV07Ci0gICAgICAgICAgICB1SG9zdE5hbWUgPSB1SG9zdE5hbWVbMF07Ci0KLSAgICAgICAg
ICAgIHJldHVybiAoIXVQcm90b2NvbCB8fCB1UHJvdG9jb2wgPT09IHByb3RvY29sKSAmJgotICAg
ICAgICAgICAgICAgICAgICghdUhvc3ROYW1lIHx8IHVIb3N0TmFtZS50b0xvd2VyQ2FzZSgpID09
PSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpKSAmJgotICAgICAgICAgICAgICAgICAgICgoIXVQb3J0
ICYmICF1SG9zdE5hbWUpIHx8IHVQb3J0ID09PSBwb3J0KTsKLSAgICAgICAgfSwKLQotICAgICAg
ICBmaW5pc2hMb2FkOiBmdW5jdGlvbiAobmFtZSwgc3RyaXAsIGNvbnRlbnQsIG9uTG9hZCkgewot
ICAgICAgICAgICAgY29udGVudCA9IHN0cmlwID8gdGV4dC5zdHJpcChjb250ZW50KSA6IGNvbnRl
bnQ7Ci0gICAgICAgICAgICBpZiAobWFzdGVyQ29uZmlnLmlzQnVpbGQpIHsKLSAgICAgICAgICAg
ICAgICBidWlsZE1hcFtuYW1lXSA9IGNvbnRlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBvbkxvYWQoY29udGVudCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbG9hZDogZnVuY3Rpb24g
KG5hbWUsIHJlcSwgb25Mb2FkLCBjb25maWcpIHsKLSAgICAgICAgICAgIC8vTmFtZSBoYXMgZm9y
bWF0OiBzb21lLm1vZHVsZS5maWxleHQhc3RyaXAKLSAgICAgICAgICAgIC8vVGhlIHN0cmlwIHBh
cnQgaXMgb3B0aW9uYWwuCi0gICAgICAgICAgICAvL2lmIHN0cmlwIGlzIHByZXNlbnQsIHRoZW4g
dGhhdCBtZWFucyBvbmx5IGdldCB0aGUgc3RyaW5nIGNvbnRlbnRzCi0gICAgICAgICAgICAvL2lu
c2lkZSBhIGJvZHkgdGFnIGluIGFuIEhUTUwgc3RyaW5nLiBGb3IgWE1ML1NWRyBjb250ZW50IGl0
IG1lYW5zCi0gICAgICAgICAgICAvL3JlbW92aW5nIHRoZSA8P3htbCAuLi4/PiBkZWNsYXJhdGlv
bnMgc28gdGhlIGNvbnRlbnQgY2FuIGJlIGluc2VydGVkCi0gICAgICAgICAgICAvL2ludG8gdGhl
IGN1cnJlbnQgZG9jIHdpdGhvdXQgcHJvYmxlbXMuCi0KLSAgICAgICAgICAgIC8vIERvIG5vdCBi
b3RoZXIgd2l0aCB0aGUgd29yayBpZiBhIGJ1aWxkIGFuZCB0ZXh0IHdpbGwKLSAgICAgICAgICAg
IC8vIG5vdCBiZSBpbmxpbmVkLgotICAgICAgICAgICAgaWYgKGNvbmZpZy5pc0J1aWxkICYmICFj
b25maWcuaW5saW5lVGV4dCkgewotICAgICAgICAgICAgICAgIG9uTG9hZCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWFzdGVyQ29uZmln
LmlzQnVpbGQgPSBjb25maWcuaXNCdWlsZDsKLQotICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHRl
eHQucGFyc2VOYW1lKG5hbWUpLAotICAgICAgICAgICAgICAgIG5vblN0cmlwTmFtZSA9IHBhcnNl
ZC5tb2R1bGVOYW1lICsKLSAgICAgICAgICAgICAgICAgICAgKHBhcnNlZC5leHQgPyAnLicgKyBw
YXJzZWQuZXh0IDogJycpLAotICAgICAgICAgICAgICAgIHVybCA9IHJlcS50b1VybChub25TdHJp
cE5hbWUpLAotICAgICAgICAgICAgICAgIHVzZVhociA9IChtYXN0ZXJDb25maWcudXNlWGhyKSB8
fAotICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQudXNlWGhyOwotCi0gICAgICAgICAgICAv
LyBEbyBub3QgbG9hZCBpZiBpdCBpcyBhbiBlbXB0eTogdXJsCi0gICAgICAgICAgICBpZiAodXJs
LmluZGV4T2YoJ2VtcHR5OicpID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgb25Mb2FkKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvL0xv
YWQgdGhlIHRleHQuIFVzZSBYSFIgaWYgcG9zc2libGUgYW5kIGluIGEgYnJvd3Nlci4KLSAgICAg
ICAgICAgIGlmICghaGFzTG9jYXRpb24gfHwgdXNlWGhyKHVybCwgZGVmYXVsdFByb3RvY29sLCBk
ZWZhdWx0SG9zdE5hbWUsIGRlZmF1bHRQb3J0KSkgewotICAgICAgICAgICAgICAgIHRleHQuZ2V0
KHVybCwgZnVuY3Rpb24gKGNvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5maW5p
c2hMb2FkKG5hbWUsIHBhcnNlZC5zdHJpcCwgY29udGVudCwgb25Mb2FkKTsKLSAgICAgICAgICAg
ICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvbkxvYWQu
ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9uTG9hZC5lcnJvcihlcnIpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vTmVlZCB0byBmZXRjaCB0aGUgcmVzb3VyY2UgYWNyb3Nz
IGRvbWFpbnMuIEFzc3VtZQotICAgICAgICAgICAgICAgIC8vdGhlIHJlc291cmNlIGhhcyBiZWVu
IG9wdGltaXplZCBpbnRvIGEgSlMgbW9kdWxlLiBGZXRjaAotICAgICAgICAgICAgICAgIC8vYnkg
dGhlIG1vZHVsZSBuYW1lICsgZXh0ZW5zaW9uLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlCi0gICAg
ICAgICAgICAgICAgLy8hc3RyaXAgcGFydCB0byBhdm9pZCBmaWxlIHN5c3RlbSBpc3N1ZXMuCi0g
ICAgICAgICAgICAgICAgcmVxKFtub25TdHJpcE5hbWVdLCBmdW5jdGlvbiAoY29udGVudCkgewot
ICAgICAgICAgICAgICAgICAgICB0ZXh0LmZpbmlzaExvYWQocGFyc2VkLm1vZHVsZU5hbWUgKyAn
LicgKyBwYXJzZWQuZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
c2VkLnN0cmlwLCBjb250ZW50LCBvbkxvYWQpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIHdyaXRlOiBmdW5jdGlvbiAocGx1Z2luTmFt
ZSwgbW9kdWxlTmFtZSwgd3JpdGUsIGNvbmZpZykgewotICAgICAgICAgICAgaWYgKGJ1aWxkTWFw
Lmhhc093blByb3BlcnR5KG1vZHVsZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRl
bnQgPSB0ZXh0LmpzRXNjYXBlKGJ1aWxkTWFwW21vZHVsZU5hbWVdKTsKLSAgICAgICAgICAgICAg
ICB3cml0ZS5hc01vZHVsZShwbHVnaW5OYW1lICsgIiEiICsgbW9kdWxlTmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuICciICsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCArCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIic7fSk7XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSwKLQotICAgICAgICB3cml0ZUZpbGU6IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBtb2R1bGVOYW1l
LCByZXEsIHdyaXRlLCBjb25maWcpIHsKLSAgICAgICAgICAgIHZhciBwYXJzZWQgPSB0ZXh0LnBh
cnNlTmFtZShtb2R1bGVOYW1lKSwKLSAgICAgICAgICAgICAgICBleHRQYXJ0ID0gcGFyc2VkLmV4
dCA/ICcuJyArIHBhcnNlZC5leHQgOiAnJywKLSAgICAgICAgICAgICAgICBub25TdHJpcE5hbWUg
PSBwYXJzZWQubW9kdWxlTmFtZSArIGV4dFBhcnQsCi0gICAgICAgICAgICAgICAgLy9Vc2UgYSAn
LmpzJyBmaWxlIG5hbWUgc28gdGhhdCBpdCBpbmRpY2F0ZXMgaXQgaXMgYQotICAgICAgICAgICAg
ICAgIC8vc2NyaXB0IHRoYXQgY2FuIGJlIGxvYWRlZCBhY3Jvc3MgZG9tYWlucy4KLSAgICAgICAg
ICAgICAgICBmaWxlTmFtZSA9IHJlcS50b1VybChwYXJzZWQubW9kdWxlTmFtZSArIGV4dFBhcnQp
ICsgJy5qcyc7Ci0KLSAgICAgICAgICAgIC8vTGV2ZXJhZ2Ugb3duIGxvYWQoKSBtZXRob2QgdG8g
bG9hZCBwbHVnaW4gdmFsdWUsIGJ1dCBvbmx5Ci0gICAgICAgICAgICAvL3dyaXRlIG91dCB2YWx1
ZXMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgc3RyaXAgYXJndW1lbnQsCi0gICAgICAgICAgICAvL3Rv
IGF2b2lkIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggISBpbiBmaWxlIG5hbWVzLgotICAgICAg
ICAgICAgdGV4dC5sb2FkKG5vblN0cmlwTmFtZSwgcmVxLCBmdW5jdGlvbiAodmFsdWUpIHsKLSAg
ICAgICAgICAgICAgICAvL1VzZSBvd24gd3JpdGUoKSBtZXRob2QgdG8gY29uc3RydWN0IGZ1bGwg
bW9kdWxlIHZhbHVlLgotICAgICAgICAgICAgICAgIC8vQnV0IG5lZWQgdG8gY3JlYXRlIHNoZWxs
IHRoYXQgdHJhbnNsYXRlcyB3cml0ZUZpbGUncwotICAgICAgICAgICAgICAgIC8vd3JpdGUoKSB0
byB0aGUgcmlnaHQgaW50ZXJmYWNlLgotICAgICAgICAgICAgICAgIHZhciB0ZXh0V3JpdGUgPSBm
dW5jdGlvbiAoY29udGVudHMpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlKGZp
bGVOYW1lLCBjb250ZW50cyk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB0
ZXh0V3JpdGUuYXNNb2R1bGUgPSBmdW5jdGlvbiAobW9kdWxlTmFtZSwgY29udGVudHMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlLmFzTW9kdWxlKG1vZHVsZU5hbWUsIGZpbGVO
YW1lLCBjb250ZW50cyk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHRl
eHQud3JpdGUocGx1Z2luTmFtZSwgbm9uU3RyaXBOYW1lLCB0ZXh0V3JpdGUsIGNvbmZpZyk7Ci0g
ICAgICAgICAgICB9LCBjb25maWcpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmIChtYXN0
ZXJDb25maWcuZW52ID09PSAnbm9kZScgfHwgKCFtYXN0ZXJDb25maWcuZW52ICYmCi0gICAgICAg
ICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIgJiYKLSAgICAgICAgICAgIHByb2Nl
c3MudmVyc2lvbnMgJiYKLSAgICAgICAgICAgICEhcHJvY2Vzcy52ZXJzaW9ucy5ub2RlICYmCi0g
ICAgICAgICAgICAhcHJvY2Vzcy52ZXJzaW9uc1snbm9kZS13ZWJraXQnXSkpIHsKLSAgICAgICAg
Ly9Vc2luZyBzcGVjaWFsIHJlcXVpcmUubm9kZVJlcXVpcmUsIHNvbWV0aGluZyBhZGRlZCBieSBy
LmpzLgotICAgICAgICBmcyA9IHJlcXVpcmUubm9kZVJlcXVpcmUoJ2ZzJyk7Ci0KLSAgICAgICAg
dGV4dC5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaywgZXJyYmFjaykgewotICAgICAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGZzLnJlYWRGaWxlU3luYyh1cmws
ICd1dGY4Jyk7Ci0gICAgICAgICAgICAgICAgLy9SZW1vdmUgQk9NIChCeXRlIE1hcmsgT3JkZXIp
IGZyb20gdXRmOCBmaWxlcyBpZiBpdCBpcyB0aGVyZS4KLSAgICAgICAgICAgICAgICBpZiAoZmls
ZS5pbmRleE9mKCdcdUZFRkYnKSA9PT0gMCkgewotICAgICAgICAgICAgICAgICAgICBmaWxlID0g
ZmlsZS5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNh
bGxiYWNrKGZpbGUpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAg
IGVycmJhY2soZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfSBlbHNlIGlmICht
YXN0ZXJDb25maWcuZW52ID09PSAneGhyJyB8fCAoIW1hc3RlckNvbmZpZy5lbnYgJiYKLSAgICAg
ICAgICAgIHRleHQuY3JlYXRlWGhyKCkpKSB7Ci0gICAgICAgIHRleHQuZ2V0ID0gZnVuY3Rpb24g
KHVybCwgY2FsbGJhY2ssIGVycmJhY2ssIGhlYWRlcnMpIHsKLSAgICAgICAgICAgIHZhciB4aHIg
PSB0ZXh0LmNyZWF0ZVhocigpLCBoZWFkZXI7Ci0gICAgICAgICAgICB4aHIub3BlbignR0VUJywg
dXJsLCB0cnVlKTsKLQotICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIGRpcmVjdCBhY2Nlc3Mg
dG8geGhyIGhlYWRlcnMKLSAgICAgICAgICAgIGlmIChoZWFkZXJzKSB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChoZWFkZXIgaW4gaGVhZGVycykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaGVh
ZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4
aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIudG9Mb3dlckNhc2UoKSwgaGVhZGVyc1toZWFkZXJd
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy9BbGxvdyBvdmVycmlkZXMgc3BlY2lmaWVkIGluIGNvbmZpZwot
ICAgICAgICAgICAgaWYgKG1hc3RlckNvbmZpZy5vblhocikgewotICAgICAgICAgICAgICAgIG1h
c3RlckNvbmZpZy5vblhocih4aHIsIHVybCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIHN0YXR1cywgZXJyOwotICAgICAgICAgICAgICAgIC8vRG8gbm90IGV4cGxpY2l0bHkg
aGFuZGxlIGVycm9ycywgdGhvc2Ugc2hvdWxkIGJlCi0gICAgICAgICAgICAgICAgLy92aXNpYmxl
IHZpYSBjb25zb2xlIG91dHB1dCBpbiB0aGUgYnJvd3Nlci4KLSAgICAgICAgICAgICAgICBpZiAo
eGhyLnJlYWR5U3RhdGUgPT09IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0geGhy
LnN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA+IDM5OSAmJiBzdGF0dXMg
PCA2MDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vQW4gaHR0cCA0eHggb3IgNXh4IGVy
cm9yLiBTaWduYWwgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBuZXcg
RXJyb3IodXJsICsgJyBIVFRQIHN0YXR1czogJyArIHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlcnIueGhyID0geGhyOwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyYmFjayhl
cnIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAobWFzdGVyQ29uZmlnLm9uWGhyQ29tcGxldGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5vblhockNvbXBsZXRlKHhociwgdXJs
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICB4aHIuc2VuZChudWxsKTsKLSAgICAgICAgfTsKLSAgICB9IGVsc2Ug
aWYgKG1hc3RlckNvbmZpZy5lbnYgPT09ICdyaGlubycgfHwgKCFtYXN0ZXJDb25maWcuZW52ICYm
Ci0gICAgICAgICAgICB0eXBlb2YgUGFja2FnZXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBq
YXZhICE9PSAndW5kZWZpbmVkJykpIHsKLSAgICAgICAgLy9XaHkgSmF2YSwgd2h5IGlzIHRoaXMg
c28gYXdrd2FyZD8KLSAgICAgICAgdGV4dC5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykg
ewotICAgICAgICAgICAgdmFyIHN0cmluZ0J1ZmZlciwgbGluZSwKLSAgICAgICAgICAgICAgICBl
bmNvZGluZyA9ICJ1dGYtOCIsCi0gICAgICAgICAgICAgICAgZmlsZSA9IG5ldyBqYXZhLmlvLkZp
bGUodXJsKSwKLSAgICAgICAgICAgICAgICBsaW5lU2VwYXJhdG9yID0gamF2YS5sYW5nLlN5c3Rl
bS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSwKLSAgICAgICAgICAgICAgICBpbnB1dCA9
IG5ldyBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyKG5ldyBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVy
KG5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbShmaWxlKSwgZW5jb2RpbmcpKSwKLSAgICAgICAg
ICAgICAgICBjb250ZW50ID0gJyc7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAg
IHN0cmluZ0J1ZmZlciA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAg
ICAgICAgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBCeXRl
IE9yZGVyIE1hcmsgKEJPTSkgLSBUaGUgVW5pY29kZSBTdGFuZGFyZCwgdmVyc2lvbiAzLjAsIHBh
Z2UgMzI0Ci0gICAgICAgICAgICAgICAgLy8gaHR0cDovL3d3dy51bmljb2RlLm9yZy9mYXEvdXRm
X2JvbS5odG1sCi0KLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSB1c2UgdXRm
LTgsIHRoZSBCT00gc2hvdWxkIGFwcGVhciBhcyAiRUYgQkIgQkYiLCBidXQgaXQgZG9lc24ndCBk
dWUgdG8gdGhpcyBidWcgaW4gdGhlIEpESzoKLSAgICAgICAgICAgICAgICAvLyBodHRwOi8vYnVn
cy5zdW4uY29tL2J1Z2RhdGFiYXNlL3ZpZXdfYnVnLmRvP2J1Z19pZD00NTA4MDU4Ci0gICAgICAg
ICAgICAgICAgaWYgKGxpbmUgJiYgbGluZS5sZW5ndGgoKSAmJiBsaW5lLmNoYXJBdCgwKSA9PT0g
MHhmZWZmKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVhdCB0aGUgQk9NLCBzaW5jZSB3ZSd2
ZSBhbHJlYWR5IGZvdW5kIHRoZSBlbmNvZGluZyBvbiB0aGlzIGZpbGUsCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGFuZCB3ZSBwbGFuIHRvIGNvbmNhdGVuYXRpbmcgdGhpcyBidWZmZXIgd2l0aCBv
dGhlcnM7IHRoZSBCT00gc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgYXBwZWFy
IGF0IHRoZSB0b3Agb2YgYSBmaWxlLgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5z
dWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGxp
bmUgIT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVmZmVyLmFwcGVuZChs
aW5lKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoKGxpbmUg
PSBpbnB1dC5yZWFkTGluZSgpKSAhPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzdHJp
bmdCdWZmZXIuYXBwZW5kKGxpbmVTZXBhcmF0b3IpOwotICAgICAgICAgICAgICAgICAgICBzdHJp
bmdCdWZmZXIuYXBwZW5kKGxpbmUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAvL01ha2Ugc3VyZSB3ZSByZXR1cm4gYSBKYXZhU2NyaXB0IHN0cmluZyBhbmQgbm90IGEgSmF2
YSBzdHJpbmcuCi0gICAgICAgICAgICAgICAgY29udGVudCA9IFN0cmluZyhzdHJpbmdCdWZmZXIu
dG9TdHJpbmcoKSk7IC8vU3RyaW5nCi0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAg
ICAgICAgIGlucHV0LmNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYWxsYmFj
ayhjb250ZW50KTsKLSAgICAgICAgfTsKLSAgICB9IGVsc2UgaWYgKG1hc3RlckNvbmZpZy5lbnYg
PT09ICd4cGNvbm5lY3QnIHx8ICghbWFzdGVyQ29uZmlnLmVudiAmJgotICAgICAgICAgICAgdHlw
ZW9mIENvbXBvbmVudHMgIT09ICd1bmRlZmluZWQnICYmIENvbXBvbmVudHMuY2xhc3NlcyAmJgot
ICAgICAgICAgICAgQ29tcG9uZW50cy5pbnRlcmZhY2VzKSkgewotICAgICAgICAvL0F2ZXJ0IHlv
dXIgZ2F6ZSEKLSAgICAgICAgQ2MgPSBDb21wb25lbnRzLmNsYXNzZXMsCi0gICAgICAgIENpID0g
Q29tcG9uZW50cy5pbnRlcmZhY2VzOwotICAgICAgICBDb21wb25lbnRzLnV0aWxzWydpbXBvcnQn
XSgncmVzb3VyY2U6Ly9ncmUvbW9kdWxlcy9GaWxlVXRpbHMuanNtJyk7Ci0gICAgICAgIHhwY0lz
V2luZG93cyA9ICgnQG1vemlsbGEub3JnL3dpbmRvd3MtcmVnaXN0cnkta2V5OzEnIGluIENjKTsK
LQotICAgICAgICB0ZXh0LmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7Ci0gICAgICAg
ICAgICB2YXIgaW5TdHJlYW0sIGNvbnZlcnRTdHJlYW0sIGZpbGVPYmosCi0gICAgICAgICAgICAg
ICAgcmVhZERhdGEgPSB7fTsKLQotICAgICAgICAgICAgaWYgKHhwY0lzV2luZG93cykgewotICAg
ICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cLy9nLCAnXFwnKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZmlsZU9iaiA9IG5ldyBGaWxlVXRpbHMuRmlsZSh1cmwpOwotCi0g
ICAgICAgICAgICAvL1hQQ09NLCB5b3Ugc28gY3JhenkKLSAgICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICAgICAgaW5TdHJlYW0gPSBDY1snQG1vemlsbGEub3JnL25ldHdvcmsvZmlsZS1pbnB1
dC1zdHJlYW07MSddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlSW5zdGFuY2Uo
Q2kubnNJRmlsZUlucHV0U3RyZWFtKTsKLSAgICAgICAgICAgICAgICBpblN0cmVhbS5pbml0KGZp
bGVPYmosIDEsIDAsIGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0gPSBD
Y1snQG1vemlsbGEub3JnL2ludGwvY29udmVydGVyLWlucHV0LXN0cmVhbTsxJ10KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUluc3RhbmNlKENpLm5zSUNvbnZlcnRlcklu
cHV0U3RyZWFtKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0U3RyZWFtLmluaXQoaW5TdHJlYW0s
ICJ1dGYtOCIsIGluU3RyZWFtLmF2YWlsYWJsZSgpLAotICAgICAgICAgICAgICAgIENpLm5zSUNv
bnZlcnRlcklucHV0U3RyZWFtLkRFRkFVTFRfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTsKLQotICAg
ICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0ucmVhZFN0cmluZyhpblN0cmVhbS5hdmFpbGFibGUo
KSwgcmVhZERhdGEpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0uY2xvc2UoKTsKLSAg
ICAgICAgICAgICAgICBpblN0cmVhbS5jbG9zZSgpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNr
KHJlYWREYXRhLnZhbHVlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoKGZpbGVPYmogJiYgZmlsZU9iai5wYXRoIHx8ICcnKSArICc6
ICcgKyBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHRl
eHQ7Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9y
ZXF1aXJlanMvcmVxdWlyZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9y
ZXF1aXJlanMvcmVxdWlyZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNlMDli
NWUzYjIzMTFkNzFlNjgwZTg2MjYzYzY2YjQ5YjhlYWI1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVu
dHMvcmVxdWlyZWpzL3JlcXVpcmUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDU0ICswLDAgQEAK
LS8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAotICogQGxpY2Vuc2UgUmVxdWlyZUpTIDIuMS45
IENvcHlyaWdodCAoYykgMjAxMC0yMDEyLCBUaGUgRG9qbyBGb3VuZGF0aW9uIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKiBBdmFpbGFibGUgdmlhIHRoZSBNSVQgb3IgbmV3IEJTRCBsaWNlbnNlLgot
ICogc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcyBmb3IgZGV0YWlscwot
ICovCi0vL05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJpY3Qgc3VwcG9ydCBpbiBicm93c2Vy
cywgIzM5MiwgYW5kIGNhdXNlcwotLy9wcm9ibGVtcyB3aXRoIHJlcXVpcmVqcy5leGVjKCkvdHJh
bnNwaWxlciBwbHVnaW5zIHRoYXQgbWF5IG5vdCBiZSBzdHJpY3QuCi0vKmpzbGludCByZWdleHA6
IHRydWUsIG5vbWVuOiB0cnVlLCBzbG9wcHk6IHRydWUgKi8KLS8qZ2xvYmFsIHdpbmRvdywgbmF2
aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEgKi8KLQot
dmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwotKGZ1bmN0aW9uIChnbG9iYWwpIHsKLSAg
ICB2YXIgcmVxLCBzLCBoZWFkLCBiYXNlRWxlbWVudCwgZGF0YU1haW4sIHNyYywKLSAgICAgICAg
aW50ZXJhY3RpdmVTY3JpcHQsIGN1cnJlbnRseUFkZGluZ1NjcmlwdCwgbWFpblNjcmlwdCwgc3Vi
UGF0aCwKLSAgICAgICAgdmVyc2lvbiA9ICcyLjEuOScsCi0gICAgICAgIGNvbW1lbnRSZWdFeHAg
PSAvKFwvXCooW1xzXFNdKj8pXCpcL3woW146XXxeKVwvXC8oLiopJCkvbWcsCi0gICAgICAgIGNq
c1JlcXVpcmVSZWdFeHAgPSAvW14uXVxzKnJlcXVpcmVccypcKFxzKlsiJ10oW14nIlxzXSspWyIn
XVxzKlwpL2csCi0gICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLywKLSAgICAgICAgY3Vy
ckRpclJlZ0V4cCA9IC9eXC5cLy8sCi0gICAgICAgIG9wID0gT2JqZWN0LnByb3RvdHlwZSwKLSAg
ICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAotICAgICAgICBoYXNPd24gPSBvcC5oYXNPd25Q
cm9wZXJ0eSwKLSAgICAgICAgYXAgPSBBcnJheS5wcm90b3R5cGUsCi0gICAgICAgIGFwc3AgPSBh
cC5zcGxpY2UsCi0gICAgICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRl
ZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1
bWVudCksCi0gICAgICAgIGlzV2ViV29ya2VyID0gIWlzQnJvd3NlciAmJiB0eXBlb2YgaW1wb3J0
U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcsCi0gICAgICAgIC8vUFMzIGluZGljYXRlcyBsb2FkZWQg
YW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0ZQotICAgICAgICAvL3Nw
ZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcnLCAnbG9hZGVkJywgZXhlY3V0aW9uLAot
ICAgICAgICAvLyB0aGVuICdjb21wbGV0ZScuIFRoZSBVQSBjaGVjayBpcyB1bmZvcnR1bmF0ZSwg
YnV0IG5vdCBzdXJlIGhvdwotICAgICAgICAvL3RvIGZlYXR1cmUgdGVzdCB3L28gY2F1c2luZyBw
ZXJmIGlzc3Vlcy4KLSAgICAgICAgcmVhZHlSZWdFeHAgPSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9y
LnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPwotICAgICAgICAgICAgICAgICAgICAgIC9e
Y29tcGxldGUkLyA6IC9eKGNvbXBsZXRlfGxvYWRlZCkkLywKLSAgICAgICAgZGVmQ29udGV4dE5h
bWUgPSAnXycsCi0gICAgICAgIC8vT2ggdGhlIHRyYWdlZHksIGRldGVjdGluZyBvcGVyYS4gU2Vl
IHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24uCi0gICAgICAgIGlzT3BlcmEgPSB0eXBl
b2Ygb3BlcmEgIT09ICd1bmRlZmluZWQnICYmIG9wZXJhLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0
IE9wZXJhXScsCi0gICAgICAgIGNvbnRleHRzID0ge30sCi0gICAgICAgIGNmZyA9IHt9LAotICAg
ICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdLAotICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNl
OwotCi0gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgewotICAgICAgICByZXR1cm4gb3N0cmlu
Zy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJzsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBpc0FycmF5KGl0KSB7Ci0gICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29i
amVjdCBBcnJheV0nOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEhlbHBlciBmdW5jdGlvbiBm
b3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRoZSBmdW5jIHJldHVybnMKLSAgICAgKiBh
IHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgotICAgICAqLwotICAg
IGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7Ci0gICAgICAgIGlmIChhcnkpIHsKLSAgICAgICAg
ICAgIHZhciBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0g
MSkgewotICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSGVscGVyIGZ1bmN0
aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCi0g
ICAgICogcmV0dXJucyBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29w
LgotICAgICAqLwotICAgIGZ1bmN0aW9uIGVhY2hSZXZlcnNlKGFyeSwgZnVuYykgewotICAgICAg
ICBpZiAoYXJ5KSB7Ci0gICAgICAgICAgICB2YXIgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IGFy
eS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0gMSkgewotICAgICAgICAgICAgICAgIGlmIChhcnlb
aV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHsKLSAgICAgICAgcmV0dXJuIGhhc093bi5j
YWxsKG9iaiwgcHJvcCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkg
ewotICAgICAgICByZXR1cm4gaGFzUHJvcChvYmosIHByb3ApICYmIG9ialtwcm9wXTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBDeWNsZXMgb3ZlciBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCBh
bmQgY2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaAotICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0
aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgdGhlbiB0aGUKLSAgICAgKiBpdGVy
YXRpb24gaXMgc3RvcHBlZC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1
bmMpIHsKLSAgICAgICAgdmFyIHByb3A7Ci0gICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKLSAg
ICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZnVuYyhvYmpbcHJvcF0sIHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8q
KgotICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJj
ZSBpbnRvIHRhcmdldCwKLSAgICAgKiBidXQgb25seSBpZiB0YXJnZXQgZG9lcyBub3QgYWxyZWFk
eSBoYXZlIGEgcHJvcGVydHkgb2YgdGhlIHNhbWUgbmFtZS4KLSAgICAgKi8KLSAgICBmdW5jdGlv
biBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbikgewotICAgICAg
ICBpZiAoc291cmNlKSB7Ci0gICAgICAgICAgICBlYWNoUHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2
YWx1ZSwgcHJvcCkgewotICAgICAgICAgICAgICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJn
ZXQsIHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZWVwU3RyaW5nTWl4aW4gJiYg
dHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCF0YXJnZXRbcHJvcF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJv
cF0gPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1peGluKHRhcmdldFtwcm9wXSwgdmFsdWUsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0W3Byb3BdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGFyZ2V0Owot
ICAgIH0KLQotICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgYnV0IHRo
ZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAotICAgIC8vZmlyc3QsIHNpbmNlIGl0IGlzIGVh
c2llciB0byByZWFkL2ZpZ3VyZSBvdXQgd2hhdCAndGhpcycgd2lsbCBiZS4KLSAgICBmdW5jdGlv
biBiaW5kKG9iaiwgZm4pIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHJldHVybiBmbi5hcHBseShvYmosIGFyZ3VtZW50cyk7Ci0gICAgICAgIH07Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gc2NyaXB0cygpIHsKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBkZWZhdWx0
T25FcnJvcihlcnIpIHsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgIH0KLQotICAgIC8vQWxsb3cg
Z2V0dGluZyBhIGdsb2JhbCB0aGF0IGV4cHJlc3NlZCBpbgotICAgIC8vZG90IG5vdGF0aW9uLCBs
aWtlICdhLmIuYycuCi0gICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7Ci0gICAgICAgIGlm
ICghdmFsdWUpIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAg
ICB2YXIgZyA9IGdsb2JhbDsKLSAgICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlv
biAocGFydCkgewotICAgICAgICAgICAgZyA9IGdbcGFydF07Ci0gICAgICAgIH0pOwotICAgICAg
ICByZXR1cm4gZzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9y
IHdpdGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICog
QHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBlcnJvciBJRCB0aGF0IG1hcHMgdG8gYW4gSUQgb24gYSB3
ZWIgcGFnZS4KLSAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBl
cnJvci4KLSAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlm
IHRoZXJlIGlzIG9uZS4KLSAgICAgKgotICAgICAqIEByZXR1cm5zIHtFcnJvcn0KLSAgICAgKi8K
LSAgICBmdW5jdGlvbiBtYWtlRXJyb3IoaWQsIG1zZywgZXJyLCByZXF1aXJlTW9kdWxlcykgewot
ICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwOi8vcmVxdWlyZWpzLm9yZy9k
b2NzL2Vycm9ycy5odG1sIycgKyBpZCk7Ci0gICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKLSAg
ICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwotICAgICAgICBpZiAoZXJy
KSB7Ci0gICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmlu
ZWQnKSB7Ci0gICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90
aGVyIEFNRCBsb2FkZXIsCi0gICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICh0eXBlb2YgcmVxdWlyZWpzICE9PSAndW5kZWZpbmVkJykg
ewotICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7Ci0gICAgICAgICAgICAvL0Rv
IG5vdCBvdmVyd3JpdGUgYW5kIGV4aXN0aW5nIHJlcXVpcmVqcyBpbnN0YW5jZS4KLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjZmcgPSByZXF1aXJlanM7Ci0gICAgICAg
IHJlcXVpcmVqcyA9IHVuZGVmaW5lZDsKLSAgICB9Ci0KLSAgICAvL0FsbG93IGZvciBhIHJlcXVp
cmUgY29uZmlnIG9iamVjdAotICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcg
JiYgIWlzRnVuY3Rpb24ocmVxdWlyZSkpIHsKLSAgICAgICAgLy9hc3N1bWUgaXQgaXMgYSBjb25m
aWcgb2JqZWN0LgotICAgICAgICBjZmcgPSByZXF1aXJlOwotICAgICAgICByZXF1aXJlID0gdW5k
ZWZpbmVkOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsK
LSAgICAgICAgdmFyIGluQ2hlY2tMb2FkZWQsIE1vZHVsZSwgY29udGV4dCwgaGFuZGxlcnMsCi0g
ICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCwKLSAgICAgICAgICAgIGNvbmZpZyA9IHsK
LSAgICAgICAgICAgICAgICAvL0RlZmF1bHRzLiBEbyBub3Qgc2V0IGEgZGVmYXVsdCBmb3IgbWFw
Ci0gICAgICAgICAgICAgICAgLy9jb25maWcgdG8gc3BlZWQgdXAgbm9ybWFsaXplKCksIHdoaWNo
Ci0gICAgICAgICAgICAgICAgLy93aWxsIHJ1biBmYXN0ZXIgaWYgdGhlcmUgaXMgbm8gZGVmYXVs
dC4KLSAgICAgICAgICAgICAgICB3YWl0U2Vjb25kczogNywKLSAgICAgICAgICAgICAgICBiYXNl
VXJsOiAnLi8nLAotICAgICAgICAgICAgICAgIHBhdGhzOiB7fSwKLSAgICAgICAgICAgICAgICBw
a2dzOiB7fSwKLSAgICAgICAgICAgICAgICBzaGltOiB7fSwKLSAgICAgICAgICAgICAgICBjb25m
aWc6IHt9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcmVnaXN0cnkgPSB7fSwKLSAgICAg
ICAgICAgIC8vcmVnaXN0cnkgb2YganVzdCBlbmFibGVkIG1vZHVsZXMsIHRvIHNwZWVkCi0gICAg
ICAgICAgICAvL2N5Y2xlIGJyZWFraW5nIGNvZGUgd2hlbiBsb3RzIG9mIG1vZHVsZXMKLSAgICAg
ICAgICAgIC8vYXJlIHJlZ2lzdGVyZWQsIGJ1dCBub3QgYWN0aXZhdGVkLgotICAgICAgICAgICAg
ZW5hYmxlZFJlZ2lzdHJ5ID0ge30sCi0gICAgICAgICAgICB1bmRlZkV2ZW50cyA9IHt9LAotICAg
ICAgICAgICAgZGVmUXVldWUgPSBbXSwKLSAgICAgICAgICAgIGRlZmluZWQgPSB7fSwKLSAgICAg
ICAgICAgIHVybEZldGNoZWQgPSB7fSwKLSAgICAgICAgICAgIHJlcXVpcmVDb3VudGVyID0gMSwK
LSAgICAgICAgICAgIHVubm9ybWFsaXplZENvdW50ZXIgPSAxOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgKiBUcmltcyB0aGUgLiBhbmQgLi4gZnJvbSBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRz
LgotICAgICAgICAgKiBJdCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4u
IHdpbGwgYmVjb21lCi0gICAgICAgICAqIHRoZSBmaXJzdCBwYXRoIHNlZ21lbnQsIHRvIGhlbHAg
d2l0aCBtb2R1bGUgbmFtZSBsb29rdXBzLAotICAgICAgICAgKiB3aGljaCBhY3QgbGlrZSBwYXRo
cywgYnV0IGNhbiBiZSByZW1hcHBlZC4gQnV0IHRoZSBlbmQgcmVzdWx0LAotICAgICAgICAgKiBh
bGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLgot
ICAgICAgICAgKiBOT1RFOiB0aGlzIG1ldGhvZCBNT0RJRklFUyB0aGUgaW5wdXQgYXJyYXkuCi0g
ICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyeSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4K
LSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHRyaW1Eb3RzKGFyeSkgewotICAgICAgICAg
ICAgdmFyIGksIHBhcnQ7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBhcnlbaV07IGkgKz0gMSkg
ewotICAgICAgICAgICAgICAgIHBhcnQgPSBhcnlbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHBh
cnQgPT09ICcuJykgewotICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGksIDEpOwotICAg
ICAgICAgICAgICAgICAgICBpIC09IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0
ID09PSAnLi4nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAxICYmIChhcnlbMl0g
PT09ICcuLicgfHwgYXJ5WzBdID09PSAnLi4nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly9FbmQgb2YgdGhlIGxpbmUuIEtlZXAgYXQgbGVhc3Qgb25lIG5vbi1kb3QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vcGF0aCBzZWdtZW50IGF0IHRoZSBmcm9udCBzbyBpdCBjYW4gYmUgbWFw
cGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvL2NvcnJlY3RseSB0byBkaXNrLiBPdGhlcndp
c2UsIHRoZXJlIGlzIGxpa2VseQotICAgICAgICAgICAgICAgICAgICAgICAgLy9ubyBwYXRoIG1h
cHBpbmcgZm9yIGEgcGF0aCBzdGFydGluZyB3aXRoICcuLicuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvL1RoaXMgY2FuIHN0aWxsIGZhaWwsIGJ1dCBjYXRjaGVzIHRoZSBtb3N0IHJlYXNvbmFi
bGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNlcyBvZiAuLgotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaSAtPSAyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAg
ICAqIEdpdmVuIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUsIGxpa2UgLi9zb21ldGhpbmcsIG5vcm1h
bGl6ZSBpdCB0bwotICAgICAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8g
YSBwYXRoLgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgcmVsYXRpdmUgbmFt
ZQotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgYSByZWFsIG5hbWUgdGhhdCB0
aGUgbmFtZSBhcmcgaXMgcmVsYXRpdmUKLSAgICAgICAgICogdG8uCi0gICAgICAgICAqIEBwYXJh
bSB7Qm9vbGVhbn0gYXBwbHlNYXAgYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIHZhbHVlLiBT
aG91bGQKLSAgICAgICAgICogb25seSBiZSBkb25lIGlmIHRoaXMgbm9ybWFsaXphdGlvbiBpcyBm
b3IgYSBkZXBlbmRlbmN5IElELgotICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub3JtYWxp
emVkIG5hbWUKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCBi
YXNlTmFtZSwgYXBwbHlNYXApIHsKLSAgICAgICAgICAgIHZhciBwa2dOYW1lLCBwa2dDb25maWcs
IG1hcFZhbHVlLCBuYW1lUGFydHMsIGksIGosIG5hbWVTZWdtZW50LAotICAgICAgICAgICAgICAg
IGZvdW5kTWFwLCBmb3VuZEksIGZvdW5kU3Rhck1hcCwgc3RhckksCi0gICAgICAgICAgICAgICAg
YmFzZVBhcnRzID0gYmFzZU5hbWUgJiYgYmFzZU5hbWUuc3BsaXQoJy8nKSwKLSAgICAgICAgICAg
ICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLAotICAgICAgICAgICAgICAgIG1h
cCA9IGNvbmZpZy5tYXAsCi0gICAgICAgICAgICAgICAgc3Rhck1hcCA9IG1hcCAmJiBtYXBbJyon
XTsKLQotICAgICAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgotICAgICAgICAg
ICAgaWYgKG5hbWUgJiYgbmFtZS5jaGFyQXQoMCkgPT09ICcuJykgewotICAgICAgICAgICAgICAg
IC8vSWYgaGF2ZSBhIGJhc2UgbmFtZSwgdHJ5IHRvIG5vcm1hbGl6ZSBhZ2FpbnN0IGl0LAotICAg
ICAgICAgICAgICAgIC8vb3RoZXJ3aXNlLCBhc3N1bWUgaXQgaXMgYSB0b3AtbGV2ZWwgcmVxdWly
ZSB0aGF0IHdpbGwKLSAgICAgICAgICAgICAgICAvL2JlIHJlbGF0aXZlIHRvIGJhc2VVcmwgaW4g
dGhlIGVuZC4KLSAgICAgICAgICAgICAgICBpZiAoYmFzZU5hbWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGdldE93bihjb25maWcucGtncywgYmFzZU5hbWUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvL0lmIHRoZSBiYXNlTmFtZSBpcyBhIHBhY2thZ2UgbmFtZSwgdGhlbiBqdXN0
IHRyZWF0IGl0IGFzIG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgLy9uYW1lIHRvIGNvbmNh
dCB0aGUgbmFtZSB3aXRoLgotICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQ
YXJ0cyA9IGJhc2VQYXJ0cyA9IFtiYXNlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXks
IGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAvL3Nv
IHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNl
TmFtZSdzCi0gICAgICAgICAgICAgICAgICAgICAgICAvL21vZHVsZS4gRm9yIGluc3RhbmNlLCBi
YXNlTmFtZSBvZiAnb25lL3R3by90aHJlZScsIG1hcHMgdG8KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25l
L3R3bycgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi4K
LSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMu
c2xpY2UoMCwgYmFzZVBhcnRzLmxlbmd0aCAtIDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5h
bWUuc3BsaXQoJy8nKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRyaW1Eb3RzKG5hbWUpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vU29tZSB1c2Ugb2YgcGFja2FnZXMgbWF5IHVzZSBhIC4gcGF0
aCB0byByZWZlcmVuY2UgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vJ21haW4nIG1vZHVsZSBu
YW1lLCBzbyBub3JtYWxpemUgZm9yIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgIHBrZ0NvbmZp
ZyA9IGdldE93bihjb25maWcucGtncywgKHBrZ05hbWUgPSBuYW1lWzBdKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSBuYW1lLmpvaW4oJy8nKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHBrZ0NvbmZpZyAmJiBuYW1lID09PSBwa2dOYW1lICsgJy8nICsgcGtnQ29uZmlnLm1haW4pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwa2dOYW1lOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmluZGV4T2YoJy4vJykgPT09
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm8gYmFzZU5hbWUsIHNvIHRoaXMgaXMgSUQg
aXMgcmVzb2x2ZWQgcmVsYXRpdmUKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmFzZVVybCwg
cHVsbCBvZmYgdGhlIGxlYWRpbmcgZG90LgotICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFt
ZS5zdWJzdHJpbmcoMik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLgotICAgICAgICAgICAgaWYg
KGFwcGx5TWFwICYmIG1hcCAmJiAoYmFzZVBhcnRzIHx8IHN0YXJNYXApKSB7Ci0gICAgICAgICAg
ICAgICAgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpOwotCi0gICAgICAgICAgICAgICAgZm9y
IChpID0gbmFtZVBhcnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewotICAgICAgICAgICAgICAg
ICAgICBuYW1lU2VnbWVudCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXJ0cykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy9GaW5kIHRoZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZp
Zy4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vU28sIGRvIGpvaW5zIG9uIHRoZSBiaWdnZXN0
IHRvIHNtYWxsZXN0IGxlbmd0aHMgb2YgYmFzZVBhcnRzLgotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChqID0gYmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcCwgYmFzZVBhcnRzLnNsaWNl
KDAsIGopLmpvaW4oJy8nKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jhc2VO
YW1lIHNlZ21lbnQgaGFzIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vdGhpcyBuYW1lLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtYXBWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBW
YWx1ZSA9IGdldE93bihtYXBWYWx1ZSwgbmFtZVNlZ21lbnQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vTWF0Y2gsIHVwZGF0ZSBuYW1lIHRvIHRoZSBuZXcgdmFsdWUuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IG1hcFZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGZvdW5kTWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGEgc3RhciBtYXAg
bWF0Y2gsIGJ1dCBqdXN0IGhvbGQgb24gdG8gaXQsCi0gICAgICAgICAgICAgICAgICAgIC8vaWYg
dGhlcmUgaXMgYSBzaG9ydGVyIHNlZ21lbnQgbWF0Y2ggbGF0ZXIgaW4gYSBtYXRjaGluZwotICAg
ICAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBvdmVyIHRoaXMgc3RhciBtYXAu
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTdGFyTWFwICYmIHN0YXJNYXAgJiYgZ2V0
T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm91
bmRTdGFyTWFwID0gZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJJID0gaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghZm91bmRNYXAgJiYgZm91bmRTdGFyTWFwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gZm91bmRTdGFyTWFwOwotICAgICAgICAg
ICAgICAgICAgICBmb3VuZEkgPSBzdGFySTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoZm91bmRNYXApIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzLnNw
bGljZSgwLCBmb3VuZEksIGZvdW5kTWFwKTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5h
bWVQYXJ0cy5qb2luKCcvJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJl
bW92ZVNjcmlwdChuYW1lKSB7Ci0gICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7Ci0gICAgICAg
ICAgICAgICAgZWFjaChzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHROb2RlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9k
dWxlJykgPT09IG5hbWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2Rl
LmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpID09PSBjb250ZXh0LmNvbnRleHRO
YW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQoc2NyaXB0Tm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gaGFzUGF0aEZhbGxiYWNrKGlkKSB7
Ci0gICAgICAgICAgICB2YXIgcGF0aENvbmZpZyA9IGdldE93bihjb25maWcucGF0aHMsIGlkKTsK
LSAgICAgICAgICAgIGlmIChwYXRoQ29uZmlnICYmIGlzQXJyYXkocGF0aENvbmZpZykgJiYgcGF0
aENvbmZpZy5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAgICAgLy9Qb3Agb2ZmIHRoZSBmaXJz
dCBhcnJheSB2YWx1ZSwgc2luY2UgaXQgZmFpbGVkLCBhbmQKLSAgICAgICAgICAgICAgICAvL3Jl
dHJ5Ci0gICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlmdCgpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQucmVxdWlyZS51bmRlZihpZCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5yZXF1
aXJlKFtpZF0pOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy9UdXJucyBhIHBsdWdpbiFyZXNvdXJjZSB0byBbcGx1Z2lu
LCByZXNvdXJjZV0KLSAgICAgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlm
IHRoZSBuYW1lCi0gICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KLSAgICAg
ICAgZnVuY3Rpb24gc3BsaXRQcmVmaXgobmFtZSkgewotICAgICAgICAgICAgdmFyIHByZWZpeCwK
LSAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOwot
ICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKLSAgICAgICAgICAgICAgICBwcmVmaXggPSBu
YW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vi
c3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAg
ICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVm
aXgsIG1vZHVsZQotICAgICAgICAgKiBuYW1lLCBhbmQgcGF0aC4gSWYgcGFyZW50TW9kdWxlTWFw
IGlzIHByb3ZpZGVkIGl0IHdpbGwKLSAgICAgICAgICogYWxzbyBub3JtYWxpemUgdGhlIG5hbWUg
dmlhIHJlcXVpcmUubm9ybWFsaXplKCkKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHtT
dHJpbmd9IG5hbWUgdGhlIG1vZHVsZSBuYW1lCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBb
cGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxlIG1hcAotICAgICAgICAgKiBmb3IgdGhlIG1v
ZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCi0gICAgICAgICAqIEBw
YXJhbSB7Qm9vbGVhbn0gaXNOb3JtYWxpemVkOiBpcyB0aGUgSUQgYWxyZWFkeSBub3JtYWxpemVk
LgotICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYgdGhpcyBjYWxsIGlzIGRvbmUgZm9yIGEgZGVm
aW5lKCkgbW9kdWxlIElELgotICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBh
cHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCi0gICAgICAgICAqIFNob3VsZCBvbmx5IGJl
IHRydWUgaWYgdGhpcyBtYXAgaXMgZm9yIGEgZGVwZW5kZW5jeS4KLSAgICAgICAgICoKLSAgICAg
ICAgICogQHJldHVybnMge09iamVjdH0KLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIG1h
a2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxlTWFwLCBpc05vcm1hbGl6ZWQsIGFwcGx5TWFw
KSB7Ci0gICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRz
LAotICAgICAgICAgICAgICAgIHByZWZpeCA9IG51bGwsCi0gICAgICAgICAgICAgICAgcGFyZW50
TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVudE1vZHVsZU1hcC5uYW1lIDogbnVsbCwKLSAg
ICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAotICAgICAgICAgICAgICAgIGlzRGVm
aW5lID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9ICcnOwotCi0gICAg
ICAgICAgICAvL0lmIG5vIG5hbWUsIHRoZW4gaXQgbWVhbnMgaXQgaXMgYSByZXF1aXJlIGNhbGws
IGdlbmVyYXRlIGFuCi0gICAgICAgICAgICAvL2ludGVybmFsIG5hbWUuCi0gICAgICAgICAgICBp
ZiAoIW5hbWUpIHsKLSAgICAgICAgICAgICAgICBpc0RlZmluZSA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJlQ291bnRlciArPSAxKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7Ci0gICAgICAg
ICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07Ci0gICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRz
WzFdOwotCi0gICAgICAgICAgICBpZiAocHJlZml4KSB7Ci0gICAgICAgICAgICAgICAgcHJlZml4
ID0gbm9ybWFsaXplKHByZWZpeCwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwotICAgICAgICAgICAg
ICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZpbmVkLCBwcmVmaXgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlz
IGEgYmFzZSBuYW1lLgotICAgICAgICAgICAgaWYgKG5hbWUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAocHJlZml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW5Nb2R1bGUgJiYgcGx1
Z2luTW9kdWxlLm5vcm1hbGl6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9QbHVnaW4g
aXMgbG9hZGVkLCB1c2UgaXRzIG5vcm1hbGl6ZSBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rp
b24gKG5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXpl
KG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy9BIHJlZ3VsYXIgbW9kdWxlLgotICAgICAgICAgICAgICAgICAgICBub3Jt
YWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemVkIG5hbWUgbWF5IGJlIGEgcGx1Z2luIElEIGR1
ZSB0byBtYXAgY29uZmlnCi0gICAgICAgICAgICAgICAgICAgIC8vYXBwbGljYXRpb24gaW4gbm9y
bWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMgbXVzdAotICAgICAgICAgICAgICAgICAgICAv
L2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0aGF0IHBhcnQu
Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5vcm1hbGl6ZWRO
YW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwotICAgICAg
ICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKLSAgICAgICAgICAg
ICAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICB1cmwg
PSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvL0lmIHRoZSBpZCBpcyBhIHBsdWdpbiBpZCB0
aGF0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGlmIGl0IG5lZWRzCi0gICAgICAgICAgICAvL25vcm1h
bGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlxdWUgSUQgc28gdHdvIG1hdGNoaW5nIHJlbGF0
aXZlCi0gICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUgc2VwYXJhdGUu
Ci0gICAgICAgICAgICBzdWZmaXggPSBwcmVmaXggJiYgIXBsdWdpbk1vZHVsZSAmJiAhaXNOb3Jt
YWxpemVkID8KLSAgICAgICAgICAgICAgICAgICAgICdfdW5ub3JtYWxpemVkJyArICh1bm5vcm1h
bGl6ZWRDb3VudGVyICs9IDEpIDoKLSAgICAgICAgICAgICAgICAgICAgICcnOwotCi0gICAgICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAotICAgICAgICAg
ICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLAotICAgICAgICAgICAgICAgIHBhcmVudE1hcDog
cGFyZW50TW9kdWxlTWFwLAotICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDogISFzdWZmaXgs
Ci0gICAgICAgICAgICAgICAgdXJsOiB1cmwsCi0gICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1l
OiBvcmlnaW5hbE5hbWUsCi0gICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVmaW5lLAotICAg
ICAgICAgICAgICAgIGlkOiAocHJlZml4ID8KLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZp
eCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1h
bGl6ZWROYW1lKSArIHN1ZmZpeAotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGdldE1vZHVsZShkZXBNYXApIHsKLSAgICAgICAgICAgIHZhciBpZCA9IGRlcE1h
cC5pZCwKLSAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKLQotICAg
ICAgICAgICAgaWYgKCFtb2QpIHsKLSAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF0g
PSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIG1vZDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1hcCwg
bmFtZSwgZm4pIHsKLSAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKLSAgICAgICAgICAg
ICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKLQotICAgICAgICAgICAgaWYgKGhhc1By
b3AoZGVmaW5lZCwgaWQpICYmCi0gICAgICAgICAgICAgICAgICAgICghbW9kIHx8IG1vZC5kZWZp
bmVFbWl0Q29tcGxldGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZpbmVk
JykgewotICAgICAgICAgICAgICAgICAgICBmbihkZWZpbmVkW2lkXSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtb2QgPSBnZXRNb2R1
bGUoZGVwTWFwKTsKLSAgICAgICAgICAgICAgICBpZiAobW9kLmVycm9yICYmIG5hbWUgPT09ICdl
cnJvcicpIHsKLSAgICAgICAgICAgICAgICAgICAgZm4obW9kLmVycm9yKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtb2Qub24obmFtZSwgZm4pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIG9uRXJyb3IoZXJyLCBlcnJiYWNrKSB7Ci0gICAgICAgICAgICB2YXIgaWRzID0gZXJyLnJl
cXVpcmVNb2R1bGVzLAotICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGlmIChlcnJiYWNrKSB7Ci0gICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlYWNoKGlkcywgZnVuY3Rpb24gKGlk
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly9TZXQgZXJyb3Igb24gbW9kdWxlLCBzbyBpdCBza2lwcyB0aW1lb3V0IGNoZWNrcy4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1vZC5lcnJvciA9IGVycjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtb2QuZXZlbnRzLmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm90aWZpZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdl
cnJvcicsIGVycik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghbm90aWZp
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IoZXJyKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAg
ICogSW50ZXJuYWwgbWV0aG9kIHRvIHRyYW5zZmVyIGdsb2JhbFF1ZXVlIGl0ZW1zIHRvIHRoaXMg
Y29udGV4dCdzCi0gICAgICAgICAqIGRlZlF1ZXVlLgotICAgICAgICAgKi8KLSAgICAgICAgZnVu
Y3Rpb24gdGFrZUdsb2JhbFF1ZXVlKCkgewotICAgICAgICAgICAgLy9QdXNoIGFsbCB0aGUgZ2xv
YmFsRGVmUXVldWUgaXRlbXMgaW50byB0aGUgY29udGV4dCdzIGRlZlF1ZXVlCi0gICAgICAgICAg
ICBpZiAoZ2xvYmFsRGVmUXVldWUubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy9BcnJheSBz
cGxpY2UgaW4gdGhlIHZhbHVlcyBzaW5jZSB0aGUgY29udGV4dCBjb2RlIGhhcyBhCi0gICAgICAg
ICAgICAgICAgLy9sb2NhbCB2YXIgcmVmIHRvIGRlZlF1ZXVlLCBzbyBjYW5ub3QganVzdCByZWFz
c2lnbiB0aGUgb25lCi0gICAgICAgICAgICAgICAgLy9vbiBjb250ZXh0LgotICAgICAgICAgICAg
ICAgIGFwc3AuYXBwbHkoZGVmUXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVm
UXVldWUubGVuZ3RoIC0gMSwgMF0uY29uY2F0KGdsb2JhbERlZlF1ZXVlKSk7Ci0gICAgICAgICAg
ICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIGhhbmRsZXJzID0gewotICAgICAgICAgICAgJ3JlcXVpcmUnOiBmdW5jdGlvbiAobW9k
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZC5yZXF1aXJlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtb2QucmVxdWlyZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKG1vZC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSht
b2QubWFwKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
ICdleHBvcnRzJzogZnVuY3Rpb24gKG1vZCkgewotICAgICAgICAgICAgICAgIG1vZC51c2luZ0V4
cG9ydHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlzRGVmaW5lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXhwb3J0cykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1vZC5leHBvcnRzOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QuZXhwb3J0cyA9IGRlZmluZWRbbW9k
Lm1hcC5pZF0gPSB7fSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ21vZHVsZSc6IGZ1bmN0aW9uIChtb2QpIHsK
LSAgICAgICAgICAgICAgICBpZiAobW9kLm1vZHVsZSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbW9kLm1vZHVsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKG1vZC5tb2R1bGUgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZDogbW9kLm1hcC5pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogbW9kLm1hcC51cmws
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGtnID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBtb2QubWFwLmlkKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGb3IgcGFja2FnZXMsIG9ubHkgc3VwcG9ydCBjb25maWcgdGFyZ2V0
ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGUgbWFpbiBtb2R1bGUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHBrZyA/IGdldE93bihjb25maWcuY29uZmln
LCBtb2QubWFwLmlkICsgJy8nICsgcGtnLm1haW4pIDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0T3duKGNvbmZpZy5jb25maWcsIG1vZC5tYXAuaWQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgYyB8fCB7fTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzOiBkZWZpbmVkW21vZC5t
YXAuaWRdCi0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBmdW5jdGlvbiBjbGVhblJlZ2lzdHJ5KGlk
KSB7Ci0gICAgICAgICAgICAvL0NsZWFuIHVwIG1hY2hpbmVyeSB1c2VkIGZvciB3YWl0aW5nIG1v
ZHVsZXMuCi0gICAgICAgICAgICBkZWxldGUgcmVnaXN0cnlbaWRdOwotICAgICAgICAgICAgZGVs
ZXRlIGVuYWJsZWRSZWdpc3RyeVtpZF07Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBi
cmVha0N5Y2xlKG1vZCwgdHJhY2VkLCBwcm9jZXNzZWQpIHsKLSAgICAgICAgICAgIHZhciBpZCA9
IG1vZC5tYXAuaWQ7Ci0KLSAgICAgICAgICAgIGlmIChtb2QuZXJyb3IpIHsKLSAgICAgICAgICAg
ICAgICBtb2QuZW1pdCgnZXJyb3InLCBtb2QuZXJyb3IpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICB0cmFjZWRbaWRdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlYWNo
KG1vZC5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBkZXBJZCA9IGRlcE1hcC5pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGdl
dE93bihyZWdpc3RyeSwgZGVwSWQpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vT25seSBmb3Jj
ZSB0aGluZ3MgdGhhdCBoYXZlIG5vdCBjb21wbGV0ZWQKLSAgICAgICAgICAgICAgICAgICAgLy9i
ZWluZyBkZWZpbmVkLCBzbyBzdGlsbCBpbiB0aGUgcmVnaXN0cnksCi0gICAgICAgICAgICAgICAg
ICAgIC8vYW5kIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIG1hdGNoZWQgdXAKLSAgICAgICAgICAg
ICAgICAgICAgLy9pbiB0aGUgbW9kdWxlIGFscmVhZHkuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChkZXAgJiYgIW1vZC5kZXBNYXRjaGVkW2ldICYmICFwcm9jZXNzZWRbZGVwSWRdKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKHRyYWNlZCwgZGVwSWQpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kLmRlZmluZURlcChpLCBkZWZpbmVkW2RlcElkXSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmNoZWNrKCk7IC8vcGFzcyBmYWxzZT8KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWtDeWNsZShkZXAsIHRyYWNlZCwgcHJvY2Vzc2VkKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIHByb2Nlc3NlZFtpZF0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoKSB7Ci0gICAgICAgICAgICB2YXIg
bWFwLCBtb2RJZCwgZXJyLCB1c2luZ1BhdGhGYWxsYmFjaywKLSAgICAgICAgICAgICAgICB3YWl0
SW50ZXJ2YWwgPSBjb25maWcud2FpdFNlY29uZHMgKiAxMDAwLAotICAgICAgICAgICAgICAgIC8v
SXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgd2FpdCBpbnRlcnZhbCBieSB1c2luZyB3YWl0
U2Vjb25kcyBvZiAwLgotICAgICAgICAgICAgICAgIGV4cGlyZWQgPSB3YWl0SW50ZXJ2YWwgJiYg
KGNvbnRleHQuc3RhcnRUaW1lICsgd2FpdEludGVydmFsKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgp
LAotICAgICAgICAgICAgICAgIG5vTG9hZHMgPSBbXSwKLSAgICAgICAgICAgICAgICByZXFDYWxs
cyA9IFtdLAotICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IGZhbHNlLAotICAgICAgICAg
ICAgICAgIG5lZWRDeWNsZUNoZWNrID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy9EbyBub3QgYm90
aGVyIGlmIHRoaXMgY2FsbCB3YXMgYSByZXN1bHQgb2YgYSBjeWNsZSBicmVhay4KLSAgICAgICAg
ICAgIGlmIChpbkNoZWNrTG9hZGVkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgLy9GaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiBhbGwgdGhlIG1vZHVsZXMuCi0gICAgICAgICAg
ICBlYWNoUHJvcChlbmFibGVkUmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKLSAgICAgICAgICAg
ICAgICBtYXAgPSBtb2QubWFwOwotICAgICAgICAgICAgICAgIG1vZElkID0gbWFwLmlkOwotCi0g
ICAgICAgICAgICAgICAgLy9Ta2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgZW5hYmxlZCBvciBpbiBl
cnJvciBzdGF0ZS4KLSAgICAgICAgICAgICAgICBpZiAoIW1vZC5lbmFibGVkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIW1hcC5pc0RlZmluZSkgewotICAgICAgICAgICAgICAgICAgICByZXFDYWxscy5wdXNo
KG1vZCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFtb2QuZXJy
b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgbW9kdWxlIHNob3VsZCBiZSBleGVj
dXRlZCwgYW5kIGl0IGhhcyBub3QKLSAgICAgICAgICAgICAgICAgICAgLy9iZWVuIGluaXRlZCBh
bmQgdGltZSBpcyB1cCwgcmVtZW1iZXIgaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghbW9k
LmluaXRlZCAmJiBleHBpcmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0
aEZhbGxiYWNrKG1vZElkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nUGF0
aEZhbGxiYWNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRp
bmcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub0xvYWRzLnB1c2gobW9kSWQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZVNjcmlwdChtb2RJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1vZC5pbml0ZWQgJiYgbW9kLmZldGNo
ZWQgJiYgbWFwLmlzRGVmaW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRp
bmcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXAucHJlZml4KSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ObyByZWFzb24gdG8ga2VlcCBsb29raW5nIGZv
ciB1bmZpbmlzaGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2FkaW5nLiBJZiB0
aGUgb25seSBzdGlsbExvYWRpbmcgaXMgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
cGx1Z2luIHJlc291cmNlIHRob3VnaCwga2VlcCBnb2luZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvL2JlY2F1c2UgaXQgbWF5IGJlIHRoYXQgYSBwbHVnaW4gcmVzb3VyY2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvL2lzIHdhaXRpbmcgb24gYSBub24tcGx1Z2luIGN5Y2xl
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmVlZEN5Y2xlQ2hlY2sgPSBm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKGV4
cGlyZWQgJiYgbm9Mb2Fkcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAvL0lmIHdhaXQgdGlt
ZSBleHBpcmVkLCB0aHJvdyBlcnJvciBvZiB1bmxvYWRlZCBtb2R1bGVzLgotICAgICAgICAgICAg
ICAgIGVyciA9IG1ha2VFcnJvcigndGltZW91dCcsICdMb2FkIHRpbWVvdXQgZm9yIG1vZHVsZXM6
ICcgKyBub0xvYWRzLCBudWxsLCBub0xvYWRzKTsKLSAgICAgICAgICAgICAgICBlcnIuY29udGV4
dE5hbWUgPSBjb250ZXh0LmNvbnRleHROYW1lOwotICAgICAgICAgICAgICAgIHJldHVybiBvbkVy
cm9yKGVycik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vTm90IGV4cGlyZWQsIGNo
ZWNrIGZvciBhIGN5Y2xlLgotICAgICAgICAgICAgaWYgKG5lZWRDeWNsZUNoZWNrKSB7Ci0gICAg
ICAgICAgICAgICAgZWFjaChyZXFDYWxscywgZnVuY3Rpb24gKG1vZCkgewotICAgICAgICAgICAg
ICAgICAgICBicmVha0N5Y2xlKG1vZCwge30sIHt9KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9JZiBzdGlsbCB3YWl0aW5nIG9uIGxvYWRzLCBh
bmQgdGhlIHdhaXRpbmcgbG9hZCBpcyBzb21ldGhpbmcKLSAgICAgICAgICAgIC8vb3RoZXIgdGhh
biBhIHBsdWdpbiByZXNvdXJjZSwgb3IgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5kaW5nCi0gICAg
ICAgICAgICAvL3NjcmlwdHMsIHRoZW4ganVzdCB0cnkgYmFjayBsYXRlci4KLSAgICAgICAgICAg
IGlmICgoIWV4cGlyZWQgfHwgdXNpbmdQYXRoRmFsbGJhY2spICYmIHN0aWxsTG9hZGluZykgewot
ICAgICAgICAgICAgICAgIC8vU29tZXRoaW5nIGlzIHN0aWxsIHdhaXRpbmcgdG8gbG9hZC4gV2Fp
dCBmb3IgaXQsIGJ1dCBvbmx5Ci0gICAgICAgICAgICAgICAgLy9pZiBhIHRpbWVvdXQgaXMgbm90
IGFscmVhZHkgaW4gZWZmZWN0LgotICAgICAgICAgICAgICAgIGlmICgoaXNCcm93c2VyIHx8IGlz
V2ViV29ya2VyKSAmJiAhY2hlY2tMb2FkZWRUaW1lb3V0SWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0sIDUwKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluQ2hlY2tM
b2FkZWQgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIE1vZHVsZSA9IGZ1bmN0aW9uICht
YXApIHsKLSAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gZ2V0T3duKHVuZGVmRXZlbnRzLCBtYXAu
aWQpIHx8IHt9OwotICAgICAgICAgICAgdGhpcy5tYXAgPSBtYXA7Ci0gICAgICAgICAgICB0aGlz
LnNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1hcC5pZCk7Ci0gICAgICAgICAgICB0aGlzLmRl
cEV4cG9ydHMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdOwotICAgICAgICAg
ICAgdGhpcy5kZXBNYXRjaGVkID0gW107Ci0gICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHMgPSB7
fTsKLSAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgPSAwOwotCi0gICAgICAgICAgICAvKiB0aGlz
LmV4cG9ydHMgdGhpcy5mYWN0b3J5Ci0gICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXSwK
LSAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCwgdGhpcy5mZXRjaGVkCi0gICAgICAgICAgICAq
LwotICAgICAgICB9OwotCi0gICAgICAgIE1vZHVsZS5wcm90b3R5cGUgPSB7Ci0gICAgICAgICAg
ICBpbml0OiBmdW5jdGlvbiAoZGVwTWFwcywgZmFjdG9yeSwgZXJyYmFjaywgb3B0aW9ucykgewot
ICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotCi0gICAgICAgICAgICAg
ICAgLy9EbyBub3QgZG8gbW9yZSBpbml0cyBpZiBhbHJlYWR5IGRvbmUuIENhbiBoYXBwZW4gaWYg
dGhlcmUKLSAgICAgICAgICAgICAgICAvL2FyZSBtdWx0aXBsZSBkZWZpbmUgY2FsbHMgZm9yIHRo
ZSBzYW1lIG1vZHVsZS4gVGhhdCBpcyBub3QKLSAgICAgICAgICAgICAgICAvL2Egbm9ybWFsLCBj
b21tb24gY2FzZSwgYnV0IGl0IGlzIGFsc28gbm90IHVuZXhwZWN0ZWQuCi0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMuaW5pdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5Owot
Ci0gICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgLy9S
ZWdpc3RlciBmb3IgZXJyb3JzIG9uIHRoaXMgbW9kdWxlLgotICAgICAgICAgICAgICAgICAgICB0
aGlzLm9uKCdlcnJvcicsIGVycmJhY2spOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhp
cy5ldmVudHMuZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9JZiBubyBlcnJiYWNrIGFs
cmVhZHksIGJ1dCB0aGVyZSBhcmUgZXJyb3IgbGlzdGVuZXJzCi0gICAgICAgICAgICAgICAgICAg
IC8vb24gdGhpcyBtb2R1bGUsIHNldCB1cCBhbiBlcnJiYWNrIHRvIHBhc3MgdG8gdGhlIGRlcHMu
Ci0gICAgICAgICAgICAgICAgICAgIGVycmJhY2sgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwotICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAvL0RvIGEgY29weSBvZiB0aGUgZGVwZW5kZW5jeSBhcnJheSwgc28gdGhhdAotICAgICAgICAg
ICAgICAgIC8vc291cmNlIGlucHV0cyBhcmUgbm90IG1vZGlmaWVkLiBGb3IgZXhhbXBsZQotICAg
ICAgICAgICAgICAgIC8vInNoaW0iIGRlcHMgYXJlIHBhc3NlZCBpbiBoZXJlIGRpcmVjdGx5LCBh
bmQKLSAgICAgICAgICAgICAgICAvL2RvaW5nIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUg
ZGVwTWFwcyBhcnJheQotICAgICAgICAgICAgICAgIC8vd291bGQgYWZmZWN0IHRoYXQgY29uZmln
LgotICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IGRlcE1hcHMgJiYgZGVwTWFwcy5zbGlj
ZSgwKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuZXJyYmFjayA9IGVycmJhY2s7Ci0KLSAgICAg
ICAgICAgICAgICAvL0luZGljYXRlIHRoaXMgbW9kdWxlIGhhcyBiZSBpbml0aWFsaXplZAotICAg
ICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHRoaXMu
aWdub3JlID0gb3B0aW9ucy5pZ25vcmU7Ci0KLSAgICAgICAgICAgICAgICAvL0NvdWxkIGhhdmUg
b3B0aW9uIHRvIGluaXQgdGhpcyBtb2R1bGUgaW4gZW5hYmxlZCBtb2RlLAotICAgICAgICAgICAg
ICAgIC8vb3IgY291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgbWFya2VkIGFzIGVuYWJsZWQuIEhv
d2V2ZXIsCi0gICAgICAgICAgICAgICAgLy90aGUgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24g
dW50aWwgaW5pdCBpcyBjYWxsZWQuIFNvCi0gICAgICAgICAgICAgICAgLy9pZiBlbmFibGVkIHBy
ZXZpb3VzbHksIG5vdyB0cmlnZ2VyIGRlcGVuZGVuY2llcyBhcyBlbmFibGVkLgotICAgICAgICAg
ICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5lbmFibGVkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vRW5hYmxlIHRoaXMgbW9kdWxlIGFuZCBkZXBlbmRlbmNpZXMuCi0gICAgICAg
ICAgICAgICAgICAgIC8vV2lsbCBjYWxsIHRoaXMuY2hlY2soKQotICAgICAgICAgICAgICAgICAg
ICB0aGlzLmVuYWJsZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuY2hlY2soKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICBkZWZpbmVEZXA6IGZ1bmN0aW9uIChpLCBkZXBFeHBvcnRzKSB7Ci0gICAg
ICAgICAgICAgICAgLy9CZWNhdXNlIG9mIGN5Y2xlcywgZGVmaW5lZCBjYWxsYmFjayBmb3IgYSBn
aXZlbgotICAgICAgICAgICAgICAgIC8vZXhwb3J0IGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9u
Y2UuCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlcE1hdGNoZWRbaV0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkW2ldID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5kZXBDb3VudCAtPSAxOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9y
dHNbaV0gPSBkZXBFeHBvcnRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIGZldGNoOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRo
aXMuZmV0Y2hlZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7Ci0KLSAgICAgICAgICAg
ICAgICBjb250ZXh0LnN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Ci0KLSAgICAg
ICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXA7Ci0KLSAgICAgICAgICAgICAgICAvL0lmIHRo
ZSBtYW5hZ2VyIGlzIGZvciBhIHBsdWdpbiBtYW5hZ2VkIHJlc291cmNlLAotICAgICAgICAgICAg
ICAgIC8vYXNrIHRoZSBwbHVnaW4gdG8gbG9hZCBpdCBub3cuCi0gICAgICAgICAgICAgICAgaWYg
KHRoaXMuc2hpbSkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ha2VSZXF1aXJlKHRo
aXMubWFwLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0
cnVlCi0gICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuc2hpbS5kZXBzIHx8IFtdLCBiaW5kKHRo
aXMsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAucHJl
Zml4ID8gdGhpcy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
UmVndWxhciBkZXBlbmRlbmN5LgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZp
eCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgICAgIHZhciB1cmwgPSB0aGlzLm1hcC51cmw7Ci0KLSAgICAgICAgICAgICAgICAvL1Jl
Z3VsYXIgZGVwZW5kZW5jeS4KLSAgICAgICAgICAgICAgICBpZiAoIXVybEZldGNoZWRbdXJsXSkg
ewotICAgICAgICAgICAgICAgICAgICB1cmxGZXRjaGVkW3VybF0gPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LmxvYWQodGhpcy5tYXAuaWQsIHVybCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBD
aGVja3MgaWYgdGhlIG1vZHVsZSBpcyByZWFkeSB0byBkZWZpbmUgaXRzZWxmLCBhbmQgaWYgc28s
Ci0gICAgICAgICAgICAgKiBkZWZpbmUgaXQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
IGNoZWNrOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQg
fHwgdGhpcy5lbmFibGluZykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGVyciwgY2pzTW9kdWxlLAotICAgICAg
ICAgICAgICAgICAgICBpZCA9IHRoaXMubWFwLmlkLAotICAgICAgICAgICAgICAgICAgICBkZXBF
eHBvcnRzID0gdGhpcy5kZXBFeHBvcnRzLAotICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0g
dGhpcy5leHBvcnRzLAotICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5
OwotCi0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRlZCkgewotICAgICAgICAgICAgICAg
ICAgICB0aGlzLmZldGNoKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVycm9y
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzLmVycm9yKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmluaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vVGhlIGZhY3RvcnkgY291bGQgdHJpZ2dlciBhbm90aGVyIHJlcXVpcmUgY2Fs
bAotICAgICAgICAgICAgICAgICAgICAvL3RoYXQgd291bGQgcmVzdWx0IGluIGNoZWNraW5nIHRo
aXMgbW9kdWxlIHRvCi0gICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lIGl0c2VsZiBhZ2Fpbi4g
SWYgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcwotICAgICAgICAgICAgICAgICAgICAvL29mIGRvaW5n
IHRoYXQsIHNraXAgdGhpcyB3b3JrLgotICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5n
ID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXBDb3VudCA8IDEgJiYg
IXRoaXMuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24o
ZmFjdG9yeSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGlzIGFu
IGVycm9yIGxpc3RlbmVyLCBmYXZvciBwYXNzaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy90byB0aGF0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIEhvd2V2ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmx5IGRvIGl0IGZvciBkZWZpbmUoKSdkICBtb2R1
bGVzLiByZXF1aXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcnJiYWNrcyBzaG91
bGQgbm90IGJlIGNhbGxlZCBmb3IgZmFpbHVyZXMgaW4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvL3RoZWlyIGNhbGxiYWNrcyAoIzY5OSkuIEhvd2V2ZXIgaWYgYSBnbG9iYWwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvL29uRXJyb3IgaXMgc2V0LCB1c2UgdGhhdC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZXZlbnRzLmVycm9yICYmIHRoaXMubWFw
LmlzRGVmaW5lKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25FcnJv
ciAhPT0gZGVmYXVsdE9uRXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250
ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVyciA9IGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRl
cEV4cG9ydHMsIGV4cG9ydHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHNldHRpbmcgZXhwb3J0cyB2aWEgJ21vZHVs
ZScgaXMgaW4gcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mYXZvciB0
aGF0IG92ZXIgcmV0dXJuIHZhbHVlIGFuZCBleHBvcnRzLiBBZnRlciB0aGF0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvL2Zhdm9yIGEgbm9uLXVuZGVmaW5lZCByZXR1cm4gdmFs
dWUgb3ZlciBleHBvcnRzIHVzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pz
TW9kdWxlID0gdGhpcy5tb2R1bGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjanNNb2R1bGUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
anNNb2R1bGUuZXhwb3J0cyAhPT0gdW5kZWZpbmVkICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgaXQgaXMgbm90IGFscmVhZHkgdGhlIGV4cG9y
dHMgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1
bGUuZXhwb3J0cyAhPT0gdGhpcy5leHBvcnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHBvcnRzID0gY2pzTW9kdWxlLmV4cG9ydHM7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhwb3J0cyA9PT0gdW5kZWZpbmVkICYmIHRoaXMu
dXNpbmdFeHBvcnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4
cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhpcy5leHBvcnRzOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRoaXMubWFwOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSB0aGlzLm1hcC5pc0RlZmluZSA/IFt0
aGlzLm1hcC5pZF0gOiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIu
cmVxdWlyZVR5cGUgPSB0aGlzLm1hcC5pc0RlZmluZSA/ICdkZWZpbmUnIDogJ3JlcXVpcmUnOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJv
ciA9IGVycikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0p1c3Qg
YSBsaXRlcmFsIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZh
Y3Rvcnk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuZXhwb3J0cyA9IGV4cG9ydHM7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLm1hcC5pc0RlZmluZSAmJiAhdGhpcy5pZ25vcmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZpbmVkW2lkXSA9IGV4cG9ydHM7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmVxLm9uUmVzb3VyY2VMb2FkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcS5vblJlc291cmNlTG9hZChjb250ZXh0LCB0aGlzLm1hcCwgdGhpcy5kZXBN
YXBzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gdXAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmRlZmluZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy9GaW5pc2hlZCB0aGUgZGVmaW5lIHN0YWdlLiBBbGxvdyBjYWxsaW5nIGNo
ZWNrIGFnYWluCi0gICAgICAgICAgICAgICAgICAgIC8vdG8gYWxsb3cgZGVmaW5lIG5vdGlmaWNh
dGlvbnMgYmVsb3cgaW4gdGhlIGNhc2Ugb2YgYQotICAgICAgICAgICAgICAgICAgICAvL2N5Y2xl
LgotICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gZmFsc2U7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuZGVmaW5lZCAmJiAhdGhpcy5kZWZpbmVFbWl0dGVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXR0ZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWZpbmVkJywgdGhpcy5leHBvcnRzKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdENvbXBsZXRlID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgY2FsbFBsdWdpbjogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAg
IHZhciBtYXAgPSB0aGlzLm1hcCwKLSAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQsCi0g
ICAgICAgICAgICAgICAgICAgIC8vTWFwIGFscmVhZHkgbm9ybWFsaXplZCB0aGUgcHJlZml4Lgot
ICAgICAgICAgICAgICAgICAgICBwbHVnaW5NYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXgp
OwotCi0gICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlz
IHBsdWdpbiwgc28gaXQKLSAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xl
cy4KLSAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChwbHVnaW5NYXApOwotCi0gICAg
ICAgICAgICAgICAgb24ocGx1Z2luTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24g
KHBsdWdpbikgewotICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZCwgbm9ybWFsaXplZE1hcCwg
bm9ybWFsaXplZE1vZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLm1hcC5u
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHRoaXMubWFwLnBhcmVu
dE1hcCA/IHRoaXMubWFwLnBhcmVudE1hcC5uYW1lIDogbnVsbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2FsUmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobWFwLnBhcmVudE1hcCwg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vSWYg
Y3VycmVudCBtYXAgaXMgbm90IG5vcm1hbGl6ZWQsIHdhaXQgZm9yIHRoYXQKLSAgICAgICAgICAg
ICAgICAgICAgLy9ub3JtYWxpemVkIG5hbWUgdG8gbG9hZCBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcu
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC51bm5vcm1hbGl6ZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBJRCBpZiB0aGUgcGx1Z2luIGFsbG93
cyBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4ubm9ybWFsaXplKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5ub3JtYWxpemUobmFtZSwg
ZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KSB8fCAnJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy9wcmVmaXggYW5kIG5hbWUgc2hvdWxkIGFscmVhZHkgYmUgbm9ybWFs
aXplZCwgbm8gbmVlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgYXBwbHlpbmcgbWFw
IGNvbmZpZyBhZ2FpbiBlaXRoZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVk
TWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4ICsgJyEnICsgbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnBhcmVu
dE1hcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbihub3JtYWxpemVkTWFwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5j
dGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlnbm9yZTogdHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vcm1hbGl6ZWRNb2QgPSBnZXRPd24ocmVnaXN0cnksIG5vcm1hbGl6ZWRNYXAuaWQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRNb2QpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMg
cGx1Z2luLCBzbyBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNl
ZCBmb3IgY3ljbGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5w
dXNoKG5vcm1hbGl6ZWRNYXApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuZXZlbnRzLmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1h
bGl6ZWRNb2Qub24oJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLmVuYWJs
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBs
b2FkID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgbG9hZC5lcnJvciA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5lcnJvciA9IGVycjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJl
TW9kdWxlcyA9IFtpZF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRlbXAg
dW5ub3JtYWxpemVkIG1vZHVsZXMgZm9yIHRoaXMgbW9kdWxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgLy9zaW5jZSB0aGV5IHdpbGwgbmV2ZXIgYmUgcmVzb2x2ZWQgb3RoZXJ3aXNlIG5vdy4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9k
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaWQuaW5kZXhPZihp
ZCArICdfdW5ub3JtYWxpemVkJykgPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xlYW5SZWdpc3RyeShtb2QubWFwLmlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgb25FcnJvcihlcnIpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgICAgICAgICAvL0FsbG93IHBsdWdpbnMgdG8gbG9hZCBvdGhlciBjb2RlIHdpdGhvdXQgaGF2
aW5nIHRvIGtub3cgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vY29udGV4dCBvciBob3cgdG8g
J2NvbXBsZXRlJyB0aGUgbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgbG9hZC5mcm9tVGV4dCA9
IGJpbmQodGhpcywgZnVuY3Rpb24gKHRleHQsIHRleHRBbHQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBtb2R1bGVOYW1lID0gbWFwLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9k
dWxlTWFwID0gbWFrZU1vZHVsZU1hcChtb2R1bGVOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNJbnRlcmFjdGl2ZSA9IHVzZUludGVyYWN0aXZlOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvL0FzIG9mIDIuMS4wLCBzdXBwb3J0IGp1c3QgcGFzc2luZyB0aGUgdGV4dCwg
dG8gcmVpbmZvcmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAvL2Zyb21UZXh0IG9ubHkgYmVp
bmcgY2FsbGVkIG9uY2UgcGVyIHJlc291cmNlLiBTdGlsbAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy9zdXBwb3J0IG9sZCBzdHlsZSBvZiBwYXNzaW5nIG1vZHVsZU5hbWUgYnV0IGRpc2NhcmQK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhhdCBtb2R1bGVOYW1lIGluIGZhdm9yIG9mIHRo
ZSBpbnRlcm5hbCByZWYuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEFsdCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0QWx0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL1R1cm4gb2ZmIGludGVy
YWN0aXZlIHNjcmlwdCBtYXRjaGluZyBmb3IgSUUgZm9yIGFueSBkZWZpbmUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vY2FsbHMgaW4gdGhlIHRleHQsIHRoZW4gdHVybiBpdCBiYWNrIG9uIGF0
IHRoZSBlbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL1ByaW1l
IHRoZSBzeXN0ZW0gYnkgY3JlYXRpbmcgYSBtb2R1bGUgaW5zdGFuY2UgZm9yCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvL2l0LgotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1v
ZHVsZU1hcCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vVHJhbnNmZXIgYW55IGNvbmZp
ZyB0byB0aGlzIG90aGVyIG1vZHVsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQ
cm9wKGNvbmZpZy5jb25maWcsIGlkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmZpZy5jb25maWdbbW9kdWxlTmFtZV0gPSBjb25maWcuY29uZmlnW2lkXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXEuZXhlYyh0ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25F
cnJvcihtYWtlRXJyb3IoJ2Zyb210ZXh0ZXZhbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnZnJvbVRleHQgZXZhbCBmb3IgJyArIGlkICsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICcgKyBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF0pKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL01h
cmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoZSBwbHVnaW4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vcmVzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5w
dXNoKG1vZHVsZU1hcCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vU3VwcG9ydCBhbm9u
eW1vdXMgbW9kdWxlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVM
b2FkKG1vZHVsZU5hbWUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgdGhlIHZh
bHVlIG9mIHRoYXQgbW9kdWxlIHRvIHRoZSB2YWx1ZSBmb3IgdGhpcwotICAgICAgICAgICAgICAg
ICAgICAgICAgLy9yZXNvdXJjZSBJRC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVx
dWlyZShbbW9kdWxlTmFtZV0sIGxvYWQpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAg
ICAgICAgICAgICAgICAgICAvL1VzZSBwYXJlbnROYW1lIGhlcmUgc2luY2UgdGhlIHBsdWdpbidz
IG5hbWUgaXMgbm90IHJlbGlhYmxlLAotICAgICAgICAgICAgICAgICAgICAvL2NvdWxkIGJlIHNv
bWUgd2VpcmQgc3RyaW5nIHdpdGggbm8gcGF0aCB0aGF0IGFjdHVhbGx5IHdhbnRzIHRvCi0gICAg
ICAgICAgICAgICAgICAgIC8vcmVmZXJlbmNlIHRoZSBwYXJlbnROYW1lJ3MgcGF0aC4KLSAgICAg
ICAgICAgICAgICAgICAgcGx1Z2luLmxvYWQobWFwLm5hbWUsIGxvY2FsUmVxdWlyZSwgbG9hZCwg
Y29uZmlnKTsKLSAgICAgICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAgICAgICAgICBjb250ZXh0
LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwotICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luTWFw
c1twbHVnaW5NYXAuaWRdID0gcGx1Z2luTWFwOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgZW5hYmxlZFJlZ2lzdHJ5
W3RoaXMubWFwLmlkXSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1
ZTsKLQotICAgICAgICAgICAgICAgIC8vU2V0IGZsYWcgbWVudGlvbmluZyB0aGF0IHRoZSBtb2R1
bGUgaXMgZW5hYmxpbmcsCi0gICAgICAgICAgICAgICAgLy9zbyB0aGF0IGltbWVkaWF0ZSBjYWxs
cyB0byB0aGUgZGVmaW5lZCBjYWxsYmFja3MKLSAgICAgICAgICAgICAgICAvL2ZvciBkZXBlbmRl
bmNpZXMgZG8gbm90IHRyaWdnZXIgaW5hZHZlcnRlbnQgbG9hZAotICAgICAgICAgICAgICAgIC8v
d2l0aCB0aGUgZGVwQ291bnQgc3RpbGwgYmVpbmcgemVyby4KLSAgICAgICAgICAgICAgICB0aGlz
LmVuYWJsaW5nID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggZGVwZW5k
ZW5jeQotICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBiaW5kKHRoaXMsIGZ1bmN0
aW9uIChkZXBNYXAsIGkpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtb2QsIGhhbmRs
ZXI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBNYXAgPT09ICdzdHJpbmcn
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0RlcGVuZGVuY3kgbmVlZHMgdG8gYmUgY29u
dmVydGVkIHRvIGEgZGVwTWFwCi0gICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCB3aXJlZCB1
cCB0byB0aGlzIG1vZHVsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcE1hcCA9IG1ha2VN
b2R1bGVNYXAoZGVwTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodGhpcy5tYXAuaXNEZWZpbmUgPyB0aGlzLm1hcCA6IHRoaXMubWFwLnBhcmVudE1h
cCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5z
a2lwTWFwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwc1tpXSA9IGRlcE1h
cDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGdldE93bihoYW5kbGVycywg
ZGVwTWFwLmlkKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBoYW5kbGVyKHRo
aXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCArPSAx
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdkZWZpbmVkJywgYmluZCh0
aGlzLCBmdW5jdGlvbiAoZGVwRXhwb3J0cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZGVmaW5lRGVwKGksIGRlcEV4cG9ydHMpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuY2hlY2soKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXJyYmFjaykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCB0aGlzLmVycmJhY2spKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOwotICAgICAgICAgICAgICAgICAgICBtb2Qg
PSByZWdpc3RyeVtpZF07Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9Ta2lwIHNwZWNpYWwgbW9k
dWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJwotICAgICAgICAgICAgICAg
ICAgICAvL0Fsc28sIGRvbid0IGNhbGwgZW5hYmxlIGlmIGl0IGlzIGFscmVhZHkgZW5hYmxlZCwK
LSAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRhbnQgaW4gY2lyY3VsYXIgZGVwZW5kZW5jeSBj
YXNlcy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGhhbmRsZXJzLCBpZCkgJiYg
bW9kICYmICFtb2QuZW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5l
bmFibGUoZGVwTWFwLCB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0pKTsKLQotICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggcGx1Z2luIHRoYXQgaXMg
dXNlZCBpbgotICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRlbmN5Ci0gICAgICAgICAgICAgICAg
ZWFjaFByb3AodGhpcy5wbHVnaW5NYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW5NYXAp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgcGx1Z2lu
TWFwLmlkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAg
ICAgICAgICB0aGlzLmVuYWJsaW5nID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmNo
ZWNrKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBvbjogZnVuY3Rpb24gKG5hbWUs
IGNiKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdOwotICAg
ICAgICAgICAgICAgIGlmICghY2JzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNicyA9IHRoaXMu
ZXZlbnRzW25hbWVdID0gW107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNi
cy5wdXNoKGNiKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9u
IChuYW1lLCBldnQpIHsKLSAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZXZlbnRzW25hbWVdLCBm
dW5jdGlvbiAoY2IpIHsKLSAgICAgICAgICAgICAgICAgICAgY2IoZXZ0KTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Vycm9yJykgewotICAgICAg
ICAgICAgICAgICAgICAvL05vdyB0aGF0IHRoZSBlcnJvciBoYW5kbGVyIHdhcyB0cmlnZ2VyZWQs
IHJlbW92ZQotICAgICAgICAgICAgICAgICAgICAvL3RoZSBsaXN0ZW5lcnMsIHNpbmNlIHRoaXMg
YnJva2VuIE1vZHVsZSBpbnN0YW5jZQotICAgICAgICAgICAgICAgICAgICAvL2NhbiBzdGF5IGFy
b3VuZCBmb3IgYSB3aGlsZSBpbiB0aGUgcmVnaXN0cnkuCi0gICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLmV2ZW50c1tuYW1lXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rpb24gY2FsbEdldE1vZHVsZShhcmdzKSB7Ci0g
ICAgICAgICAgICAvL1NraXAgbW9kdWxlcyBhbHJlYWR5IGRlZmluZWQuCi0gICAgICAgICAgICBp
ZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKLSAgICAgICAgICAgICAgICBnZXRNb2R1
bGUobWFrZU1vZHVsZU1hcChhcmdzWzBdLCBudWxsLCB0cnVlKSkuaW5pdChhcmdzWzFdLCBhcmdz
WzJdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIHJlbW92
ZUxpc3RlbmVyKG5vZGUsIGZ1bmMsIG5hbWUsIGllTmFtZSkgewotICAgICAgICAgICAgLy9GYXZv
ciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQotICAgICAgICAgICAgLy9pc3N1ZSwgc2VlIGF0
dGFjaEV2ZW50L2FkZEV2ZW50TGlzdGVuZXIgY29tbWVudCBlbHNld2hlcmUKLSAgICAgICAgICAg
IC8vaW4gdGhpcyBmaWxlLgotICAgICAgICAgICAgaWYgKG5vZGUuZGV0YWNoRXZlbnQgJiYgIWlz
T3BlcmEpIHsKLSAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJZiBub3QgaXQgd2lsbCB0
aHJvdyBhbiBlcnJvciwgd2hpY2ggd2lsbCBiZQotICAgICAgICAgICAgICAgIC8vdXNlZnVsIHRv
IGtub3cuCi0gICAgICAgICAgICAgICAgaWYgKGllTmFtZSkgewotICAgICAgICAgICAgICAgICAg
ICBub2RlLmRldGFjaEV2ZW50KGllTmFtZSwgZnVuYyk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVu
ZXIobmFtZSwgZnVuYywgZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLyoqCi0gICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZyb20gYSBzY3JpcHQgbm9kZSwgZ2V0
IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAotICAgICAgICAgKiBhbmQgdGhlbiByZW1vdmVz
IHRoZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIG5vZGUuCi0gICAgICAgICAqIEBwYXJhbSB7RXZl
bnR9IGV2dAotICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQotICAgICAgICAgKi8KLSAgICAg
ICAgZnVuY3Rpb24gZ2V0U2NyaXB0RGF0YShldnQpIHsKLSAgICAgICAgICAgIC8vVXNpbmcgY3Vy
cmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QK
LSAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRo
aXMgb25lIHdhcyBlYXN5IGVub3VnaAotICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGls
bCBtYWtlcyBzZW5zZS4KLSAgICAgICAgICAgIHZhciBub2RlID0gZXZ0LmN1cnJlbnRUYXJnZXQg
fHwgZXZ0LnNyY0VsZW1lbnQ7Ci0KLSAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBsaXN0ZW5lcnMg
b25jZSBoZXJlLgotICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNj
cmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5nZScpOwotICAgICAgICAgICAgcmVt
b3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdEVycm9yLCAnZXJyb3InKTsKLQotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBub2RlOiBub2RlLAotICAgICAgICAg
ICAgICAgIGlkOiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUn
KQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGludGFrZURl
ZmluZXMoKSB7Ci0gICAgICAgICAgICB2YXIgYXJnczsKLQotICAgICAgICAgICAgLy9BbnkgZGVm
aW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGludGFrZSB0aGVtIG5vdy4KLSAgICAg
ICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwotCi0gICAgICAgICAgICAvL01ha2Ugc3VyZSBhbnkg
cmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJseSBwcm9jZXNzZWQuCi0gICAgICAg
ICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgYXJncyA9IGRl
ZlF1ZXVlLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdtaXNtYXRjaCcs
ICdNaXNtYXRjaGVkIGFub255bW91cyBkZWZpbmUoKSBtb2R1bGU6ICcgKyBhcmdzW2FyZ3MubGVu
Z3RoIC0gMV0pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvL2FyZ3MgYXJlIGlkLCBkZXBzLCBmYWN0b3J5LiBTaG91bGQgYmUgbm9ybWFsaXplZCBieSB0
aGUKLSAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUoKSBmdW5jdGlvbi4KLSAgICAgICAgICAg
ICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb250ZXh0ID0gewotICAgICAgICAgICAgY29u
ZmlnOiBjb25maWcsCi0gICAgICAgICAgICBjb250ZXh0TmFtZTogY29udGV4dE5hbWUsCi0gICAg
ICAgICAgICByZWdpc3RyeTogcmVnaXN0cnksCi0gICAgICAgICAgICBkZWZpbmVkOiBkZWZpbmVk
LAotICAgICAgICAgICAgdXJsRmV0Y2hlZDogdXJsRmV0Y2hlZCwKLSAgICAgICAgICAgIGRlZlF1
ZXVlOiBkZWZRdWV1ZSwKLSAgICAgICAgICAgIE1vZHVsZTogTW9kdWxlLAotICAgICAgICAgICAg
bWFrZU1vZHVsZU1hcDogbWFrZU1vZHVsZU1hcCwKLSAgICAgICAgICAgIG5leHRUaWNrOiByZXEu
bmV4dFRpY2ssCi0gICAgICAgICAgICBvbkVycm9yOiBvbkVycm9yLAotCi0gICAgICAgICAgICAv
KioKLSAgICAgICAgICAgICAqIFNldCBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250ZXh0Lgot
ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVn
cmF0ZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAo
Y2ZnKSB7Ci0gICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBh
IHNsYXNoLgotICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybCkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2ZnLmJhc2VVcmwuY2hhckF0KGNmZy5iYXNlVXJsLmxlbmd0aCAtIDEpICE9
PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsICs9ICcvJzsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vU2F2ZSBvZmYgdGhlIHBhdGhzIGFuZCBwYWNrYWdlcyBzaW5jZSB0aGV5IHJlcXVpcmUgc3Bl
Y2lhbCBwcm9jZXNzaW5nLAotICAgICAgICAgICAgICAgIC8vdGhleSBhcmUgYWRkaXRpdmUuCi0g
ICAgICAgICAgICAgICAgdmFyIHBrZ3MgPSBjb25maWcucGtncywKLSAgICAgICAgICAgICAgICAg
ICAgc2hpbSA9IGNvbmZpZy5zaGltLAotICAgICAgICAgICAgICAgICAgICBvYmpzID0gewotICAg
ICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25maWc6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKLSAgICAg
ICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rp
b24gKHZhbHVlLCBwcm9wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvYmpzW3Byb3BdKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gJ21hcCcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5tYXApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uZmlnLm1hcCA9IHt9OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXhpbihjb25maWdbcHJvcF0sIHZh
bHVlLCB0cnVlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgLy9N
ZXJnZSBzaGltCi0gICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGVhY2hQcm9wKGNmZy5zaGltLCBmdW5jdGlvbiAodmFsdWUsIGlkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFs
dWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVl
LmluaXQpICYmICF2YWx1ZS5leHBvcnRzRm4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9
IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgY29u
ZmlnLnNoaW0gPSBzaGltOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
QWRqdXN0IHBhY2thZ2VzIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICBpZiAoY2ZnLnBh
Y2thZ2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlv
biAocGtnT2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb247Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcn
ID8geyBuYW1lOiBwa2dPYmogfSA6IHBrZ09iajsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL0Ny
ZWF0ZSBhIGJyYW5kIG5ldyBvYmplY3Qgb24gcGtncywgc2luY2UgY3VycmVudFBhY2thZ2VzIGNh
bgotICAgICAgICAgICAgICAgICAgICAgICAgLy9iZSBwYXNzZWQgaW4gYWdhaW4sIGFuZCBjb25m
aWcucGtncyBpcyB0aGUgaW50ZXJuYWwgdHJhbnNmb3JtZWQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vc3RhdGUgZm9yIGFsbCBwYWNrYWdlIGNvbmZpZ3MuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwa2dzW3BrZ09iai5uYW1lXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lOiBwa2dPYmoubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjog
bG9jYXRpb24gfHwgcGtnT2JqLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9S
ZW1vdmUgbGVhZGluZyBkb3QgaW4gbWFpbiwgc28gbWFpbiBwYXRocyBhcmUgbm9ybWFsaXplZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5q
cywgc2luY2UgZGlmZmVyZW50IHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
L2VudnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zb21lIHVzZSBhIGZpbGUgbmFtZS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAocGtnT2JqLm1haW4gfHwgJ21haW4nKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAs
ICcnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGpzU3VmZml4
UmVnRXhwLCAnJykKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAg
ICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIC8vRG9uZSB3aXRoIG1vZGlmaWNhdGlvbnMs
IGFzc2luZyBwYWNrYWdlcyBiYWNrIHRvIGNvbnRleHQgY29uZmlnCi0gICAgICAgICAgICAgICAg
ICAgIGNvbmZpZy5wa2dzID0gcGtnczsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcgdG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0
aGUgcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgLy91cGRhdGUgdGhlIG1hcHMgZm9yIHRoZW0s
IHNpbmNlIHRoZWlyIGluZm8sIGxpa2UgVVJMcyB0byBsb2FkLAotICAgICAgICAgICAgICAgIC8v
bWF5IGhhdmUgY2hhbmdlZC4KLSAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVu
Y3Rpb24gKG1vZCwgaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9JZiBtb2R1bGUgYWxyZWFk
eSBoYXMgaW5pdCBjYWxsZWQsIHNpbmNlIGl0IGlzIHRvbwotICAgICAgICAgICAgICAgICAgICAv
L2xhdGUgdG8gbW9kaWZ5IHRoZW0sIGFuZCBpZ25vcmUgdW5ub3JtYWxpemVkIG9uZXMKLSAgICAg
ICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0cmFuc2llbnQuCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghbW9kLmluaXRlZCAmJiAhbW9kLm1hcC51bm5vcm1hbGl6ZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1vZC5tYXAgPSBtYWtlTW9kdWxlTWFwKGlkKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgLy9J
ZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25maWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNh
bGwKLSAgICAgICAgICAgICAgICAvL3JlcXVpcmUgd2l0aCB0aG9zZSBhcmdzLiBUaGlzIGlzIHVz
ZWZ1bCB3aGVuIHJlcXVpcmUgaXMgZGVmaW5lZCBhcyBhCi0gICAgICAgICAgICAgICAgLy9jb25m
aWcgb2JqZWN0IGJlZm9yZSByZXF1aXJlLmpzIGlzIGxvYWRlZC4KLSAgICAgICAgICAgICAgICBp
ZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVxdWlyZShjZmcuZGVwcyB8fCBbXSwgY2ZnLmNhbGxiYWNrKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0
aW9uICh2YWx1ZSkgewotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuKCkgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgcmV0OwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5pdCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWws
IGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJldCB8fCAodmFsdWUuZXhwb3J0cyAmJiBnZXRHbG9iYWwodmFsdWUuZXhwb3J0cykp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZm47Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICBtYWtlUmVxdWlyZTogZnVuY3Rpb24gKHJlbE1hcCwgb3B0
aW9ucykgewotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotCi0gICAg
ICAgICAgICAgICAgZnVuY3Rpb24gbG9jYWxSZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbWFwLCByZXF1aXJlTW9kOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZUJ1aWxkQ2FsbGJhY2sgJiYgY2FsbGJh
Y2sgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrLl9fcmVxdWlyZUpzQnVpbGQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9JbnZhbGlkIGNhbGwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3JlcXVpcmVhcmdzJywgJ0ludmFsaWQg
cmVxdWlyZSBjYWxsJyksIGVycmJhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHJlcXVpcmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJl
cXVlc3RlZCwgZ2V0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhl
bSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRsZXJzLiBDYXZlYXQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvL3RoaXMgb25seSB3b3JrcyB3aGlsZSBtb2R1bGUgaXMgYmVpbmcgZGVmaW5lZC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxNYXAgJiYgaGFzUHJvcChoYW5kbGVycywgZGVw
cykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10o
cmVnaXN0cnlbcmVsTWFwLmlkXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vU3luY2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElm
IHJlcXVpcmUuZ2V0IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAvL2F2YWlsYWJsZSAoYXMg
aW4gdGhlIE5vZGUgYWRhcHRlciksIHByZWZlciB0aGF0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlcS5nZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVx
LmdldChjb250ZXh0LCBkZXBzLCByZWxNYXAsIGxvY2FsUmVxdWlyZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIG1vZHVs
ZSBuYW1lLCBpZiBpdCBjb250YWlucyAuIG9yIC4uCi0gICAgICAgICAgICAgICAgICAgICAgICBt
YXAgPSBtYWtlTW9kdWxlTWFwKGRlcHMsIHJlbE1hcCwgZmFsc2UsIHRydWUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghaGFzUHJvcChkZWZpbmVkLCBpZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vdGxvYWRlZCcsICdNb2R1bGUgbmFtZSAiJyArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICciIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZv
ciBjb250ZXh0OiAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0TmFtZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJl
bE1hcCA/ICcnIDogJy4gVXNlIHJlcXVpcmUoW10pJykpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVkW2lkXTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vR3JhYiBkZWZpbmVzIHdh
aXRpbmcgaW4gdGhlIGdsb2JhbCBxdWV1ZS4KLSAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVm
aW5lcygpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vTWFyayBhbGwgdGhlIGRlcGVuZGVuY2ll
cyBhcyBuZWVkaW5nIHRvIGJlIGxvYWRlZC4KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5u
ZXh0VGljayhmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL1NvbWUgZGVm
aW5lcyBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvL3JlcXVpcmUgY2FsbCwgY29sbGVjdCB0aGVtLgotICAgICAgICAgICAgICAgICAgICAg
ICAgaW50YWtlRGVmaW5lcygpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9k
ID0gZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAobnVsbCwgcmVsTWFwKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vU3RvcmUgaWYgbWFwIGNvbmZpZyBzaG91bGQgYmUgYXBwbGllZCB0byB0
aGlzIHJlcXVpcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbCBmb3IgZGVwZW5kZW5j
aWVzLgotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5za2lwTWFwID0gb3B0aW9u
cy5za2lwTWFwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLmluaXQoZGVw
cywgY2FsbGJhY2ssIGVycmJhY2ssIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFi
bGVkOiB0cnVlCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgY2hlY2tMb2FkZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBtaXhpbihsb2NhbFJlcXVpcmUsIHsKLSAgICAgICAgICAgICAgICAg
ICAgaXNCcm93c2VyOiBpc0Jyb3dzZXIsCi0KLSAgICAgICAgICAgICAgICAgICAgLyoqCi0gICAg
ICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgKyAuZXh0ZW5zaW9uIGlu
dG8gYW4gVVJMIHBhdGguCi0gICAgICAgICAgICAgICAgICAgICAqICpSZXF1aXJlcyogdGhlIHVz
ZSBvZiBhIG1vZHVsZSBuYW1lLiBJdCBkb2VzIG5vdCBzdXBwb3J0IHVzaW5nCi0gICAgICAgICAg
ICAgICAgICAgICAqIHBsYWluIFVSTHMgbGlrZSBuYW1lVG9VcmwuCi0gICAgICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgICAgICAgICB0b1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWVQ
bHVzRXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4ID0gbW9kdWxlTmFtZVBsdXNFeHQubGFzdEluZGV4T2YoJy4n
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gbW9kdWxlTmFtZVBsdXNF
eHQuc3BsaXQoJy8nKVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZl
ID0gc2VnbWVudCA9PT0gJy4nIHx8IHNlZ21lbnQgPT09ICcuLic7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vSGF2ZSBhIGZpbGUgZXh0ZW5zaW9uIGFsaWFzLCBhbmQgaXQgaXMgbm90IHRo
ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy9kb3RzIGZyb20gYSByZWxhdGl2ZSBwYXRoLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSAmJiAoIWlzUmVsYXRpdmUg
fHwgaW5kZXggPiAxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IG1vZHVs
ZU5hbWVQbHVzRXh0LnN1YnN0cmluZyhpbmRleCwgbW9kdWxlTmFtZVBsdXNFeHQubGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5h
bWVQbHVzRXh0LnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3Jt
YWxpemUobW9kdWxlTmFtZVBsdXNFeHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWxNYXAgJiYgcmVsTWFwLmlkLCB0cnVlKSwgZXh0LCAgdHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgZGVmaW5lZDog
ZnVuY3Rpb24gKGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChk
ZWZpbmVkLCBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkOiBmdW5j
dGlvbiAoaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFrZU1vZHVsZU1hcChp
ZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaGFzUHJvcChkZWZpbmVkLCBpZCkgfHwgaGFzUHJvcChyZWdpc3RyeSwgaWQpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAv
L09ubHkgYWxsb3cgdW5kZWYgb24gdG9wIGxldmVsIHJlcXVpcmUgY2FsbHMKLSAgICAgICAgICAg
ICAgICBpZiAoIXJlbE1hcCkgewotICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUudW5k
ZWYgPSBmdW5jdGlvbiAoaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCBhbnkg
d2FpdGluZyBkZWZpbmUoKSBjYWxscyB0byB0aGlzIGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvL2ZpeCBmb3IgIzQwOAotICAgICAgICAgICAgICAgICAgICAgICAgdGFrZUdsb2Jh
bFF1ZXVlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtYWtlTW9kdWxl
TWFwKGlkLCByZWxNYXAsIHRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCA9
IGdldE93bihyZWdpc3RyeSwgaWQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVT
Y3JpcHQoaWQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVmaW5lZFtpZF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdXJsRmV0Y2hlZFttYXAudXJsXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1bmRlZkV2ZW50c1tpZF07Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
L0hvbGQgb24gdG8gbGlzdGVuZXJzIGluIGNhc2UgdGhlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy9tb2R1bGUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gYmUgcmVsb2FkZWQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL3VzaW5nIGEgZGlmZmVyZW50IGNvbmZpZy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5kZWZpbmVkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuZGVmRXZlbnRzW2lkXSA9IG1vZC5ldmVudHM7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xlYW5SZWdpc3RyeShpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGxvY2FsUmVxdWlyZTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAg
ICAgICAgICogQ2FsbGVkIHRvIGVuYWJsZSBhIG1vZHVsZSBpZiBpdCBpcyBzdGlsbCBpbiB0aGUg
cmVnaXN0cnkKLSAgICAgICAgICAgICAqIGF3YWl0aW5nIGVuYWJsZW1lbnQuIEEgc2Vjb25kIGFy
ZywgcGFyZW50LCB0aGUgcGFyZW50IG1vZHVsZSwKLSAgICAgICAgICAgICAqIGlzIHBhc3NlZCBp
biBmb3IgY29udGV4dCwgd2hlbiB0aGlzIG1ldGhvZCBpcyBvdmVycmlkZW4gYnkKLSAgICAgICAg
ICAgICAqIHRoZSBvcHRpbWl6ZXIuIE5vdCBzaG93biBoZXJlIHRvIGtlZXAgY29kZSBjb21wYWN0
LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIChkZXBNYXAp
IHsKLSAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBNYXAuaWQp
OwotICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0TW9k
dWxlKGRlcE1hcCkuZW5hYmxlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBi
eSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCi0gICAgICAg
ICAgICAgKiBBIGxvYWQgZXZlbnQgY291bGQgYmUgYSBzY3JpcHQgbG9hZCBvciBqdXN0IGEgbG9h
ZCBwYXNzIGZyb20gYSBzeW5jaHJvbm91cwotICAgICAgICAgICAgICogbG9hZCBjYWxsLgotICAg
ICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1v
ZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFtZSkgewotICAgICAgICAgICAgICAg
IHZhciBmb3VuZCwgYXJncywgbW9kLAotICAgICAgICAgICAgICAgICAgICBzaGltID0gZ2V0T3du
KGNvbmZpZy5zaGltLCBtb2R1bGVOYW1lKSB8fCB7fSwKLSAgICAgICAgICAgICAgICAgICAgc2hF
eHBvcnRzID0gc2hpbS5leHBvcnRzOwotCi0gICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVl
KCk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sw
XSA9IG1vZHVsZU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFscmVhZHkgZm91
bmQgYW4gYW5vbnltb3VzIG1vZHVsZSBhbmQgYm91bmQgaXQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29tZSBvdGhlciBhbm9uIG1vZHVsZQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRv
IGZpcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy9EbyB0aGlzIGFmdGVyIHRoZSBjeWNsZSBvZiBjYWxsR2V0
TW9kdWxlIGluIGNhc2UgdGhlIHJlc3VsdAotICAgICAgICAgICAgICAgIC8vb2YgdGhvc2UgY2Fs
bHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRoZSByZWdpc3RyeS4KLSAgICAgICAgICAgICAgICBtb2Qg
PSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFm
b3VuZCAmJiAhaGFzUHJvcChkZWZpbmVkLCBtb2R1bGVOYW1lKSAmJiBtb2QgJiYgIW1vZC5pbml0
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbmZvcmNlRGVmaW5lICYmICgh
c2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRzKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kdWxlTmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbm9k
ZWZpbmUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05v
IGRlZmluZSBjYWxsIGZvciAnICsgbW9kdWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vQSBzY3JpcHQgdGhhdCBkb2VzIG5vdCBjYWxsIGRlZmluZSgpLCBzbyBqdXN0IHNpbXVsYXRl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBjYWxsIGZvciBpdC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVsZU5hbWUsIChzaGltLmRlcHMgfHwgW10p
LCBzaGltLmV4cG9ydHNGbl0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSB0
byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMgY2FzZXMgd2hlcmUKLSAgICAgICAgICAgICAqIG1vZHVs
ZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJMLgotICAgICAgICAgICAgICogTm90ZSB0
aGF0IGl0ICoqZG9lcyBub3QqKiBjYWxsIG5vcm1hbGl6ZSBvbiB0aGUgbW9kdWxlTmFtZSwKLSAg
ICAgICAgICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXpl
ZC4gVGhpcyBpcyBhbgotICAgICAgICAgICAgICogaW50ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMg
b25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJLgotICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBleHQsIHNraXBFeHQpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHBrZ3MsIHBrZywgcGtnUGF0aCwgc3ltcywgaSwg
cGFyZW50TW9kdWxlLCB1cmwsCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGg7Ci0KLSAg
ICAgICAgICAgICAgICAvL0lmIGEgY29sb24gaXMgaW4gdGhlIFVSTCwgaXQgaW5kaWNhdGVzIGEg
cHJvdG9jb2wgaXMgdXNlZCBhbmQgaXQgaXMganVzdAotICAgICAgICAgICAgICAgIC8vYW4gVVJM
IHRvIGEgZmlsZSwgb3IgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCwgY29udGFpbnMgYSBxdWVy
eSBhcmcgKGkuZS4gPykKLSAgICAgICAgICAgICAgICAvL29yIGVuZHMgd2l0aCAuanMsIHRoZW4g
YXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1cmwgYW5kIG5vdCBhIG1vZHVsZSBpZC4K
LSAgICAgICAgICAgICAgICAvL1RoZSBzbGFzaCBpcyBpbXBvcnRhbnQgZm9yIHByb3RvY29sLWxl
c3MgVVJMcyBhcyB3ZWxsIGFzIGZ1bGwgcGF0aHMuCi0gICAgICAgICAgICAgICAgaWYgKHJlcS5q
c0V4dFJlZ0V4cC50ZXN0KG1vZHVsZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vSnVz
dCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBsb29rdXAsIHNvIGp1c3QgcmV0dXJuIGl0
LgotICAgICAgICAgICAgICAgICAgICAvL0FkZCBleHRlbnNpb24gaWYgaXQgaXMgaW5jbHVkZWQu
IFRoaXMgaXMgYSBiaXQgd29ua3ksIG9ubHkgbm9uLS5qcyB0aGluZ3MgcGFzcwotICAgICAgICAg
ICAgICAgICAgICAvL2FuIGV4dGVuc2lvbiwgdGhpcyBtZXRob2QgcHJvYmFibHkgbmVlZHMgdG8g
YmUgcmV3b3JrZWQuCi0gICAgICAgICAgICAgICAgICAgIHVybCA9IG1vZHVsZU5hbWUgKyAoZXh0
IHx8ICcnKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAv
L0EgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgcGF0aC4KLSAgICAgICAg
ICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7Ci0gICAgICAgICAgICAgICAgICAgIHBr
Z3MgPSBjb25maWcucGtnczsKLQotICAgICAgICAgICAgICAgICAgICBzeW1zID0gbW9kdWxlTmFt
ZS5zcGxpdCgnLycpOwotICAgICAgICAgICAgICAgICAgICAvL0ZvciBlYWNoIG1vZHVsZSBuYW1l
IHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKLSAgICAgICAgICAgICAgICAgICAgLy9y
ZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgLy9hbmQgd29yayB1cCBmcm9tIGl0LgotICAgICAgICAgICAgICAgICAgICBm
b3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwa2cgPSBnZXRPd24ocGtncywgcGFyZW50TW9kdWxlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24ocGF0aHMsIHBhcmVudE1vZHVs
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vSWYgYW4gYXJyYXksIGl0IG1lYW5zIHRoZXJlIGFyZSBhIGZl
dyBjaG9pY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hvb3NlIHRoZSBvbmUg
dGhhdCBpcyBkZXNpcmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXko
cGFyZW50UGF0aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0
aCA9IHBhcmVudFBhdGhbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChwa2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIG1vZHVs
ZSBuYW1lIGlzIGp1c3QgdGhlIHBhY2thZ2UgbmFtZSwgdGhlbiBsb29raW5nCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy9mb3IgdGhlIG1haW4gbW9kdWxlLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09PSBwa2cubmFtZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwa2dQYXRoID0gcGtnLmxvY2F0aW9uICsgJy8nICsgcGtnLm1h
aW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGtnUGF0aCA9IHBrZy5sb2NhdGlvbjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcy5zcGxpY2Uo
MCwgaSwgcGtnUGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAvL0pvaW4gdGhlIHBhdGggcGFydHMgdG9nZXRoZXIsIHRoZW4gZmlndXJlIG91
dCBpZiBiYXNlVXJsIGlzIG5lZWRlZC4KLSAgICAgICAgICAgICAgICAgICAgdXJsID0gc3ltcy5q
b2luKCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXmRhdGFcOnxc
Py8udGVzdCh1cmwpIHx8IHNraXBFeHQgPyAnJyA6ICcuanMnKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHVybCA9ICh1cmwuY2hhckF0KDApID09PSAnLycgfHwgdXJsLm1hdGNoKC9eW1x3XCtcLlwt
XSs6LykgPyAnJyA6IGNvbmZpZy5iYXNlVXJsKSArIHVybDsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybEFyZ3MgPyB1cmwgKwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEg
PyAnPycgOiAnJicpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnLnVybEFyZ3MpIDogdXJsOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy9E
ZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0
bwotICAgICAgICAgICAgLy9hbGxvdyBvdmVycmlkaW5nIGluIHRoZSBvcHRpbWl6ZXIuCi0gICAg
ICAgICAgICBsb2FkOiBmdW5jdGlvbiAoaWQsIHVybCkgewotICAgICAgICAgICAgICAgIHJlcS5s
b2FkKGNvbnRleHQsIGlkLCB1cmwpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoq
Ci0gICAgICAgICAgICAgKiBFeGVjdXRlcyBhIG1vZHVsZSBjYWxsYmFjayBmdW5jdGlvbi4gQnJv
a2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uCi0gICAgICAgICAgICAgKiBzb2xlbHkgdG8g
YWxsb3cgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZXF1ZW5jZSB0aGUgZmlsZXMgaW4gdGhlIGJ1aWx0
Ci0gICAgICAgICAgICAgKiBsYXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCi0gICAgICAgICAg
ICAgKgotICAgICAgICAgICAgICogQHByaXZhdGUKLSAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgZXhlY0NiOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGFyZ3MsIGV4cG9ydHMpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoZXhwb3J0cywgYXJncyk7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIGNhbGxiYWNrIGZv
ciBzY3JpcHQgbG9hZHMsIHVzZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCi0gICAgICAg
ICAgICAgKgotICAgICAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0IHRoZSBldmVudCBmcm9t
IHRoZSBicm93c2VyIGZvciB0aGUgc2NyaXB0Ci0gICAgICAgICAgICAgKiB0aGF0IHdhcyBsb2Fk
ZWQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9uU2NyaXB0TG9hZDogZnVuY3Rpb24g
KGV2dCkgewotICAgICAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9m
IHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKLSAgICAgICAgICAgICAgICAvL2Fs
bCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBl
bm91Z2gKLSAgICAgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNl
LgotICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAocmVhZHlSZWdFeHAudGVzdCgoZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0
LnNyY0VsZW1lbnQpLnJlYWR5U3RhdGUpKSkgewotICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0
IGludGVyYWN0aXZlIHNjcmlwdCBzbyBhIHNjcmlwdCBub2RlIGlzIG5vdCBoZWxkIG9udG8gZm9y
Ci0gICAgICAgICAgICAgICAgICAgIC8vdG8gbG9uZy4KLSAgICAgICAgICAgICAgICAgICAgaW50
ZXJhY3RpdmVTY3JpcHQgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvdXQg
dGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQuCi0gICAgICAgICAgICAgICAg
ICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwotICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LmNvbXBsZXRlTG9hZChkYXRhLmlkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIENhbGxiYWNrIGZvciBz
Y3JpcHQgZXJyb3JzLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBvblNjcmlwdEVycm9y
OiBmdW5jdGlvbiAoZXZ0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHRE
YXRhKGV2dCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNQYXRoRmFsbGJhY2soZGF0YS5pZCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdzY3JpcHRl
cnJvcicsICdTY3JpcHQgZXJyb3IgZm9yOiAnICsgZGF0YS5pZCwgZXZ0LCBbZGF0YS5pZF0pKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
Y29udGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOwotICAgICAgICByZXR1cm4g
Y29udGV4dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNYWluIGVudHJ5IHBvaW50LgotICAg
ICAqCi0gICAgICogSWYgdGhlIG9ubHkgYXJndW1lbnQgdG8gcmVxdWlyZSBpcyBhIHN0cmluZywg
dGhlbiB0aGUgbW9kdWxlIHRoYXQKLSAgICAgKiBpcyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmlu
ZyBpcyBmZXRjaGVkIGZvciB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KLSAgICAgKgotICAgICAq
IElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhlbiBpdCB3aWxsIGJlIHRyZWF0
ZWQgYXMgYW4gYXJyYXkKLSAgICAgKiBvZiBkZXBlbmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRj
aC4gQW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGJhY2sgY2FuCi0gICAgICogYmUgc3BlY2lmaWVk
IHRvIGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUu
Ci0gICAgICoKLSAgICAgKiBNYWtlIGEgbG9jYWwgcmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBj
b21wbGlhbmNlIChpdCBhc3N1bWVzIHRoaW5ncwotICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFy
ZSBub3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAotICAgICAqIG5hbWUgZm9y
IG1pbmlmaWNhdGlvbi9sb2NhbCBzY29wZSB1c2UuCi0gICAgICovCi0gICAgcmVxID0gcmVxdWly
ZWpzID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgewotCi0g
ICAgICAgIC8vRmluZCB0aGUgcmlnaHQgY29udGV4dCwgdXNlIGRlZmF1bHQKLSAgICAgICAgdmFy
IGNvbnRleHQsIGNvbmZpZywKLSAgICAgICAgICAgIGNvbnRleHROYW1lID0gZGVmQ29udGV4dE5h
bWU7Ci0KLSAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUg
Y2FsbC4KLSAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpICYmIHR5cGVvZiBkZXBzICE9PSAnc3Ry
aW5nJykgewotICAgICAgICAgICAgLy8gZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QKLSAgICAgICAg
ICAgIGNvbmZpZyA9IGRlcHM7Ci0gICAgICAgICAgICBpZiAoaXNBcnJheShjYWxsYmFjaykpIHsK
LSAgICAgICAgICAgICAgICAvLyBBZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVz
Ci0gICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOwotICAgICAgICAgICAgICAgIGNhbGxi
YWNrID0gZXJyYmFjazsKLSAgICAgICAgICAgICAgICBlcnJiYWNrID0gb3B0aW9uYWw7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlcHMgPSBbXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsK
LSAgICAgICAgICAgIGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7Ci0gICAgICAg
IGlmICghY29udGV4dCkgewotICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW2NvbnRleHRO
YW1lXSA9IHJlcS5zLm5ld0NvbnRleHQoY29udGV4dE5hbWUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGNvbmZpZykgewotICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJh
Y2ssIGVycmJhY2spOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBTdXBwb3J0IHJlcXVpcmUu
Y29uZmlnKCkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29vcGVyYXRlIHdpdGggb3RoZXIKLSAgICAg
KiBBTUQgbG9hZGVycyBvbiBnbG9iYWxseSBhZ3JlZWQgbmFtZXMuCi0gICAgICovCi0gICAgcmVx
LmNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHsKLSAgICAgICAgcmV0dXJuIHJlcShjb25maWcp
OwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUg
Y3VycmVudCB0aWNrCi0gICAgICogb2YgdGhlIGV2ZW50IGxvb3AuIE92ZXJyaWRlIGZvciBvdGhl
ciBlbnZzCi0gICAgICogdGhhdCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91
dC4KLSAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRl
ci4KLSAgICAgKi8KLSAgICByZXEubmV4dFRpY2sgPSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3Vu
ZGVmaW5lZCcgPyBmdW5jdGlvbiAoZm4pIHsKLSAgICAgICAgc2V0VGltZW91dChmbiwgNCk7Ci0g
ICAgfSA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9OwotCi0gICAgLyoqCi0gICAgICogRXhwb3J0
IHJlcXVpcmUgYXMgYSBnbG9iYWwsIGJ1dCBvbmx5IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhp
c3QuCi0gICAgICovCi0gICAgaWYgKCFyZXF1aXJlKSB7Ci0gICAgICAgIHJlcXVpcmUgPSByZXE7
Ci0gICAgfQotCi0gICAgcmVxLnZlcnNpb24gPSB2ZXJzaW9uOwotCi0gICAgLy9Vc2VkIHRvIGZp
bHRlciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCi0gICAgcmVxLmpz
RXh0UmVnRXhwID0gL15cL3w6fFw/fFwuanMkLzsKLSAgICByZXEuaXNCcm93c2VyID0gaXNCcm93
c2VyOwotICAgIHMgPSByZXEucyA9IHsKLSAgICAgICAgY29udGV4dHM6IGNvbnRleHRzLAotICAg
ICAgICBuZXdDb250ZXh0OiBuZXdDb250ZXh0Ci0gICAgfTsKLQotICAgIC8vQ3JlYXRlIGRlZmF1
bHQgY29udGV4dC4KLSAgICByZXEoe30pOwotCi0gICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1z
ZW5zaXRpdmUgbWV0aG9kcyBvbiBnbG9iYWwgcmVxdWlyZS4KLSAgICBlYWNoKFsKLSAgICAgICAg
J3RvVXJsJywKLSAgICAgICAgJ3VuZGVmJywKLSAgICAgICAgJ2RlZmluZWQnLAotICAgICAgICAn
c3BlY2lmaWVkJwotICAgIF0sIGZ1bmN0aW9uIChwcm9wKSB7Ci0gICAgICAgIC8vUmVmZXJlbmNl
IGZyb20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4
dCwKLSAgICAgICAgLy9zbyB0aGF0IGR1cmluZyBidWlsZHMsIHRoZSBsYXRlc3QgaW5zdGFuY2Ug
b2YgdGhlIGRlZmF1bHQgY29udGV4dAotICAgICAgICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVz
ZWQuCi0gICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBj
dHggPSBjb250ZXh0c1tkZWZDb250ZXh0TmFtZV07Ci0gICAgICAgICAgICByZXR1cm4gY3R4LnJl
cXVpcmVbcHJvcF0uYXBwbHkoY3R4LCBhcmd1bWVudHMpOwotICAgICAgICB9OwotICAgIH0pOwot
Ci0gICAgaWYgKGlzQnJvd3NlcikgewotICAgICAgICBoZWFkID0gcy5oZWFkID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTsKLSAgICAgICAgLy9JZiBCQVNFIHRhZyBp
cyBpbiBwbGF5LCB1c2luZyBhcHBlbmRDaGlsZCBpcyBhIHByb2JsZW0gZm9yIElFNi4KLSAgICAg
ICAgLy9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxz
IGluIHRoaXMgalF1ZXJ5IGJ1ZzoKLSAgICAgICAgLy9odHRwOi8vZGV2LmpxdWVyeS5jb20vdGlj
a2V0LzI3MDkKLSAgICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnYmFzZScpWzBdOwotICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKLSAgICAgICAgICAg
IGhlYWQgPSBzLmhlYWQgPSBiYXNlRWxlbWVudC5wYXJlbnROb2RlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBn
ZW5lcmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcwotICAgICAqIGZ1bmN0aW9uLiBJbnRlcmNl
cHQvb3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgY3VzdG9tIGVycm9yIGhhbmRsaW5nLgotICAgICAq
IEBwYXJhbSB7RXJyb3J9IGVyciB0aGUgZXJyb3Igb2JqZWN0LgotICAgICAqLwotICAgIHJlcS5v
bkVycm9yID0gZGVmYXVsdE9uRXJyb3I7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSBu
b2RlIGZvciB0aGUgbG9hZCBjb21tYW5kLiBPbmx5IHVzZWQgaW4gYnJvd3NlciBlbnZzLgotICAg
ICAqLwotICAgIHJlcS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKGNvbmZpZywgbW9kdWxlTmFtZSwg
dXJsKSB7Ci0gICAgICAgIHZhciBub2RlID0gY29uZmlnLnhodG1sID8KLSAgICAgICAgICAgICAg
ICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwn
LCAnaHRtbDpzY3JpcHQnKSA6Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc2NyaXB0Jyk7Ci0gICAgICAgIG5vZGUudHlwZSA9IGNvbmZpZy5zY3JpcHRUeXBlIHx8ICd0
ZXh0L2phdmFzY3JpcHQnOwotICAgICAgICBub2RlLmNoYXJzZXQgPSAndXRmLTgnOwotICAgICAg
ICBub2RlLmFzeW5jID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfTsKLQotICAg
IC8qKgotICAgICAqIERvZXMgdGhlIHJlcXVlc3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJy
b3dzZXIgY2FzZS4KLSAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxv
dyBvdGhlciBlbnZpcm9ubWVudHMKLSAgICAgKiB0byBvdmVycmlkZSBpdC4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBz
dGF0ZS4KLSAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUg
bW9kdWxlLgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxl
LgotICAgICAqLwotICAgIHJlcS5sb2FkID0gZnVuY3Rpb24gKGNvbnRleHQsIG1vZHVsZU5hbWUs
IHVybCkgewotICAgICAgICB2YXIgY29uZmlnID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcp
IHx8IHt9LAotICAgICAgICAgICAgbm9kZTsKLSAgICAgICAgaWYgKGlzQnJvd3NlcikgewotICAg
ICAgICAgICAgLy9JbiB0aGUgYnJvd3NlciBzbyB1c2UgYSBzY3JpcHQgdGFnCi0gICAgICAgICAg
ICBub2RlID0gcmVxLmNyZWF0ZU5vZGUoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwotCi0gICAg
ICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcsIGNvbnRleHQu
Y29udGV4dE5hbWUpOwotICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWly
ZW1vZHVsZScsIG1vZHVsZU5hbWUpOwotCi0gICAgICAgICAgICAvL1NldCB1cCBsb2FkIGxpc3Rl
bmVyLiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2UgSUU5IGhhcwotICAgICAgICAgICAg
Ly9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9ubG9h
ZCBmaXJpbmdzCi0gICAgICAgICAgICAvL3RoYXQgZG8gbm90IG1hdGNoIHRoZSBiZWhhdmlvciBv
ZiBhbGwgb3RoZXIgYnJvd3NlcnMgd2l0aAotICAgICAgICAgICAgLy9hZGRFdmVudExpc3RlbmVy
IHN1cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVudCBmb3IgYQotICAgICAgICAgICAg
Ly9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKLSAgICAgICAg
ICAgIC8vaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy82
NDgwNTcvc2NyaXB0LW9ubG9hZC1ldmVudC1pcy1ub3QtZmlyZWQtaW1tZWRpYXRlbHktYWZ0ZXIt
c2NyaXB0LWV4ZWN1dGlvbgotICAgICAgICAgICAgLy9VTkZPUlRVTkFURUxZIE9wZXJhIGltcGxl
bWVudHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxvdyB0aGUgc2NyaXB0Ci0gICAgICAg
ICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KLSAgICAgICAgICAgIGlmIChub2RlLmF0dGFj
aEV2ZW50ICYmCi0gICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgbm9kZS5hdHRhY2hFdmVu
dCBpcyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNjcmlwdCBvcgotICAgICAgICAgICAg
ICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCi0gICAgICAgICAgICAgICAg
ICAgIC8vcmVhZCBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvaXNzdWVzLzE4
NwotICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNvZGVd
IHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgotICAgICAgICAgICAgICAgICAg
ICAvL2luIElFOCwgbm9kZS5hdHRhY2hFdmVudCBkb2VzIG5vdCBoYXZlIHRvU3RyaW5nKCkKLSAg
ICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZvciAiW25hdGl2ZSBjb2RlIiB3aXRo
IG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKLSAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dp
dGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvaXNzdWVzLzI3MwotICAgICAgICAgICAgICAgICAg
ICAhKG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcgJiYgbm9kZS5hdHRhY2hFdmVudC50b1N0cmlu
ZygpLmluZGV4T2YoJ1tuYXRpdmUgY29kZScpIDwgMCkgJiYKLSAgICAgICAgICAgICAgICAgICAg
IWlzT3BlcmEpIHsKLSAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJRSAoYXQgbGVhc3Qg
Ni04KSBkbyBub3QgZmlyZQotICAgICAgICAgICAgICAgIC8vc2NyaXB0IG9ubG9hZCByaWdodCBh
ZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCwgc28KLSAgICAgICAgICAgICAgICAvL3dlIGNhbm5v
dCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBhIG5hbWUuCi0gICAgICAgICAgICAg
ICAgLy9Ib3dldmVyLCBJRSByZXBvcnRzIHRoZSBzY3JpcHQgYXMgYmVpbmcgaW4gJ2ludGVyYWN0
aXZlJwotICAgICAgICAgICAgICAgIC8vcmVhZHlTdGF0ZSBhdCB0aGUgdGltZSBvZiB0aGUgZGVm
aW5lIGNhbGwuCi0gICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwotCi0gICAg
ICAgICAgICAgICAgbm9kZS5hdHRhY2hFdmVudCgnb25yZWFkeXN0YXRlY2hhbmdlJywgY29udGV4
dC5vblNjcmlwdExvYWQpOwotICAgICAgICAgICAgICAgIC8vSXQgd291bGQgYmUgZ3JlYXQgdG8g
YWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAotICAgICAgICAgICAgICAgIC8vNDA0
cyBpbiBJRTkrLiBIb3dldmVyLCBvbnJlYWR5c3RhdGVjaGFuZ2Ugd2lsbCBmaXJlIGJlZm9yZQot
ICAgICAgICAgICAgICAgIC8vdGhlIGVycm9yIGhhbmRsZXIsIHNvIHRoYXQgZG9lcyBub3QgaGVs
cC4gSWYgYWRkRXZlbnRMaXN0ZW5lcgotICAgICAgICAgICAgICAgIC8vaXMgdXNlZCwgdGhlbiBJ
RSB3aWxsIGZpcmUgZXJyb3IgYmVmb3JlIGxvYWQsIGJ1dCB3ZSBjYW5ub3QKLSAgICAgICAgICAg
ICAgICAvL3VzZSB0aGF0IHBhdGh3YXkgZ2l2ZW4gdGhlIGNvbm5lY3QubWljcm9zb2Z0LmNvbSBp
c3N1ZQotICAgICAgICAgICAgICAgIC8vbWVudGlvbmVkIGFib3ZlIGFib3V0IG5vdCBkb2luZyB0
aGUgJ3NjcmlwdCBleGVjdXRlLAotICAgICAgICAgICAgICAgIC8vdGhlbiBmaXJlIHRoZSBzY3Jp
cHQgbG9hZCBldmVudCBsaXN0ZW5lciBiZWZvcmUgZXhlY3V0ZQotICAgICAgICAgICAgICAgIC8v
bmV4dCBzY3JpcHQnIHRoYXQgb3RoZXIgYnJvd3NlcnMgZG8uCi0gICAgICAgICAgICAgICAgLy9C
ZXN0IGhvcGU6IElFMTAgZml4ZXMgdGhlIGlzc3VlcywKLSAgICAgICAgICAgICAgICAvL2FuZCB0
aGVuIGRlc3Ryb3lzIGFsbCBpbnN0YWxscyBvZiBJRSA2LTkuCi0gICAgICAgICAgICAgICAgLy9u
b2RlLmF0dGFjaEV2ZW50KCdvbmVycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCds
b2FkJywgY29udGV4dC5vblNjcmlwdExvYWQsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBub2Rl
LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yLCBmYWxzZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBub2RlLnNyYyA9IHVybDsKLQotICAgICAgICAg
ICAgLy9Gb3Igc29tZSBjYWNoZSBjYXNlcyBpbiBJRSA2LTgsIHRoZSBzY3JpcHQgZXhlY3V0ZXMg
YmVmb3JlIHRoZSBlbmQKLSAgICAgICAgICAgIC8vb2YgdGhlIGFwcGVuZENoaWxkIGV4ZWN1dGlv
biwgc28gdG8gdGllIGFuIGFub255bW91cyBkZWZpbmUKLSAgICAgICAgICAgIC8vY2FsbCB0byB0
aGUgbW9kdWxlIG5hbWUgKHdoaWNoIGlzIHN0b3JlZCBvbiB0aGUgbm9kZSksIGhvbGQgb24KLSAg
ICAgICAgICAgIC8vdG8gYSByZWZlcmVuY2UgdG8gdGhpcyBub2RlLCBidXQgY2xlYXIgYWZ0ZXIg
dGhlIERPTSBpbnNlcnRpb24uCi0gICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBu
b2RlOwotICAgICAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgaGVh
ZC5pbnNlcnRCZWZvcmUobm9kZSwgYmFzZUVsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKG5vZGUpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbnVsbDsKLQotICAgICAgICAgICAg
cmV0dXJuIG5vZGU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNXZWJXb3JrZXIpIHsKLSAgICAgICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy9JbiBhIHdlYiB3b3JrZXIsIHVzZSBpbXBvcnRT
Y3JpcHRzLiBUaGlzIGlzIG5vdCBhIHZlcnkKLSAgICAgICAgICAgICAgICAvL2VmZmljaWVudCB1
c2Ugb2YgaW1wb3J0U2NyaXB0cywgaW1wb3J0U2NyaXB0cyB3aWxsIGJsb2NrIHVudGlsCi0gICAg
ICAgICAgICAgICAgLy9pdHMgc2NyaXB0IGlzIGRvd25sb2FkZWQgYW5kIGV2YWx1YXRlZC4gSG93
ZXZlciwgaWYgd2ViIHdvcmtlcnMKLSAgICAgICAgICAgICAgICAvL2FyZSBpbiBwbGF5LCB0aGUg
ZXhwZWN0YXRpb24gdGhhdCBhIGJ1aWxkIGhhcyBiZWVuIGRvbmUgc28gdGhhdAotICAgICAgICAg
ICAgICAgIC8vb25seSBvbmUgc2NyaXB0IG5lZWRzIHRvIGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMg
bWF5IG5lZWQgdG8gYmUKLSAgICAgICAgICAgICAgICAvL3JlZXZhbHVhdGVkIGlmIG90aGVyIHVz
ZSBjYXNlcyBiZWNvbWUgY29tbW9uLgotICAgICAgICAgICAgICAgIGltcG9ydFNjcmlwdHModXJs
KTsKLQotICAgICAgICAgICAgICAgIC8vQWNjb3VudCBmb3IgYW5vbnltb3VzIG1vZHVsZXMKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKLSAgICAgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IobWFrZUVy
cm9yKCdpbXBvcnRzY3JpcHRzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lt
cG9ydFNjcmlwdHMgZmFpbGVkIGZvciAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vZHVsZU5hbWUgKyAnIGF0ICcgKyB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1l
XSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGZ1bmN0aW9uIGdl
dEludGVyYWN0aXZlU2NyaXB0KCkgewotICAgICAgICBpZiAoaW50ZXJhY3RpdmVTY3JpcHQgJiYg
aW50ZXJhY3RpdmVTY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewotICAgICAg
ICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwotICAgICAgICB9Ci0KLSAgICAgICAgZWFj
aFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7Ci0gICAgICAgICAgICBpZiAo
c2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gKGludGVyYWN0aXZlU2NyaXB0ID0gc2NyaXB0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0gICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKLSAgICB9Ci0KLSAgICAv
L0xvb2sgZm9yIGEgZGF0YS1tYWluIHNjcmlwdCBhdHRyaWJ1dGUsIHdoaWNoIGNvdWxkIGFsc28g
YWRqdXN0IHRoZSBiYXNlVXJsLgotICAgIGlmIChpc0Jyb3dzZXIgJiYgIWNmZy5za2lwRGF0YU1h
aW4pIHsKLSAgICAgICAgLy9GaWd1cmUgb3V0IGJhc2VVcmwuIEdldCBpdCBmcm9tIHRoZSBzY3Jp
cHQgdGFnIHdpdGggcmVxdWlyZS5qcyBpbiBpdC4KLSAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0
cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7Ci0gICAgICAgICAgICAvL1NldCB0aGUgJ2hlYWQnIHdo
ZXJlIHdlIGNhbiBhcHBlbmQgY2hpbGRyZW4gYnkKLSAgICAgICAgICAgIC8vdXNpbmcgdGhlIHNj
cmlwdCdzIHBhcmVudC4KLSAgICAgICAgICAgIGlmICghaGVhZCkgewotICAgICAgICAgICAgICAg
IGhlYWQgPSBzY3JpcHQucGFyZW50Tm9kZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly9Mb29rIGZvciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUgdG8gc2V0IG1haW4gc2NyaXB0IGZvciB0
aGUgcGFnZQotICAgICAgICAgICAgLy90byBsb2FkLiBJZiBpdCBpcyB0aGVyZSwgdGhlIHBhdGgg
dG8gZGF0YSBtYWluIGJlY29tZXMgdGhlCi0gICAgICAgICAgICAvL2Jhc2VVcmwsIGlmIGl0IGlz
IG5vdCBhbHJlYWR5IHNldC4KLSAgICAgICAgICAgIGRhdGFNYWluID0gc2NyaXB0LmdldEF0dHJp
YnV0ZSgnZGF0YS1tYWluJyk7Ci0gICAgICAgICAgICBpZiAoZGF0YU1haW4pIHsKLSAgICAgICAg
ICAgICAgICAvL1ByZXNlcnZlIGRhdGFNYWluIGluIGNhc2UgaXQgaXMgYSBwYXRoIChpLmUuIGNv
bnRhaW5zICc/JykKLSAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47Ci0KLSAg
ICAgICAgICAgICAgICAvL1NldCBmaW5hbCBiYXNlVXJsIGlmIHRoZXJlIGlzIG5vdCBhbHJlYWR5
IGFuIGV4cGxpY2l0IG9uZS4KLSAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4g
Zm9yIHVzZSBhcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy9iYXNlVXJsLgotICAgICAgICAg
ICAgICAgICAgICBzcmMgPSBtYWluU2NyaXB0LnNwbGl0KCcvJyk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN1YlBhdGgg
PSBzcmMubGVuZ3RoID8gc3JjLmpvaW4oJy8nKSAgKyAnLycgOiAnLi8nOwotCi0gICAgICAgICAg
ICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkgdHJhaWxpbmcgLmpzIHNpbmNlIG1haW5TY3Jp
cHQgaXMgbm93Ci0gICAgICAgICAgICAgICAgLy9saWtlIGEgbW9kdWxlIG5hbWUuCi0gICAgICAg
ICAgICAgICAgbWFpblNjcmlwdCA9IG1haW5TY3JpcHQucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwg
JycpOwotCi0gICAgICAgICAgICAgICAgIC8vSWYgbWFpblNjcmlwdCBpcyBzdGlsbCBhIHBhdGgs
IGZhbGwgYmFjayB0byBkYXRhTWFpbgotICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdF
eHAudGVzdChtYWluU2NyaXB0KSkgewotICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0g
ZGF0YU1haW47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9QdXQgdGhl
IGRhdGEtbWFpbiBzY3JpcHQgaW4gdGhlIGZpbGVzIHRvIGxvYWQuCi0gICAgICAgICAgICAgICAg
Y2ZnLmRlcHMgPSBjZmcuZGVwcyA/IGNmZy5kZXBzLmNvbmNhdChtYWluU2NyaXB0KSA6IFttYWlu
U2NyaXB0XTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBo
YW5kbGVzIGRlZmluaXRpb25zIG9mIG1vZHVsZXMuIERpZmZlcnMgZnJvbQotICAgICAqIHJlcXVp
cmUoKSBpbiB0aGF0IGEgc3RyaW5nIGZvciB0aGUgbW9kdWxlIHNob3VsZCBiZSB0aGUgZmlyc3Qg
YXJndW1lbnQsCi0gICAgICogYW5kIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGRlcGVu
ZGVuY2llcyBhcmUgbG9hZGVkIHNob3VsZAotICAgICAqIHJldHVybiBhIHZhbHVlIHRvIGRlZmlu
ZSB0aGUgbW9kdWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGFyZ3VtZW50J3MKLSAgICAg
KiBuYW1lLgotICAgICAqLwotICAgIGRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxs
YmFjaykgewotICAgICAgICB2YXIgbm9kZSwgY29udGV4dDsKLQotICAgICAgICAvL0FsbG93IGZv
ciBhbm9ueW1vdXMgbW9kdWxlcwotICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcn
KSB7Ci0gICAgICAgICAgICAvL0FkanVzdCBhcmdzIGFwcHJvcHJpYXRlbHkKLSAgICAgICAgICAg
IGNhbGxiYWNrID0gZGVwczsKLSAgICAgICAgICAgIGRlcHMgPSBuYW1lOwotICAgICAgICAgICAg
bmFtZSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3Qg
aGF2ZSBkZXBlbmRlbmNpZXMKLSAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjayA9IGRlcHM7Ci0gICAgICAgICAgICBkZXBzID0gbnVsbDsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRo
ZW4gZmlndXJlIG91dCBpZiBpdCBhCi0gICAgICAgIC8vQ29tbW9uSlMgdGhpbmcgd2l0aCBkZXBl
bmRlbmNpZXMuCi0gICAgICAgIGlmICghZGVwcyAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewot
ICAgICAgICAgICAgZGVwcyA9IFtdOwotICAgICAgICAgICAgLy9SZW1vdmUgY29tbWVudHMgZnJv
bSB0aGUgY2FsbGJhY2sgc3RyaW5nLAotICAgICAgICAgICAgLy9sb29rIGZvciByZXF1aXJlIGNh
bGxzLCBhbmQgcHVsbCB0aGVtIGludG8gdGhlIGRlcGVuZGVuY2llcywKLSAgICAgICAgICAgIC8v
YnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCi0gICAgICAgICAgICBpZiAoY2Fs
bGJhY2subGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2sKLSAgICAgICAgICAgICAg
ICAgICAgLnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tbWVudFJl
Z0V4cCwgJycpCi0gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNqc1JlcXVpcmVSZWdFeHAs
IGZ1bmN0aW9uIChtYXRjaCwgZGVwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1
c2goZGVwKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAvL01h
eSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3Rp
bGwKLSAgICAgICAgICAgICAgICAvL2NvdWxkIHVzZSBleHBvcnRzLCBhbmQgbW9kdWxlLiBBdm9p
ZCBkb2luZyBleHBvcnRzIGFuZCBtb2R1bGUKLSAgICAgICAgICAgICAgICAvL3dvcmsgdGhvdWdo
IGlmIGl0IGp1c3QgbmVlZHMgcmVxdWlyZS4KLSAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRo
ZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKLSAgICAg
ICAgICAgICAgICAvL29yZGVyIGxpc3RlZCBiZWxvdy4KLSAgICAgICAgICAgICAgICBkZXBzID0g
KGNhbGxiYWNrLmxlbmd0aCA9PT0gMSA/IFsncmVxdWlyZSddIDogWydyZXF1aXJlJywgJ2V4cG9y
dHMnLCAnbW9kdWxlJ10pLmNvbmNhdChkZXBzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNh
bGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQotICAgICAgICAvL3dvcmsuCi0gICAgICAgIGlmICh1c2VJ
bnRlcmFjdGl2ZSkgewotICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8
fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOwotICAgICAgICAgICAgaWYgKG5vZGUpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUu
Z2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW25vZGUuZ2V0QXR0cmlidXRlKCdkYXRh
LXJlcXVpcmVjb250ZXh0JyldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlw
dCBvbmxvYWQgaGFuZGxlci4KLSAgICAgICAgLy9UaGlzIGFsbG93cyBtdWx0aXBsZSBtb2R1bGVz
IHRvIGJlIGluIGEgZmlsZSB3aXRob3V0IHByZW1hdHVyZWx5Ci0gICAgICAgIC8vdHJhY2luZyBk
ZXBlbmRlbmNpZXMsIGFuZCBhbGxvd3MgZm9yIGFub255bW91cyBtb2R1bGUgc3VwcG9ydCwKLSAg
ICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3Jp
cHQgb25sb2FkIGV2ZW50Ci0gICAgICAgIC8vb2NjdXJzLiBJZiBubyBjb250ZXh0LCB1c2UgdGhl
IGdsb2JhbCBxdWV1ZSwgYW5kIGdldCBpdCBwcm9jZXNzZWQKLSAgICAgICAgLy9pbiB0aGUgb25z
Y3JpcHQgbG9hZCBjYWxsYmFjay4KLSAgICAgICAgKGNvbnRleHQgPyBjb250ZXh0LmRlZlF1ZXVl
IDogZ2xvYmFsRGVmUXVldWUpLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNrXSk7Ci0gICAgfTsK
LQotICAgIGRlZmluZS5hbWQgPSB7Ci0gICAgICAgIGpRdWVyeTogdHJ1ZQotICAgIH07Ci0KLQot
ICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSB0ZXh0LiBOb3JtYWxseSBqdXN0IHVzZXMgZXZh
bCwgYnV0IGNhbiBiZSBtb2RpZmllZAotICAgICAqIHRvIHVzZSBhIGJldHRlciwgZW52aXJvbm1l
bnQtc3BlY2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZwotICAgICAqIGxvYWRl
ciBwbHVnaW5zLCBub3QgZm9yIHBsYWluIEpTIG1vZHVsZXMuCi0gICAgICogQHBhcmFtIHtTdHJp
bmd9IHRleHQgdGhlIHRleHQgdG8gZXhlY3V0ZS9ldmFsdWF0ZS4KLSAgICAgKi8KLSAgICByZXEu
ZXhlYyA9IGZ1bmN0aW9uICh0ZXh0KSB7Ci0gICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8K
LSAgICAgICAgcmV0dXJuIGV2YWwodGV4dCk7Ci0gICAgfTsKLQotICAgIC8vU2V0IHVwIHdpdGgg
Y29uZmlnIGluZm8uCi0gICAgcmVxKGNmZyk7Ci19KHRoaXMpKTsKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ1YmVmODMxODljOTE1ZWU3OGVjYTg0N2Y5
MDhjNmQwMmQ1OGE0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFz
ZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1NTUgKzAsMCBAQAotaHRtbCwKLWJvZHkgewotICAg
IG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwOwotfQotCi1idXR0b24gewotICAgIG1hcmdpbjog
MDsKLSAgICBwYWRkaW5nOiAwOwotICAgIGJvcmRlcjogMDsKLSAgICBiYWNrZ3JvdW5kOiBub25l
OwotICAgIGZvbnQtc2l6ZTogMTAwJTsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Ci0g
ICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgLXdlYmtp
dC1hcHBlYXJhbmNlOiBub25lOwotICAgIC1tcy1hcHBlYXJhbmNlOiBub25lOwotICAgIC1vLWFw
cGVhcmFuY2U6IG5vbmU7Ci0gICAgYXBwZWFyYW5jZTogbm9uZTsKLX0KLQotYm9keSB7Ci0gICAg
Zm9udDogMTRweCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlm
OwotICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKLSAgICBiYWNrZ3JvdW5kOiAjZWFlYWVhIHVybCgn
YmcucG5nJyk7Ci0gICAgY29sb3I6ICM0ZDRkNGQ7Ci0gICAgd2lkdGg6IDU1MHB4OwotICAgIG1h
cmdpbjogMCBhdXRvOwotICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwot
ICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1tcy1mb250LXNtb290
aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgLW8tZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwot
ICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLX0KLQotYnV0dG9uLAotaW5wdXRbdHlw
ZT0iY2hlY2tib3giXSB7Ci0gIG91dGxpbmU6IG5vbmU7Ci19Ci0KLSN0b2RvYXBwIHsKLSAgICBi
YWNrZ3JvdW5kOiAjZmZmOwotICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45
KTsKLSAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNj
Y2M7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6
IDJweDsKLSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4OwotICAgIGJveC1zaGFkb3c6
IDAgMnB4IDZweCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwKLSAgICAgICAgICAgICAgICAwIDI1cHgg
NTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7Ci19Ci0KLSN0b2RvYXBwOmJlZm9yZSB7Ci0gICAg
Y29udGVudDogJyc7Ci0gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZjVkNmQ2OwotICAgIGJv
cmRlci1yaWdodDogMXB4IHNvbGlkICNmNWQ2ZDY7Ci0gICAgd2lkdGg6IDJweDsKLSAgICBwb3Np
dGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDQwcHg7Ci0gICAgaGVpZ2h0
OiAxMDAlOwotfQotCi0jdG9kb2FwcCBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7
Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotfQotCi0jdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFj
ZWhvbGRlciB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgIGNvbG9yOiAjYTlhOWE5Owot
fQotCi0jdG9kb2FwcCBoMSB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTEy
MHB4OwotICAgIHdpZHRoOiAxMDAlOwotICAgIGZvbnQtc2l6ZTogNzBweDsKLSAgICBmb250LXdl
aWdodDogYm9sZDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgY29sb3I6ICNiM2IzYjM7
Ci0gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKLSAgICB0ZXh0LXNoYWRvdzog
LTFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKLSAgICAtd2Via2l0LXRleHQtcmVuZGVyaW5n
OiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci0gICAgLW1vei10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVM
ZWdpYmlsaXR5OwotICAgIC1tcy10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owot
ICAgIC1vLXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci0gICAgdGV4dC1yZW5k
ZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKLX0KLQotI2hlYWRlciB7Ci0gICAgcGFkZGluZy10
b3A6IDE1cHg7Ci0gICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKLX0KLQotI2hlYWRlcjpiZWZv
cmUgewotICAgIGNvbnRlbnQ6ICcnOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6
IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgbGVmdDogMDsKLSAgICBoZWlnaHQ6IDE1cHg7Ci0gICAg
ei1pbmRleDogMjsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzZjNjE1YzsKLSAgICBi
YWNrZ3JvdW5kOiAjOGQ3ZDc3OwotICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGlu
ZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiYSgxMzIsIDExMCwgMTAwLCAwLjgp
KSx0byhyZ2JhKDEwMSwgODQsIDc2LCAwLjgpKSk7Ci0gICAgYmFja2dyb3VuZDogLXdlYmtpdC1s
aW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4
NCwgNzYsIDAuOCkpOwotICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEo
MTMyLCAxMTAsIDEwMCwgMC44KSwgcmdiYSgxMDEsIDg0LCA3NiwgMC44KSk7Ci0gICAgYm9yZGVy
LXRvcC1sZWZ0LXJhZGl1czogMXB4OwotICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxcHg7
Ci19Ci0KLSNuZXctdG9kbywKLS5lZGl0IHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAg
bWFyZ2luOiAwOwotICAgIHdpZHRoOiAxMDAlOwotICAgIGZvbnQtc2l6ZTogMjRweDsKLSAgICBm
b250LWZhbWlseTogaW5oZXJpdDsKLSAgICBsaW5lLWhlaWdodDogMS40ZW07Ci0gICAgYm9yZGVy
OiAwOwotICAgIG91dGxpbmU6IG5vbmU7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgcGFkZGlu
ZzogNnB4OwotICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7Ci0gICAgYm94LXNoYWRvdzogaW5z
ZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKLSAgICAtbW96LWJveC1zaXppbmc6
IGJvcmRlci1ib3g7Ci0gICAgLW1zLWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgLW8tYm94
LXNpemluZzogYm9yZGVyLWJveDsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIC13
ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1tb3otZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOwotICAgIC1tcy1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci0g
ICAgLW8tZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIGZvbnQtc21vb3RoaW5nOiBh
bnRpYWxpYXNlZDsKLX0KLQotI25ldy10b2RvIHsKLSAgICBwYWRkaW5nOiAxNnB4IDE2cHggMTZw
eCA2MHB4OwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAs
IDAuMDIpOwotICAgIHotaW5kZXg6IDI7Ci0gICAgYm94LXNoYWRvdzogbm9uZTsKLX0KLQotI21h
aW4gewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICB6LWluZGV4OiAyOwotICAgIGJvcmRl
ci10b3A6IDFweCBkb3R0ZWQgI2FkYWRhZDsKLX0KLQotbGFiZWxbZm9yPSd0b2dnbGUtYWxsJ10g
ewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLSN0b2dnbGUtYWxsIHsKLSAgICBwb3NpdGlvbjog
YWJzb2x1dGU7Ci0gICAgdG9wOiAtNDJweDsKLSAgICBsZWZ0OiAtNHB4OwotICAgIHdpZHRoOiA0
MHB4OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICAvKiBNb2JpbGUgU2FmYXJpICovCi0g
ICAgYm9yZGVyOiBub25lOwotfQotCi0jdG9nZ2xlLWFsbDpiZWZvcmUgewotICAgIGNvbnRlbnQ6
ICfCuyc7Ci0gICAgZm9udC1zaXplOiAyOHB4OwotICAgIGNvbG9yOiAjZDlkOWQ5OwotICAgIHBh
ZGRpbmc6IDAgMjVweCA3cHg7Ci19Ci0KLSN0b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKLSAg
ICBjb2xvcjogIzczNzM3MzsKLX0KLQotI3RvZG8tbGlzdCB7Ci0gICAgbWFyZ2luOiAwOwotICAg
IHBhZGRpbmc6IDA7Ci0gICAgbGlzdC1zdHlsZTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaSB7
Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGZvbnQtc2l6ZTogMjRweDsKLSAgICBib3Jk
ZXItYm90dG9tOiAxcHggZG90dGVkICNjY2M7Ci19Ci0KLSN0b2RvLWxpc3QgbGk6bGFzdC1jaGls
ZCB7Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5n
IHsKLSAgICBib3JkZXItYm90dG9tOiBub25lOwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLSN0b2Rv
LWxpc3QgbGkuZWRpdGluZyAuZWRpdCB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci0gICAgd2lkdGg6
IDUwNnB4OwotICAgIHBhZGRpbmc6IDEzcHggMTdweCAxMnB4IDE3cHg7Ci0gICAgbWFyZ2luOiAw
IDAgMCA0M3B4OwotfQotCi0jdG9kby1saXN0IGxpLmVkaXRpbmcgLnZpZXcgewotICAgIGRpc3Bs
YXk6IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAgdGV4dC1hbGlnbjog
Y2VudGVyOwotICAgIHdpZHRoOiA0MHB4OwotICAgIC8qIGF1dG8sIHNpbmNlIG5vbi1XZWJLaXQg
YnJvd3NlcnMgZG9lc24ndCBzdXBwb3J0IGlucHV0IHN0eWxpbmcgKi8KLSAgICBoZWlnaHQ6IGF1
dG87Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBib3R0b206IDA7
Ci0gICAgbWFyZ2luOiBhdXRvIDA7Ci0gICAgLyogTW9iaWxlIFNhZmFyaSAqLwotICAgIGJvcmRl
cjogbm9uZTsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgLW1zLWFwcGVhcmFu
Y2U6IG5vbmU7Ci0gICAgLW8tYXBwZWFyYW5jZTogbm9uZTsKLSAgICBhcHBlYXJhbmNlOiBub25l
OwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICfinJQn
OwotICAgIC8qIDQwICsgYSBjb3VwbGUgb2YgcGl4ZWxzIHZpc3VhbCBhZGp1c3RtZW50ICovCi0g
ICAgbGluZS1oZWlnaHQ6IDQzcHg7Ci0gICAgZm9udC1zaXplOiAyMHB4OwotICAgIGNvbG9yOiAj
ZDlkOWQ5OwotICAgIHRleHQtc2hhZG93OiAwIC0xcHggMCAjYmZiZmJmOwotfQotCi0jdG9kby1s
aXN0IGxpIC50b2dnbGU6Y2hlY2tlZDphZnRlciB7Ci0gICAgY29sb3I6ICM4NWFkYTc7Ci0gICAg
dGV4dC1zaGFkb3c6IDAgMXB4IDAgIzY2OTk5MTsKLSAgICBib3R0b206IDFweDsKLSAgICBwb3Np
dGlvbjogcmVsYXRpdmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgbGFiZWwgewotICAgIHdoaXRlLXNw
YWNlOiBwcmU7Ci0gICAgd29yZC1icmVhazogYnJlYWstd29yZDsKLSAgICBwYWRkaW5nOiAxNXB4
IDYwcHggMTVweCAxNXB4OwotICAgIG1hcmdpbi1sZWZ0OiA0NXB4OwotICAgIGRpc3BsYXk6IGJs
b2NrOwotICAgIGxpbmUtaGVpZ2h0OiAxLjI7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBjb2xv
ciAwLjRzOwotICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Ci19Ci0KLSN0b2RvLWxpc3QgbGku
Y29tcGxldGVkIGxhYmVsIHsKLSAgICBjb2xvcjogI2E5YTlhOTsKLSAgICB0ZXh0LWRlY29yYXRp
b246IGxpbmUtdGhyb3VnaDsKLX0KLQotI3RvZG8tbGlzdCBsaSAuZGVzdHJveSB7Ci0gICAgZGlz
cGxheTogbm9uZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIHJp
Z2h0OiAxMHB4OwotICAgIGJvdHRvbTogMDsKLSAgICB3aWR0aDogNDBweDsKLSAgICBoZWlnaHQ6
IDQwcHg7Ci0gICAgbWFyZ2luOiBhdXRvIDA7Ci0gICAgZm9udC1zaXplOiAyMnB4OwotICAgIGNv
bG9yOiAjYTg4YThhOwotICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMnM7Ci0gICAgdHJh
bnNpdGlvbjogYWxsIDAuMnM7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXIgewot
ICAgIHRleHQtc2hhZG93OiAwIDAgMXB4ICMwMDAsCi0gICAgICAgICAgICAgICAgIDAgMCAxMHB4
IHJnYmEoMTk5LCAxMDcsIDEwNywgMC44KTsKLSAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUo
MS4zKTsKLSAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLjMpOwotICAgIHRyYW5zZm9ybTogc2Nh
bGUoMS4zKTsKLX0KLQotI3RvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7Ci0gICAgY29udGVu
dDogJ+Kclic7Ci19Ci0KLSN0b2RvLWxpc3QgbGk6aG92ZXIgLmRlc3Ryb3kgewotICAgIGRpc3Bs
YXk6IGJsb2NrOwotfQotCi0jdG9kby1saXN0IGxpIC5lZGl0IHsKLSAgICBkaXNwbGF5OiBub25l
OwotfQotCi0jdG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZCB7Ci0gICAgbWFyZ2luLWJv
dHRvbTogLTFweDsKLX0KLQotI2Zvb3RlciB7Ci0gICAgY29sb3I6ICM3Nzc7Ci0gICAgcGFkZGlu
ZzogMCAxNXB4OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDogMDsKLSAgICBi
b3R0b206IC0zMXB4OwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiAyMHB4OwotICAgIHotaW5k
ZXg6IDE7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0jZm9vdGVyOmJlZm9yZSB7Ci0g
ICAgY29udGVudDogJyc7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwot
ICAgIGJvdHRvbTogMzFweDsKLSAgICBsZWZ0OiAwOwotICAgIGhlaWdodDogNTBweDsKLSAgICB6
LWluZGV4OiAtMTsKLSAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjMp
LAotICAgICAgICAgICAgICAgIDAgNnB4IDAgLTNweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCks
Ci0gICAgICAgICAgICAgICAgMCA3cHggMXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjMpLAotICAg
ICAgICAgICAgICAgIDAgNDNweCAwIC02cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpLAotICAg
ICAgICAgICAgICAgIDAgNDRweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Ci19Ci0KLSN0
b2RvLWNvdW50IHsKLSAgICBmbG9hdDogbGVmdDsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotfQot
Ci0jZmlsdGVycyB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgbGlzdC1z
dHlsZTogbm9uZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAg
bGVmdDogMDsKLX0KLQotI2ZpbHRlcnMgbGkgewotICAgIGRpc3BsYXk6IGlubGluZTsKLX0KLQot
I2ZpbHRlcnMgbGkgYSB7Ci0gICAgY29sb3I6ICM4Mzc1NmY7Ci0gICAgbWFyZ2luOiAycHg7Ci0g
ICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotCi0jZmlsdGVycyBsaSBhLnNlbGVjdGVkIHsK
LSAgICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotI2NsZWFyLWNvbXBsZXRlZCB7Ci0gICAgZmxv
YXQ6IHJpZ2h0OwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBsaW5lLWhlaWdodDogMjBw
eDsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAw
LCAwLCAwLjEpOwotICAgIGZvbnQtc2l6ZTogMTFweDsKLSAgICBwYWRkaW5nOiAwIDEwcHg7Ci0g
ICAgYm9yZGVyLXJhZGl1czogM3B4OwotICAgIGJveC1zaGFkb3c6IDAgLTFweCAwIDAgcmdiYSgw
LCAwLCAwLCAwLjIpOwotfQotCi0jY2xlYXItY29tcGxldGVkOmhvdmVyIHsKLSAgICBiYWNrZ3Jv
dW5kOiByZ2JhKDAsIDAsIDAsIDAuMTUpOwotICAgIGJveC1zaGFkb3c6IDAgLTFweCAwIDAgcmdi
YSgwLCAwLCAwLCAwLjMpOwotfQotCi0jaW5mbyB7Ci0gICAgbWFyZ2luOiA2NXB4IGF1dG8gMDsK
LSAgICBjb2xvcjogI2E2YTZhNjsKLSAgICBmb250LXNpemU6IDEycHg7Ci0gICAgdGV4dC1zaGFk
b3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwotICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKLX0KLQotI2luZm8gYSB7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci19Ci0KLS8qCi0gICAg
SGFjayB0byByZW1vdmUgYmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCi0gICAgQ2FuJ3Qg
dXNlIGl0IGdsb2JhbGx5IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveCBh
bmQgT3BlcmEKLSovCi0KLUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4
ZWwtcmF0aW86MCkgewotICAgICN0b2dnbGUtYWxsLAotICAgICN0b2RvLWxpc3QgbGkgLnRvZ2ds
ZSB7Ci0gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7Ci0gICAgfQotCi0gICAgI3RvZG8tbGlzdCBs
aSAudG9nZ2xlIHsKLSAgICAgICAgaGVpZ2h0OiA0MHB4OwotICAgIH0KLQotICAgICN0b2dnbGUt
YWxsIHsKLSAgICAgICAgdG9wOiAtNTZweDsKLSAgICAgICAgbGVmdDogLTE1cHg7Ci0gICAgICAg
IHdpZHRoOiA2NXB4OwotICAgICAgICBoZWlnaHQ6IDQxcHg7Ci0gICAgICAgIC13ZWJraXQtdHJh
bnNmb3JtOiByb3RhdGUoOTBkZWcpOwotICAgICAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoOTBk
ZWcpOwotICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Ci0gICAgICAgIC13ZWJraXQt
YXBwZWFyYW5jZTogbm9uZTsKLSAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKLSAgICB9Ci19Ci0K
LS5oaWRkZW4gewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLWhyIHsKLSAgICBtYXJnaW46IDIw
cHggMDsKLSAgICBib3JkZXI6IDA7Ci0gICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjQzVDNUM1
OwotICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI0Y3RjdGNzsKLX0KLQotLmxlYXJuIGEg
ewotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwot
ICAgIGNvbG9yOiAjYjgzZjQ1OwotfQotCi0ubGVhcm4gYTpob3ZlciB7Ci0gICAgdGV4dC1kZWNv
cmF0aW9uOiB1bmRlcmxpbmU7Ci0gICAgY29sb3I6ICM3ODdlN2U7Ci19Ci0KLS5sZWFybiBoMywK
LS5sZWFybiBoNCwKLS5sZWFybiBoNSB7Ci0gICAgbWFyZ2luOiAxMHB4IDA7Ci0gICAgZm9udC13
ZWlnaHQ6IDUwMDsKLSAgICBsaW5lLWhlaWdodDogMS4yOwotICAgIGNvbG9yOiAjMDAwOwotfQot
Ci0ubGVhcm4gaDMgewotICAgIGZvbnQtc2l6ZTogMjRweDsKLX0KLQotLmxlYXJuIGg0IHsKLSAg
ICBmb250LXNpemU6IDE4cHg7Ci19Ci0KLS5sZWFybiBoNSB7Ci0gICAgbWFyZ2luLWJvdHRvbTog
MDsKLSAgICBmb250LXNpemU6IDE0cHg7Ci19Ci0KLS5sZWFybiB1bCB7Ci0gICAgcGFkZGluZzog
MDsKLSAgICBtYXJnaW46IDAgMCAzMHB4IDI1cHg7Ci19Ci0KLS5sZWFybiBsaSB7Ci0gICAgbGlu
ZS1oZWlnaHQ6IDIwcHg7Ci19Ci0KLS5sZWFybiBwIHsKLSAgICBmb250LXNpemU6IDE1cHg7Ci0g
ICAgZm9udC13ZWlnaHQ6IDMwMDsKLSAgICBsaW5lLWhlaWdodDogMS4zOwotICAgIG1hcmdpbi10
b3A6IDA7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotLnF1b3RlIHsKLSAgICBib3JkZXI6
IG5vbmU7Ci0gICAgbWFyZ2luOiAyMHB4IDAgNjBweCAwOwotfQotCi0ucXVvdGUgcCB7Ci0gICAg
Zm9udC1zdHlsZTogaXRhbGljOwotfQotCi0ucXVvdGUgcDpiZWZvcmUgewotICAgIGNvbnRlbnQ6
ICfigJwnOwotICAgIGZvbnQtc2l6ZTogNTBweDsKLSAgICBvcGFjaXR5OiAuMTU7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTIwcHg7Ci0gICAgbGVmdDogM3B4OwotfQotCi0u
cXVvdGUgcDphZnRlciB7Ci0gICAgY29udGVudDogJ+KAnSc7Ci0gICAgZm9udC1zaXplOiA1MHB4
OwotICAgIG9wYWNpdHk6IC4xNTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYm90dG9t
OiAtNDJweDsKLSAgICByaWdodDogM3B4OwotfQotCi0ucXVvdGUgZm9vdGVyIHsKLSAgICBwb3Np
dGlvbjogYWJzb2x1dGU7Ci0gICAgYm90dG9tOiAtNDBweDsKLSAgICByaWdodDogMDsKLX0KLQot
LnF1b3RlIGZvb3RlciBpbWcgewotICAgIGJvcmRlci1yYWRpdXM6IDNweDsKLX0KLQotLnF1b3Rl
IGZvb3RlciBhIHsKLSAgICBtYXJnaW4tbGVmdDogNXB4OwotICAgIHZlcnRpY2FsLWFsaWduOiBt
aWRkbGU7Ci19Ci0KLS5zcGVlY2gtYnViYmxlIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0g
ICAgcGFkZGluZzogMTBweDsKLSAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4wNCk7Ci0g
ICAgYm9yZGVyLXJhZGl1czogNXB4OwotfQotCi0uc3BlZWNoLWJ1YmJsZTphZnRlciB7Ci0gICAg
Y29udGVudDogJyc7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMTAwJTsKLSAg
ICByaWdodDogMzBweDsKLSAgICBib3JkZXI6IDEzcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gICAg
Ym9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMDQpOwotfQotCi0ubGVhcm4tYmFyID4g
LmxlYXJuIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2lkdGg6IDI3MnB4OwotICAg
IHRvcDogOHB4OwotICAgIGxlZnQ6IC0zMDBweDsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAgIGJv
cmRlci1yYWRpdXM6IDVweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAy
NTUsIC42KTsKLSAgICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7Ci0gICAgdHJh
bnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsKLSAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246
IDUwMG1zOwotICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zOwotfQotCi1AbWVkaWEgKG1p
bi13aWR0aDogODk5cHgpIHsKLSAgICAubGVhcm4tYmFyIHsKLSAgICAgICAgd2lkdGg6IGF1dG87
Ci0gICAgICAgIG1hcmdpbjogMCAwIDAgMzAwcHg7Ci0gICAgfQotCi0gICAgLmxlYXJuLWJhciA+
IC5sZWFybiB7Ci0gICAgICAgIGxlZnQ6IDhweDsKLSAgICB9Ci0KLSAgICAubGVhcm4tYmFyICN0
b2RvYXBwIHsKLSAgICAgICAgd2lkdGg6IDU1MHB4OwotICAgICAgICBtYXJnaW46IDEzMHB4IGF1
dG8gNDBweCBhdXRvOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9i
b3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM2OGU1ZWEwM2E2MWFkMzY2NzljMTVlYTBhZjY0ODkxMzcxZGI5ZWEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDkgKzAsMCBAQAotKGZ1bmN0aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0K
LSAgICAvLyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCi0gICAgLy8gQ291cnRlc3kgb2Yg
dW5kZXJzY29yZWpzLm9yZwotICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7Ci0gICAgICAgIF8u
ZGVmYXVsdHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7Ci0gICAgICAgICAgICBpZiAoIW9iamVjdCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBmb3IgKHZhciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0
aDsgYXJnc0luZGV4IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXRlcmFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJh
YmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvYmplY3Q7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJC
LXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKLSAgICAgICAgLy8gZm9sbG93
aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgotICAg
ICAgICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7Ci0gICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88
JShbXHNcU10rPyklPi9nLAotICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/
KSU+L2csCi0gICAgICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZwotICAg
ICAgICB9OwotCi0gICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3Ng
LCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KLSAgICAgICAgLy8gaW50ZXJwb2xhdGlv
biwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcwotICAg
ICAgICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KLSAgICAgICAgdmFyIG5vTWF0Y2ggPSAv
KC4pXi87Ci0KLSAgICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBl
ZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKLSAgICAgICAgLy8gc3RyaW5nIGxpdGVy
YWwuCi0gICAgICAgIHZhciBlc2NhcGVzID0gewotICAgICAgICAgICAgIiciOiAgICAgICInIiwK
LSAgICAgICAgICAgICdcXCc6ICAgICAnXFwnLAotICAgICAgICAgICAgJ1xyJzogICAgICdyJywK
LSAgICAgICAgICAgICdcbic6ICAgICAnbicsCi0gICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAot
ICAgICAgICAgICAgJ1x1MjAyOCc6ICd1MjAyOCcsCi0gICAgICAgICAgICAnXHUyMDI5JzogJ3Uy
MDI5JwotICAgICAgICB9OwotCi0gICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8
XHUyMDI4fFx1MjAyOS9nOwotCi0gICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGlu
Zywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCi0gICAgICAgIC8vIFVu
ZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2
ZXMgd2hpdGVzcGFjZSwKLSAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3
aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCi0gICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0
ZXh0LCBkYXRhLCBzZXR0aW5ncykgewotICAgICAgICAgICAgdmFyIHJlbmRlcjsKLSAgICAgICAg
ICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5n
cyk7Ci0KLSAgICAgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFy
IGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgotICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBu
ZXcgUmVnRXhwKFsKLSAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gp
LnNvdXJjZSwKLSAgICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRj
aCkuc291cmNlLAotICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNo
KS5zb3VyY2UKLSAgICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKLQotICAgICAg
ICAgICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0
ZXJhbHMgYXBwcm9wcmlhdGVseS4KLSAgICAgICAgICAgIHZhciBpbmRleCA9IDA7Ci0gICAgICAg
ICAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7Ci0gICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0
Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZz
ZXQpIHsKLSAgICAgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0
KQotICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkg
eyByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKLQotICAgICAgICAgICAgICAgIGlm
IChlc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIg
KyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/
Jyc6X190KStcbiciOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZXZh
bHVhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRl
ICsgIlxuX19wKz0nIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW5kZXgg
PSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOwotCi0gICAgICAg
ICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVz
IGluIGxvY2FsIHNjb3BlLgotICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291
cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7Ci0KLSAgICAgICAgICAg
IHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCi0g
ICAgICAgICAgICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMs
JycpO307XG4iICsKLSAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7Ci0K
LSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9u
KHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7Ci0gICAgICAgICAgICB9
IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7Ci0gICAgICAg
ICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRhdGEp
IHJldHVybiByZW5kZXIoZGF0YSwgXyk7Ci0gICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5j
dGlvbihkYXRhKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRh
dGEsIF8pOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29t
cGlsZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9u
LgotICAgICAgICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3Mu
dmFyaWFibGUgfHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOwotCi0gICAgICAgICAg
ICByZXR1cm4gdGVtcGxhdGU7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgcmV0dXJuIF87Ci0gICAg
fSkoe30pOwotCi0gICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7
Ci0gICAgICAgIHdpbmRvdy5fZ2FxID0gW1snX3NldEFjY291bnQnLCdVQS0zMTA4MTA2Mi0xJ10s
WydfdHJhY2tQYWdldmlldyddXTsoZnVuY3Rpb24oZCx0KXt2YXIgZz1kLmNyZWF0ZUVsZW1lbnQo
dCkscz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdO2cuc3JjPScvL3d3dy5nb29nbGUtYW5h
bHl0aWNzLmNvbS9nYS5qcyc7cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpfShkb2N1bWVu
dCwnc2NyaXB0JykpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgewotICAgICAg
ICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKLSAgICAg
ICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0
aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZ1bmN0aW9uIGZpbmRSb290KCkgewotICAgICAgICB2YXIgYmFzZTsKLQotICAgICAgICBbL2xh
YnMvLCAvXHcqLWV4YW1wbGVzL10uZm9yRWFjaChmdW5jdGlvbiAoaHJlZikgewotICAgICAgICAg
ICAgdmFyIG1hdGNoID0gbG9jYXRpb24uaHJlZi5tYXRjaChocmVmKTsKLQotICAgICAgICAgICAg
aWYgKCFiYXNlICYmIG1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGxvY2F0aW9uLmhy
ZWYuaW5kZXhPZihtYXRjaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IHJldHVybiBsb2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBnZXRGaWxlKGZpbGUsIGNhbGxiYWNrKSB7Ci0gICAgICAgIGlmICghbG9jYXRpb24uaG9z
dCkgewotICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/
IFJ1biBUb2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3Iu
Jyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
Ci0KLSAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKLSAg
ICAgICAgeGhyLnNlbmQoKTsKLQotICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgewot
ICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgewotICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7
Ci0gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZWFybikpIHsKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFyIHRlbXBsYXRlLCBmcmFtZXdvcms7Ci0KLSAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04g
IT09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGxlYXJu
SlNPTiA9IEpTT04ucGFyc2UobGVhcm5KU09OKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoY29uZmlnKSB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0
ZTsKLSAgICAgICAgICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdvcms7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKLSAgICAg
ICAgICAgIHRlbXBsYXRlID0gbGVhcm5KU09OLnRlbXBsYXRlcy50b2RvbXZjOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2Rh
dGEtZnJhbWV3b3JrXScpKSB7Ci0gICAgICAgICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZ2V0QXR0cmlidXRlKCdkYXRhLWZyYW1ld29y
aycpOwotICAgICAgICB9Ci0KLQotICAgICAgICBpZiAodGVtcGxhdGUgJiYgbGVhcm5KU09OW2Zy
YW1ld29ya10pIHsKLSAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltm
cmFtZXdvcmtdOwotICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOwotCi0gICAg
ICAgICAgICB0aGlzLmFwcGVuZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgTGVhcm4ucHJv
dG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGFzaWRlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKLSAgICAgICAgYXNpZGUuaW5uZXJIVE1MID0gXy50
ZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1ld29ya0pTT04pOwotICAgICAgICBhc2lk
ZS5jbGFzc05hbWUgPSAnbGVhcm4nOwotCi0gICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MK
LSAgICAgICAgdmFyIGRlbW9MaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kZW1vLWxp
bmsnKTsKLSAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1
bmN0aW9uIChkZW1vTGluaykgewotICAgICAgICAgICAgZGVtb0xpbmsuc2V0QXR0cmlidXRlKCdo
cmVmJywgZmluZFJvb3QoKSArIGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9k
eS5jbGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKLSAgICAgICAgZG9jdW1lbnQuYm9k
eS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOwotICAg
IH07Ci0KLSAgICByZWRpcmVjdCgpOwotICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7
Ci19KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL3Rv
ZG9tdmMtY29tbW9uL2JnLnBuZyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90
b2RvbXZjLWNvbW1vbi9iZy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYTc2
MDA4MjVlZTExZjIxODQ5ZWQ0NzU0OTljN2QxZWNiY2M4NzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAw
MDEKCmxpdGVyYWwgMjEyNgp6Y21WLVUyKGtCeFApPGg7M0t8TGswMDBlMU5KTFRxMDAza0YwMDNr
SDB7e1IzNFVCIXEwMDAwQ1ApdC1zPyhYakUKej4rOXlgPUhLN250PX4zdDAwME81TmtsPFpjd1Rq
dShRNHZ+N0tXRVcjWW0/bEtfdjtUbXwhRmMpQE53RW5tdHNoCnp4IU9+ejgxSlQzcEZzbT5tPTA0
aFZhX2xYbF9ibT0rTTs9ZUk8JSRyTzJ0YWBzdWgqU3IjUE93Kj9hZHEhTyFDVgp6KjAmYilya0ND
RVYpMW5JdWlMQm50VUgtTUpJOyZxWWd6fGRATmhubl9hYmkyZ2BwdTROQU1WaWQzaFMlP3F1en4K
empsSmYoeDhjajxQR2NqbipKK2F7Jkg1cCpuNSQ1ZTM/PEtDYz9vMDZtQXNOU2JnUFdPP1B6I0N6
bjwhPXs+e1ZTCnpVVkVQMW1zZzlgXk9GVWhTTzVydFhIaFJseVUyaT42JEJUPWdsR2B7SmxjdEdI
cndSSW0pNkJ1dTY1akxRbl5IOAp6dmw5bFpxVUJBKyVxdk01WEMreVlAbWZBKFlCflhQPWV8Njx7
JSReZVU4bnJLP3YyY2NiQEpvbTVDRz5yS0FMN0oKenBsSEVJYXZWcHwwcDEmbSFHYFRpPzw3aVo7
fUBHNyNaKX1LbSUyIUZIblEwKiY/UExSKUchSEFhSGdVI2N8JGR6CnpwaiMwSG1lYWRJZT5gIyk9
SmprYntCPUZLblUzcGMtJllAal9qNihoNFl+K1VxPFBVMzZDOzViPU1eRmA9cDFkSQp6azxDUU9Q
TmE3PiFeSj1MSHVueDF4aTRRWEstWXsmTW9UOGt5NlZiOWN8V2huT3dGfmM9M3pPeThhZ2t0bGlT
NiMKemAjOEZgOUgpRD1ibWs5QjVNblcmX3IjKWYkYys7JExTci1AXkFuOGRoY35JcXV1dj5qT0s3
cHc3TEo7JlgwaTFDCnpHTXNIZFAxT3NAbnkkJGohPlhBaWklN2JwNWs+YHB5TkEhfmVwYikoKXA5
elI0WWw2ej1VfXtDSWRoMXooRnBBbwp6UUlXITswenBDeUM0KjdZTGtaQ09AY3VsMFJfJnpnaHNB
OEVrKXolPCFwLWJ2c3NwbFlZMn1QOyF2NENZajlrbUYKemIwYk5fbTRWKmZeWVpNb2IyKGozcEtq
fjd2I1p0a3M9SW8re3N1JVdpdWtkSkgkYj9mWmtpQT1QWV8zT2hEQmtvCnooTFRRSFkmRl5eMmhH
LVlgKlo5M3ZifmM/KihKY2hEalRmQ3M/elJtKmAqTipWLSQ9P1FxdGhuU3IqP09TM3NqSwp6bzxf
VV5me35hZzYwdWw+ak5wS2E5MntATkgrU3N0WCVAfXhCKkprIWx9UFoxY0NsSW5zfn01XiFSbmNV
aypybUEKeiVTSVZndDU4RVF4TEorT2lGcTx5dTRlT0R8OUx0M2ROc2VmeE91cSlEJiRfJWowRGdx
Q3kxZ3pjfHRURDMqbWVlCnp7PSV8PGBgfV9IeXBoT3V7Oyl4a1JnK1FuSENDM1RmK2tzcHFWNip8
UUstUmNxRH00PktrQnV3cXV5WkxVcHxncgp6UFViVWJGYkJyUGQxeE9gXkMqci1pM3A5KkYjKE9C
aCE0V3lAYUMmKiF8T3xHWGNqREEmWWhGeztjRDcqbyhHU14KekBwUVNFNyl4XzgxPVF5amU2KkxR
I1RYdS03KG87Uzh1M3RwREE8U2djS2NLT3BtQTs9SEJaU0BPRlRAX1hPdnhxCnoqTnwzS0x5dGd6
SDZHVSYmVW9jNFp6azRsdW0zUHs5P2ZwSTQrUUdQSit2NmAxbGZScTNMY1MqKE0qV0srfGIlTwp6
ZSR6PjBfZGRqJWhtQ3NwZVhkaFlSfS1pOUE9Q2BFb0NoVVl1SH5eeCE5K3wmKFBnYio+Q2s8PTlq
fCkqQHh5ZlQKenBQIytLdDx9MzlifDNXbDRmeFQoK0c/YUg+Z0deZEBNRWFVT0pSZnk1NVR0Rkk3
XlkpVnVNVT03UHAweTU1alN+CnorVEopaWdNeXJxa1g7d1U4ajY4aUlEdHFKWWhTX0QzX09lbS1A
ZzZtZV9SZmlRfXVUX0stQS05cUclfWdrM0U5Ywp6IThgS2dzTU5YbSliZWxvUGZNcWwqfCYkTT4x
cWBpIWNZKVJGWW5qTll1KmdTdkA4WGViVjclfXhZTD42KUdKUEoKekpwQTdLMzFsY0p1SUZLU3ct
e3g0RlgwSzJBeil+WGc8YHNPdSQ0fF48TUM3QCt4Ynd4c0dnVHZKSUFMalB7NjhMCno4QVl1U0dT
MEdVZ2s2V2B2NFc7UnkqdW9FVG51bFBpfDU3MyVsdipaeHcjdjZ5VVFeTU9mY3BUI1Y4UklEViMj
Tgp6RDFgK0FlbXNPaCl3YldERXhWY2ZwS3opanlWPTx+JlpYUGc2Y3xaREU3VTRiazxEXj4tKF5Y
Slg0WXpvaU5SdkwKenl1WTd+MjZ3LVBeWnclNkZ9c2hCd1YyJDAyYzhSc1NVeTZkTTkyZGlDQXhp
WDNJVXFzcTVpZzY+VV8hVnkqcTUkCnpqbX0xNnRKcitRWiZUP0hra3BlSXdWWC1yMUVJPUAlWmx0
OzY8dHdIODZJRD5nKm1qJkUhQSkpJWdYSj14NnUjbAp6Y0tFUD5ieDRycVYqa2BCQnJaJE1xanR7
VHNIY3hVSD47KWlBS31CKEtpbGEmVkQlYj82bSZeMFdLNF4mRVpOQUkKejhBTVlzXyUkRCV8TStA
K2NRcUwtaGk0eUc+aCpqd2RpaSFXMXt9cD5aaHdGWXRfNFN1MWtqWTk8YkFaanp+OWVrCnpfRGlh
citBZkpGUF85QHltVW8kS1c+PC01YCEkVk5PSTF5KEVEU0g0V3BDaWpFXz5hbCFOdD1eZVZFUiN1
SjE9Ygp6O0JXRjJJZ3lGNUxleFYreWVjJEtpbjtBaUBteW87Rz56SiZqcmRXI2VjWGhJWnBoNU9Z
cXdfUEVmY0Y1NjxPMTkKekwpOHIhS00oKWlmMGBAP1c0KEpkYyk3V29QR14mPSQ8elVzTStIQ1dh
a0NeM3RaeGsrUGpRR31CPlo1PFo2Vnh3CnpCQEhyViQmbH5AVGFqNzBwY2V7aVN1UkxzVWN6RFlf
NVRuRHE4UHlfUTN3aGBEOCE0aks7dkZkUlArUTA9ekp5Kgp6enVXZCUhYWlARHt8Kko8STtPRCZp
JWx7SnAtOCpQdTNWR0xXaXlrNnYjWG1RcXdgLSslZSR8Q0p3KkBgNXpiMzwKekV9eiM7a1JoTCZx
NVBERzZAbW0qJD5adV9aWkUjcTNNYytOJjFPXjdob2g5UVI3YCtMJGNCUDVwcUc9ZnFBMHVoCnpV
QnVrYXhURm1IKTx8WGJ2cDJjPUhTYk5rcFh3NzNhNWx2N1YkamI5MiN5WjE0MUAkWD9GfUp0OGdJ
VTdXbTZtOQp6P2VfOzt6c25tNmBMWmVQPlQ9JClLcj5aP2tyKlVtRnFSN3p4MEM2XmJtY3NjQDFB
R3R3X3JOSD4tWG0kZCp8UTwKem4mMUxuMHU3PWwmSUxzPiVDa0pwYERpRzlGMTh4NE5lK2xnPCNp
P2U3akwleDs0Wm5Sa05eTXgwNypxb002TjwkCkVmKD4wTiEya2ROCgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9hcHAvanMvZGF0YS9zdGF0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODkzM2ZkMmQwNzQy
MDY1YjZkOWQzZGU2YzQ3ZTc2MjhiNTkwODMwCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanMKQEAgLTAsMCArMSwzOSBAQAorLypn
bG9iYWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2ZsaWdodC9s
aWIvY29tcG9uZW50JywKKyAgICAnYXBwL3N0b3JlJworXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBv
bmVudCwgZGF0YVN0b3JlKSB7CisgICAgZnVuY3Rpb24gc3RhdHMoKSB7CisgICAgICAgIHRoaXMu
YXR0cmlidXRlcyh7CisgICAgICAgICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZQorICAgICAgICB9
KTsKKworICAgICAgICB0aGlzLnJlY291bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgdG9kb3MgPSB0aGlzLmF0dHIuZGF0YVN0b3JlLmFsbCgpOworICAgICAgICAgICAgdmFyIGFs
bCA9IHRvZG9zLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0b2Rvcy5yZWR1
Y2UoZnVuY3Rpb24gKG1lbW8sIGVhY2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVtbyAr
PSBlYWNoLmNvbXBsZXRlZCA/IDAgOiAxOworICAgICAgICAgICAgfSwgMCk7CisKKyAgICAgICAg
ICAgIHRoaXMudHJpZ2dlcignZGF0YVN0YXRzQ291bnRlZCcsIHsKKyAgICAgICAgICAgICAgICBh
bGw6IGFsbCwKKyAgICAgICAgICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZywKKyAgICAgICAg
ICAgICAgICBjb21wbGV0ZWQ6IGFsbCAtIHJlbWFpbmluZywKKyAgICAgICAgICAgICAgICBmaWx0
ZXI6ICcnCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVy
KCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVu
dCwgJ2RhdGFUb2Rvc0xvYWRlZCcsIHRoaXMucmVjb3VudCk7CisgICAgICAgICAgICB0aGlzLm9u
KGRvY3VtZW50LCAnZGF0YVRvZG9BZGRlZCcsIHRoaXMucmVjb3VudCk7CisgICAgICAgICAgICB0
aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9SZW1vdmVkJywgdGhpcy5yZWNvdW50KTsKKyAgICAg
ICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb1RvZ2dsZWQnLCB0aGlzLnJlY291bnQp
OworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFDbGVhcmVkQ29tcGxldGVkJywg
dGhpcy5yZWNvdW50KTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb1Rv
Z2dsZWRBbGwnLCB0aGlzLnJlY291bnQpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1
cm4gZGVmaW5lQ29tcG9uZW50KHN0YXRzKTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9hcHAvanMvZGF0YS90b2Rvcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTlmMWMzNWIwY2IyOGE0ZjE0MmRh
MDE1Yjk5MTY4NDg2NGFhZmYwCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanMKQEAgLTAsMCArMSwxMDMgQEAKKy8qZ2xvYmFsIGRl
ZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBv
bmVudCcsCisgICAgJ2FwcC9zdG9yZScKK10sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQsIGRh
dGFTdG9yZSkgeworICAgIGZ1bmN0aW9uIHRvZG9zKCkgeworICAgICAgICB2YXIgZmlsdGVyOwor
ICAgICAgICB0aGlzLmF0dHJpYnV0ZXMoeworICAgICAgICAgICAgZGF0YVN0b3JlOiBkYXRhU3Rv
cmUKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5hZGQgPSBmdW5jdGlvbiAoZSwgZGF0YSkg
eworICAgICAgICAgICAgdmFyIHRvZG8gPSB0aGlzLmF0dHIuZGF0YVN0b3JlLnNhdmUoeworICAg
ICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLAorICAgICAgICAgICAgICAgIGNvbXBsZXRl
ZDogZmFsc2UKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Rh
dGFUb2RvQWRkZWQnLCB7IHRvZG86IHRvZG8sIGZpbHRlcjogZmlsdGVyIH0pOworICAgICAgICB9
OworCisgICAgICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAg
ICAgIHZhciB0b2RvID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5kZXN0cm95KGRhdGEuaWQpOworCisg
ICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFUb2RvUmVtb3ZlZCcsIHRvZG8pOworICAgICAg
ICB9OworCisgICAgICAgIHRoaXMubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZh
ciB0b2RvczsKKworICAgICAgICAgICAgLy8gZmlsdGVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0o
J2ZpbHRlcicpOworICAgICAgICAgICAgZmlsdGVyID0gJyc7CisgICAgICAgICAgICB0b2RvcyA9
IHRoaXMuZmluZCgpOworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhVG9kb3NMb2FkZWQn
LCB7IHRvZG9zOiB0b2RvcyB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnVwZGF0ZSA9
IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB0aGlzLmF0dHIuZGF0YVN0b3JlLnNh
dmUoZGF0YSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGVDb21wbGV0ZWQgPSBm
dW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIGV2ZW50VHlwZTsKKyAgICAgICAg
ICAgIHZhciB0b2RvID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5nZXQoZGF0YS5pZCk7CisKKyAgICAg
ICAgICAgIHRvZG8uY29tcGxldGVkID0gIXRvZG8uY29tcGxldGVkOworICAgICAgICAgICAgdGhp
cy5hdHRyLmRhdGFTdG9yZS5zYXZlKHRvZG8pOworCisgICAgICAgICAgICBldmVudFR5cGUgPSBm
aWx0ZXIgPyAnZGF0YVRvZG9SZW1vdmVkJyA6ICdkYXRhVG9kb1RvZ2dsZWQnOworCisgICAgICAg
ICAgICB0aGlzLnRyaWdnZXIoZXZlbnRUeXBlLCB0b2RvKTsKKyAgICAgICAgfTsKKworICAgICAg
ICB0aGlzLnRvZ2dsZUFsbENvbXBsZXRlZCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAg
ICAgICB0aGlzLmF0dHIuZGF0YVN0b3JlLnVwZGF0ZUFsbCh7IGNvbXBsZXRlZDogZGF0YS5jb21w
bGV0ZWQgfSk7CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFUb2RvVG9nZ2xlZEFsbCcs
IHsgdG9kb3M6IHRoaXMuZmluZChmaWx0ZXIpIH0pOworICAgICAgICB9OworCisgICAgICAgIHRo
aXMuZmlsdGVyID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZhciB0b2RvczsK
KworICAgICAgICAgICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2ZpbHRlcicsIGRhdGEuZmls
dGVyKTsKKyAgICAgICAgICAgIGZpbHRlciA9IGRhdGEuZmlsdGVyOworICAgICAgICAgICAgdG9k
b3MgPSB0aGlzLmZpbmQoKTsKKworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhVG9kb3NG
aWx0ZXJlZCcsIHsgdG9kb3M6IHRvZG9zIH0pOworICAgICAgICB9OworCisgICAgICAgIHRoaXMu
ZmluZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciB0b2RvczsKKworICAgICAgICAg
ICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgICAgIHRvZG9zID0gdGhpcy5hdHRyLmRhdGFT
dG9yZS5maW5kKGZ1bmN0aW9uIChlYWNoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAo
dHlwZW9mIGVhY2hbZmlsdGVyXSAhPT0gJ3VuZGVmaW5lZCcpID8gZWFjaC5jb21wbGV0ZWQgOiAh
ZWFjaC5jb21wbGV0ZWQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHRvZG9zID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5hbGwoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRvZG9zOworICAgICAgICB9OworCisg
ICAgICAgIHRoaXMuY2xlYXJDb21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0
aGlzLmF0dHIuZGF0YVN0b3JlLmRlc3Ryb3lBbGwoeyBjb21wbGV0ZWQ6IHRydWUgfSk7CisKKyAg
ICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlGaWx0ZXJSZXF1ZXN0ZWQnLCB7IGZpbHRlcjogZmls
dGVyIH0pOworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhQ2xlYXJlZENvbXBsZXRlZCcp
OworICAgICAgICB9OworCisgICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlBZGRSZXF1ZXN0ZWQnLCB0
aGlzLmFkZCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlVcGRhdGVSZXF1ZXN0
ZWQnLCB0aGlzLnVwZGF0ZSk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlSZW1v
dmVSZXF1ZXN0ZWQnLCB0aGlzLnJlbW92ZSk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50
LCAndWlMb2FkUmVxdWVzdGVkJywgdGhpcy5sb2FkKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9j
dW1lbnQsICd1aVRvZ2dsZVJlcXVlc3RlZCcsIHRoaXMudG9nZ2xlQ29tcGxldGVkKTsKKyAgICAg
ICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aVRvZ2dsZUFsbFJlcXVlc3RlZCcsIHRoaXMudG9n
Z2xlQWxsQ29tcGxldGVkKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aUNsZWFy
UmVxdWVzdGVkJywgdGhpcy5jbGVhckNvbXBsZXRlZCk7CisgICAgICAgICAgICB0aGlzLm9uKGRv
Y3VtZW50LCAndWlGaWx0ZXJSZXF1ZXN0ZWQnLCB0aGlzLmZpbHRlcik7CisgICAgICAgIH0pOwor
ICAgIH0KKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQodG9kb3MpOworfSk7CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvbWFpbi5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L2FwcC9qcy9tYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2NDc3M2YxOGQxYWEwYTEw
OTNjMGVkYjJhZGRiNDhlMzVlY2E1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9hcHAvanMvbWFpbi5qcwpAQCAtMCwwICsxLDMxIEBACisvKmdsb2JhbCBERUJV
RyAqLworJ3VzZSBzdHJpY3QnOworCityZXF1aXJlLmNvbmZpZyh7CisgICAgYmFzZVVybDogJy4v
JywKKyAgICBwYXRoczogeworICAgICAgICBqcXVlcnk6ICdub2RlX21vZHVsZXMvanF1ZXJ5L2Rp
c3QvanF1ZXJ5JywKKyAgICAgICAgZXM1c2hpbTogJ25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUt
c2hpbScsCisgICAgICAgIGVzNXNoYW06ICdub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoYW0n
LAorICAgICAgICB0ZXh0OiAnbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3RleHQnLAorICAg
ICAgICBmbGlnaHQ6ICdub2RlX21vZHVsZXMvZmxpZ2h0JywKKyAgICAgICAgZGVwb3Q6ICdub2Rl
X21vZHVsZXMvZGVwb3QvZGVwb3QnLAorICAgICAgICBtZW1vcnlzdG9yYWdlOiAnbm9kZV9tb2R1
bGVzL21lbW9yeXN0b3JhZ2UvbWVtb3J5c3RvcmFnZScsCisgICAgICAgIGFwcDogJ2FwcC9qcycs
CisgICAgICAgIHRlbXBsYXRlczogJ2FwcC90ZW1wbGF0ZXMnLAorICAgICAgICB1aTogJ2FwcC9q
cy91aScsCisgICAgICAgIGRhdGE6ICdhcHAvanMvZGF0YScsCisgICAgfSwKKyAgICBzaGltOiB7
CisgICAgICAgICdhcHAvcGFnZS9hcHAnOiB7CisgICAgICAgICAgICBkZXBzOiBbJ2pxdWVyeScs
ICdlczVzaGltJywgJ2VzNXNoYW0nXQorICAgICAgICB9CisgICAgfQorfSk7CisKK3JlcXVpcmUo
W10sIGZ1bmN0aW9uICgpIHsKKyAgICByZXF1aXJlKFsnYXBwL3BhZ2UvYXBwJ10sZnVuY3Rpb24o
QXBwKXsKKyAgICAgICAgQXBwLmluaXRpYWxpemUoKTsKKyAgICAgICAgY29uc29sZS5sb2coQXBw
KTsKKyAgICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBw
L2pzL3BhZ2UvYXBwLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3BhZ2UvYXBw
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjYxNzMzYTNkODMwMDdjN2YwNmQ2MWMyMDcwOTUzNzhlZDdhMTQwNTgK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvcGFnZS9h
cHAuanMKQEAgLTAsMCArMSwyNiBAQAorLypnbG9iYWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7
CisKK2RlZmluZShbCisgICAgJ2RhdGEvdG9kb3MnLAorICAgICdkYXRhL3N0YXRzJywKKyAgICAn
dWkvbmV3X2l0ZW0nLAorICAgICd1aS90b2RvX2xpc3QnLAorICAgICd1aS9zdGF0cycsCisgICAg
J3VpL21haW5fc2VsZWN0b3InLAorICAgICd1aS90b2dnbGVfYWxsJworXSwgZnVuY3Rpb24gKFRv
ZG9zRGF0YSwgU3RhdHNEYXRhLCBOZXdJdGVtVUksIFRvZG9MaXN0VUksIFN0YXRzVUksIE1haW5T
ZWxlY3RvclVJLCBUb2dnbGVBbGxVSSkgeworICAgIHZhciBpbml0aWFsaXplID0gZnVuY3Rpb24g
KCkgeworICAgICAgICBTdGF0c0RhdGEuYXR0YWNoVG8oZG9jdW1lbnQpOworICAgICAgICBUb2Rv
c0RhdGEuYXR0YWNoVG8oZG9jdW1lbnQpOworICAgICAgICBOZXdJdGVtVUkuYXR0YWNoVG8oJyNu
ZXctdG9kbycpOworICAgICAgICBNYWluU2VsZWN0b3JVSS5hdHRhY2hUbygnI21haW4nKTsKKyAg
ICAgICAgU3RhdHNVSS5hdHRhY2hUbygnI2Zvb3RlcicpOworICAgICAgICBUb2dnbGVBbGxVSS5h
dHRhY2hUbygnI3RvZ2dsZS1hbGwnKTsKKyAgICAgICAgVG9kb0xpc3RVSS5hdHRhY2hUbygnI3Rv
ZG8tbGlzdCcpOworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAgICBpbml0aWFsaXplOiBp
bml0aWFsaXplCisgICAgfTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL3N0b3JlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3N0b3Jl
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI1YTdmOTBhY2E5NDExYjU5N2UxODkxODlkMzJlNzVkNmI5N2Q0YTcK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvc3RvcmUu
anMKQEAgLTAsMCArMSwxMSBAQAorLypnbG9iYWwgZGVmaW5lICovCisKKyd1c2Ugc3RyaWN0JzsK
KworZGVmaW5lKFsKKyAgICAnZGVwb3QnLAorICAgICdtZW1vcnlzdG9yYWdlJworXSwgZnVuY3Rp
b24gKGRlcG90LCBNZW1vcnlTdG9yYWdlKSB7CisgICAgdmFyIG1lbVN0b3JlID0gbmV3IE1lbW9y
eVN0b3JhZ2UoJ3RvZG9zJyk7CisgICAgcmV0dXJuIGRlcG90KCd0b2RvcycsIHsgaWRBdHRyaWJ1
dGU6ICdpZCcsIHN0b3JhZ2VBZGFwdG9yOiBtZW1TdG9yZSB9KTsKK30pOwpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL21haW5fc2VsZWN0b3IuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvbWFpbl9zZWxlY3Rvci5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ODhjMmQ0Y2UwYTkyZGUyZTRlMTIyODdmYjZlMTg4OWFmN2U3ZDMzCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL21haW5fc2VsZWN0b3IuanMK
QEAgLTAsMCArMSwyMCBAQAorLypnbG9iYWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7CisKK2Rl
ZmluZShbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JworXSwgZnVuY3Rpb24gKGRlZmluZUNv
bXBvbmVudCkgeworICAgIGZ1bmN0aW9uIG1haW5TZWxlY3RvcigpIHsKKyAgICAgICAgdGhpcy50
b2dnbGUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIHRvZ2dsZSA9IGRh
dGEuYWxsID4gMDsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUudG9nZ2xlKHRvZ2dsZSk7CisgICAg
ICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1
bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnLCB0aGlzLnRvZ2dsZSk7CisgICAgICAgIH0pOworICAg
IH0KKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQobWFpblNlbGVjdG9yKTsKK30pOwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL25ld19pdGVtLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL25ld19pdGVtLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIxZDZkODdlMzQzYjU1ODFhOGE1N2E4ZmEzMzk0YjZkM2JhNDI1MGIKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvbmV3X2l0ZW0uanMKQEAgLTAs
MCArMSwyOSBAQAorLypnbG9iYWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7CisKK2RlZmluZShb
CisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JworXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVu
dCkgeworICAgIGZ1bmN0aW9uIG5ld0l0ZW0oKSB7CisgICAgICAgIHZhciBFTlRFUl9LRVkgPSAx
MzsKKworICAgICAgICB0aGlzLmNyZWF0ZU9uRW50ZXIgPSBmdW5jdGlvbiAoZSkgeworICAgICAg
ICAgICAgaWYgKGUud2hpY2ggIT09IEVOVEVSX0tFWSB8fAorICAgICAgICAgICAgICAgICF0aGlz
LiRub2RlLnZhbCgpLnRyaW0oKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aUFkZFJlcXVlc3RlZCcsIHsKKyAg
ICAgICAgICAgICAgICB0aXRsZTogdGhpcy4kbm9kZS52YWwoKS50cmltKCkKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICB0aGlzLiRub2RlLnZhbCgnJyk7CisgICAgICAgIH07CisKKyAg
ICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHRoaXMub24oJ2tleWRvd24nLCB0aGlzLmNyZWF0ZU9uRW50ZXIpOworICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KG5ld0l0ZW0pOworfSk7CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRhN2FjNjZh
NzQ3ZGNhNjRiNzA2MDM5YmI2MDg1NTBkMzYyMGRkZAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS9zdGF0cy5qcwpAQCAtMCwwICsxLDM3IEBACisv
Kmdsb2JhbCBkZWZpbmUgKi8KKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsKKyAgICAnZmxpZ2h0
L2xpYi9jb21wb25lbnQnLAorICAgICcuL3dpdGhfZmlsdGVycycsCisgICAgJ3RleHQhdGVtcGxh
dGVzL3N0YXRzLmh0bWwnLAorICAgICdhcHAvdXRpbHMnCitdLCBmdW5jdGlvbiAoZGVmaW5lQ29t
cG9uZW50LCB3aXRoRmlsdGVycywgc3RhdHNUbXBsLCB1dGlscykgeworICAgIGZ1bmN0aW9uIHN0
YXRzKCkgeworICAgICAgICB2YXIgdGVtcGxhdGUgPSB1dGlscy50bXBsKHN0YXRzVG1wbCk7CisK
KyAgICAgICAgdGhpcy5hdHRyaWJ1dGVzKHsKKyAgICAgICAgICAgIGNsZWFyQ29tcGxldGVkU2Vs
ZWN0b3I6ICcjY2xlYXItY29tcGxldGVkJworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLnJl
bmRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgdG9nZ2xlID0gZGF0
YS5hbGwgPiAwOworCisgICAgICAgICAgICB0aGlzLiRub2RlLmh0bWwodGVtcGxhdGUoZGF0YSkp
OworICAgICAgICAgICAgdGhpcy4kbm9kZS50b2dnbGUodG9nZ2xlKTsKKyAgICAgICAgICAgIHRo
aXMubWFya1NlbGVjdGVkKGRhdGEuZmlsdGVyKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlz
LmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy50cmlnZ2Vy
KCd1aUNsZWFyUmVxdWVzdGVkJyk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcign
aW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgp
OworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnLCB0aGlz
LnJlbmRlcik7CisgICAgICAgICAgICB0aGlzLm9uKCdjbGljaycsIHsgJ2NsZWFyQ29tcGxldGVk
U2VsZWN0b3InOiB0aGlzLmNsZWFyQ29tcGxldGVkIH0pOworICAgICAgICB9KTsKKyAgICB9CisK
KyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHN0YXRzLCB3aXRoRmlsdGVycyk7Cit9KTsKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS90b2RvX2xpc3QuanMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvdG9kb19saXN0LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ5NGQ4M2Q3NTU0ODBiZjc5M2M4ODNkZTAzMWVjMjRiMDFhYjdhN2UKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvdG9kb19saXN0LmpzCkBA
IC0wLDAgKzEsMTA4IEBACisvKmdsb2JhbCBkZWZpbmUsICQgKi8KKyd1c2Ugc3RyaWN0JzsKKwor
ZGVmaW5lKFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAorICAgICd0ZXh0IXRlbXBsYXRl
cy90b2RvLmh0bWwnLAorICAgICdhcHAvdXRpbHMnCitdLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9u
ZW50LCB0b2RvVG1wbCwgdXRpbHMpIHsKKyAgICBmdW5jdGlvbiB0b2RvTGlzdCgpIHsKKyAgICAg
ICAgdmFyIEVOVEVSX0tFWSA9IDEzOworICAgICAgICB2YXIgdGVtcGxhdGUgPSB1dGlscy50bXBs
KHRvZG9UbXBsKTsKKworICAgICAgICB0aGlzLmF0dHJpYnV0ZXMoeworICAgICAgICAgICAgZGVz
dHJveVNlbGVjdG9yOiAnYnV0dG9uLmRlc3Ryb3knLAorICAgICAgICAgICAgdG9nZ2xlU2VsZWN0
b3I6ICdpbnB1dC50b2dnbGUnLAorICAgICAgICAgICAgbGFiZWxTZWxlY3RvcjogJ2xhYmVsJywK
KyAgICAgICAgICAgIGVkaXRTZWxlY3RvcjogJy5lZGl0JworICAgICAgICB9KTsKKworICAgICAg
ICB0aGlzLnJlbmRlckFsbCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB0aGlz
LiRub2RlLmh0bWwoJycpOworICAgICAgICAgICAgZGF0YS50b2Rvcy5mb3JFYWNoKGZ1bmN0aW9u
IChlYWNoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIoZSwgeyB0b2RvOiBlYWNoIH0p
OworICAgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZW5k
ZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2Rh
dGFUb2RvQWRkZWQnICYmIGRhdGEuZmlsdGVyID09PSAnY29tcGxldGVkJykgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy4kbm9kZS5h
cHBlbmQodGVtcGxhdGUoZGF0YS50b2RvKSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5l
ZGl0ID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJChk
YXRhLmVsKS5wYXJlbnRzKCdsaScpOworCisgICAgICAgICAgICAkdG9kb0VsLmFkZENsYXNzKCdl
ZGl0aW5nJyk7CisgICAgICAgICAgICB0aGlzLnNlbGVjdCgnZWRpdFNlbGVjdG9yJykuZm9jdXMo
KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUgPSBmdW5jdGlvbiAo
ZSkgeworICAgICAgICAgICAgdmFyICRpbnB1dEVsID0gJChlLmN1cnJlbnRUYXJnZXQpOworICAg
ICAgICAgICAgdmFyICR0b2RvRWwgPSAkaW5wdXRFbC5wYXJlbnRzKCdsaScpOworICAgICAgICAg
ICAgdmFyIHZhbHVlID0gJGlucHV0RWwudmFsKCkudHJpbSgpOworICAgICAgICAgICAgdmFyIGlk
ID0gJHRvZG9FbC5hdHRyKCdpZCcpOworCisgICAgICAgICAgICBpZiAoISR0b2RvRWwuaGFzQ2xh
c3MoJ2VkaXRpbmcnKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgJHRvZG9FbC5yZW1vdmVDbGFzcygnZWRpdGluZycpOworCisgICAgICAg
ICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAkdG9kb0VsLmZpbmQoJ2xhYmVsJyku
aHRtbCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVVwZGF0ZVJlcXVl
c3RlZCcsICB7IGlkOiBpZCwgdGl0bGU6IHZhbHVlIH0pOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpUmVtb3ZlUmVxdWVzdGVkJywgeyBpZDog
aWQgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZXF1ZXN0
VXBkYXRlT25FbnRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICBpZiAoZS53
aGljaCA9PT0gRU5URVJfS0VZKSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRl
KGUsIGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVx
dWVzdFJlbW92ZSA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgaWQgPSAk
KGRhdGEuZWwpLmF0dHIoJ2lkJykuc3BsaXQoJ18nKVsxXTsKKyAgICAgICAgICAgIHRoaXMudHJp
Z2dlcigndWlSZW1vdmVSZXF1ZXN0ZWQnLCB7IGlkOiBpZCB9KTsKKyAgICAgICAgfTsKKworICAg
ICAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIg
JHRvZG9FbCA9IHRoaXMuJG5vZGUuZmluZCgnIycgKyBkYXRhLmlkKTsKKyAgICAgICAgICAgICR0
b2RvRWwucmVtb3ZlKCk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGUgPSBmdW5j
dGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyICR0b2RvRWwgPSAkKGRhdGEuZWwpLnBh
cmVudHMoJ2xpJyk7CisKKyAgICAgICAgICAgICR0b2RvRWwudG9nZ2xlQ2xhc3MoJ2NvbXBsZXRl
ZCcpOworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVRvZ2dsZVJlcXVlc3RlZCcsIHsgaWQ6
ICR0b2RvRWwuYXR0cignaWQnKSB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVy
KCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVu
dCwgJ2RhdGFUb2RvQWRkZWQnLCB0aGlzLnJlbmRlcik7CisgICAgICAgICAgICB0aGlzLm9uKGRv
Y3VtZW50LCAnZGF0YVRvZG9zTG9hZGVkJywgdGhpcy5yZW5kZXJBbGwpOworICAgICAgICAgICAg
dGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2Rvc0ZpbHRlcmVkJywgdGhpcy5yZW5kZXJBbGwpOwor
ICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvVG9nZ2xlZEFsbCcsIHRoaXMu
cmVuZGVyQWxsKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb1JlbW92
ZWQnLCB0aGlzLnJlbW92ZSk7CisKKyAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeyAnZGVz
dHJveVNlbGVjdG9yJzogdGhpcy5yZXF1ZXN0UmVtb3ZlIH0pOworICAgICAgICAgICAgdGhpcy5v
bignY2xpY2snLCB7ICd0b2dnbGVTZWxlY3Rvcic6IHRoaXMudG9nZ2xlIH0pOworICAgICAgICAg
ICAgdGhpcy5vbignZGJsY2xpY2snLCB7ICdsYWJlbFNlbGVjdG9yJzogdGhpcy5lZGl0IH0pOwor
CisgICAgICAgICAgICB0aGlzLiRub2RlLm9uKCdibHVyJywgJy5lZGl0JywgdGhpcy5yZXF1ZXN0
VXBkYXRlLmJpbmQodGhpcykpOworICAgICAgICAgICAgdGhpcy4kbm9kZS5vbigna2V5ZG93bics
ICcuZWRpdCcsIHRoaXMucmVxdWVzdFVwZGF0ZU9uRW50ZXIuYmluZCh0aGlzKSk7CisKKyAgICAg
ICAgICAgIC8vIHRoZXNlIGRvbid0IHdvcmsKKyAgICAgICAgICAgIC8vIHRoaXMub24odGhpcy5h
dHRyLmVkaXRTZWxlY3RvciwgJ2JsdXInLCB0aGlzLnJlcXVlc3RVcGRhdGUpOworICAgICAgICAg
ICAgLy8gdGhpcy5vbignYmx1cicsIHsgJ2VkaXRTZWxlY3Rvcic6IHRoaXMucmVxdWVzdFVwZGF0
ZSB9KTsKKworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aUxvYWRSZXF1ZXN0ZWQnKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudCh0b2RvTGlzdCk7
Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS90b2dn
bGVfYWxsLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3RvZ2dsZV9hbGwu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGRjNjk4M2MzMWFiNmZjMWIxNzE4MDU4NTcwZDQyMzdkZjc0NzQ4YQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS90b2dn
bGVfYWxsLmpzCkBAIC0wLDAgKzEsMjUgQEAKKy8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBzdHJp
Y3QnOworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcKK10sIGZ1bmN0aW9u
IChkZWZpbmVDb21wb25lbnQpIHsKKyAgICBmdW5jdGlvbiB0b2dnbGVBbGwoKSB7CisgICAgICAg
IHRoaXMudG9nZ2xlQWxsQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlz
LnRyaWdnZXIoJ3VpVG9nZ2xlQWxsUmVxdWVzdGVkJywgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRlZDogdGhpcy4kbm9kZS5pcygnOmNoZWNrZWQnKQorICAgICAgICAgICAgfSk7CisgICAgICAg
IH07CisKKyAgICAgICAgdGhpcy50b2dnbGVDaGVja2JveCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7
CisgICAgICAgICAgICB0aGlzLm5vZGUuY2hlY2tlZCA9ICFkYXRhLnJlbWFpbmluZzsKKyAgICAg
ICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB0aGlzLnRvZ2dsZUFsbENvbXBsZXRlKTsKKyAg
ICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJywgdGhpcy50b2dn
bGVDaGVja2JveCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBkZWZpbmVDb21w
b25lbnQodG9nZ2xlQWxsKTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2Fw
cC9qcy91aS93aXRoX2ZpbHRlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE3Mjc5OGUxZTk3MDQ5N2E5MGY2
M2MyZjQwMjNjN2NmOTBjMzcxMwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanMKQEAgLTAsMCArMSwyNiBAQAorLypnbG9i
YWwgZGVmaW5lLCAkICovCisndXNlIHN0cmljdCc7CisKK2RlZmluZShmdW5jdGlvbiAoKSB7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uIHdpdGhGaWx0ZXJzKCkgeworICAgICAgICB0aGlzLmF0dHJpYnV0
ZXMoeworICAgICAgICAgICAgZmlsdGVyU2VsZWN0b3I6ICcjZmlsdGVycyBhJworICAgICAgICB9
KTsKKworICAgICAgICB0aGlzLmNob29zZUZpbHRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Cisg
ICAgICAgICAgICB2YXIgZmlsdGVyID0gZGF0YS5lbC5oYXNoLnNsaWNlKDIpOworCisgICAgICAg
ICAgICB0aGlzLnNlbGVjdCgnZmlsdGVyU2VsZWN0b3InKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQn
KTsKKyAgICAgICAgICAgICQoZGF0YS5lbCkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAg
ICAgICB0aGlzLnRyaWdnZXIoJ3VpRmlsdGVyUmVxdWVzdGVkJywgeyBmaWx0ZXI6IGZpbHRlciB9
KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLm1hcmtTZWxlY3RlZCA9IGZ1bmN0aW9uIChm
aWx0ZXIpIHsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUuZmluZCgnW2hyZWY9IiMvJyArIGZpbHRl
ciArICciXScpLmFkZENsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICB9OworCisgICAgICAgIHRo
aXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLm9u
KCdjbGljaycsIHsgZmlsdGVyU2VsZWN0b3I6IHRoaXMuY2hvb3NlRmlsdGVyIH0pOworICAgICAg
ICB9KTsKKyAgICB9OworfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9h
cHAvanMvdXRpbHMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdXRpbHMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWE4NTczMzkxYzA1NGM0MTE4ZjQ1ODRmMDk5MGJiM2M2ZDg4M2E0MAotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91dGlscy5qcwpA
QCAtMCwwICsxLDEzNCBAQAorLypnbG9iYWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7CisKKy8v
IHRtcGwgZnVuY3Rpb24gc2Nvb3BlZCBmcm9tIHVuZGVyc2NvcmUuCisvLyBodHRwOi8vZG9jdW1l
bnRjbG91ZC5naXRodWIuY29tL3VuZGVyc2NvcmUvI3RlbXBsYXRlCitkZWZpbmUoZnVuY3Rpb24g
KCkgeworICAgIHZhciBfID0ge307CisKKyAgICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9y
IGVzY2FwaW5nLgorICAgIHZhciBlbnRpdHlNYXAgPSB7CisgICAgICAgIGVzY2FwZTogeworICAg
ICAgICAgICAgJyYnOiAnJmFtcDsnLAorICAgICAgICAgICAgJzwnOiAnJmx0OycsCisgICAgICAg
ICAgICAnPic6ICcmZ3Q7JywKKyAgICAgICAgICAgICciJzogJyZxdW90OycsCisgICAgICAgICAg
ICAvKmpzaGludCBxdW90bWFyazpmYWxzZSAqLworICAgICAgICAgICAgIiciOiAnJiN4Mjc7JywK
KyAgICAgICAgICAgICcvJzogJyYjeDJGOycKKyAgICAgICAgfQorICAgIH07CisKKyAgICB2YXIg
ZXNjYXBlS2V5cyA9ICcmPD4iXCcvJzsKKyAgICB2YXIgdW5lc2NhcGVLZXlzID0gJyZhbXA7fCZs
dDt8Jmd0O3wmcXVvdDt8JiN4Mjc7fCYjeDJGOyc7CisKKyAgICAvLyBSZWdleGVzIGNvbnRhaW5p
bmcgdGhlIGtleXMgYW5kIHZhbHVlcyBsaXN0ZWQgaW1tZWRpYXRlbHkgYWJvdmUuCisgICAgdmFy
IGVudGl0eVJlZ2V4ZXMgPSB7CisgICAgICAgIGVzY2FwZTogICBuZXcgUmVnRXhwKCdbJyArIGVz
Y2FwZUtleXMgKyAnXScsICdnJyksCisgICAgICAgIHVuZXNjYXBlOiBuZXcgUmVnRXhwKCcoJyAr
IHVuZXNjYXBlS2V5cyArICcpJywgJ2cnKQorICAgIH07CisKKyAgICAvLyBGdW5jdGlvbnMgZm9y
IGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRp
b24uCisgICAgWydlc2NhcGUnLCAndW5lc2NhcGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2Qp
IHsKKyAgICAgICAgX1ttZXRob2RdID0gZnVuY3Rpb24gKHN0cmluZykgeworICAgICAgICAgICAg
aWYgKHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICgn
JyArIHN0cmluZykucmVwbGFjZShlbnRpdHlSZWdleGVzW21ldGhvZF0sIGZ1bmN0aW9uIChtYXRj
aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHlNYXBbbWV0aG9kXVttYXRjaF07Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICB9KTsKKworICAgIHZhciBzZXR0aW5ncyA9
IHsKKyAgICAgICAgZXZhbHVhdGU6IC88JShbXHNcU10rPyklPi9nLAorICAgICAgICBpbnRlcnBv
bGF0ZTogLzwlPShbXHNcU10rPyklPi9nLAorICAgICAgICBlc2NhcGU6IC88JS0oW1xzXFNdKz8p
JT4vZworICAgIH07CisKKyAgICB2YXIgbm9NYXRjaCA9IC8oLileLzsKKyAgICB2YXIgZXNjYXBl
cyA9IHsKKyAgICAgICAgLypqc2hpbnQgcXVvdG1hcms6ZmFsc2UgKi8KKyAgICAgICAgIiciOiAi
JyIsCisgICAgICAgICdcXCc6ICdcXCcsCisgICAgICAgICdccic6ICdyJywKKyAgICAgICAgJ1xu
JzogJ24nLAorICAgICAgICAnXHQnOiAndCcsCisgICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAor
ICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAgIH07CisKKyAgICB2YXIgZXNjYXBlciA9IC9c
XHwnfFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsKKworICAgIC8vIEphdmFTY3JpcHQgbWljcm8t
dGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAg
Ly8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHBy
ZXNlcnZlcyB3aGl0ZXNwYWNlLAorICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMg
d2l0aGluIGludGVycG9sYXRlZCBjb2RlLgorICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uICh0
ZXh0LCBkYXRhKSB7CisgICAgICAgIHZhciByZW5kZXI7CisKKyAgICAgICAgLy8gQ29tYmluZSBk
ZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCisg
ICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCisgICAgICAgICAgICAoc2V0dGluZ3Mu
ZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgIChzZXR0aW5ncy5pbnRlcnBv
bGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUg
fHwgbm9NYXRjaCkuc291cmNlCisgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKwor
ICAgICAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBs
aXRlcmFscyBhcHByb3ByaWF0ZWx5LgorICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICB2
YXIgc291cmNlID0gIl9fcCs9JyI7CisgICAgICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5j
dGlvbiAobWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAg
ICAgICAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCisgICAgICAgICAg
ICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0o
IiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgc291
cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xu
JyI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CisgICAg
ICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0pOworICAgICAgICBzb3VyY2UgKz0gIic7
XG4iOworCisgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2Ug
ZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCisgICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFi
bGUpIHsKKyAgICAgICAgICAgIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSAr
ICd9XG4nOworICAgICAgICB9CisKKyAgICAgICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9f
aj1BcnJheS5wcm90b3R5cGUuam9pbiwiICsKKyAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigp
e19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiArCisgICAgICAgICAgICBzb3VyY2Ug
KyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIC8qanNoaW50
IGV2aWw6dHJ1ZSAqLworICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdz
LnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgIH0gY2F0Y2ggKGVycikg
eworICAgICAgICAgICAgZXJyLnNvdXJjZSA9IHNvdXJjZTsKKyAgICAgICAgICAgIHRocm93IGVy
cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4g
cmVuZGVyKGRhdGEsIF8pOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVu
Y3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRh
LCBfKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5j
dGlvbiBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uCisgICAgICAg
IHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdv
YmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKKworICAgICAgICByZXR1cm4gdGVtcGxhdGU7
CisgICAgfTsKKworICAgIHJldHVybiB7CisgICAgICAgIHRtcGw6IHRlbXBsYXRlCisgICAgfTsK
K30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL3RlbXBsYXRlcy9z
dGF0cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0cy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM3Y2JhOWVhODQ4NmY3NjkzOTIzMTY1NzU5Y2E3NGNkMTk1ODBiYmEK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvdGVtcGxhdGVz
L3N0YXRzLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPHNwYW4gaWQ9InRvZG8tY291bnQiPgorICAg
IDxzdHJvbmc+PCU9IHJlbWFpbmluZyAlPjwvc3Ryb25nPiA8JT0gcmVtYWluaW5nID09IDEgPyAn
aXRlbScgOiAnaXRlbXMnICU+IGxlZnQKKzwvc3Bhbj4KKzx1bCBpZD0iZmlsdGVycyI+CisgICAg
PGxpPgorICAgICAgICA8YSBocmVmPSIjLyI+QWxsPC9hPgorICAgIDwvbGk+CisgICAgPGxpPgor
ICAgICAgICA8YSBocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPgorICAgIDwvbGk+CisgICAgPGxp
PgorICAgICAgICA8YSBocmVmPSIjL2NvbXBsZXRlZCI+Q29tcGxldGVkPC9hPgorICAgIDwvbGk+
Cis8L3VsPgorPCUgaWYgKGNvbXBsZXRlZCkgeyAlPgorPGJ1dHRvbiBpZD0iY2xlYXItY29tcGxl
dGVkIj5DbGVhciBjb21wbGV0ZWQ8L2J1dHRvbj4KKzwlIH0gJT4KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvdG9kby5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFmZjc1Mzg5
ZGY1NzAxMjYyZTFmNTI2MWVjOTQ1MzMyNGMzZWI2ZAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvdG9kby5odG1sCkBAIC0wLDAgKzEsOCBA
QAorPGxpIGlkPSI8JT0gaWQgJT4iIGNsYXNzPSI8JT0gY29tcGxldGVkID8gJ2NvbXBsZXRlZCcg
OiAnJyAlPiI+CisgICAgPGRpdiBjbGFzcz0idmlldyI+CisgICAgICAgIDxpbnB1dCBjbGFzcz0i
dG9nZ2xlIiB0eXBlPSJjaGVja2JveCIgPCU9IGNvbXBsZXRlZCA/ICdjaGVja2VkJyA6ICcnICU+
PgorICAgICAgICA8bGFiZWw+PCUtIHRpdGxlICU+PC9sYWJlbD4KKyAgICAgICAgPGJ1dHRvbiBp
ZD0iZGVzdHJveV88JT0gaWQgJT4iIGNsYXNzPSJkZXN0cm95Ij48L2J1dHRvbj4KKyAgICA8L2Rp
dj4KKyAgICA8aW5wdXQgY2xhc3M9ImVkaXQiIHZhbHVlPSI8JS0gdGl0bGUgJT4iPgorPC9saT4K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2luZGV4Lmh0bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMGZiYjBjOTgxNjM0MWIy
YmNlNDg3OTAyNGRiNzljNzZhYWYwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMzAgQEAKKzwhZG9jdHlwZSBodG1sPgor
PGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJmbGlnaHQiPgorICAgIDxoZWFkPgorICAg
ICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIDx0aXRsZT5GbGlnaHQg4oCiIFRv
ZG88L3RpdGxlPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9k
dWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNzcyI+CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MiPgorICAg
IDwvaGVhZD4KKyAgICA8Ym9keT4KKyAgICAgICAgPHNlY3Rpb24gaWQ9InRvZG9hcHAiPgorICAg
ICAgICAgICAgPGhlYWRlciBpZD0iaGVhZGVyIj4KKyAgICAgICAgICAgICAgICA8aDE+dG9kb3M8
L2gxPgorICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJX
aGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+CisgICAgICAgICAgICA8L2hlYWRlcj4K
KyAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJtYWluIj4KKyAgICAgICAgICAgICAgICA8aW5wdXQg
aWQ9InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgICAgICAgICA8bGFiZWwg
Zm9yPSJ0b2dnbGUtYWxsIj5NYXJrIGFsbCBhcyBjb21wbGV0ZTwvbGFiZWw+CisgICAgICAgICAg
ICAgICAgPHVsIGlkPSJ0b2RvLWxpc3QiPjwvdWw+CisgICAgICAgICAgICA8L3NlY3Rpb24+Cisg
ICAgICAgICAgICA8Zm9vdGVyIGlkPSJmb290ZXIiPjwvZm9vdGVyPgorICAgICAgICA8L3NlY3Rp
b24+CisgICAgICAgIDxmb290ZXIgaWQ9ImluZm8iPgorICAgICAgICAgICAgPHA+RG91YmxlLWNs
aWNrIHRvIGVkaXQgYSB0b2RvPC9wPgorICAgICAgICAgICAgPHA+U3BlZWRvbWV0ZXIgdmVyc2lv
biBieSBBZGR5IE9zbWFuaTwvcD4KKyAgICAgICAgICAgIDxwPkNyZWF0ZWQgYnkgPGEgaHJlZj0i
aHR0cDovL2dpdGh1Yi5jb20vbWt1a2xpcyI+TWljaGFsIEt1a2xpczwvYT48L3A+CisgICAgICAg
ICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48
L3A+CisgICAgICAgIDwvZm9vdGVyPgorICAgICAgICA8c2NyaXB0IGRhdGEtbWFpbj0iYXBwL2pz
L21haW4iIHNyYz0ibm9kZV9tb2R1bGVzL3JlcXVpcmVqcy9yZXF1aXJlLmpzIj48L3NjcmlwdD4K
KyAgICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9ub2RlX21vZHVsZXMvZGVwb3QvUkVBRE1FLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL2RlcG90L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzc2ZjcwNWU3MmJkNDQz
MTAxZGQ0NWEyNGY4YTI3ZjA5Njg5ZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2RlcG90L1JFQURNRS5tZApAQCAtMCwwICsxLDE4NSBA
QAorIyMgZGVwb3QuanMKKworWyFbYnVpbGQgc3RhdHVzXShodHRwczovL3NlY3VyZS50cmF2aXMt
Y2kub3JnL21rdWtsaXMvZGVwb3QuanMucG5nKV0oaHR0cDovL3RyYXZpcy1jaS5vcmcvbWt1a2xp
cy9kZXBvdC5qcykKKworIVtkZXBvdC5qc10oaHR0cDovL29pNDUudGlueXBpYy5jb20veG9pcTds
LmpwZykKKworCisjIyBEZXNjcmlwdGlvbgorCisqKmRlcG90LmpzKiogaXMgYSBuYW1lc3BhY2Vk
IFtsb2NhbFN0b3JhZ2VdKGh0dHA6Ly9kaXZlaW50b2h0bWw1LmluZm8vc3RvcmFnZS5odG1sKSB3
cmFwcGVyIHdpdGggYSBzaW1wbGUgQVBJLgorVGhlcmUgYXJlIFtvdGhlcl0oaHR0cDovL2JyaWFu
LmlvL2xhd25jaGFpci8pIFt0b29sc10oaHR0cHM6Ly9naXRodWIuY29tL21hcmN1c3dlc3Rpbi9z
dG9yZS5qcy8pIG91dCB0aGVyZSBidXQgbm9uZQorb2YgdGhlbSBoYWQgd2hhdCBJIHdhcyBsb29r
aW5nIGZvci4KKworCisjIyBTZXR1cAorCitkZXBvdC5qcyBzaG91bGQgd29yayB3ZWxsIHdpdGgg
Q29tbW9uSlMgYW5kIEFNRCBsb2FkZXJzLgorSWYgbG9hZGVycyBhcmUgbm90IHByZXNlbnQgZGVw
b3QuanMgd2lsbCBhdHRhY2ggaXRzZWxmIHRvIHRoZSBjdXJyZW50IGNvbnRleHQgKHdpbmRvdykg
d2hlbiBsb2FkZWQgdmlhIGA8c2NyaXB0IHNyYz0iZGVwb3QubWluLmpzIj48L3NjcmlwdD5gLgor
CitkZXBvdC5qcyBpcyBhbHNvIGEgW2Jvd2VyXShodHRwczovL2dpdGh1Yi5jb20vdHdpdHRlci9i
b3dlcikgW2NvbXBvbmVudF0oaHR0cDovL3NpbmRyZXNvcmh1cy5jb20vYm93ZXItY29tcG9uZW50
cy8pIHNvIHlvdSBzaG91bGQgYmUgYWJsZSB0byBpbnN0YWxsIGl0IGJ5IHJ1bm5pbmc6CisKK2Bi
b3dlciBpbnN0YWxsIGRlcG90YAorCitvciBpZiB5b3UgYWxyZWFkeSBoYXZlIGEgYm93ZXIgYmFz
ZWQgcHJvamVjdCB5b3UgY2FuIGFkZCBkZXBvdC5qcyB0byB5b3VyIGRlcGVuZGVuY3kgbGlzdCBp
biBgY29tcG9uZW50Lmpzb25gCisKK2BgYGpzCisgImRlcGVuZGVuY2llcyI6IHsKKyAgICAuLi4K
KyAgICAiZGVwb3QiOiAiMC54LngiCisgICAgLi4uCisgIH0KK2BgYAorCisKKyMjIERlcGVuZGVu
Y2llcworCitkZXBvdC5qcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIGxpYnJhcmllcyBo
b3dldmVyIGlmIHlvdSBwbGFuIHRvIHN1cHBvcnQgb2xkZXIgYnJvd3NlcnMgeW91IHdpbGwgbmVl
ZCB0byBpbmNsdWRlIFtFUzUtc2hpbV0oaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUt
c2hpbSkuCisKK0lmIHlvdSBwbGFuIHRvIHJ1biBpdCBvbiBicm93c2VycyB0aGF0IGRvbid0IHN1
cHBvcnQgW2xvY2FsU3RvcmFnZV0oaHR0cDovL2RpdmVpbnRvaHRtbDUuaW5mby9zdG9yYWdlLmh0
bWwpIHlvdSBtYXkgdHJ5IHRvIGluY2x1ZGUgW3N0b3JhZ2UgcG9seWZpbGxdKGh0dHBzOi8vZ2lz
dC5naXRodWIuY29tL3JlbXkvMzUwNDMzKS4KKworIyMgQVBJCisKKysgc2F2ZShyZWNvcmQpCisK
KysgdXBkYXRlQWxsKGhhc2gpCisKKysgdXBkYXRlKGhhc2gpCisKKysgZmluZChoYXNoIHwgZnVu
Y3Rpb24pCisKKysgYWxsKCkKKworKyBkZXN0cm95KGlkIHwgcmVjb3JkKQorCisrIGRlc3Ryb3lB
bGwobm9uZSB8IGhhc2ggfCBmdW5jdGlvbikKKworKyBnZXQoaWQpCisKKysgc2l6ZSgpCisKKyMj
VXNhZ2UKKworIyMjI0RlZmluZSBuZXcgc3RvcmUKKworYGBganMKK3ZhciB0b2RvU3RvcmUgPSBk
ZXBvdCgndG9kb3MnKTsKK2BgYAorCisjIyMjQWRkIG5ldyByZWNvcmRzCisKK2BfaWRgIHByb3Bl
cnR5IHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBhdHRhY2hlZCB0byBlYWNoIG5ldyByZWNvcmQ6CisK
K2BgYGpzCit0b2RvU3RvcmUuc2F2ZSh7IHRpdGxlOiAidG9kbzEiIH0pOwordG9kb1N0b3JlLnNh
dmUoeyB0aXRsZTogInRvZG8yIiwgY29tcGxldGVkOiB0cnVlIH0pOwordG9kb1N0b3JlLnNhdmUo
eyB0aXRsZTogInRvZG8zIiwgY29tcGxldGVkOiB0cnVlIH0pOworYGBgCisKKyMjIyNVcGRhdGUg
YWxsIHJlY29yZHMKKworYGBganMKK3RvZG9TdG9yZS51cGRhdGVBbGwoeyBjb21wbGV0ZWQ6IGZh
bHNlIH0pOworYGBgCisKKyMjIyNSZXR1cm4gYWxsIHJlY29yZHMKKworYGBganMKK3RvZG9TdG9y
ZS5hbGwoKTsgLy8gW3sgaWQ6IDEsIHRpdGxlICJ0b2RvMSIgfSwge2lkOiAyLCB0aXRsZTogdG9k
bzIgfV0KK2BgYAorCisjIyMjRmluZCByZWNvcmRzCisKKyogZmluZCBiYXNlZCBvbiBnaXZlbiBj
cml0ZXJpYQorCitgYGBqcwordG9kb1N0b3JlLmZpbmQoeyBjb21wbGV0ZWQ6IHRydWUgfSk7IC8v
IFt7IGlkOiAyLCB0aXRsZTogInRvZG8yIiB9LCB7IGlkOiAzLCB0aXRsZTogInRvZG8zIiB9XQor
YGBgCisKKyogZmluZCBiYXNlZCBvbiBnaXZlbiBmdW5jdGlvbgorCitgYGBqcwordG9kb1N0b3Jl
LmZpbmQoZnVuY3Rpb24gKHJlY29yZCkgeworICByZXR1cm4gcmVjb3JkLmNvbXBsZXRlZCAmJiBy
ZWNvcmQudGl0bGUgPT0gInRvZG8zIjsKK30pOyAvLyBbeyBpZDogMywgdGl0bGU6ICJ0b2RvMyIg
fV0KK2BgYAorCisKKyMjIyNSZXR1cm4gc2luZ2xlIHJlY29yZCBieSBpZAorCitgYGBqcwordG9k
b1N0b3JlLmdldCgxKTsgLy8geyBpZDogMSwgdGl0bGU6ICJ0b2RvMSIgfQorYGBgCisKKyMjIyNE
ZXN0cm95IHNpbmdsZSByZWNvcmQKKworKiBieSByZWNvcmQgaWQKKworYGBganMKK3RvZG9TdG9y
ZS5kZXN0cm95KDEpOworYGBgCisKKyogYnkgcmVjb3JkIG9iamVjdAorCitgYGBqcwordG9kb1N0
b3JlLmRlc3Ryb3kodG9kbyk7CitgYGAKKworIyMjI0Rlc3Ryb3kgYWxsIHJlY29yZHMKKworKiBk
ZXN0cm95IGFsbAorCitgYGBqcwordG9kb1N0b3JlLmRlc3Ryb3lBbGwoKTsKK2BgYAorCisqIGRl
c3Ryb3kgYnkgZ2l2ZW4gY3JpdGVyaWEKKworYGBganMKK3RvZG9TdG9yZS5kZXN0cm95QWxsKHsg
Y29tcGxldGVkOiB0cnVlIH0pOworYGBgCisKKyogZGVzdHJveSBieSBnaXZlbiBmdW5jdGlvbgor
CitgYGBqcwordG9kb1N0b3JlLmRlc3Ryb3lBbGwoZnVuY3Rpb24gKHJlY29yZCkgeworICByZXR1
cm4gcmVjb3JkLmNvbXBsZXRlZCAmJiByZWNvcmQudGl0bGUgPT0gInRvZG8zIjsKK30pOworYGBg
CisKKyMjT3B0aW9ucworCitZb3UgY2FuIHBhc3MgYSBzZWNvbmQgcGFyYW1ldGVyIHRvIGRlcG90
LmpzIHdpdGggYWRkaXRpb25hbCBvcHRpb25zLgorCitgYGBqcwordmFyIHRvZG9TdG9yZSA9IGRl
cG90KCJ0b2RvcyIsIG9wdGlvbnMpOworYGBgCisKKyMjIyBBdmFpbGFibGUgb3B0aW9uczoKKwor
KyBpZEF0dHJpYnV0ZSAtIHVzZWQgdG8gb3ZlcnJpZGUgcmVjb3JkIGlkIHByb3BlcnR5IChkZWZh
dWx0OiBgX2lkYCkKKworYGBganMKK3ZhciB0b2RvU3RvcmUgPSBkZXBvdCgidG9kb3MiLCB7IGlk
QXR0cmlidXRlOiAnaWQnIH0pOworYGBgCisKKysgc3RvcmFnZUFkYXB0b3IgLSB1c2VkIHRvIG92
ZXJyaWRlIHN0b3JhZ2UgdHlwZSAoZGVmYXVsdDogYGxvY2FsU3RvcmFnZWApCisKK2BgYGpzCit2
YXIgdG9kb1N0b3JlID0gZGVwb3QoJ3RvZG9zJywgeyBzdG9yYWdlQWRhcHRvcjogc2Vzc2lvblN0
b3JhZ2UgfSk7CitgYGAKKworCisjI0NvbnRyaWJ1dG9yczoKKworKiBbQG1rdWtsaXNdKGh0dHA6
Ly9naXRodWIuY29tL21rdWtsaXMpCisqIFtAc2N0dG5sc25dKGh0dHA6Ly9naXRodWIuY29tL3Nj
dHRubHNuKQorKiBbQGNocmlzcGl0dF0oaHR0cDovL2dpdGh1Yi5jb20vY2hyaXNwaXR0KQorKiBb
QHNpbW9uc21pdGhdKGh0dHA6Ly9naXRodWIuY29tL3NpbW9uc21pdGgpCisqIFtAbWRsYXdzb25d
KGh0dHA6Ly9naXRodWIuY29tL21kbGF3c29uKQorKiBbQGpkYmFydGxldHRdKGh0dHA6Ly9naXRo
dWIuY29tL2pkYmFydGxldHQpCisKKyMjTGljZW5zZToKKzxwcmU+CitUaGUgTUlUIExpY2Vuc2UK
KzwvcHJlPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVz
L2RlcG90L2RlcG90LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2Rl
cG90L2RlcG90LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmODM4MmJiMGY2YWUzMDViOGJlMTQ2MTU3NTQ4NTVl
ZTEwMGM0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2Rl
X21vZHVsZXMvZGVwb3QvZGVwb3QuanMKQEAgLTAsMCArMSwyNDkgQEAKKy8vIGRlcG90LmpzIHYw
LjEuNgorCisvLyAoYykgMjAxMyBNaWNoYWwgS3VrbGlzCisvLyBMaWNlbnNlZCB1bmRlciBUaGUg
TUlUIExpY2Vuc2UKKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKworKGZ1
bmN0aW9uIChuYW1lLCByb290LCBmYWN0b3J5KSB7CisgIGlmICh0eXBlb2YgZXhwb3J0cyA9PSAn
b2JqZWN0JykgeworICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpOworICB9IGVsc2UgaWYg
KHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAgZGVmaW5l
KGZhY3RvcnkpOworICB9IGVsc2UgeworICAgIHJvb3RbbmFtZV0gPSBmYWN0b3J5KCk7CisgIH0K
K30oImRlcG90IiwgdGhpcywgZnVuY3Rpb24gKCkgeworCisgICJ1c2Ugc3RyaWN0IjsKKworICAv
LyBkZXBvdCBhcGkKKworICB2YXIgYXBpID0geworCisgICAgc2F2ZTogZnVuY3Rpb24gKHJlY29y
ZCkgeworICAgICAgdmFyIGlkLCBpZHM7CisKKyAgICAgIHRoaXMucmVmcmVzaCgpOworCisgICAg
ICBpZiAoIXJlY29yZFt0aGlzLmlkQXR0cmlidXRlXSkgeworICAgICAgICByZWNvcmRbdGhpcy5p
ZEF0dHJpYnV0ZV0gPSBndWlkKCk7CisgICAgICB9CisKKyAgICAgIGlkID0gcmVjb3JkW3RoaXMu
aWRBdHRyaWJ1dGVdICsgJyc7CisKKyAgICAgIGlmICh0aGlzLmlkcy5pbmRleE9mKGlkKSA8IDAp
IHsKKyAgICAgICAgdGhpcy5pZHMucHVzaChpZCk7CisgICAgICAgIGlkcyA9IHRoaXMuaWRzLmpv
aW4oIiwiKTsKKyAgICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKHRoaXMubmFtZSwg
aWRzKTsKKyAgICAgICAgdGhpcy5zdG9yZSA9IGlkczsKKyAgICAgIH0KKworICAgICAgdGhpcy5z
dG9yYWdlQWRhcHRvci5zZXRJdGVtKGdldEtleSh0aGlzLm5hbWUsIGlkKSwgSlNPTi5zdHJpbmdp
ZnkocmVjb3JkKSk7CisKKyAgICAgIHJldHVybiByZWNvcmQ7CisgICAgfSwKKworICAgIHVwZGF0
ZTogZnVuY3Rpb24gKGlkLCBkYXRhKSB7CisgICAgICBpZiAodHlwZW9mIGRhdGEgPT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgZGF0YSA9IGlkOworICAgICAgICBpZCA9IGRhdGFbdGhpcy5pZEF0
dHJpYnV0ZV07CisgICAgICB9CisKKyAgICAgIHZhciByZWNvcmQgPSB0aGlzLmdldChpZCk7CisK
KyAgICAgIGlmIChyZWNvcmQpIHsKKyAgICAgICAgcmVjb3JkID0gZXh0ZW5kKHJlY29yZCwgZGF0
YSk7CisgICAgICAgIHRoaXMuc2F2ZShyZWNvcmQpOworICAgICAgfQorCisgICAgICByZXR1cm4g
cmVjb3JkOworICAgIH0sCisKKyAgICB1cGRhdGVBbGw6IGZ1bmN0aW9uIChkYXRhKSB7CisgICAg
ICB2YXIgcmVjb3JkcyA9IHRoaXMuYWxsKCk7CisKKyAgICAgIHJlY29yZHMuZm9yRWFjaChmdW5j
dGlvbiAocmVjb3JkKSB7CisgICAgICAgIHJlY29yZCA9IGV4dGVuZChyZWNvcmQsIGRhdGEpOwor
ICAgICAgICB0aGlzLnNhdmUocmVjb3JkKTsKKyAgICAgIH0sIHRoaXMpOworCisgICAgICByZXR1
cm4gcmVjb3JkczsKKyAgICB9LAorCisgICAgZmluZDogZnVuY3Rpb24gKGNyaXRlcmlhKSB7Cisg
ICAgICB2YXIga2V5LCBtYXRjaCwgcmVjb3JkOworICAgICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7
CisgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgIGlmICghY3JpdGVyaWEpIHJldHVybiB0
aGlzLmFsbCgpOworCisgICAgICB0aGlzLnJlZnJlc2goKTsKKworICAgICAgcmV0dXJuIHRoaXMu
aWRzLnJlZHVjZShmdW5jdGlvbiAobWVtbywgaWQpIHsKKyAgICAgICAgcmVjb3JkID0ganNvbkRh
dGEoc2VsZi5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGdldEtleShuYW1lLCBpZCkpKTsKKyAgICAg
ICAgbWF0Y2ggPSBmaW5kTWF0Y2goY3JpdGVyaWEsIHJlY29yZCk7CisKKyAgICAgICAgaWYgKG1h
dGNoKSB7CisgICAgICAgICAgbWVtby5wdXNoKHJlY29yZCk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbWVtbzsKKyAgICAgIH0sIFtdKTsKKyAgICB9LAorCisgICAgZ2V0OiBmdW5jdGlv
biAoaWQpIHsKKyAgICAgIHJldHVybiBqc29uRGF0YSh0aGlzLnN0b3JhZ2VBZGFwdG9yLmdldEl0
ZW0oZ2V0S2V5KHRoaXMubmFtZSwgaWQpKSk7CisgICAgfSwKKworICAgIGFsbDogZnVuY3Rpb24g
KCkgeworICAgICAgdmFyIHJlY29yZCwgc2VsZiA9IHRoaXMsIG5hbWUgPSB0aGlzLm5hbWU7CisK
KyAgICAgIHRoaXMucmVmcmVzaCgpOworCisgICAgICByZXR1cm4gdGhpcy5pZHMucmVkdWNlKGZ1
bmN0aW9uIChtZW1vLCBpZCkgeworICAgICAgICByZWNvcmQgPSBzZWxmLnN0b3JhZ2VBZGFwdG9y
LmdldEl0ZW0oZ2V0S2V5KG5hbWUsIGlkKSk7CisKKyAgICAgICAgaWYgKHJlY29yZCkgeworICAg
ICAgICAgIG1lbW8ucHVzaChqc29uRGF0YShyZWNvcmQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBtZW1vOworICAgICAgfSwgW10pOworICAgIH0sCisKKyAgICBkZXN0cm95OiBmdW5j
dGlvbiAocmVjb3JkKSB7CisgICAgICB2YXIgaW5kZXg7CisgICAgICB2YXIgaWQgPSAocmVjb3Jk
W3RoaXMuaWRBdHRyaWJ1dGVdKSA/IHJlY29yZFt0aGlzLmlkQXR0cmlidXRlXSA6IHJlY29yZDsK
KyAgICAgIHZhciBrZXkgPSBnZXRLZXkodGhpcy5uYW1lLCBpZCk7CisKKyAgICAgIHJlY29yZCA9
IGpzb25EYXRhKHRoaXMuc3RvcmFnZUFkYXB0b3IuZ2V0SXRlbShrZXkpKTsKKyAgICAgIHRoaXMu
c3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRlbShrZXkpOworCisgICAgICBpbmRleCA9IHRoaXMuaWRz
LmluZGV4T2YoaWQpOworICAgICAgaWYgKGluZGV4ICE9IC0xKSB0aGlzLmlkcy5zcGxpY2UoaW5k
ZXgsIDEpOworICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKHRoaXMubmFtZSwgdGhp
cy5pZHMuam9pbigiLCIpKTsKKworICAgICAgcmV0dXJuIHJlY29yZDsKKyAgICB9LAorCisgICAg
ZGVzdHJveUFsbDogZnVuY3Rpb24gKGNyaXRlcmlhKSB7CisgICAgICB2YXIgYXR0ciwgaWQsIG1h
dGNoLCByZWNvcmQsIGtleTsKKworICAgICAgdGhpcy5yZWZyZXNoKCk7CisKKyAgICAgIGZvciAo
dmFyIGkgPSB0aGlzLmlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBpZCA9
IHRoaXMuaWRzW2ldOworICAgICAgICBrZXkgPSBnZXRLZXkodGhpcy5uYW1lLCBpZCk7CisKKyAg
ICAgICAgaWYgKGNyaXRlcmlhKSB7CisKKyAgICAgICAgICByZWNvcmQgPSBqc29uRGF0YSh0aGlz
LnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oa2V5KSk7CisgICAgICAgICAgbWF0Y2ggPSBmaW5kTWF0
Y2goY3JpdGVyaWEsIHJlY29yZCk7CisKKyAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAg
ICAgIHRoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRlbShrZXkpOworICAgICAgICAgICAgdGhp
cy5pZHMuc3BsaWNlKGksIDEpOworICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRlbShrZXkpOworICAg
ICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChjcml0ZXJpYSkgeworICAgICAgICB0aGlzLnN0
b3JhZ2VBZGFwdG9yLnNldEl0ZW0odGhpcy5uYW1lLCB0aGlzLmlkcy5qb2luKCIsIikpOworICAg
ICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRl
bSh0aGlzLm5hbWUpOworICAgICAgICB0aGlzLmlkcyA9IFtdOworICAgICAgfQorICAgIH0sCisK
KyAgICBzaXplOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLnJlZnJlc2goKTsKKworICAgICAg
cmV0dXJuIHRoaXMuaWRzLmxlbmd0aDsKKyAgICB9LAorCisgICAgcmVmcmVzaDogZnVuY3Rpb24g
KCkgeworICAgICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKHRoaXMu
bmFtZSk7CisKKyAgICAgIGlmICh0aGlzLnN0b3JlICYmIHRoaXMuc3RvcmUgPT09IHN0b3JlKSB7
CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdGhpcy5pZHMgPSAoc3RvcmUgJiYg
c3RvcmUuc3BsaXQoIiwiKSkgfHwgW107CisgICAgICB0aGlzLnN0b3JlID0gc3RvcmU7CisgICAg
fQorICB9OworCisgIC8vIGhlbHBlcnMKKworICBmdW5jdGlvbiBqc29uRGF0YShkYXRhKSB7Cisg
ICAgcmV0dXJuIGRhdGEgJiYgSlNPTi5wYXJzZShkYXRhKTsKKyAgfQorCisgIGZ1bmN0aW9uIGdl
dEtleShuYW1lLCBpZCkgeworICAgIHJldHVybiBuYW1lICsgIi0iICsgaWQ7CisgIH0KKworICBm
dW5jdGlvbiBmaW5kTWF0Y2goY3JpdGVyaWEsIHJlY29yZCkgeworICAgIHZhciBtYXRjaCwgYXR0
cjsKKworICAgIGlmICh0eXBlb2YgY3JpdGVyaWEgPT0gJ2Z1bmN0aW9uJykgeworICAgICAgbWF0
Y2ggPSBjcml0ZXJpYShyZWNvcmQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIG1hdGNoID0g
dHJ1ZTsKKyAgICAgIGZvciAoYXR0ciBpbiBjcml0ZXJpYSkgeworICAgICAgICBtYXRjaCAmPSAo
Y3JpdGVyaWFbYXR0cl0gPT09IHJlY29yZFthdHRyXSk7CisgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIG1hdGNoOworICB9CisKKyAgZnVuY3Rpb24gczQoKSB7CisgICAgcmV0dXJuIE1hdGgu
Zmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApCisgICAgICAudG9TdHJpbmcoMTYp
LnN1YnN0cmluZygxKTsKKyAgfQorCisgIGZ1bmN0aW9uIGd1aWQoKSB7CisgICAgcmV0dXJuIHM0
KCkgKyBzNCgpICsgJy0nICsgczQoKSArICctJyArIHM0KCkgKworICAgICAgJy0nICtzNCgpICsg
Jy0nICsgczQoKSArIHM0KCkgKyBzNCgpOworICB9CisKKyAgZnVuY3Rpb24gZXh0ZW5kKGRlc3Qs
IHNvdXJjZSkgeworICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKKyAgICAgIGlmIChzb3Vy
Y2UuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICBkZXN0W2tleV0gPSBzb3VyY2Vba2V5
XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGVzdDsKKyAgfQorCisgIGZ1bmN0aW9u
IGRlcG90KG5hbWUsIG9wdGlvbnMpIHsKKyAgICB2YXIgaW5zdGFuY2U7CisKKyAgICBvcHRpb25z
ID0gZXh0ZW5kKHsKKyAgICAgIGlkQXR0cmlidXRlOiAnX2lkJywKKyAgICAgIHN0b3JhZ2VBZGFw
dG9yOiBsb2NhbFN0b3JhZ2UKKyAgICB9LCBvcHRpb25zKTsKKworICAgIGlmICghb3B0aW9ucy5z
dG9yYWdlQWRhcHRvcikgdGhyb3cgbmV3IEVycm9yKCJObyBzdG9yYWdlIGFkYXB0b3Igd2FzIGZv
dW5kIik7CisKKyAgICBpbnN0YW5jZSA9IE9iamVjdC5jcmVhdGUoYXBpLCB7CisgICAgICBuYW1l
OiB7IHZhbHVlOiBuYW1lIH0sCisgICAgICBpZEF0dHJpYnV0ZTogeyB2YWx1ZTogb3B0aW9ucy5p
ZEF0dHJpYnV0ZSB9LAorICAgICAgc3RvcmFnZUFkYXB0b3I6IHsgdmFsdWU6IG9wdGlvbnMuc3Rv
cmFnZUFkYXB0b3IgfQorICAgIH0pOworCisgICAgaW5zdGFuY2UucmVmcmVzaCgpOworCisgICAg
cmV0dXJuIGluc3RhbmNlOworICB9CisKKyAgcmV0dXJuIGRlcG90OworfSkpOwpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2RlcG90L2RlcG90Lm1pbi5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9kZXBvdC5taW4u
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzVkNmI2MzM2NzEyM2YwODcyYmNiYTQwZjViOTlkN2RiYWRhNzZjMQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9k
ZXBvdC9kZXBvdC5taW4uanMKQEAgLTAsMCArMSw2IEBACisvLyBkZXBvdC5qcyB2MC4xLjYgfCAo
YykgMjAxMyBNaWNoYWwgS3VrbGlzIHwgTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCiso
ZnVuY3Rpb24oZixoLGQpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1k
KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZCk6aFtmXT1k
KCl9KSgiZGVwb3QiLHRoaXMsZnVuY3Rpb24oKXtmdW5jdGlvbiBmKGIpe3JldHVybiBiJiZKU09O
LnBhcnNlKGIpfWZ1bmN0aW9uIGgoYixhKXt2YXIgYyxlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBi
KWM9YihhKTtlbHNlIGZvcihlIGluIGM9ITAsYiljJj1iW2VdPT09YVtlXTtyZXR1cm4gY31mdW5j
dGlvbiBkKCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3Ry
aW5nKDE2KS5zdWJzdHJpbmcoMSl9ZnVuY3Rpb24gZyhiLGEpe2Zvcih2YXIgYyBpbiBhKWEuaGFz
T3duUHJvcGVydHkoYykmJihiW2NdPWFbY10pO3JldHVybiBifXZhciBqPXtzYXZlOmZ1bmN0aW9u
KGIpe3ZhciBhO2JbdGhpcy5pZEF0dHJpYnV0ZV18fChiW3RoaXMuaWRBdHRyaWJ1dGVdPQorZCgp
K2QoKSsiLSIrZCgpKyItIitkKCkrIi0iK2QoKSsiLSIrZCgpK2QoKStkKCkpO2E9Ylt0aGlzLmlk
QXR0cmlidXRlXSsiIjswPnRoaXMuaWRzLmluZGV4T2YoYSkmJih0aGlzLmlkcy5wdXNoKGEpLHRo
aXMuc3RvcmFnZUFkYXB0b3Iuc2V0SXRlbSh0aGlzLm5hbWUsdGhpcy5pZHMuam9pbigiLCIpKSk7
dGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKHRoaXMubmFtZSsiLSIrYSxKU09OLnN0cmluZ2lm
eShiKSk7cmV0dXJuIGJ9LHVwZGF0ZTpmdW5jdGlvbihiLGEpeyJ1bmRlZmluZWQiPT10eXBlb2Yg
YSYmKGE9YixiPWFbdGhpcy5pZEF0dHJpYnV0ZV0pO3ZhciBjPXRoaXMuZ2V0KGIpO2MmJihjPWco
YyxhKSx0aGlzLnNhdmUoYykpO3JldHVybiBjfSx1cGRhdGVBbGw6ZnVuY3Rpb24oYil7dmFyIGE9
dGhpcy5hbGwoKTthLmZvckVhY2goZnVuY3Rpb24oYSl7YT1nKGEsYik7dGhpcy5zYXZlKGEpfSx0
aGlzKTtyZXR1cm4gYX0sZmluZDpmdW5jdGlvbihiKXt2YXIgYSxjLGU9Cit0aGlzLm5hbWUsZD10
aGlzO3JldHVybiFiP3RoaXMuYWxsKCk6dGhpcy5pZHMucmVkdWNlKGZ1bmN0aW9uKGcsail7Yz1m
KGQuc3RvcmFnZUFkYXB0b3IuZ2V0SXRlbShlKyItIitqKSk7KGE9aChiLGMpKSYmZy5wdXNoKGMp
O3JldHVybiBnfSxbXSl9LGdldDpmdW5jdGlvbihiKXtyZXR1cm4gZih0aGlzLnN0b3JhZ2VBZGFw
dG9yLmdldEl0ZW0odGhpcy5uYW1lKyItIitiKSl9LGFsbDpmdW5jdGlvbigpe3ZhciBiLGE9dGhp
cyxjPXRoaXMubmFtZTtyZXR1cm4gdGhpcy5pZHMucmVkdWNlKGZ1bmN0aW9uKGUsZCl7KGI9YS5z
dG9yYWdlQWRhcHRvci5nZXRJdGVtKGMrIi0iK2QpKSYmZS5wdXNoKGYoYikpO3JldHVybiBlfSxb
XSl9LGRlc3Ryb3k6ZnVuY3Rpb24oYil7dmFyIGE7YT1iW3RoaXMuaWRBdHRyaWJ1dGVdP2JbdGhp
cy5pZEF0dHJpYnV0ZV06Yjt2YXIgYz10aGlzLm5hbWUrIi0iK2E7Yj1mKHRoaXMuc3RvcmFnZUFk
YXB0b3IuZ2V0SXRlbShjKSk7dGhpcy5zdG9yYWdlQWRhcHRvci5yZW1vdmVJdGVtKGMpOworYT10
aGlzLmlkcy5pbmRleE9mKGEpOy0xIT1hJiZ0aGlzLmlkcy5zcGxpY2UoYSwxKTt0aGlzLnN0b3Jh
Z2VBZGFwdG9yLnNldEl0ZW0odGhpcy5uYW1lLHRoaXMuaWRzLmpvaW4oIiwiKSk7cmV0dXJuIGJ9
LGRlc3Ryb3lBbGw6ZnVuY3Rpb24oYil7Zm9yKHZhciBhLGMsZD10aGlzLmlkcy5sZW5ndGgtMTsw
PD1kO2QtLSlpZihhPXRoaXMuaWRzW2RdLGE9dGhpcy5uYW1lKyItIithLGIpe2lmKGM9Zih0aGlz
LnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oYSkpLGM9aChiLGMpKXRoaXMuc3RvcmFnZUFkYXB0b3Iu
cmVtb3ZlSXRlbShhKSx0aGlzLmlkcy5zcGxpY2UoZCwxKX1lbHNlIHRoaXMuc3RvcmFnZUFkYXB0
b3IucmVtb3ZlSXRlbShhKTtiP3RoaXMuc3RvcmFnZUFkYXB0b3Iuc2V0SXRlbSh0aGlzLm5hbWUs
dGhpcy5pZHMuam9pbigiLCIpKToodGhpcy5zdG9yYWdlQWRhcHRvci5yZW1vdmVJdGVtKHRoaXMu
bmFtZSksdGhpcy5pZHM9W10pfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWRzLmxlbmd0
aH19OworcmV0dXJuIGZ1bmN0aW9uKGIsYSl7dmFyIGMsZDthPWcoe2lkQXR0cmlidXRlOiJfaWQi
LHN0b3JhZ2VBZGFwdG9yOmxvY2FsU3RvcmFnZX0sYSk7aWYoIWEuc3RvcmFnZUFkYXB0b3IpdGhy
b3cgRXJyb3IoIk5vIHN0b3JhZ2UgYWRhcHRvciB3YXMgZm91bmQiKTtkPShjPWEuc3RvcmFnZUFk
YXB0b3IuZ2V0SXRlbShiKSkmJmMuc3BsaXQoIiwiKXx8W107cmV0dXJuIE9iamVjdC5jcmVhdGUo
aix7bmFtZTp7dmFsdWU6Yn0sc3RvcmU6e3ZhbHVlOmN9LGlkczp7dmFsdWU6ZCx3cml0YWJsZToh
MH0saWRBdHRyaWJ1dGU6e3ZhbHVlOmEuaWRBdHRyaWJ1dGV9LHN0b3JhZ2VBZGFwdG9yOnt2YWx1
ZTphLnN0b3JhZ2VBZGFwdG9yfX0pfX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL2RlcG90L3BhY2thZ2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWRhZmI1
Mzc3YmQ2YjI1NGJlNmE0MTdiNThhNzY0OTUyYTA0ZWFmZQotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9wYWNrYWdlLmpzb24KQEAg
LTAsMCArMSw3MSBAQAoreworICAiX2FyZ3MiOiBbCisgICAgWworICAgICAgeworICAgICAgICAi
cmF3IjogImRlcG90QF4wLjEuNiIsCisgICAgICAgICJzY29wZSI6IG51bGwsCisgICAgICAgICJl
c2NhcGVkTmFtZSI6ICJkZXBvdCIsCisgICAgICAgICJuYW1lIjogImRlcG90IiwKKyAgICAgICAg
InJhd1NwZWMiOiAiXjAuMS42IiwKKyAgICAgICAgInNwZWMiOiAiPj0wLjEuNiA8MC4yLjAiLAor
ICAgICAgICAidHlwZSI6ICJyYW5nZSIKKyAgICAgIH0sCisgICAgICAiL1VzZXJzL2FkZHlvL0Rl
c2t0b3AvU3BlZWRvbWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodCIKKyAgICBdCisgIF0sCisgICJfZnJvbSI6ICJkZXBvdEA+PTAuMS42IDwwLjIuMCIs
CisgICJfaWQiOiAiZGVwb3RAMC4xLjYiLAorICAiX2luQ2FjaGUiOiB0cnVlLAorICAiX2xvY2F0
aW9uIjogIi9kZXBvdCIsCisgICJfbnBtVXNlciI6IHsKKyAgICAibmFtZSI6ICJhcHBlZGVtaWMi
LAorICAgICJlbWFpbCI6ICJkZXJrQGFwcGVkZW1pYy5ubCIKKyAgfSwKKyAgIl9ucG1WZXJzaW9u
IjogIjEuMy41IiwKKyAgIl9waGFudG9tQ2hpbGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7
CisgICAgInJhdyI6ICJkZXBvdEBeMC4xLjYiLAorICAgICJzY29wZSI6IG51bGwsCisgICAgImVz
Y2FwZWROYW1lIjogImRlcG90IiwKKyAgICAibmFtZSI6ICJkZXBvdCIsCisgICAgInJhd1NwZWMi
OiAiXjAuMS42IiwKKyAgICAic3BlYyI6ICI+PTAuMS42IDwwLjIuMCIsCisgICAgInR5cGUiOiAi
cmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIKKyAgXSwKKyAgIl9yZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZXBvdC8tL2RlcG90LTAuMS42LnRn
eiIsCisgICJfc2hhc3VtIjogIjA3ZTZlMDExM2E0ODhjZGZmMjVhYTdlYjkzOTRkMDhhOTk5ZjJk
MzUiLAorICAiX3Nocmlua3dyYXAiOiBudWxsLAorICAiX3NwZWMiOiAiZGVwb3RAXjAuMS42IiwK
KyAgIl93aGVyZSI6ICIvVXNlcnMvYWRkeW8vRGVza3RvcC9TcGVlZG9tZXRlci1hL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0IiwKKyAgImFuYWx5emUiOiBmYWxz
ZSwKKyAgImF1dGhvciI6IHsKKyAgICAibmFtZSI6ICJNaWNoYWwgS3VrbGlzIiwKKyAgICAiZW1h
aWwiOiAibWljaGFsLmt1a2xpc0BnbWFpbC5jb20iCisgIH0sCisgICJkZXBlbmRlbmNpZXMiOiB7
fSwKKyAgImRlc2NyaXB0aW9uIjogIlshW2J1aWxkIHN0YXR1c10oaHR0cHM6Ly9zZWN1cmUudHJh
dmlzLWNpLm9yZy9ta3VrbGlzL2RlcG90LmpzLnBuZyldKGh0dHA6Ly90cmF2aXMtY2kub3JnL21r
dWtsaXMvZGVwb3QuanMpIiwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAibW9jaGEtcGhh
bnRvbWpzIjogImxhdGVzdCIKKyAgfSwKKyAgImRpcmVjdG9yaWVzIjoge30sCisgICJkaXN0Ijog
eworICAgICJzaGFzdW0iOiAiMDdlNmUwMTEzYTQ4OGNkZmYyNWFhN2ViOTM5NGQwOGE5OTlmMmQz
NSIsCisgICAgInRhcmJhbGwiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVwb3QvLS9k
ZXBvdC0wLjEuNi50Z3oiCisgIH0sCisgICJlbmdpbmVzIjogeworICAgICJub2RlIjogIioiCisg
IH0sCisgICJtYWludGFpbmVycyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJhcHBlZGVtaWMi
LAorICAgICAgImVtYWlsIjogImRlcmtAYXBwZWRlbWljLm5sIgorICAgIH0KKyAgXSwKKyAgIm5h
bWUiOiAiZGVwb3QiLAorICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInJlYWRtZSI6
ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIiwKKyAgInZlcnNpb24iOiAiMC4xLjYiCit9
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNo
aW0vTElDRU5TRSBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hp
bS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlZTA4MjU1Y2I5NzE4ZDkzNTliY2NlYTkwNWJlNzQ4MjYz
N2VlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21v
ZHVsZXMvZXM1LXNoaW0vTElDRU5TRQpAQCAtMCwwICsxLDE5IEBACisKK0NvcHlyaWdodCAyMDA5
LCAyMDEwIEtyaXN0b3BoZXIgTWljaGFlbCBLb3dhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1Bl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
IG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l
bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bworZGVhbCBpbiB0aGUgU29mdHdhcmUg
d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKK3Jp
Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1
YmxpY2Vuc2UsIGFuZC9vcgorc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy
bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywg
c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu
CithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKwor
VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g
VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitB
VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B
R0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ
T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworSU4gVEhF
IFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL2VzNS1zaGltL2VzNS1zaGFtLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9t
b2R1bGVzL2VzNS1zaGltL2VzNS1zaGFtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwYzk4NDU5NzUxMzM0MTg0
MzkyNDdkZTk5YjVjMGE3MzAxNTU5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoYW0uanMKQEAgLTAsMCArMSw0
NDYgQEAKKy8vIENvcHlyaWdodCAyMDA5LTIwMTIgYnkgY29udHJpYnV0b3JzLCBNSVQgTGljZW5z
ZQorLy8gdmltOiB0cz00IHN0cz00IHN3PTQgZXhwYW5kdGFiCisKKy8vQWRkIHNlbWljb2xvbiB0
byBwcmV2ZW50IElJRkUgZnJvbSBiZWluZyBwYXNzZWQgYXMgYXJndW1lbnQgdG8gY29uY2F0ZWQg
Y29kZS4KKzsKKy8vIE1vZHVsZSBzeXN0ZW1zIG1hZ2ljIGRhbmNlCisoZnVuY3Rpb24gKGRlZmlu
aXRpb24pIHsKKyAgICAvLyBSZXF1aXJlSlMKKyAgICBpZiAodHlwZW9mIGRlZmluZSA9PSAiZnVu
Y3Rpb24iKSB7CisgICAgICAgIGRlZmluZShkZWZpbml0aW9uKTsKKyAgICAvLyBZVUkzCisgICAg
fSBlbHNlIGlmICh0eXBlb2YgWVVJID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgWVVJLmFkZCgi
ZXM1LXNoYW0iLCBkZWZpbml0aW9uKTsKKyAgICAvLyBDb21tb25KUyBhbmQgPHNjcmlwdD4KKyAg
ICB9IGVsc2UgeworICAgICAgICBkZWZpbml0aW9uKCk7CisgICAgfQorfSkoZnVuY3Rpb24gKCkg
eworCisKK3ZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7Cit2YXIgcHJvdG90eXBl
T2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlOwordmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90
eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpOworCisvLyBJZiBKUyBlbmdpbmUgc3VwcG9ydHMg
YWNjZXNzb3JzIGNyZWF0aW5nIHNob3J0Y3V0cy4KK3ZhciBkZWZpbmVHZXR0ZXI7Cit2YXIgZGVm
aW5lU2V0dGVyOwordmFyIGxvb2t1cEdldHRlcjsKK3ZhciBsb29rdXBTZXR0ZXI7Cit2YXIgc3Vw
cG9ydHNBY2Nlc3NvcnM7CitpZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVP
Zk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKKyAgICBkZWZpbmVHZXR0ZXIgPSBjYWxs
LmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7CisgICAgZGVmaW5lU2V0
dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOworICAg
IGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdldHRl
cl9fKTsKKyAgICBsb29rdXBTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19s
b29rdXBTZXR0ZXJfXyk7Cit9CisKKy8vIEVTNSAxNS4yLjMuMgorLy8gaHR0cDovL2VzNS5naXRo
dWIuY29tLyN4MTUuMi4zLjIKK2lmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7CisgICAgLy8g
aHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3VlcyNpc3N1ZS8yCisgICAg
Ly8gaHR0cDovL2Vqb2huLm9yZy9ibG9nL29iamVjdGdldHByb3RvdHlwZW9mLworICAgIC8vIHJl
Y29tbWVuZGVkIGJ5IGZzY2hhZWZlciBvbiBnaXRodWIKKyAgICBPYmplY3QuZ2V0UHJvdG90eXBl
T2YgPSBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIG9i
amVjdC5fX3Byb3RvX18gfHwgKAorICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yCisgICAg
ICAgICAgICAgICAgPyBvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlCisgICAgICAgICAgICAg
ICAgOiBwcm90b3R5cGVPZk9iamVjdAorICAgICAgICApOworICAgIH07Cit9CisKKy8vRVM1IDE1
LjIuMy4zCisvL2h0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4zCisKK2Z1bmN0aW9uIGRv
ZXNHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3JrKG9iamVjdCkgeworICAgIHRyeSB7CisgICAg
ICAgIG9iamVjdC5zZW50aW5lbCA9IDA7CisgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKAorICAgICAgICAgICAgICAgIG9iamVjdCwKKyAgICAgICAgICAgICAg
ICAic2VudGluZWwiCisgICAgICAgICkudmFsdWUgPT09IDA7CisgICAgfSBjYXRjaCAoZXhjZXB0
aW9uKSB7CisgICAgICAgIC8vIHJldHVybnMgZmFsc3kKKyAgICB9Cit9CisKKy8vY2hlY2sgd2hl
dGhlciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Igd29ya3MgaWYgaXQncyBnaXZlbi4gT3RoZXJ3
aXNlLAorLy9zaGltIHBhcnRpYWxseS4KK2lmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKKyAg
ICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29ya3NPbk9iamVjdCA9IAorICAgICAgICBk
b2VzR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29yayh7fSk7CisgICAgdmFyIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcldvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIg
fHwKKyAgICBkb2VzR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29yayhkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKSk7CisgICAgaWYgKCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3Jrc09u
RG9tIHx8IAorICAgICAgICAgICAgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcldvcmtzT25PYmpl
Y3QKKyAgICApIHsKKyAgICAgICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvckZhbGxiYWNr
ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICB9Cit9CisKK2lmICghT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciB8fCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JG
YWxsYmFjaykgeworICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICI7CisKKyAgICBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmpl
Y3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG1ha2UgYSB2YWxpYW50IGF0dGVtcHQgdG8gdXNl
IHRoZSByZWFsIGdldE93blByb3BlcnR5RGVzY3JpcHRvcgorICAgICAgICAvLyBmb3IgSTgncyBE
T00gZWxlbWVudHMuCisgICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGYWxsYmFj
aykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yRmFsbGJhY2suY2FsbChPYmplY3QsIG9iamVjdCwgcHJvcGVydHkpOwor
ICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgLy8gdHJ5
IHRoZSBzaGltIGlmIHRoZSByZWFsIG9uZSBkb2Vzbid0IHdvcmsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIElmIG9iamVjdCBkb2VzIG5vdCBvd25zIHByb3BlcnR5IHJl
dHVybiB1bmRlZmluZWQgaW1tZWRpYXRlbHkuCisgICAgICAgIGlmICghb3ducyhvYmplY3QsIHBy
b3BlcnR5KSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
SWYgb2JqZWN0IGhhcyBhIHByb3BlcnR5IHRoZW4gaXQncyBmb3Igc3VyZSBib3RoIGBlbnVtZXJh
YmxlYCBhbmQKKyAgICAgICAgLy8gYGNvbmZpZ3VyYWJsZWAuCisgICAgICAgIHZhciBkZXNjcmlw
dG9yID0gIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07CisKKyAgICAg
ICAgLy8gSWYgSlMgZW5naW5lIHN1cHBvcnRzIGFjY2Vzc29yIHByb3BlcnRpZXMgdGhlbiBwcm9w
ZXJ0eSBtYXkgYmUgYQorICAgICAgICAvLyBnZXR0ZXIgb3Igc2V0dGVyLgorICAgICAgICBpZiAo
c3VwcG9ydHNBY2Nlc3NvcnMpIHsKKyAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgYF9fbG9v
a3VwR2V0dGVyX19gIHdpbGwgcmV0dXJuIGEgZ2V0dGVyIGV2ZW4KKyAgICAgICAgICAgIC8vIGlm
IG9iamVjdCBoYXMgb3duIG5vbiBnZXR0ZXIgcHJvcGVydHkgYWxvbmcgd2l0aCBhIHNhbWUgbmFt
ZWQKKyAgICAgICAgICAgIC8vIGluaGVyaXRlZCBnZXR0ZXIuIFRvIGF2b2lkIG1pc2JlaGF2aW9y
IHdlIHRlbXBvcmFyeSByZW1vdmUKKyAgICAgICAgICAgIC8vIGBfX3Byb3RvX19gIHNvIHRoYXQg
YF9fbG9va3VwR2V0dGVyX19gIHdpbGwgcmV0dXJuIGdldHRlciBvbmx5CisgICAgICAgICAgICAv
LyBpZiBpdCdzIG93bmVkIGJ5IGFuIG9iamVjdC4KKyAgICAgICAgICAgIHZhciBwcm90b3R5cGUg
PSBvYmplY3QuX19wcm90b19fOworICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3Rv
dHlwZU9mT2JqZWN0OworCisgICAgICAgICAgICB2YXIgZ2V0dGVyID0gbG9va3VwR2V0dGVyKG9i
amVjdCwgcHJvcGVydHkpOworICAgICAgICAgICAgdmFyIHNldHRlciA9IGxvb2t1cFNldHRlcihv
YmplY3QsIHByb3BlcnR5KTsKKworICAgICAgICAgICAgLy8gT25jZSB3ZSBoYXZlIGdldHRlciBh
bmQgc2V0dGVyIHdlIGNhbiBwdXQgdmFsdWVzIGJhY2suCisgICAgICAgICAgICBvYmplY3QuX19w
cm90b19fID0gcHJvdG90eXBlOworCisgICAgICAgICAgICBpZiAoZ2V0dGVyIHx8IHNldHRlcikg
eworICAgICAgICAgICAgICAgIGlmIChnZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5nZXQgPSBnZXR0ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChzZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQgPSBzZXR0
ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIElmIGl0IHdhcyBhY2Nl
c3NvciBwcm9wZXJ0eSB3ZSdyZSBkb25lIGFuZCByZXR1cm4gaGVyZQorICAgICAgICAgICAgICAg
IC8vIGluIG9yZGVyIHRvIGF2b2lkIGFkZGluZyBgdmFsdWVgIHRvIHRoZSBkZXNjcmlwdG9yLgor
ICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHdlIGtub3cgdGhhdCBvYmplY3Qg
aGFzIGFuIG93biBwcm9wZXJ0eSB0aGF0IGlzCisgICAgICAgIC8vIG5vdCBhbiBhY2Nlc3NvciBz
byB3ZSBzZXQgaXQgYXMgYSB2YWx1ZSBhbmQgcmV0dXJuIGRlc2NyaXB0b3IuCisgICAgICAgIGRl
c2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOworICAgICAgICBkZXNjcmlwdG9yLndy
aXRhYmxlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7CisgICAgfTsKK30KKwor
Ly8gRVM1IDE1LjIuMy40CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNAoraWYg
KCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgeworICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpIHsKKyAgICAgICAg
cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy41
CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNQoraWYgKCFPYmplY3QuY3JlYXRl
KSB7CisKKyAgICAvLyBDb250cmlidXRlZCBieSBCcmFuZG9uIEJlbnZpZSwgT2N0b2JlciwgMjAx
MgorICAgIHZhciBjcmVhdGVFbXB0eTsKKyAgICB2YXIgc3VwcG9ydHNQcm90byA9IE9iamVjdC5w
cm90b3R5cGUuX19wcm90b19fID09PSBudWxsOworICAgIGlmIChzdXBwb3J0c1Byb3RvIHx8IHR5
cGVvZiBkb2N1bWVudCA9PSAndW5kZWZpbmVkJykgeworICAgICAgICBjcmVhdGVFbXB0eSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7ICJfX3Byb3RvX18iOiBudWxsIH07Cisg
ICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSW4gb2xkIElFIF9fcHJvdG9fXyBj
YW4ndCBiZSB1c2VkIHRvIG1hbnVhbGx5IHNldCBgbnVsbGAsIG5vciBkb2VzCisgICAgICAgIC8v
IGFueSBvdGhlciBtZXRob2QgZXhpc3QgdG8gbWFrZSBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBm
cm9tIG5vdGhpbmcsCisgICAgICAgIC8vIGFzaWRlIGZyb20gT2JqZWN0LnByb3RvdHlwZSBpdHNl
bGYuIEluc3RlYWQsIGNyZWF0ZSBhIG5ldyBnbG9iYWwKKyAgICAgICAgLy8gb2JqZWN0IGFuZCAq
c3RlYWwqIGl0cyBPYmplY3QucHJvdG90eXBlIGFuZCBzdHJpcCBpdCBiYXJlLiBUaGlzIGlzCisg
ICAgICAgIC8vIHVzZWQgYXMgdGhlIHByb3RvdHlwZSB0byBjcmVhdGUgbnVsbGFyeSBvYmplY3Rz
LgorICAgICAgICBjcmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBp
ZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgICAgIHZh
ciBwYXJlbnQgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAg
ICAgICAgICAgIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICAgICAgcGFy
ZW50LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgICAgICAgICBpZnJhbWUuc3JjID0gJ2phdmFz
Y3JpcHQ6JzsKKyAgICAgICAgICAgIHZhciBlbXB0eSA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9i
amVjdC5wcm90b3R5cGU7CisgICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoaWZyYW1lKTsK
KyAgICAgICAgICAgIGlmcmFtZSA9IG51bGw7CisgICAgICAgICAgICBkZWxldGUgZW1wdHkuY29u
c3RydWN0b3I7CisgICAgICAgICAgICBkZWxldGUgZW1wdHkuaGFzT3duUHJvcGVydHk7CisgICAg
ICAgICAgICBkZWxldGUgZW1wdHkucHJvcGVydHlJc0VudW1lcmFibGU7CisgICAgICAgICAgICBk
ZWxldGUgZW1wdHkuaXNQcm90b3R5cGVPZjsKKyAgICAgICAgICAgIGRlbGV0ZSBlbXB0eS50b0xv
Y2FsZVN0cmluZzsKKyAgICAgICAgICAgIGRlbGV0ZSBlbXB0eS50b1N0cmluZzsKKyAgICAgICAg
ICAgIGRlbGV0ZSBlbXB0eS52YWx1ZU9mOworICAgICAgICAgICAgZW1wdHkuX19wcm90b19fID0g
bnVsbDsKKworICAgICAgICAgICAgZnVuY3Rpb24gRW1wdHkoKSB7fQorICAgICAgICAgICAgRW1w
dHkucHJvdG90eXBlID0gZW1wdHk7CisgICAgICAgICAgICAvLyBzaG9ydC1jaXJjdWl0IGZ1dHVy
ZSBjYWxscworICAgICAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ldyBFbXB0eSgpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgRW1wdHkoKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBPYmplY3QuY3Jl
YXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgeworCisgICAgICAg
IHZhciBvYmplY3Q7CisgICAgICAgIGZ1bmN0aW9uIFR5cGUoKSB7fSAgLy8gQW4gZW1wdHkgY29u
c3RydWN0b3IuCisKKyAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgeworICAgICAgICAg
ICAgb2JqZWN0ID0gY3JlYXRlRW1wdHkoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmICh0eXBlb2YgcHJvdG90eXBlICE9PSAib2JqZWN0IiAmJiB0eXBlb2YgcHJvdG90eXBlICE9
PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgLy8gSW4gdGhlIG5hdGl2ZSBpbXBsZW1l
bnRhdGlvbiBgcGFyZW50YCBjYW4gYmUgYG51bGxgCisgICAgICAgICAgICAgICAgLy8gT1IgKmFu
eSogYGluc3RhbmNlb2YgT2JqZWN0YCAgKE9iamVjdHxGdW5jdGlvbnxBcnJheXxSZWdFeHB8ZXRj
KQorICAgICAgICAgICAgICAgIC8vIFVzZSBgdHlwZW9mYCB0aG8sIGIvYyBpbiBvbGQgSUUsIERP
TSBlbGVtZW50cyBhcmUgbm90IGBpbnN0YW5jZW9mIE9iamVjdGAKKyAgICAgICAgICAgICAgICAv
LyBsaWtlIHRoZXkgYXJlIGluIG1vZGVybiBicm93c2Vycy4gVXNpbmcgYE9iamVjdC5jcmVhdGVg
IG9uIERPTSBlbGVtZW50cworICAgICAgICAgICAgICAgIC8vIGlzLi4uZXJyLi4ucHJvYmFibHkg
aW5hcHByb3ByaWF0ZSwgYnV0IHRoZSBuYXRpdmUgdmVyc2lvbiBhbGxvd3MgZm9yIGl0LgorICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBwcm90b3R5cGUgbWF5IG9u
bHkgYmUgYW4gT2JqZWN0IG9yIG51bGwiKTsgLy8gc2FtZSBtc2cgYXMgQ2hyb21lCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBUeXBlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKKyAgICAgICAg
ICAgIG9iamVjdCA9IG5ldyBUeXBlKCk7CisgICAgICAgICAgICAvLyBJRSBoYXMgbm8gYnVpbHQt
aW4gaW1wbGVtZW50YXRpb24gb2YgYE9iamVjdC5nZXRQcm90b3R5cGVPZmAKKyAgICAgICAgICAg
IC8vIG5laXRoZXIgYF9fcHJvdG9fX2AsIGJ1dCB0aGlzIG1hbnVhbGx5IHNldHRpbmcgYF9fcHJv
dG9fX2Agd2lsbAorICAgICAgICAgICAgLy8gZ3VhcmFudGVlIHRoYXQgYE9iamVjdC5nZXRQcm90
b3R5cGVPZmAgd2lsbCB3b3JrIGFzIGV4cGVjdGVkIHdpdGgKKyAgICAgICAgICAgIC8vIG9iamVj
dHMgY3JlYXRlZCB1c2luZyBgT2JqZWN0LmNyZWF0ZWAKKyAgICAgICAgICAgIG9iamVjdC5fX3By
b3RvX18gPSBwcm90b3R5cGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJvcGVydGllcyAh
PT0gdm9pZCAwKSB7CisgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3Qs
IHByb3BlcnRpZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9
OworfQorCisvLyBFUzUgMTUuMi4zLjYKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIu
My42CisKKy8vIFBhdGNoIGZvciBXZWJLaXQgYW5kIElFOCBzdGFuZGFyZCBtb2RlCisvLyBEZXNp
Z25lZCBieSBoYXggPGhheC5naXRodWIuY29tPgorLy8gcmVsYXRlZCBpc3N1ZTogaHR0cHM6Ly9n
aXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3VlcyNpc3N1ZS81CisvLyBJRTggUmVmZXJl
bmNlOgorLy8gICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDI4
MjkwMC5hc3B4CisvLyAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5
L2RkMjI5OTE2LmFzcHgKKy8vIFdlYktpdCBCdWdzOgorLy8gICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQyMworCitmdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVy
dHlXb3JrKG9iamVjdCkgeworICAgIHRyeSB7CisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShvYmplY3QsICJzZW50aW5lbCIsIHt9KTsKKyAgICAgICAgcmV0dXJuICJzZW50aW5lbCIgaW4g
b2JqZWN0OworICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAvLyByZXR1cm5zIGZh
bHN5CisgICAgfQorfQorCisvLyBjaGVjayB3aGV0aGVyIGRlZmluZVByb3BlcnR5IHdvcmtzIGlm
IGl0J3MgZ2l2ZW4uIE90aGVyd2lzZSwKKy8vIHNoaW0gcGFydGlhbGx5LgoraWYgKE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eSkgeworICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBk
b2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTsKKyAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09u
RG9tID0gdHlwZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiIHx8CisgICAgICAgIGRvZXNEZWZp
bmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOworICAgIGlmICgh
ZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20p
IHsKKyAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5RmFsbGJhY2sgPSBPYmplY3QuZGVmaW5lUHJv
cGVydHksCisgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0aWVzRmFsbGJhY2sgPSBPYmplY3QuZGVm
aW5lUHJvcGVydGllczsKKyAgICB9Cit9CisKK2lmICghT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8
IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKKyAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJ
UFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjsKKyAgICB2
YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQg
b24gbm9uLW9iamVjdDogIgorICAgIHZhciBFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQgPSAi
Z2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7CisKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShvYmplY3Qs
IHByb3BlcnR5LCBkZXNjcmlwdG9yKSB7CisgICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAi
b2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVs
bCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJH
RVQgKyBvYmplY3QpOworICAgICAgICB9CisgICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3Ig
IT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3Jp
cHRvciA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9O
X09CSkVDVF9ERVNDUklQVE9SICsgZGVzY3JpcHRvcik7CisgICAgICAgIH0KKyAgICAgICAgLy8g
bWFrZSBhIHZhbGlhbnQgYXR0ZW1wdCB0byB1c2UgdGhlIHJlYWwgZGVmaW5lUHJvcGVydHkKKyAg
ICAgICAgLy8gZm9yIEk4J3MgRE9NIGVsZW1lbnRzLgorICAgICAgICBpZiAoZGVmaW5lUHJvcGVy
dHlGYWxsYmFjaykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVz
Y3JpcHRvcik7CisgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAgICAgICAg
ICAgICAvLyB0cnkgdGhlIHNoaW0gaWYgdGhlIHJlYWwgb25lIGRvZXNuJ3Qgd29yaworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgaXQncyBhIGRhdGEgcHJvcGVydHku
CisgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7CisgICAgICAgICAgICAv
LyBmYWlsIHNpbGVudGx5IGlmICJ3cml0YWJsZSIsICJlbnVtZXJhYmxlIiwgb3IgImNvbmZpZ3Vy
YWJsZSIKKyAgICAgICAgICAgIC8vIGFyZSByZXF1ZXN0ZWQgYnV0IG5vdCBzdXBwb3J0ZWQKKyAg
ICAgICAgICAgIC8qCisgICAgICAgICAgICAvLyBhbHRlcm5hdGUgYXBwcm9hY2g6CisgICAgICAg
ICAgICBpZiAoIC8vIGNhbid0IGltcGxlbWVudCB0aGVzZSBmZWF0dXJlczsgYWxsb3cgZmFsc2Ug
YnV0IG5vdCB0cnVlCisgICAgICAgICAgICAgICAgIShvd25zKGRlc2NyaXB0b3IsICJ3cml0YWJs
ZSIpID8gZGVzY3JpcHRvci53cml0YWJsZSA6IHRydWUpIHx8CisgICAgICAgICAgICAgICAgIShv
d25zKGRlc2NyaXB0b3IsICJlbnVtZXJhYmxlIikgPyBkZXNjcmlwdG9yLmVudW1lcmFibGUgOiB0
cnVlKSB8fAorICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAiY29uZmlndXJhYmxl
IikgPyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA6IHRydWUpCisgICAgICAgICAgICApCisgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJU
aGlzIGltcGxlbWVudGF0aW9uIG9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBkb2VzIG5vdCAiICsK
KyAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgY29uZmlndXJhYmxlLCBlbnVtZXJhYmxlLCBv
ciB3cml0YWJsZS4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICovCisKKyAgICAg
ICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJv
cGVydHkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNl
dHRlcihvYmplY3QsIHByb3BlcnR5KSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ly8gQXMgYWNjZXNzb3JzIGFyZSBzdXBwb3J0ZWQgb25seSBvbiBlbmdpbmVzIGltcGxlbWVudGlu
ZworICAgICAgICAgICAgICAgIC8vIGBfX3Byb3RvX19gIHdlIGNhbiBzYWZlbHkgb3ZlcnJpZGUg
YF9fcHJvdG9fX2Agd2hpbGUgZGVmaW5pbmcKKyAgICAgICAgICAgICAgICAvLyBhIHByb3BlcnR5
IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGhpdCBhbiBpbmhlcml0ZWQKKyAgICAgICAgICAg
ICAgICAvLyBhY2Nlc3Nvci4KKyAgICAgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0
Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBl
T2ZPYmplY3Q7CisgICAgICAgICAgICAgICAgLy8gRGVsZXRpbmcgYSBwcm9wZXJ0eSBhbnl3YXkg
c2luY2UgZ2V0dGVyIC8gc2V0dGVyIG1heSBiZQorICAgICAgICAgICAgICAgIC8vIGRlZmluZWQg
b24gb2JqZWN0IGl0c2VsZi4KKyAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5
XTsKKyAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsK
KyAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIG9yaWdpbmFsIGBfX3Byb3RvX19gIGJhY2sgbm93
LgorICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlw
dG9yLnZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKCFzdXBwb3J0c0FjY2Vzc29ycykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIElmIHdlIGdvdCB0aGF0IGZhciB0aGVuIGdldHRlcnMgYW5kIHNldHRlcnMgY2Fu
IGJlIGRlZmluZWQgISEKKyAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJnZXQiKSkg
eworICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlw
dG9yLmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9y
LCAic2V0IikpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0
eSwgZGVzY3JpcHRvci5zZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy43CisvLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3gxNS4yLjMuNworaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcyB8fCBk
ZWZpbmVQcm9wZXJ0aWVzRmFsbGJhY2spIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9
IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7CisgICAgICAg
IC8vIG1ha2UgYSB2YWxpYW50IGF0dGVtcHQgdG8gdXNlIHRoZSByZWFsIGRlZmluZVByb3BlcnRp
ZXMKKyAgICAgICAgaWYgKGRlZmluZVByb3BlcnRpZXNGYWxsYmFjaykgeworICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydGllc0ZhbGxiYWNrLmNh
bGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnRpZXMpOworICAgICAgICAgICAgfSBjYXRjaCAoZXhj
ZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBzaGltIGlmIHRoZSByZWFsIG9u
ZSBkb2Vzbid0IHdvcmsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
dmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChvd25zKHByb3Bl
cnRpZXMsIHByb3BlcnR5KSAmJiBwcm9wZXJ0eSAhPSAiX19wcm90b19fIikgeworICAgICAgICAg
ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVz
W3Byb3BlcnR5XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9i
amVjdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjgKKy8vIGh0dHA6Ly9lczUuZ2l0aHVi
LmNvbS8jeDE1LjIuMy44CitpZiAoIU9iamVjdC5zZWFsKSB7CisgICAgT2JqZWN0LnNlYWwgPSBm
dW5jdGlvbiBzZWFsKG9iamVjdCkgeworICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcgYW5k
IGJyZWFrcyBmZWF0dXJlLWRldGVjdGlvbiwgYnV0CisgICAgICAgIC8vIGFsbG93cyAic2VjdXJh
YmxlIiBjb2RlIHRvICJncmFjZWZ1bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcKKyAgICAgICAgLy8g
YnV0IGluc2VjdXJlIGNvZGUuCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKwor
Ly8gRVM1IDE1LjIuMy45CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOQoraWYg
KCFPYmplY3QuZnJlZXplKSB7CisgICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZShv
YmplY3QpIHsKKyAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVy
ZS1kZXRlY3Rpb24sIGJ1dAorICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAi
Z3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nCisgICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBj
b2RlLgorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH07Cit9CisKKy8vIGRldGVjdCBhIFJo
aW5vIGJ1ZyBhbmQgcGF0Y2ggaXQKK3RyeSB7CisgICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAo
KSB7fSk7Cit9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0
aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6
ZShvYmplY3QpIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisgICAgfSkoT2JqZWN0LmZyZWV6ZSk7Cit9CisKKy8vIEVTNSAxNS4y
LjMuMTAKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xMAoraWYgKCFPYmplY3Qu
cHJldmVudEV4dGVuc2lvbnMpIHsKKyAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBmdW5j
dGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsKKyAgICAgICAgLy8gdGhpcyBpcyBtaXNs
ZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dAorICAgICAgICAvLyBhbGxv
d3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nCisg
ICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLgorICAgICAgICByZXR1cm4gb2JqZWN0OworICAg
IH07Cit9CisKKy8vIEVTNSAxNS4yLjMuMTEKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1
LjIuMy4xMQoraWYgKCFPYmplY3QuaXNTZWFsZWQpIHsKKyAgICBPYmplY3QuaXNTZWFsZWQgPSBm
dW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07
Cit9CisKKy8vIEVTNSAxNS4yLjMuMTIKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIu
My4xMgoraWYgKCFPYmplY3QuaXNGcm96ZW4pIHsKKyAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5j
dGlvbiBpc0Zyb3plbihvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07Cit9
CisKKy8vIEVTNSAxNS4yLjMuMTMKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4x
MworaWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKSB7CisgICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9
IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsKKyAgICAgICAgLy8gMS4gSWYgVHlwZShP
KSBpcyBub3QgT2JqZWN0IHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYg
KE9iamVjdChvYmplY3QpICE9PSBvYmplY3QpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCisgICAgICAgIH0KKyAgICAgICAgLy8gMi4gUmV0dXJu
IHRoZSBCb29sZWFuIHZhbHVlIG9mIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0
eSBvZiBPLgorICAgICAgICB2YXIgbmFtZSA9ICcnOworICAgICAgICB3aGlsZSAob3ducyhvYmpl
Y3QsIG5hbWUpKSB7CisgICAgICAgICAgICBuYW1lICs9ICc/JzsKKyAgICAgICAgfQorICAgICAg
ICBvYmplY3RbbmFtZV0gPSB0cnVlOworICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9i
amVjdCwgbmFtZSk7CisgICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07CisgICAgICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKKyAgICB9OworfQorCit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUtc2hhbS5taW4uanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoYW0ubWluLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjAzM2MyN2EzZmQ4ZTE2M2Q5ZjMwMzE3NzQ1Yjg3NGY2ODJhZDMyMzEKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1
LXNoaW0vZXM1LXNoYW0ubWluLmpzCkBAIC0wLDAgKzEsMiBAQAorKGZ1bmN0aW9uKGRlZmluaXRp
b24pe2lmKHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiIpe2RlZmluZShkZWZpbml0aW9uKX1lbHNl
IGlmKHR5cGVvZiBZVUk9PSJmdW5jdGlvbiIpe1lVSS5hZGQoImVzNS1zaGFtIixkZWZpbml0aW9u
KX1lbHNle2RlZmluaXRpb24oKX19KShmdW5jdGlvbigpe3ZhciBjYWxsPUZ1bmN0aW9uLnByb3Rv
dHlwZS5jYWxsO3ZhciBwcm90b3R5cGVPZk9iamVjdD1PYmplY3QucHJvdG90eXBlO3ZhciBvd25z
PWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSk7dmFyIGRlZmluZUdl
dHRlcjt2YXIgZGVmaW5lU2V0dGVyO3ZhciBsb29rdXBHZXR0ZXI7dmFyIGxvb2t1cFNldHRlcjt2
YXIgc3VwcG9ydHNBY2Nlc3NvcnM7aWYoc3VwcG9ydHNBY2Nlc3NvcnM9b3ducyhwcm90b3R5cGVP
Zk9iamVjdCwiX19kZWZpbmVHZXR0ZXJfXyIpKXtkZWZpbmVHZXR0ZXI9Y2FsbC5iaW5kKHByb3Rv
dHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pO2RlZmluZVNldHRlcj1jYWxsLmJpbmQocHJv
dG90eXBlT2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7bG9va3VwR2V0dGVyPWNhbGwuYmluZChw
cm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdldHRlcl9fKTtsb29rdXBTZXR0ZXI9Y2FsbC5iaW5k
KHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pfWlmKCFPYmplY3QuZ2V0UHJvdG90
eXBlT2Ype09iamVjdC5nZXRQcm90b3R5cGVPZj1mdW5jdGlvbiBnZXRQcm90b3R5cGVPZihvYmpl
Y3Qpe3JldHVybiBvYmplY3QuX19wcm90b19ffHwob2JqZWN0LmNvbnN0cnVjdG9yP29iamVjdC5j
b25zdHJ1Y3Rvci5wcm90b3R5cGU6cHJvdG90eXBlT2ZPYmplY3QpfX1mdW5jdGlvbiBkb2VzR2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yV29yayhvYmplY3Qpe3RyeXtvYmplY3Quc2VudGluZWw9MDty
ZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsInNlbnRpbmVsIiku
dmFsdWU9PT0wfWNhdGNoKGV4Y2VwdGlvbil7fX1pZihPYmplY3QuZGVmaW5lUHJvcGVydHkpe3Zh
ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3Jrc09uT2JqZWN0PWRvZXNHZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3JXb3JrKHt9KTt2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29ya3NPbkRv
bT10eXBlb2YgZG9jdW1lbnQ9PSJ1bmRlZmluZWQifHxkb2VzR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yV29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7aWYoIWdldE93blByb3BlcnR5
RGVzY3JpcHRvcldvcmtzT25Eb218fCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3Jrc09uT2Jq
ZWN0KXt2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRmFsbGJhY2s9T2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcn19aWYoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J8fGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckZhbGxiYWNrKXt2YXIgRVJSX05PTl9PQkpFQ1Q9Ik9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgY2FsbGVkIG9uIGEgbm9uLW9iamVjdDogIjtPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihvYmplY3QscHJvcGVydHkpe2lmKHR5cGVvZiBvYmplY3QhPSJvYmplY3QiJiZ0eXBlb2Yg
b2JqZWN0IT0iZnVuY3Rpb24ifHxvYmplY3Q9PT1udWxsKXt0aHJvdyBuZXcgVHlwZUVycm9yKEVS
Ul9OT05fT0JKRUNUK29iamVjdCl9aWYoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRmFsbGJhY2sp
e3RyeXtyZXR1cm4gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRmFsbGJhY2suY2FsbChPYmplY3Qs
b2JqZWN0LHByb3BlcnR5KX1jYXRjaChleGNlcHRpb24pe319aWYoIW93bnMob2JqZWN0LHByb3Bl
cnR5KSl7cmV0dXJufXZhciBkZXNjcmlwdG9yPXtlbnVtZXJhYmxlOnRydWUsY29uZmlndXJhYmxl
OnRydWV9O2lmKHN1cHBvcnRzQWNjZXNzb3JzKXt2YXIgcHJvdG90eXBlPW9iamVjdC5fX3Byb3Rv
X187b2JqZWN0Ll9fcHJvdG9fXz1wcm90b3R5cGVPZk9iamVjdDt2YXIgZ2V0dGVyPWxvb2t1cEdl
dHRlcihvYmplY3QscHJvcGVydHkpO3ZhciBzZXR0ZXI9bG9va3VwU2V0dGVyKG9iamVjdCxwcm9w
ZXJ0eSk7b2JqZWN0Ll9fcHJvdG9fXz1wcm90b3R5cGU7aWYoZ2V0dGVyfHxzZXR0ZXIpe2lmKGdl
dHRlcil7ZGVzY3JpcHRvci5nZXQ9Z2V0dGVyfWlmKHNldHRlcil7ZGVzY3JpcHRvci5zZXQ9c2V0
dGVyfXJldHVybiBkZXNjcmlwdG9yfX1kZXNjcmlwdG9yLnZhbHVlPW9iamVjdFtwcm9wZXJ0eV07
ZGVzY3JpcHRvci53cml0YWJsZT10cnVlO3JldHVybiBkZXNjcmlwdG9yfX1pZighT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMpe09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzPWZ1bmN0aW9uIGdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0KXtyZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KX19aWYo
IU9iamVjdC5jcmVhdGUpe3ZhciBjcmVhdGVFbXB0eTt2YXIgc3VwcG9ydHNQcm90bz1PYmplY3Qu
cHJvdG90eXBlLl9fcHJvdG9fXz09PW51bGw7aWYoc3VwcG9ydHNQcm90b3x8dHlwZW9mIGRvY3Vt
ZW50PT0idW5kZWZpbmVkIil7Y3JlYXRlRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm57X19wcm90b19f
Om51bGx9fX1lbHNle2NyZWF0ZUVtcHR5PWZ1bmN0aW9uKCl7dmFyIGlmcmFtZT1kb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJpZnJhbWUiKTt2YXIgcGFyZW50PWRvY3VtZW50LmJvZHl8fGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudDtpZnJhbWUuc3R5bGUuZGlzcGxheT0ibm9uZSI7cGFyZW50LmFwcGVu
ZENoaWxkKGlmcmFtZSk7aWZyYW1lLnNyYz0iamF2YXNjcmlwdDoiO3ZhciBlbXB0eT1pZnJhbWUu
Y29udGVudFdpbmRvdy5PYmplY3QucHJvdG90eXBlO3BhcmVudC5yZW1vdmVDaGlsZChpZnJhbWUp
O2lmcmFtZT1udWxsO2RlbGV0ZSBlbXB0eS5jb25zdHJ1Y3RvcjtkZWxldGUgZW1wdHkuaGFzT3du
UHJvcGVydHk7ZGVsZXRlIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlO2RlbGV0ZSBlbXB0eS5p
c1Byb3RvdHlwZU9mO2RlbGV0ZSBlbXB0eS50b0xvY2FsZVN0cmluZztkZWxldGUgZW1wdHkudG9T
dHJpbmc7ZGVsZXRlIGVtcHR5LnZhbHVlT2Y7ZW1wdHkuX19wcm90b19fPW51bGw7ZnVuY3Rpb24g
RW1wdHkoKXt9RW1wdHkucHJvdG90eXBlPWVtcHR5O2NyZWF0ZUVtcHR5PWZ1bmN0aW9uKCl7cmV0
dXJuIG5ldyBFbXB0eX07cmV0dXJuIG5ldyBFbXB0eX19T2JqZWN0LmNyZWF0ZT1mdW5jdGlvbiBj
cmVhdGUocHJvdG90eXBlLHByb3BlcnRpZXMpe3ZhciBvYmplY3Q7ZnVuY3Rpb24gVHlwZSgpe31p
Zihwcm90b3R5cGU9PT1udWxsKXtvYmplY3Q9Y3JlYXRlRW1wdHkoKX1lbHNle2lmKHR5cGVvZiBw
cm90b3R5cGUhPT0ib2JqZWN0IiYmdHlwZW9mIHByb3RvdHlwZSE9PSJmdW5jdGlvbiIpe3Rocm93
IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBwcm90b3R5cGUgbWF5IG9ubHkgYmUgYW4gT2JqZWN0IG9y
IG51bGwiKX1UeXBlLnByb3RvdHlwZT1wcm90b3R5cGU7b2JqZWN0PW5ldyBUeXBlO29iamVjdC5f
X3Byb3RvX189cHJvdG90eXBlfWlmKHByb3BlcnRpZXMhPT12b2lkIDApe09iamVjdC5kZWZpbmVQ
cm9wZXJ0aWVzKG9iamVjdCxwcm9wZXJ0aWVzKX1yZXR1cm4gb2JqZWN0fX1mdW5jdGlvbiBkb2Vz
RGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmpl
Y3QsInNlbnRpbmVsIix7fSk7cmV0dXJuInNlbnRpbmVsImluIG9iamVjdH1jYXRjaChleGNlcHRp
b24pe319aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXt2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09u
T2JqZWN0PWRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pO3ZhciBkZWZpbmVQcm9wZXJ0eVdvcmtz
T25Eb209dHlwZW9mIGRvY3VtZW50PT0idW5kZWZpbmVkInx8ZG9lc0RlZmluZVByb3BlcnR5V29y
ayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7aWYoIWRlZmluZVByb3BlcnR5V29ya3NP
bk9iamVjdHx8IWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSl7dmFyIGRlZmluZVByb3BlcnR5RmFs
bGJhY2s9T2JqZWN0LmRlZmluZVByb3BlcnR5LGRlZmluZVByb3BlcnRpZXNGYWxsYmFjaz1PYmpl
Y3QuZGVmaW5lUHJvcGVydGllc319aWYoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZGVmaW5lUHJv
cGVydHlGYWxsYmFjayl7dmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1I9IlByb3BlcnR5IGRl
c2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiO3ZhciBFUlJfTk9OX09CSkVDVF9UQVJHRVQ9
Ik9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIjt2YXIgRVJSX0FD
Q0VTU09SU19OT1RfU1VQUE9SVEVEPSJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmlu
ZWQgIisib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1
bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCxwcm9wZXJ0eSxkZXNjcmlwdG9yKXtpZih0eXBl
b2Ygb2JqZWN0IT0ib2JqZWN0IiYmdHlwZW9mIG9iamVjdCE9ImZ1bmN0aW9uInx8b2JqZWN0PT09
bnVsbCl7dGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQrb2JqZWN0KX1p
Zih0eXBlb2YgZGVzY3JpcHRvciE9Im9iamVjdCImJnR5cGVvZiBkZXNjcmlwdG9yIT0iZnVuY3Rp
b24ifHxkZXNjcmlwdG9yPT09bnVsbCl7dGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVD
VF9ERVNDUklQVE9SK2Rlc2NyaXB0b3IpfWlmKGRlZmluZVByb3BlcnR5RmFsbGJhY2spe3RyeXty
ZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCxvYmplY3QscHJvcGVydHks
ZGVzY3JpcHRvcil9Y2F0Y2goZXhjZXB0aW9uKXt9fWlmKG93bnMoZGVzY3JpcHRvciwidmFsdWUi
KSl7aWYoc3VwcG9ydHNBY2Nlc3NvcnMmJihsb29rdXBHZXR0ZXIob2JqZWN0LHByb3BlcnR5KXx8
bG9va3VwU2V0dGVyKG9iamVjdCxwcm9wZXJ0eSkpKXt2YXIgcHJvdG90eXBlPW9iamVjdC5fX3By
b3RvX187b2JqZWN0Ll9fcHJvdG9fXz1wcm90b3R5cGVPZk9iamVjdDtkZWxldGUgb2JqZWN0W3By
b3BlcnR5XTtvYmplY3RbcHJvcGVydHldPWRlc2NyaXB0b3IudmFsdWU7b2JqZWN0Ll9fcHJvdG9f
Xz1wcm90b3R5cGV9ZWxzZXtvYmplY3RbcHJvcGVydHldPWRlc2NyaXB0b3IudmFsdWV9fWVsc2V7
aWYoIXN1cHBvcnRzQWNjZXNzb3JzKXt0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNf
Tk9UX1NVUFBPUlRFRCl9aWYob3ducyhkZXNjcmlwdG9yLCJnZXQiKSl7ZGVmaW5lR2V0dGVyKG9i
amVjdCxwcm9wZXJ0eSxkZXNjcmlwdG9yLmdldCl9aWYob3ducyhkZXNjcmlwdG9yLCJzZXQiKSl7
ZGVmaW5lU2V0dGVyKG9iamVjdCxwcm9wZXJ0eSxkZXNjcmlwdG9yLnNldCl9fXJldHVybiBvYmpl
Y3R9fWlmKCFPYmplY3QuZGVmaW5lUHJvcGVydGllc3x8ZGVmaW5lUHJvcGVydGllc0ZhbGxiYWNr
KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVj
dCxwcm9wZXJ0aWVzKXtpZihkZWZpbmVQcm9wZXJ0aWVzRmFsbGJhY2spe3RyeXtyZXR1cm4gZGVm
aW5lUHJvcGVydGllc0ZhbGxiYWNrLmNhbGwoT2JqZWN0LG9iamVjdCxwcm9wZXJ0aWVzKX1jYXRj
aChleGNlcHRpb24pe319Zm9yKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKXtpZihvd25zKHBy
b3BlcnRpZXMscHJvcGVydHkpJiZwcm9wZXJ0eSE9Il9fcHJvdG9fXyIpe09iamVjdC5kZWZpbmVQ
cm9wZXJ0eShvYmplY3QscHJvcGVydHkscHJvcGVydGllc1twcm9wZXJ0eV0pfX1yZXR1cm4gb2Jq
ZWN0fX1pZighT2JqZWN0LnNlYWwpe09iamVjdC5zZWFsPWZ1bmN0aW9uIHNlYWwob2JqZWN0KXty
ZXR1cm4gb2JqZWN0fX1pZighT2JqZWN0LmZyZWV6ZSl7T2JqZWN0LmZyZWV6ZT1mdW5jdGlvbiBm
cmVlemUob2JqZWN0KXtyZXR1cm4gb2JqZWN0fX10cnl7T2JqZWN0LmZyZWV6ZShmdW5jdGlvbigp
e30pfWNhdGNoKGV4Y2VwdGlvbil7T2JqZWN0LmZyZWV6ZT1mdW5jdGlvbiBmcmVlemUoZnJlZXpl
T2JqZWN0KXtyZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVjdCl7aWYodHlwZW9mIG9iamVjdD09
ImZ1bmN0aW9uIil7cmV0dXJuIG9iamVjdH1lbHNle3JldHVybiBmcmVlemVPYmplY3Qob2JqZWN0
KX19fShPYmplY3QuZnJlZXplKX1pZighT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKXtPYmplY3Qu
cHJldmVudEV4dGVuc2lvbnM9ZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KXtyZXR1
cm4gb2JqZWN0fX1pZighT2JqZWN0LmlzU2VhbGVkKXtPYmplY3QuaXNTZWFsZWQ9ZnVuY3Rpb24g
aXNTZWFsZWQob2JqZWN0KXtyZXR1cm4gZmFsc2V9fWlmKCFPYmplY3QuaXNGcm96ZW4pe09iamVj
dC5pc0Zyb3plbj1mdW5jdGlvbiBpc0Zyb3plbihvYmplY3Qpe3JldHVybiBmYWxzZX19aWYoIU9i
amVjdC5pc0V4dGVuc2libGUpe09iamVjdC5pc0V4dGVuc2libGU9ZnVuY3Rpb24gaXNFeHRlbnNp
YmxlKG9iamVjdCl7aWYoT2JqZWN0KG9iamVjdCkhPT1vYmplY3Qpe3Rocm93IG5ldyBUeXBlRXJy
b3J9dmFyIG5hbWU9IiI7d2hpbGUob3ducyhvYmplY3QsbmFtZSkpe25hbWUrPSI/In1vYmplY3Rb
bmFtZV09dHJ1ZTt2YXIgcmV0dXJuVmFsdWU9b3ducyhvYmplY3QsbmFtZSk7ZGVsZXRlIG9iamVj
dFtuYW1lXTtyZXR1cm4gcmV0dXJuVmFsdWV9fX0pOworLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXM1
LXNoYW0ubWFwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGltLmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGltLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhhMTZkMzkzYTE4MmI5MTk2NjAwNGRiYWQxN2M1YmQ5MzMyZDYzMWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNo
aW0vZXM1LXNoaW0uanMKQEAgLTAsMCArMSwxMzYwIEBACisvLyBDb3B5cmlnaHQgMjAwOS0yMDEy
IGJ5IGNvbnRyaWJ1dG9ycywgTUlUIExpY2Vuc2UKKy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4
cGFuZHRhYgorCisvL0FkZCBzZW1pY29sb24gdG8gcHJldmVudCBJSUZFIGZyb20gYmVpbmcgcGFz
c2VkIGFzIGFyZ3VtZW50IHRvIGNvbmNhdGVkIGNvZGUuCis7CisvLyBNb2R1bGUgc3lzdGVtcyBt
YWdpYyBkYW5jZQorKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7CisgICAgLy8gUmVxdWlyZUpTCisg
ICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgeworICAgICAgICBkZWZpbmUoZGVm
aW5pdGlvbik7CisgICAgLy8gWVVJMworICAgIH0gZWxzZSBpZiAodHlwZW9mIFlVSSA9PSAiZnVu
Y3Rpb24iKSB7CisgICAgICAgIFlVSS5hZGQoImVzNSIsIGRlZmluaXRpb24pOworICAgIC8vIENv
bW1vbkpTIGFuZCA8c2NyaXB0PgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlZmluaXRpb24oKTsK
KyAgICB9Cit9KShmdW5jdGlvbiAoKSB7CisKKy8qKgorICogQnJpbmdzIGFuIGVudmlyb25tZW50
IGFzIGNsb3NlIHRvIEVDTUFTY3JpcHQgNSBjb21wbGlhbmNlCisgKiBhcyBpcyBwb3NzaWJsZSB3
aXRoIHRoZSBmYWNpbGl0aWVzIG9mIGVyc3R3aGlsZSBlbmdpbmVzLgorICoKKyAqIEFubm90YXRl
ZCBFUzU6IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8gKHNwZWNpZmljIGxpbmtzIGJlbG93KQorICog
RVM1IFNwZWM6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMv
ZmlsZXMvRUNNQS1TVC9FY21hLTI2Mi5wZGYKKyAqIFJlcXVpcmVkIHJlYWRpbmc6IGh0dHA6Ly9q
YXZhc2NyaXB0d2VibG9nLndvcmRwcmVzcy5jb20vMjAxMS8xMi8wNS9leHRlbmRpbmctamF2YXNj
cmlwdC1uYXRpdmVzLworICovCisKKy8vIEVTLTUgMTUuMS4yLjIKK2lmIChwYXJzZUludCgnMDgn
KSAhPT0gOCkgeworICAgIHBhcnNlSW50ID0gKGZ1bmN0aW9uIChvcmlnUGFyc2VJbnQpIHsKKyAg
ICAgICAgdmFyIGhleFJlZ2V4ID0gL14wW3hYXS87CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBw
YXJzZUludEVTNShzdHIsIHJhZGl4KSB7CisgICAgICAgICAgICBzdHIgPSBTdHJpbmcoc3RyKS50
cmltKCk7CisgICAgICAgICAgICBpZiAoIStyYWRpeCkgeworICAgICAgICAgICAgICAgIHJhZGl4
ID0gaGV4UmVnZXgudGVzdChzdHIpID8gMTYgOiAxMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBvcmlnUGFyc2VJbnQoc3RyLCByYWRpeCk7CisgICAgICAgIH07CisgICAgfShw
YXJzZUludCkpOworfQorCisvLworLy8gRnVuY3Rpb24KKy8vID09PT09PT09CisvLworCisvLyBF
Uy01IDE1LjMuNC41CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4zLjQuNQorCitmdW5j
dGlvbiBFbXB0eSgpIHt9CisKK2lmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKKyAgICBG
dW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3Ro
IGlzIDEKKyAgICAgICAgLy8gMS4gTGV0IFRhcmdldCBiZSB0aGUgdGhpcyB2YWx1ZS4KKyAgICAg
ICAgdmFyIHRhcmdldCA9IHRoaXM7CisgICAgICAgIC8vIDIuIElmIElzQ2FsbGFibGUoVGFyZ2V0
KSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgICBpZiAodHlw
ZW9mIHRhcmdldCAhPSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVy
cm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0
YXJnZXQpOworICAgICAgICB9CisgICAgICAgIC8vIDMuIExldCBBIGJlIGEgbmV3IChwb3NzaWJs
eSBlbXB0eSkgaW50ZXJuYWwgbGlzdCBvZiBhbGwgb2YgdGhlCisgICAgICAgIC8vICAgYXJndW1l
bnQgdmFsdWVzIHByb3ZpZGVkIGFmdGVyIHRoaXNBcmcgKGFyZzEsIGFyZzIgZXRjKSwgaW4gb3Jk
ZXIuCisgICAgICAgIC8vIFhYWCBzbGljZWRBcmdzIHdpbGwgc3RhbmQgaW4gZm9yICJBIiBpZiB1
c2VkCisgICAgICAgIHZhciBhcmdzID0gX0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50cywgMSk7
IC8vIGZvciBub3JtYWwgY2FsbAorICAgICAgICAvLyA0LiBMZXQgRiBiZSBhIG5ldyBuYXRpdmUg
RUNNQVNjcmlwdCBvYmplY3QuCisgICAgICAgIC8vIDExLiBTZXQgdGhlIFtbUHJvdG90eXBlXV0g
aW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0aGUgc3RhbmRhcmQKKyAgICAgICAgLy8gICBidWls
dC1pbiBGdW5jdGlvbiBwcm90b3R5cGUgb2JqZWN0IGFzIHNwZWNpZmllZCBpbiAxNS4zLjMuMS4K
KyAgICAgICAgLy8gMTIuIFNldCB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBh
cyBkZXNjcmliZWQgaW4KKyAgICAgICAgLy8gICAxNS4zLjQuNS4xLgorICAgICAgICAvLyAxMy4g
U2V0IHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVk
IGluCisgICAgICAgIC8vICAgMTUuMy40LjUuMi4KKyAgICAgICAgLy8gMTQuIFNldCB0aGUgW1tI
YXNJbnN0YW5jZV1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCisgICAg
ICAgIC8vICAgMTUuMy40LjUuMy4KKyAgICAgICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHsK
KworICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgeworICAgICAgICAgICAg
ICAgIC8vIDE1LjMuNC41LjIgW1tDb25zdHJ1Y3RdXQorICAgICAgICAgICAgICAgIC8vIFdoZW4g
dGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIGEgZnVuY3Rpb24gb2JqZWN0LAor
ICAgICAgICAgICAgICAgIC8vIEYgdGhhdCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5j
dGlvbiBpcyBjYWxsZWQgd2l0aCBhCisgICAgICAgICAgICAgICAgLy8gbGlzdCBvZiBhcmd1bWVu
dHMgRXh0cmFBcmdzLCB0aGUgZm9sbG93aW5nIHN0ZXBzIGFyZSB0YWtlbjoKKyAgICAgICAgICAg
ICAgICAvLyAxLiBMZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlv
bl1dCisgICAgICAgICAgICAgICAgLy8gICBpbnRlcm5hbCBwcm9wZXJ0eS4KKyAgICAgICAgICAg
ICAgICAvLyAyLiBJZiB0YXJnZXQgaGFzIG5vIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9k
LCBhCisgICAgICAgICAgICAgICAgLy8gICBUeXBlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4K
KyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgYm91bmRBcmdzIGJlIHRoZSB2YWx1ZSBvZiBGJ3Mg
W1tCb3VuZEFyZ3NdXSBpbnRlcm5hbAorICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCisg
ICAgICAgICAgICAgICAgLy8gNC4gTGV0IGFyZ3MgYmUgYSBuZXcgbGlzdCBjb250YWluaW5nIHRo
ZSBzYW1lIHZhbHVlcyBhcyB0aGUKKyAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdz
IGluIHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1lCisgICAgICAgICAgICAgICAg
Ly8gICB2YWx1ZXMgYXMgdGhlIGxpc3QgRXh0cmFBcmdzIGluIHRoZSBzYW1lIG9yZGVyLgorICAg
ICAgICAgICAgICAgIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ29u
c3RydWN0XV0gaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAvLyAgIG1ldGhvZCBvZiB0YXJnZXQg
cHJvdmlkaW5nIGFyZ3MgYXMgdGhlIGFyZ3VtZW50cy4KKworICAgICAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSB0YXJnZXQuYXBwbHkoCisgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAg
ICAgICAgICAgICAgIGFyZ3MuY29uY2F0KF9BcnJheV9zbGljZV8uY2FsbChhcmd1bWVudHMpKQor
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09
PSByZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gMTUuMy40LjUuMSBbW0NhbGxdXQorICAgICAgICAg
ICAgICAgIC8vIFdoZW4gdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9u
IG9iamVjdCwgRiwKKyAgICAgICAgICAgICAgICAvLyB3aGljaCB3YXMgY3JlYXRlZCB1c2luZyB0
aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhCisgICAgICAgICAgICAgICAgLy8gdGhp
cyB2YWx1ZSBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcK
KyAgICAgICAgICAgICAgICAvLyBzdGVwcyBhcmUgdGFrZW46CisgICAgICAgICAgICAgICAgLy8g
MS4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJu
YWwKKyAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8vIDIu
IExldCBib3VuZFRoaXMgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kVGhpc11dIGludGVybmFs
CisgICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyAzLiBM
ZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dIGludGVybmFs
CisgICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyA0LiBM
ZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZQor
ICAgICAgICAgICAgICAgIC8vICAgbGlzdCBib3VuZEFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIgZm9s
bG93ZWQgYnkgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAvLyAgIHZhbHVlcyBhcyB0aGUgbGlz
dCBFeHRyYUFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIuCisgICAgICAgICAgICAgICAgLy8gNS4gUmV0
dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kCisg
ICAgICAgICAgICAgICAgLy8gICBvZiB0YXJnZXQgcHJvdmlkaW5nIGJvdW5kVGhpcyBhcyB0aGUg
dGhpcyB2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAvLyAgIHByb3ZpZGluZyBhcmdzIGFzIHRo
ZSBhcmd1bWVudHMuCisKKyAgICAgICAgICAgICAgICAvLyBlcXVpdjogdGFyZ2V0LmNhbGwodGhp
cywgLi4uYm91bmRBcmdzLCAuLi5hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQu
YXBwbHkoCisgICAgICAgICAgICAgICAgICAgIHRoYXQsCisgICAgICAgICAgICAgICAgICAgIGFy
Z3MuY29uY2F0KF9BcnJheV9zbGljZV8uY2FsbChhcmd1bWVudHMpKQorICAgICAgICAgICAgICAg
ICk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICB9OworCisgICAgICAgIC8vIDE1LiBJZiB0
aGUgW1tDbGFzc11dIGludGVybmFsIHByb3BlcnR5IG9mIFRhcmdldCBpcyAiRnVuY3Rpb24iLCB0
aGVuCisgICAgICAgIC8vICAgICBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRh
cmdldCBtaW51cyB0aGUgbGVuZ3RoIG9mIEEuCisgICAgICAgIC8vICAgICBiLiBTZXQgdGhlIGxl
bmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byBlaXRoZXIgMCBvciBMLCB3aGljaGV2ZXIgaXMKKyAg
ICAgICAgLy8gICAgICAgbGFyZ2VyLgorICAgICAgICAvLyAxNi4gRWxzZSBzZXQgdGhlIGxlbmd0
aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLgorCisgICAgICAgIHZhciBib3VuZExlbmd0aCA9IE1h
dGgubWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7CisKKyAgICAgICAgLy8gMTcu
IFNldCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIHRo
ZSB2YWx1ZXMKKyAgICAgICAgLy8gICBzcGVjaWZpZWQgaW4gMTUuMy41LjEuCisgICAgICAgIHZh
ciBib3VuZEFyZ3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICBib3VuZEFyZ3MucHVzaCgiJCIgKyBpKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFhYWCBCdWlsZCBhIGR5bmFtaWMgZnVuY3Rpb24gd2l0aCBkZXNpcmVk
IGFtb3VudCBvZiBhcmd1bWVudHMgaXMgdGhlIG9ubHkgCisgICAgICAgIC8vIHdheSB0byBzZXQg
dGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBhIGZ1bmN0aW9uLiAKKyAgICAgICAgLy8gSW4gZW52aXJv
bm1lbnRzIHdoZXJlIENvbnRlbnQgU2VjdXJpdHkgUG9saWNpZXMgZW5hYmxlZCAoQ2hyb21lIGV4
dGVuc2lvbnMsIAorICAgICAgICAvLyBmb3IgZXguKSBhbGwgdXNlIG9mIGV2YWwgb3IgRnVuY3Rp
b24gY29zdHJ1Y3RvciB0aHJvd3MgYW4gZXhjZXB0aW9uLiAKKyAgICAgICAgLy8gSG93ZXZlciBp
biBhbGwgb2YgdGhlc2UgZW52aXJvbm1lbnRzIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGV4aXN0
cyAKKyAgICAgICAgLy8gYW5kIHNvIHRoaXMgY29kZSB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkLgor
ICAgICAgICB2YXIgYm91bmQgPSBGdW5jdGlvbigiYmluZGVyIiwgInJldHVybiBmdW5jdGlvbigi
ICsgYm91bmRBcmdzLmpvaW4oIiwiKSArICIpe3JldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1
bWVudHMpfSIpKGJpbmRlcik7CisKKyAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHsKKyAg
ICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7CisgICAgICAgICAg
ICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTsKKyAgICAgICAgICAgIC8vIENsZWFuIHVw
IGRhbmdsaW5nIHJlZmVyZW5jZXMuCisgICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxs
OworICAgICAgICB9CisKKyAgICAgICAgLy8gVE9ETworICAgICAgICAvLyAxOC4gU2V0IHRoZSBb
W0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRydWUuCisKKyAgICAgICAg
Ly8gVE9ETworICAgICAgICAvLyAxOS4gTGV0IHRocm93ZXIgYmUgdGhlIFtbVGhyb3dUeXBlRXJy
b3JdXSBmdW5jdGlvbiBPYmplY3QgKDEzLjIuMykuCisgICAgICAgIC8vIDIwLiBDYWxsIHRoZSBb
W0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aAorICAgICAgICAv
LyAgIGFyZ3VtZW50cyAiY2FsbGVyIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJv
d2VyLCBbW1NldF1dOgorICAgICAgICAvLyAgIHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxz
ZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LCBhbmQKKyAgICAgICAgLy8gICBmYWxzZS4KKyAg
ICAgICAgLy8gMjEuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgRiB3aXRoCisgICAgICAgIC8vICAgYXJndW1lbnRzICJhcmd1bWVudHMiLCBQcm9wZXJ0
eURlc2NyaXB0b3Ige1tbR2V0XV06IHRocm93ZXIsCisgICAgICAgIC8vICAgW1tTZXRdXTogdGhy
b3dlciwgW1tFbnVtZXJhYmxlXV06IGZhbHNlLCBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxzZX0sCisg
ICAgICAgIC8vICAgYW5kIGZhbHNlLgorCisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgLy8gTk9U
RSBGdW5jdGlvbiBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQg
ZG8gbm90CisgICAgICAgIC8vIGhhdmUgYSBwcm90b3R5cGUgcHJvcGVydHkgb3IgdGhlIFtbQ29k
ZV1dLCBbW0Zvcm1hbFBhcmFtZXRlcnNdXSwgYW5kCisgICAgICAgIC8vIFtbU2NvcGVdXSBpbnRl
cm5hbCBwcm9wZXJ0aWVzLgorICAgICAgICAvLyBYWFggY2FuJ3QgZGVsZXRlIHByb3RvdHlwZSBp
biBwdXJlLWpzLgorCisgICAgICAgIC8vIDIyLiBSZXR1cm4gRi4KKyAgICAgICAgcmV0dXJuIGJv
dW5kOworICAgIH07Cit9CisKKy8vIFNob3J0Y3V0IHRvIGFuIG9mdGVuIGFjY2Vzc2VkIHByb3Bl
cnRpZXMsIGluIG9yZGVyIHRvIGF2b2lkIG11bHRpcGxlCisvLyBkZXJlZmVyZW5jZSB0aGF0IGNv
c3RzIHVuaXZlcnNhbGx5LgorLy8gX1BsZWFzZSBub3RlOiBTaG9ydGN1dHMgYXJlIGRlZmluZWQg
YWZ0ZXIgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBhcyB3ZQorLy8gdXMgaXQgaW4gZGVmaW5p
bmcgc2hvcnRjdXRzLgordmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDsKK3ZhciBw
cm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJvdG90eXBlOwordmFyIHByb3RvdHlwZU9mT2JqZWN0
ID0gT2JqZWN0LnByb3RvdHlwZTsKK3ZhciBfQXJyYXlfc2xpY2VfID0gcHJvdG90eXBlT2ZBcnJh
eS5zbGljZTsKKy8vIEhhdmluZyBhIHRvU3RyaW5nIGxvY2FsIHZhcmlhYmxlIG5hbWUgYnJlYWtz
IGluIE9wZXJhIHNvIHVzZSBfdG9TdHJpbmcuCit2YXIgX3RvU3RyaW5nID0gY2FsbC5iaW5kKHBy
b3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsKK3ZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlw
ZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKKworLy8gSWYgSlMgZW5naW5lIHN1cHBvcnRzIGFj
Y2Vzc29ycyBjcmVhdGluZyBzaG9ydGN1dHMuCit2YXIgZGVmaW5lR2V0dGVyOwordmFyIGRlZmlu
ZVNldHRlcjsKK3ZhciBsb29rdXBHZXR0ZXI7Cit2YXIgbG9va3VwU2V0dGVyOwordmFyIHN1cHBv
cnRzQWNjZXNzb3JzOworaWYgKChzdXBwb3J0c0FjY2Vzc29ycyA9IG93bnMocHJvdG90eXBlT2ZP
YmplY3QsICJfX2RlZmluZUdldHRlcl9fIikpKSB7CisgICAgZGVmaW5lR2V0dGVyID0gY2FsbC5i
aW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOworICAgIGRlZmluZVNldHRl
ciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsKKyAgICBs
b29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJf
Xyk7CisgICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9v
a3VwU2V0dGVyX18pOworfQorCisvLworLy8gQXJyYXkKKy8vID09PT09CisvLworCisvLyBFUzUg
MTUuNC40LjEyCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTIKKy8vIERlZmF1
bHQgdmFsdWUgZm9yIHNlY29uZCBwYXJhbQorLy8gW2J1Z2ZpeCwgaWVsdDksIG9sZCBicm93c2Vy
c10KKy8vIElFIDwgOSBidWc6IFsxLDJdLnNwbGljZSgwKS5qb2luKCIiKSA9PSAiIiBidXQgc2hv
dWxkIGJlICIxMiIKK2lmIChbMSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHsKKyAgICB2YXIg
YXJyYXlfc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsKKyAgICB2YXIgYXJyYXlfcHVz
aCA9IEFycmF5LnByb3RvdHlwZS5wdXNoOworICAgIHZhciBhcnJheV91bnNoaWZ0ID0gQXJyYXku
cHJvdG90eXBlLnVuc2hpZnQ7CisKKyAgICBpZiAoZnVuY3Rpb24oKSB7IC8vIHRlc3QgSUUgPCA5
IHRvIHNwbGljZSBidWcgLSBzZWUgaXNzdWUgIzEzOAorICAgICAgICBmdW5jdGlvbiBtYWtlQXJy
YXkobCkgeworICAgICAgICAgICAgdmFyIGEgPSBbXTsKKyAgICAgICAgICAgIHdoaWxlIChsLS0p
IHsKKyAgICAgICAgICAgICAgICBhLnVuc2hpZnQobCkKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBhCisgICAgICAgIH0KKworICAgICAgICB2YXIgYXJyYXkgPSBbXQorICAgICAg
ICAgICAgLCBsZW5ndGhCZWZvcmUKKyAgICAgICAgOworCisgICAgICAgIGFycmF5LnNwbGljZS5i
aW5kKGFycmF5LCAwLCAwKS5hcHBseShudWxsLCBtYWtlQXJyYXkoMjApKTsKKyAgICAgICAgYXJy
YXkuc3BsaWNlLmJpbmQoYXJyYXksIDAsIDApLmFwcGx5KG51bGwsIG1ha2VBcnJheSgyNikpOwor
CisgICAgICAgIGxlbmd0aEJlZm9yZSA9IGFycmF5Lmxlbmd0aDsgLy8yMAorICAgICAgICBhcnJh
eS5zcGxpY2UoNSwgMCwgIlhYWCIpOyAvLyBhZGQgb25lIGVsZW1lbnQKKworICAgICAgICBpZiAo
bGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOy8vIGhhcyByaWdodCBzcGxpY2UgaW1wbGVtZW50YXRpb24gd2l0aG91dCBidWdzCisgICAg
ICAgIH0KKyAgICAgICAgLy8gZWxzZSB7CisgICAgICAgIC8vICAgIElFOCBidWcKKyAgICAgICAg
Ly8gfQorICAgIH0oKSkgey8vSUUgNi83CisgICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2Ug
PSBmdW5jdGlvbihzdGFydCwgZGVsZXRlQ291bnQpIHsKKyAgICAgICAgICAgIGlmICghYXJndW1l
bnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5X3NwbGljZS5hcHBseSh0aGlzLCBb
CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID09PSB2b2lkIDAgPyAwIDogc3RhcnQsCisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID09PSB2b2lkIDAgPyAodGhpcy5sZW5ndGggLSBz
dGFydCkgOiBkZWxldGVDb3VudAorICAgICAgICAgICAgICAgIF0uY29uY2F0KF9BcnJheV9zbGlj
ZV8uY2FsbChhcmd1bWVudHMsIDIpKSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9
CisgICAgZWxzZSB7Ly9JRTgKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0
aW9uKHN0YXJ0LCBkZWxldGVDb3VudCkgeworICAgICAgICAgICAgdmFyIHJlc3VsdAorICAgICAg
ICAgICAgICAgICwgYXJncyA9IF9BcnJheV9zbGljZV8uY2FsbChhcmd1bWVudHMsIDIpCisgICAg
ICAgICAgICAgICAgLCBhZGRFbGVtZW50c0NvdW50ID0gYXJncy5sZW5ndGgKKyAgICAgICAgICAg
IDsKKworICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFtdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3RhcnQgPT09
IHZvaWQgMCkgeyAvLyBkZWZhdWx0CisgICAgICAgICAgICAgICAgc3RhcnQgPSAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGRlbGV0ZUNvdW50ID09PSB2b2lkIDApIHsgLy8gZGVm
YXVsdAorICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gdGhpcy5sZW5ndGggLSBzdGFydDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGFkZEVsZW1lbnRzQ291bnQgPiAwKSB7
CisgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZUNvdW50IDw9IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YXJ0ID09IHRoaXMubGVuZ3RoKSB7IC8vIHRpbnkgb3B0aW1pc2F0aW9uICMx
CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoLmFwcGx5KHRoaXMsIGFyZ3MpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsgLy8gdGlueSBvcHRpbWlz
YXRpb24gIzIKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQuYXBwbHkodGhp
cywgYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBcnJh
eS5wcm90b3R5cGUuc3BsaWNlIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gX0FycmF5X3NsaWNlXy5jYWxsKHRoaXMsIHN0YXJ0LCBzdGFydCArIGRlbGV0ZUNvdW50KTsv
LyBkZWxldGUgcGFydAorICAgICAgICAgICAgICAgIGFyZ3MucHVzaC5hcHBseShhcmdzLCBfQXJy
YXlfc2xpY2VfLmNhbGwodGhpcywgc3RhcnQgKyBkZWxldGVDb3VudCwgdGhpcy5sZW5ndGgpKTsv
LyByaWdodCBwYXJ0CisgICAgICAgICAgICAgICAgYXJncy51bnNoaWZ0LmFwcGx5KGFyZ3MsIF9B
cnJheV9zbGljZV8uY2FsbCh0aGlzLCAwLCBzdGFydCkpOy8vIGxlZnQgcGFydAorCisgICAgICAg
ICAgICAgICAgLy8gZGVsZXRlIGFsbCBpdGVtcyBmcm9tIHRoaXMgYXJyYXkgYW5kIHJlcGxhY2Ug
aXQgdG8gJ2xlZnQgcGFydCcgKyBfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzLCAyKSArICdy
aWdodCBwYXJ0JworICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdCgwLCB0aGlzLmxlbmd0aCk7
CisKKyAgICAgICAgICAgICAgICBhcnJheV9zcGxpY2UuYXBwbHkodGhpcywgYXJncyk7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gYXJyYXlfc3BsaWNlLmNhbGwodGhpcywgc3RhcnQsIGRlbGV0ZUNvdW50KTsKKyAg
ICAgICAgfQorCisgICAgfQorfQorCisvLyBFUzUgMTUuNC40LjEyCisvLyBodHRwOi8vZXM1Lmdp
dGh1Yi5jb20vI3gxNS40LjQuMTMKKy8vIFJldHVybiBsZW4rYXJnQ291bnQuCisvLyBbYnVnZml4
LCBpZWx0OF0KKy8vIElFIDwgOCBidWc6IFtdLnVuc2hpZnQoMCkgPT0gdW5kZWZpbmVkIGJ1dCBz
aG91bGQgYmUgIjEiCitpZiAoW10udW5zaGlmdCgwKSAhPSAxKSB7CisgICAgdmFyIGFycmF5X3Vu
c2hpZnQgPSBBcnJheS5wcm90b3R5cGUudW5zaGlmdDsKKyAgICBBcnJheS5wcm90b3R5cGUudW5z
aGlmdCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBhcnJheV91bnNoaWZ0LmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7CisgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aDsKKyAgICB9OworfQorCisvLyBF
UzUgMTUuNC4zLjIKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuMy4yCisvLyBodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxf
T2JqZWN0cy9BcnJheS9pc0FycmF5CitpZiAoIUFycmF5LmlzQXJyYXkpIHsKKyAgICBBcnJheS5p
c0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsKKyAgICAgICAgcmV0dXJuIF90b1N0cmlu
ZyhvYmopID09ICJbb2JqZWN0IEFycmF5XSI7CisgICAgfTsKK30KKworLy8gVGhlIElzQ2FsbGFi
bGUoKSBjaGVjayBpbiB0aGUgQXJyYXkgZnVuY3Rpb25zCisvLyBoYXMgYmVlbiByZXBsYWNlZCB3
aXRoIGEgc3RyaWN0IGNoZWNrIG9uIHRoZQorLy8gaW50ZXJuYWwgY2xhc3Mgb2YgdGhlIG9iamVj
dCB0byB0cmFwIGNhc2VzIHdoZXJlCisvLyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gd2FzIGFjdHVh
bGx5IGEgcmVndWxhcgorLy8gZXhwcmVzc2lvbiBsaXRlcmFsLCB3aGljaCBpbiBWOCBhbmQKKy8v
IEphdmFTY3JpcHRDb3JlIGlzIGEgdHlwZW9mICJmdW5jdGlvbiIuICBPbmx5IGluCisvLyBWOCBh
cmUgcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWxzIHBlcm1pdHRlZCBhcworLy8gcmVkdWNlIHBh
cmFtZXRlcnMsIHNvIGl0IGlzIGRlc2lyYWJsZSBpbiB0aGUKKy8vIGdlbmVyYWwgY2FzZSBmb3Ig
dGhlIHNoaW0gdG8gbWF0Y2ggdGhlIG1vcmUKKy8vIHN0cmljdCBhbmQgY29tbW9uIGJlaGF2aW9y
IG9mIHJlamVjdGluZyByZWd1bGFyCisvLyBleHByZXNzaW9ucy4KKworLy8gRVM1IDE1LjQuNC4x
OAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE4CisvLyBodHRwczovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9h
cnJheS9mb3JFYWNoCisKKy8vIENoZWNrIGZhaWx1cmUgb2YgYnktaW5kZXggYWNjZXNzIG9mIHN0
cmluZyBjaGFyYWN0ZXJzIChJRSA8IDkpCisvLyBhbmQgZmFpbHVyZSBvZiBgMCBpbiBib3hlZFN0
cmluZ2AgKFJoaW5vKQordmFyIGJveGVkU3RyaW5nID0gT2JqZWN0KCJhIiksCisgICAgc3BsaXRT
dHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSAiYSIgfHwgISgwIGluIGJveGVkU3RyaW5nKTsKKy8v
IENoZWNrIG5vZGUgMC42LjIxIGJ1ZyB3aGVyZSB0aGlyZCBwYXJhbWV0ZXIgaXMgbm90IGJveGVk
Cit2YXIgYm94ZWRGb3JFYWNoID0gdHJ1ZTsKK2lmIChBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkg
eworICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoImZvbyIsIGZ1bmN0aW9uKGl0ZW0s
IGksIG9iaikgeworICAgICAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIGJveGVkRm9y
RWFjaCA9IGZhbHNlOworICAgIH0pOworfQorCitpZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNo
IHx8ICFib3hlZEZvckVhY2gpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0
aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09i
amVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmco
dGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQo
IiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAgICAgICAgICB0aGlzcCA9IGFyZ3Vt
ZW50c1sxXSwKKyAgICAgICAgICAgIGkgPSAtMSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYu
bGVuZ3RoID4+PiAwOworCisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlm
IGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJp
bmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9CisKKyAgICAgICAgd2hpbGUg
KCsraSA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAg
ICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBjYWxsLCBwYXNzaW5n
IGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICAvLyBjb250ZXh0LCBwcm9wZXJ0eSB2YWx1ZSwg
cHJvcGVydHkga2V5LCB0aGlzQXJnIG9iamVjdAorICAgICAgICAgICAgICAgIC8vIGNvbnRleHQK
KyAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMTkKKy8v
IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xOQorLy8gaHR0cHM6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJh
eS9tYXAKK2lmICghQXJyYXkucHJvdG90eXBlLm1hcCkgeworICAgIEFycmF5LnByb3RvdHlwZS5t
YXAgPSBmdW5jdGlvbiBtYXAoZnVuIC8qLCB0aGlzcCovKSB7CisgICAgICAgIHZhciBvYmplY3Qg
PSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9T
dHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMu
c3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGgg
PSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCks
CisgICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKKworICAgICAgICAvLyBJZiBubyBj
YWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlv
bgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9u
Iik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKQorICAgICAgICAgICAgICAgIHJlc3VsdFtp
XSA9IGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4yMAorLy8gaHR0
cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIwCisvLyBodHRwczovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L2Zp
bHRlcgoraWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7CisgICAgQXJyYXkucHJvdG90eXBl
LmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7CisgICAgICAgIHZh
ciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmlu
ZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAg
ICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAg
ICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICByZXN1bHQgPSBb
XSwKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07
CisKKyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMg
bm90IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJb
b2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVu
ICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewor
ICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltpXTsKKyAgICAgICAgICAgICAgICBpZiAoZnVu
LmNhbGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40
LjE2CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTYKKy8vIGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3Rz
L0FycmF5L2V2ZXJ5CitpZiAoIUFycmF5LnByb3RvdHlwZS5ldmVyeSkgeworICAgIEFycmF5LnBy
b3RvdHlwZS5ldmVyeSA9IGZ1bmN0aW9uIGV2ZXJ5KGZ1biAvKiwgdGhpc3AgKi8pIHsKKyAgICAg
ICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgc2VsZiA9IHNwbGl0
U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAgICAg
ICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgorICAgICAgICAgICAgICAgIG9iamVjdCwKKyAgICAg
ICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAorICAgICAgICAgICAgdGhpc3AgPSBh
cmd1bWVudHNbMV07CisKKyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYg
Y2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmlu
ZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkg
aW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4xNworLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE3CisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9zb21lCitp
ZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7CisgICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBm
dW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3AgKi8pIHsKKyAgICAgICAgdmFyIG9iamVjdCA9IHRv
T2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmlu
Zyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAgICAgICAgICAgICAgdGhpcy5zcGxp
dCgiIikgOgorICAgICAgICAgICAgICAgIG9iamVjdCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNl
bGYubGVuZ3RoID4+PiAwLAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisKKyAg
ICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEg
Y2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0
IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBp
cyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2Fs
bCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworfQorCisvLyBFUzUgMTUuNC40LjIxCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gx
NS40LjQuMjEKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNj
cmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvcmVkdWNlCitpZiAoIUFycmF5LnByb3Rv
dHlwZS5yZWR1Y2UpIHsKKyAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gcmVk
dWNlKGZ1biAvKiwgaW5pdGlhbCovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0
aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykg
PT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoK
KyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0
aCA+Pj4gMDsKKworICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxs
YmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1
bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICAv
LyBubyB2YWx1ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJy
YXkKKyAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CisgICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBu
byBpbml0aWFsIHZhbHVlIik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaSA9IDA7CisgICAg
ICAgIHZhciByZXN1bHQ7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaSsrXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgYXJyYXkgY29udGFp
bnMgbm8gdmFsdWVzLCBubyBpbml0aWFsIHZhbHVlIHRvIHJldHVybgorICAgICAgICAgICAgICAg
IGlmICgrK2kgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGlu
IHNlbGYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3Vs
dCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4yMgorLy8gaHR0
cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIyCisvLyBodHRwczovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3Jl
ZHVjZVJpZ2h0CitpZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgeworICAgIEFycmF5
LnByb3RvdHlwZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5p
dGlhbCovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAg
ICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3Ry
aW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAg
ICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKworICAg
ICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBj
YWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3Qg
RnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlz
IG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBubyB2YWx1ZSB0byBy
ZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkKKyAgICAgICAgaWYgKCFsZW5n
dGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUi
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5ndGggLSAxOworICAg
ICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CisgICAgICAgICAgICByZXN1bHQgPSBh
cmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAg
ICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBz
ZWxmW2ktLV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIGlmIGFycmF5IGNvbnRhaW5zIG5vIHZhbHVlcywgbm8gaW5p
dGlhbCB2YWx1ZSB0byByZXR1cm4KKyAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkgeworICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0
eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IHdoaWxlICh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpIDwgMCkg
eworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGlmIChpIGluIHRoaXMpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBm
dW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSB3aGlsZSAoaS0tKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07Cit9CisKKy8vIEVTNSAxNS40LjQuMTQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1
LjQuNC4xNAorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9S
ZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaW5kZXhPZgoraWYgKCFBcnJheS5wcm90b3R5
cGUuaW5kZXhPZiB8fCAoWzAsIDFdLmluZGV4T2YoMSwgMikgIT0gLTEpKSB7CisgICAgQXJyYXku
cHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4
ICovICkgeworICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlz
KSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikg
OgorICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgbGVuZ3RoID0g
c2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3Vt
ZW50c1sxXSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBoYW5kbGUgbmVnYXRpdmUgaW5kaWNl
cworICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpOworICAg
ICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxm
ICYmIHNlbGZbaV0gPT09IHNvdWdodCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9OworfQorCisv
LyBFUzUgMTUuNC40LjE1CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTUKKy8v
IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0ds
b2JhbF9PYmplY3RzL0FycmF5L2xhc3RJbmRleE9mCitpZiAoIUFycmF5LnByb3RvdHlwZS5sYXN0
SW5kZXhPZiB8fCAoWzAsIDFdLmxhc3RJbmRleE9mKDAsIC0zKSAhPSAtMSkpIHsKKyAgICBBcnJh
eS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyos
IGZyb21JbmRleCAqLykgeworICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0
cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CisgICAgICAgICAgICAgICAgdGhpcy5z
cGxpdCgiIikgOgorICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAg
bGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICB2YXIgaSA9IGxlbmd0aCAt
IDE7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaSA9
IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBoYW5kbGUgbmVnYXRpdmUgaW5kaWNlcworICAgICAgICBpID0gaSA+PSAwID8gaSA6IGxl
bmd0aCAtIE1hdGguYWJzKGkpOworICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKyAgICAg
ICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291Z2h0ID09PSBzZWxmW2ldKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH07Cit9CisKKy8vCisvLyBPYmplY3QKKy8vID09PT09PQorLy8KKworLy8gRVM1
IDE1LjIuMy4xNAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjE0CitpZiAoIU9i
amVjdC5rZXlzKSB7CisgICAgLy8gaHR0cDovL3doYXR0aGVoZWFkc2FpZC5jb20vMjAxMC8xMC9h
LXNhZmVyLW9iamVjdC1rZXlzLWNvbXBhdGliaWxpdHktaW1wbGVtZW50YXRpb24KKyAgICB2YXIg
aGFzRG9udEVudW1CdWcgPSB0cnVlLAorICAgICAgICBkb250RW51bXMgPSBbCisgICAgICAgICAg
ICAidG9TdHJpbmciLAorICAgICAgICAgICAgInRvTG9jYWxlU3RyaW5nIiwKKyAgICAgICAgICAg
ICJ2YWx1ZU9mIiwKKyAgICAgICAgICAgICJoYXNPd25Qcm9wZXJ0eSIsCisgICAgICAgICAgICAi
aXNQcm90b3R5cGVPZiIsCisgICAgICAgICAgICAicHJvcGVydHlJc0VudW1lcmFibGUiLAorICAg
ICAgICAgICAgImNvbnN0cnVjdG9yIgorICAgICAgICBdLAorICAgICAgICBkb250RW51bXNMZW5n
dGggPSBkb250RW51bXMubGVuZ3RoOworCisgICAgZm9yICh2YXIga2V5IGluIHsidG9TdHJpbmci
OiBudWxsfSkgeworICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOworICAgIH0KKworICAg
IE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKKworICAgICAgICBpZiAoCisg
ICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9
ICJmdW5jdGlvbiIpIHx8CisgICAgICAgICAgICBvYmplY3QgPT09IG51bGwKKyAgICAgICAgKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24g
YSBub24tb2JqZWN0Iik7CisgICAgICAgIH0KKworICAgICAgICB2YXIga2V5cyA9IFtdOworICAg
ICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgeworICAgICAgICAgICAgaWYgKG93bnMob2Jq
ZWN0LCBuYW1lKSkgeworICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNEb250RW51bUJ1ZykgeworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykg
eworICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsKKyAgICAgICAg
ICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgeworICAgICAgICAgICAgICAgICAg
ICBrZXlzLnB1c2goZG9udEVudW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4ga2V5czsKKyAgICB9OworCit9CisKKy8vCisvLyBE
YXRlCisvLyA9PT09CisvLworCisvLyBFUzUgMTUuOS41LjQzCisvLyBodHRwOi8vZXM1LmdpdGh1
Yi5jb20vI3gxNS45LjUuNDMKKy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIFN0cmluZyB2YWx1
ZSByZXByZXNlbnQgdGhlIGluc3RhbmNlIGluIHRpbWUKKy8vIHJlcHJlc2VudGVkIGJ5IHRoaXMg
RGF0ZSBvYmplY3QuIFRoZSBmb3JtYXQgb2YgdGhlIFN0cmluZyBpcyB0aGUgRGF0ZSBUaW1lCisv
LyBzdHJpbmcgZm9ybWF0IGRlZmluZWQgaW4gMTUuOS4xLjE1LiBBbGwgZmllbGRzIGFyZSBwcmVz
ZW50IGluIHRoZSBTdHJpbmcuCisvLyBUaGUgdGltZSB6b25lIGlzIGFsd2F5cyBVVEMsIGRlbm90
ZWQgYnkgdGhlIHN1ZmZpeCBaLiBJZiB0aGUgdGltZSB2YWx1ZSBvZgorLy8gdGhpcyBvYmplY3Qg
aXMgbm90IGEgZmluaXRlIE51bWJlciBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4K
K3ZhciBuZWdhdGl2ZURhdGUgPSAtNjIxOTg3NTUyMDAwMDAsCisgICAgbmVnYXRpdmVZZWFyU3Ry
aW5nID0gIi0wMDAwMDEiOworaWYgKAorICAgICFEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyB8
fAorICAgIChuZXcgRGF0ZShuZWdhdGl2ZURhdGUpLnRvSVNPU3RyaW5nKCkuaW5kZXhPZihuZWdh
dGl2ZVllYXJTdHJpbmcpID09PSAtMSkKKykgeworICAgIERhdGUucHJvdG90eXBlLnRvSVNPU3Ry
aW5nID0gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7CisgICAgICAgIHZhciByZXN1bHQsIGxlbmd0
aCwgdmFsdWUsIHllYXIsIG1vbnRoOworICAgICAgICBpZiAoIWlzRmluaXRlKHRoaXMpKSB7Cisg
ICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRGF0ZS5wcm90b3R5cGUudG9JU09TdHJp
bmcgY2FsbGVkIG9uIG5vbi1maW5pdGUgdmFsdWUuIik7CisgICAgICAgIH0KKworICAgICAgICB5
ZWFyID0gdGhpcy5nZXRVVENGdWxsWWVhcigpOworCisgICAgICAgIG1vbnRoID0gdGhpcy5nZXRV
VENNb250aCgpOworICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2Vz
NS1zaGltL2lzc3Vlcy8xMTEKKyAgICAgICAgeWVhciArPSBNYXRoLmZsb29yKG1vbnRoIC8gMTIp
OworICAgICAgICBtb250aCA9IChtb250aCAlIDEyICsgMTIpICUgMTI7CisKKyAgICAgICAgLy8g
dGhlIGRhdGUgdGltZSBzdHJpbmcgZm9ybWF0IGlzIHNwZWNpZmllZCBpbiAxNS45LjEuMTUuCisg
ICAgICAgIHJlc3VsdCA9IFttb250aCArIDEsIHRoaXMuZ2V0VVRDRGF0ZSgpLAorICAgICAgICAg
ICAgdGhpcy5nZXRVVENIb3VycygpLCB0aGlzLmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5nZXRVVENT
ZWNvbmRzKCldOworICAgICAgICB5ZWFyID0gKAorICAgICAgICAgICAgKHllYXIgPCAwID8gIi0i
IDogKHllYXIgPiA5OTk5ID8gIisiIDogIiIpKSArCisgICAgICAgICAgICAoIjAwMDAwIiArIE1h
dGguYWJzKHllYXIpKQorICAgICAgICAgICAgLnNsaWNlKDAgPD0geWVhciAmJiB5ZWFyIDw9IDk5
OTkgPyAtNCA6IC02KQorICAgICAgICApOworCisgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5n
dGg7CisgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAgICAgdmFsdWUgPSByZXN1
bHRbbGVuZ3RoXTsKKyAgICAgICAgICAgIC8vIHBhZCBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51
dGVzLCBhbmQgc2Vjb25kcyB0byBoYXZlIHR3bworICAgICAgICAgICAgLy8gZGlnaXRzLgorICAg
ICAgICAgICAgaWYgKHZhbHVlIDwgMTApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbbGVuZ3Ro
XSA9ICIwIiArIHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIHBh
ZCBtaWxsaXNlY29uZHMgdG8gaGF2ZSB0aHJlZSBkaWdpdHMuCisgICAgICAgIHJldHVybiAoCisg
ICAgICAgICAgICB5ZWFyICsgIi0iICsgcmVzdWx0LnNsaWNlKDAsIDIpLmpvaW4oIi0iKSArCisg
ICAgICAgICAgICAiVCIgKyByZXN1bHQuc2xpY2UoMikuam9pbigiOiIpICsgIi4iICsKKyAgICAg
ICAgICAgICgiMDAwIiArIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLnNsaWNlKC0zKSArICJa
IgorICAgICAgICApOworICAgIH07Cit9CisKKworLy8gRVM1IDE1LjkuNS40NAorLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4MTUuOS41LjQ0CisvLyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEg
U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRGF0ZSBvYmplY3QgZm9yIHVzZSBieQorLy8gSlNP
Ti5zdHJpbmdpZnkgKDE1LjEyLjMpLgordmFyIGRhdGVUb0pTT05Jc1N1cHBvcnRlZCA9IGZhbHNl
OwordHJ5IHsKKyAgICBkYXRlVG9KU09OSXNTdXBwb3J0ZWQgPSAoCisgICAgICAgIERhdGUucHJv
dG90eXBlLnRvSlNPTiAmJgorICAgICAgICBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxs
ICYmCisgICAgICAgIG5ldyBEYXRlKG5lZ2F0aXZlRGF0ZSkudG9KU09OKCkuaW5kZXhPZihuZWdh
dGl2ZVllYXJTdHJpbmcpICE9PSAtMSAmJgorICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04u
Y2FsbCh7IC8vIGdlbmVyaWMKKyAgICAgICAgICAgIHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
CisgICAgKTsKK30gY2F0Y2ggKGUpIHsKK30KK2lmICghZGF0ZVRvSlNPTklzU3VwcG9ydGVkKSB7
CisgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKGtleSkgeworICAg
ICAgICAvLyBXaGVuIHRoZSB0b0pTT04gbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGFyZ3VtZW50IGtl
eSwgdGhlIGZvbGxvd2luZworICAgICAgICAvLyBzdGVwcyBhcmUgdGFrZW46CisKKyAgICAgICAg
Ly8gMS4gIExldCBPIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb09iamVjdCwgZ2l2aW5nIGl0
IHRoZSB0aGlzCisgICAgICAgIC8vIHZhbHVlIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgLy8g
Mi4gTGV0IHR2IGJlIHRvUHJpbWl0aXZlKE8sIGhpbnQgTnVtYmVyKS4KKyAgICAgICAgdmFyIG8g
PSBPYmplY3QodGhpcyksCisgICAgICAgICAgICB0diA9IHRvUHJpbWl0aXZlKG8pLAorICAgICAg
ICAgICAgdG9JU087CisgICAgICAgIC8vIDMuIElmIHR2IGlzIGEgTnVtYmVyIGFuZCBpcyBub3Qg
ZmluaXRlLCByZXR1cm4gbnVsbC4KKyAgICAgICAgaWYgKHR5cGVvZiB0diA9PT0gIm51bWJlciIg
JiYgIWlzRmluaXRlKHR2KSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgLy8gNC4gTGV0IHRvSVNPIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tH
ZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YKKyAgICAgICAgLy8gTyB3aXRoIGFyZ3VtZW50ICJ0b0lT
T1N0cmluZyIuCisgICAgICAgIHRvSVNPID0gby50b0lTT1N0cmluZzsKKyAgICAgICAgLy8gNS4g
SWYgSXNDYWxsYWJsZSh0b0lTTykgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlv
bi4KKyAgICAgICAgaWYgKHR5cGVvZiB0b0lTTyAhPSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0b0lTT1N0cmluZyBwcm9wZXJ0eSBpcyBub3QgY2FsbGFi
bGUiKTsKKyAgICAgICAgfQorICAgICAgICAvLyA2LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YKKyAgICAgICAgLy8gIHRvSVNPIHdp
dGggTyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJndW1lbnQgbGlzdC4KKyAgICAg
ICAgcmV0dXJuIHRvSVNPLmNhbGwobyk7CisKKyAgICAgICAgLy8gTk9URSAxIFRoZSBhcmd1bWVu
dCBpcyBpZ25vcmVkLgorCisgICAgICAgIC8vIE5PVEUgMiBUaGUgdG9KU09OIGZ1bmN0aW9uIGlz
IGludGVudGlvbmFsbHkgZ2VuZXJpYzsgaXQgZG9lcyBub3QKKyAgICAgICAgLy8gcmVxdWlyZSB0
aGF0IGl0cyB0aGlzIHZhbHVlIGJlIGEgRGF0ZSBvYmplY3QuIFRoZXJlZm9yZSwgaXQgY2FuIGJl
CisgICAgICAgIC8vIHRyYW5zZmVycmVkIHRvIG90aGVyIGtpbmRzIG9mIG9iamVjdHMgZm9yIHVz
ZSBhcyBhIG1ldGhvZC4gSG93ZXZlciwKKyAgICAgICAgLy8gaXQgZG9lcyByZXF1aXJlIHRoYXQg
YW55IHN1Y2ggb2JqZWN0IGhhdmUgYSB0b0lTT1N0cmluZyBtZXRob2QuIEFuCisgICAgICAgIC8v
IG9iamVjdCBpcyBmcmVlIHRvIHVzZSB0aGUgYXJndW1lbnQga2V5IHRvIGZpbHRlciBpdHMKKyAg
ICAgICAgLy8gc3RyaW5naWZpY2F0aW9uLgorICAgIH07Cit9CisKKy8vIEVTNSAxNS45LjQuMgor
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjIKKy8vIGJhc2VkIG9uIHdvcmsgc2hh
cmVkIGJ5IERhbmllbCBGcmllc2VuIChkYW50bWFuKQorLy8gaHR0cDovL2dpc3QuZ2l0aHViLmNv
bS8zMDMyNDkKK2lmICghRGF0ZS5wYXJzZSB8fCAiRGF0ZS5wYXJzZSBpcyBidWdneSIpIHsKKyAg
ICAvLyBYWFggZ2xvYmFsIGFzc2lnbm1lbnQgd29uJ3Qgd29yayBpbiBlbWJlZGRpbmdzIHRoYXQg
dXNlCisgICAgLy8gYW4gYWx0ZXJuYXRlIG9iamVjdCBmb3IgdGhlIGNvbnRleHQuCisgICAgRGF0
ZSA9IChmdW5jdGlvbihOYXRpdmVEYXRlKSB7CisKKyAgICAgICAgLy8gRGF0ZS5sZW5ndGggPT09
IDcKKyAgICAgICAgZnVuY3Rpb24gRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBtcykgeworICAgICAg
ICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAgICAgICAgICBpZiAodGhp
cyBpbnN0YW5jZW9mIE5hdGl2ZURhdGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IGxl
bmd0aCA9PSAxICYmIFN0cmluZyhZKSA9PT0gWSA/IC8vIGlzU3RyaW5nKFkpCisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGV4cGxpY2l0bHkgcGFzcyBpdCB0aHJvdWdoIHBhcnNlOgorICAgICAg
ICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZShEYXRlLnBhcnNlKFkpKSA6CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgbWFrZSBjYWxscyBkZXBlbmRpbmcgb24g
YXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoIGhlcmUKKyAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoID49IDcgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtLCBzLCBt
cykgOgorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNiA/IG5ldyBOYXRpdmVEYXRlKFks
IE0sIEQsIGgsIG0sIHMpIDoKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDUgPyBuZXcg
TmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtKSA6CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+
PSA0ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCkgOgorICAgICAgICAgICAgICAgICAgICBs
ZW5ndGggPj0gMyA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQpIDoKKyAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoID49IDIgPyBuZXcgTmF0aXZlRGF0ZShZLCBNKSA6CisgICAgICAgICAgICAgICAg
ICAgIGxlbmd0aCA+PSAxID8gbmV3IE5hdGl2ZURhdGUoWSkgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ldyBOYXRpdmVEYXRlKCk7CisgICAgICAgICAgICAgICAgLy8gUHJl
dmVudCBtaXh1cHMgd2l0aCB1bmZpeGVkIERhdGUgb2JqZWN0CisgICAgICAgICAgICAgICAgZGF0
ZS5jb25zdHJ1Y3RvciA9IERhdGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOworICAgICAgICB9OworCisgICAgICAgIC8vIDE1LjkuMS4xNSBEYXRlIFRpbWUgU3Ry
aW5nIEZvcm1hdC4KKyAgICAgICAgdmFyIGlzb0RhdGVFeHByZXNzaW9uID0gbmV3IFJlZ0V4cCgi
XiIgKworICAgICAgICAgICAgIihcXGR7NH18W1wrXC1dXFxkezZ9KSIgKyAvLyBmb3VyLWRpZ2l0
IHllYXIgY2FwdHVyZSBvciBzaWduICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gNi1kaWdpdCBleHRlbmRlZCB5ZWFyCisgICAgICAgICAgICAiKD86LShcXGR7Mn0p
IiArIC8vIG9wdGlvbmFsIG1vbnRoIGNhcHR1cmUKKyAgICAgICAgICAgICIoPzotKFxcZHsyfSki
ICsgLy8gb3B0aW9uYWwgZGF5IGNhcHR1cmUKKyAgICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVy
ZSBob3VyczptaW51dGVzOnNlY29uZHMubWlsbGlzZWNvbmRzCisgICAgICAgICAgICAgICAgIlQo
XFxkezJ9KSIgKyAvLyBob3VycyBjYXB0dXJlCisgICAgICAgICAgICAgICAgIjooXFxkezJ9KSIg
KyAvLyBtaW51dGVzIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAiKD86IiArIC8vIG9wdGlvbmFs
IDpzZWNvbmRzLm1pbGxpc2Vjb25kcworICAgICAgICAgICAgICAgICAgICAiOihcXGR7Mn0pIiAr
IC8vIHNlY29uZHMgY2FwdHVyZQorICAgICAgICAgICAgICAgICAgICAiKD86KFxcLlxcZHsxLH0p
KT8iICsgLy8gbWlsbGlzZWNvbmRzIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAiKT8iICsKKyAg
ICAgICAgICAgICIoIiArIC8vIGNhcHR1cmUgVVRDIG9mZnNldCBjb21wb25lbnQKKyAgICAgICAg
ICAgICAgICAiWnwiICsgLy8gVVRDIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAiKD86IiArIC8v
IG9mZnNldCBzcGVjaWZpZXIgKy8taG91cnM6bWludXRlcworICAgICAgICAgICAgICAgICAgICAi
KFstK10pIiArIC8vIHNpZ24gY2FwdHVyZQorICAgICAgICAgICAgICAgICAgICAiKFxcZHsyfSki
ICsgLy8gaG91cnMgb2Zmc2V0IGNhcHR1cmUKKyAgICAgICAgICAgICAgICAgICAgIjooXFxkezJ9
KSIgKyAvLyBtaW51dGVzIG9mZnNldCBjYXB0dXJlCisgICAgICAgICAgICAgICAgIikiICsKKyAg
ICAgICAgICAgICIpPyk/KT8pPyIgKworICAgICAgICAiJCIpOworCisgICAgICAgIHZhciBtb250
aHMgPSBbCisgICAgICAgICAgICAwLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0
MywgMjczLCAzMDQsIDMzNCwgMzY1CisgICAgICAgIF07CisKKyAgICAgICAgZnVuY3Rpb24gZGF5
RnJvbU1vbnRoKHllYXIsIG1vbnRoKSB7CisgICAgICAgICAgICB2YXIgdCA9IG1vbnRoID4gMSA/
IDEgOiAwOworICAgICAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgICAgICBtb250aHNbbW9u
dGhdICsKKyAgICAgICAgICAgICAgICBNYXRoLmZsb29yKCh5ZWFyIC0gMTk2OSArIHQpIC8gNCkg
LQorICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoKHllYXIgLSAxOTAxICsgdCkgLyAxMDApICsK
KyAgICAgICAgICAgICAgICBNYXRoLmZsb29yKCh5ZWFyIC0gMTYwMSArIHQpIC8gNDAwKSArCisg
ICAgICAgICAgICAgICAgMzY1ICogKHllYXIgLSAxOTcwKQorICAgICAgICAgICAgKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRvVVRDKHQpIHsKKyAgICAgICAgICAgIHJldHVybiBO
dW1iZXIobmV3IE5hdGl2ZURhdGUoMTk3MCwgMCwgMSwgMCwgMCwgMCwgdCkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gQ29weSBhbnkgY3VzdG9tIG1ldGhvZHMgYSAzcmQgcGFydHkgbGlicmFy
eSBtYXkgaGF2ZSBhZGRlZAorICAgICAgICBmb3IgKHZhciBrZXkgaW4gTmF0aXZlRGF0ZSkgewor
ICAgICAgICAgICAgRGF0ZVtrZXldID0gTmF0aXZlRGF0ZVtrZXldOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ29weSAibmF0aXZlIiBtZXRob2RzIGV4cGxpY2l0bHk7IHRoZXkgbWF5IGJlIG5v
bi1lbnVtZXJhYmxlCisgICAgICAgIERhdGUubm93ID0gTmF0aXZlRGF0ZS5ub3c7CisgICAgICAg
IERhdGUuVVRDID0gTmF0aXZlRGF0ZS5VVEM7CisgICAgICAgIERhdGUucHJvdG90eXBlID0gTmF0
aXZlRGF0ZS5wcm90b3R5cGU7CisgICAgICAgIERhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0g
RGF0ZTsKKworICAgICAgICAvLyBVcGdyYWRlIERhdGUucGFyc2UgdG8gaGFuZGxlIHNpbXBsaWZp
ZWQgSVNPIDg2MDEgc3RyaW5ncworICAgICAgICBEYXRlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2Uo
c3RyaW5nKSB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSBpc29EYXRlRXhwcmVzc2lvbi5leGVj
KHN0cmluZyk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICAvLyBw
YXJzZSBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgbWlsbGlzZWNv
bmRzCisgICAgICAgICAgICAgICAgLy8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3Nh
cnkKKyAgICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUgVVRDIG9mZnNldCBjb21wb25lbnQKKyAg
ICAgICAgICAgICAgICB2YXIgeWVhciA9IE51bWJlcihtYXRjaFsxXSksCisgICAgICAgICAgICAg
ICAgICAgIG1vbnRoID0gTnVtYmVyKG1hdGNoWzJdIHx8IDEpIC0gMSwKKyAgICAgICAgICAgICAg
ICAgICAgZGF5ID0gTnVtYmVyKG1hdGNoWzNdIHx8IDEpIC0gMSwKKyAgICAgICAgICAgICAgICAg
ICAgaG91ciA9IE51bWJlcihtYXRjaFs0XSB8fCAwKSwKKyAgICAgICAgICAgICAgICAgICAgbWlu
dXRlID0gTnVtYmVyKG1hdGNoWzVdIHx8IDApLAorICAgICAgICAgICAgICAgICAgICBzZWNvbmQg
PSBOdW1iZXIobWF0Y2hbNl0gfHwgMCksCisgICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25k
ID0gTWF0aC5mbG9vcihOdW1iZXIobWF0Y2hbN10gfHwgMCkgKiAxMDAwKSwKKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2hlbiB0aW1lIHpvbmUgaXMgbWlzc2VkLCBsb2NhbCBvZmZzZXQgc2hvdWxk
IGJlIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gKEVTIDUuMSBidWcpCisgICAgICAgICAg
ICAgICAgICAgIC8vIHNlZSBodHRwczovL2J1Z3MuZWNtYXNjcmlwdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMgorICAgICAgICAgICAgICAgICAgICBpc0xvY2FsVGltZSA9IEJvb2xlYW4obWF0Y2hb
NF0gJiYgIW1hdGNoWzhdKSwKKyAgICAgICAgICAgICAgICAgICAgc2lnbk9mZnNldCA9IG1hdGNo
WzldID09PSAiLSIgPyAxIDogLTEsCisgICAgICAgICAgICAgICAgICAgIGhvdXJPZmZzZXQgPSBO
dW1iZXIobWF0Y2hbMTBdIHx8IDApLAorICAgICAgICAgICAgICAgICAgICBtaW51dGVPZmZzZXQg
PSBOdW1iZXIobWF0Y2hbMTFdIHx8IDApLAorICAgICAgICAgICAgICAgICAgICByZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgICAgICBob3VyIDwgKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbWludXRlID4gMCB8fCBzZWNvbmQgPiAwIHx8IG1pbGxpc2Vjb25k
ID4gMCA/CisgICAgICAgICAgICAgICAgICAgICAgICAyNCA6IDI1CisgICAgICAgICAgICAgICAg
ICAgICkgJiYKKyAgICAgICAgICAgICAgICAgICAgbWludXRlIDwgNjAgJiYgc2Vjb25kIDwgNjAg
JiYgbWlsbGlzZWNvbmQgPCAxMDAwICYmCisgICAgICAgICAgICAgICAgICAgIG1vbnRoID4gLTEg
JiYgbW9udGggPCAxMiAmJiBob3VyT2Zmc2V0IDwgMjQgJiYKKyAgICAgICAgICAgICAgICAgICAg
bWludXRlT2Zmc2V0IDwgNjAgJiYgLy8gZGV0ZWN0IGludmFsaWQgb2Zmc2V0cworICAgICAgICAg
ICAgICAgICAgICBkYXkgPiAtMSAmJgorICAgICAgICAgICAgICAgICAgICBkYXkgPCAoCisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXlGcm9tTW9udGgoeWVhciwgbW9udGggKyAxKSAtCisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXlGcm9tTW9udGgoeWVhciwgbW9udGgpCisgICAgICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gKAorICAgICAgICAgICAgICAgICAgICAgICAgKGRheUZyb21Nb250aCh5ZWFyLCBtb250
aCkgKyBkYXkpICogMjQgKworICAgICAgICAgICAgICAgICAgICAgICAgaG91ciArCisgICAgICAg
ICAgICAgICAgICAgICAgICBob3VyT2Zmc2V0ICogc2lnbk9mZnNldAorICAgICAgICAgICAgICAg
ICAgICApICogNjA7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIChyZXN1bHQgKyBtaW51dGUgKyBtaW51dGVPZmZzZXQgKiBzaWduT2Zmc2V0
KSAqIDYwICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZAorICAgICAgICAgICAgICAg
ICAgICApICogMTAwMCArIG1pbGxpc2Vjb25kOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNM
b2NhbFRpbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRvVVRDKHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKC04LjY0
ZTE1IDw9IHJlc3VsdCAmJiByZXN1bHQgPD0gOC42NGUxNSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAg
ICAgICAgfTsKKworICAgICAgICByZXR1cm4gRGF0ZTsKKyAgICB9KShEYXRlKTsKK30KKworLy8g
RVM1IDE1LjkuNC40CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjQuNAoraWYgKCFE
YXRlLm5vdykgeworICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkgeworICAgICAgICByZXR1
cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisgICAgfTsKK30KKworCisvLworLy8gTnVtYmVyCisv
LyA9PT09PT0KKy8vCisKKy8vIEVTNS4xIDE1LjcuNC41CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3gxNS43LjQuNQoraWYgKCFOdW1iZXIucHJvdG90eXBlLnRvRml4ZWQgfHwgKDAuMDAwMDgp
LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHwgKDAuOSkudG9GaXhlZCgwKSA9PT0gJzAnIHx8ICgx
LjI1NSkudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8ICgxMDAwMDAwMDAwMDAwMDAwMTI4KS50b0Zp
eGVkKDApICE9PSAiMTAwMDAwMDAwMDAwMDAwMDEyOCIpIHsKKyAgICAvLyBIaWRlIHRoZXNlIHZh
cmlhYmxlcyBhbmQgZnVuY3Rpb25zCisgICAgKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGJh
c2UsIHNpemUsIGRhdGEsIGk7CisKKyAgICAgICAgYmFzZSA9IDFlNzsKKyAgICAgICAgc2l6ZSA9
IDY7CisgICAgICAgIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07CisKKyAgICAgICAgZnVuY3Rp
b24gbXVsdGlwbHkobiwgYykgeworICAgICAgICAgICAgdmFyIGkgPSAtMTsKKyAgICAgICAgICAg
IHdoaWxlICgrK2kgPCBzaXplKSB7CisgICAgICAgICAgICAgICAgYyArPSBuICogZGF0YVtpXTsK
KyAgICAgICAgICAgICAgICBkYXRhW2ldID0gYyAlIGJhc2U7CisgICAgICAgICAgICAgICAgYyA9
IE1hdGguZmxvb3IoYyAvIGJhc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gZGl2aWRlKG4pIHsKKyAgICAgICAgICAgIHZhciBpID0gc2l6ZSwgYyA9IDA7
CisgICAgICAgICAgICB3aGlsZSAoLS1pID49IDApIHsKKyAgICAgICAgICAgICAgICBjICs9IGRh
dGFbaV07CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IE1hdGguZmxvb3IoYyAvIG4pOworICAg
ICAgICAgICAgICAgIGMgPSAoYyAlIG4pICogYmFzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgdmFyIGkgPSBz
aXplOworICAgICAgICAgICAgdmFyIHMgPSAnJzsKKyAgICAgICAgICAgIHdoaWxlICgtLWkgPj0g
MCkgeworICAgICAgICAgICAgICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0g
IT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzID09PSAnJykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcyA9IHQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzICs9ICcwMDAwMDAwJy5zbGljZSgwLCA3IC0gdC5sZW5ndGgpICsgdDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBzOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcG93KHgsIG4s
IGFjYykgeworICAgICAgICAgICAgcmV0dXJuIChuID09PSAwID8gYWNjIDogKG4gJSAyID09PSAx
ID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYykpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxvZyh4KSB7CisgICAgICAgICAgICB2YXIgbiA9
IDA7CisgICAgICAgICAgICB3aGlsZSAoeCA+PSA0MDk2KSB7CisgICAgICAgICAgICAgICAgbiAr
PSAxMjsKKyAgICAgICAgICAgICAgICB4IC89IDQwOTY7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB3aGlsZSAoeCA+PSAyKSB7CisgICAgICAgICAgICAgICAgbiArPSAxOworICAgICAgICAg
ICAgICAgIHggLz0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuOworICAg
ICAgICB9CisKKyAgICAgICAgTnVtYmVyLnByb3RvdHlwZS50b0ZpeGVkID0gZnVuY3Rpb24gKGZy
YWN0aW9uRGlnaXRzKSB7CisgICAgICAgICAgICB2YXIgZiwgeCwgcywgbSwgZSwgeiwgaiwgazsK
KworICAgICAgICAgICAgLy8gVGVzdCBmb3IgTmFOIGFuZCByb3VuZCBmcmFjdGlvbkRpZ2l0cyBk
b3duCisgICAgICAgICAgICBmID0gTnVtYmVyKGZyYWN0aW9uRGlnaXRzKTsKKyAgICAgICAgICAg
IGYgPSBmICE9PSBmID8gMCA6IE1hdGguZmxvb3IoZik7CisKKyAgICAgICAgICAgIGlmIChmIDwg
MCB8fCBmID4gMjApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTnVt
YmVyLnRvRml4ZWQgY2FsbGVkIHdpdGggaW52YWxpZCBudW1iZXIgb2YgZGVjaW1hbHMiKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgeCA9IE51bWJlcih0aGlzKTsKKworICAgICAgICAg
ICAgLy8gVGVzdCBmb3IgTmFOCisgICAgICAgICAgICBpZiAoeCAhPT0geCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAiTmFOIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYg
aXQgaXMgdG9vIGJpZyBvciBzbWFsbCwgcmV0dXJuIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIG51
bWJlcgorICAgICAgICAgICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cyA9ICIiOworCisgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgICAgICBzID0g
Ii0iOworICAgICAgICAgICAgICAgIHggPSAteDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbSA9ICIwIjsKKworICAgICAgICAgICAgaWYgKHggPiAxZS0yMSkgeworICAgICAgICAgICAg
ICAgIC8vIDFlLTIxIDwgeCA8IDFlMjEKKyAgICAgICAgICAgICAgICAvLyAtNzAgPCBsb2cyKHgp
IDwgNzAKKyAgICAgICAgICAgICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5Owor
ICAgICAgICAgICAgICAgIHogPSAoZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3co
MiwgZSwgMSkpOworICAgICAgICAgICAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDsgLy8gTWF0
aC5wb3coMiwgNTIpOworICAgICAgICAgICAgICAgIGUgPSA1MiAtIGU7CisKKyAgICAgICAgICAg
ICAgICAvLyAtMTggPCBlIDwgMTIyCisgICAgICAgICAgICAgICAgLy8geCA9IHogLyAyIF4gZQor
ICAgICAgICAgICAgICAgIGlmIChlID4gMCkgeworICAgICAgICAgICAgICAgICAgICBtdWx0aXBs
eSgwLCB6KTsKKyAgICAgICAgICAgICAgICAgICAgaiA9IGY7CisKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKGogPj0gNykgeworICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbHkoMWU3
LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGogLT0gNzsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApOwor
ICAgICAgICAgICAgICAgICAgICBqID0gZSAtIDE7CisKKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKGogPj0gMjMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGogLT0gMjM7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBkaXZpZGUoMSA8PCBqKTsKKyAgICAgICAgICAgICAgICAg
ICAgbXVsdGlwbHkoMSwgMSk7CisgICAgICAgICAgICAgICAgICAgIGRpdmlkZSgyKTsKKyAgICAg
ICAgICAgICAgICAgICAgbSA9IHRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbHkoMCwgeik7CisgICAgICAgICAgICAgICAgICAg
IG11bHRpcGx5KDEgPDwgKC1lKSwgMCk7CisgICAgICAgICAgICAgICAgICAgIG0gPSB0b1N0cmlu
ZygpICsgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMDAnLnNsaWNlKDIsIDIgKyBmKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmID4gMCkgeworICAg
ICAgICAgICAgICAgIGsgPSBtLmxlbmd0aDsKKworICAgICAgICAgICAgICAgIGlmIChrIDw9IGYp
IHsKKyAgICAgICAgICAgICAgICAgICAgbSA9IHMgKyAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwJy5z
bGljZSgwLCBmIC0gayArIDIpICsgbTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBtID0gcyArIG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShr
IC0gZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtID0gcyArIG07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBt
OworICAgICAgICB9CisgICAgfSgpKTsKK30KKworCisvLworLy8gU3RyaW5nCisvLyA9PT09PT0K
Ky8vCisKKworLy8gRVM1IDE1LjUuNC4xNAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUu
NS40LjE0CisKKy8vIFtidWdmaXgsIElFIGx0IDksIGZpcmVmb3ggNCwgS29ucXVlcm9yLCBPcGVy
YSwgb2JzY3VyZSBicm93c2Vyc10KKy8vIE1hbnkgYnJvd3NlcnMgZG8gbm90IHNwbGl0IHByb3Bl
cmx5IHdpdGggcmVndWxhciBleHByZXNzaW9ucyBvciB0aGV5CisvLyBkbyBub3QgcGVyZm9ybSB0
aGUgc3BsaXQgY29ycmVjdGx5IHVuZGVyIG9ic2N1cmUgY29uZGl0aW9ucy4KKy8vIFNlZSBodHRw
Oi8vYmxvZy5zdGV2ZW5sZXZpdGhhbi5jb20vYXJjaGl2ZXMvY3Jvc3MtYnJvd3Nlci1zcGxpdAor
Ly8gSSd2ZSB0ZXN0ZWQgaW4gbWFueSBicm93c2VycyBhbmQgdGhpcyBzZWVtcyB0byBjb3ZlciB0
aGUgZGV2aWFudCBvbmVzOgorLy8gICAgJ2FiJy5zcGxpdCgvKD86YWIpKi8pIHNob3VsZCBiZSBb
IiIsICIiXSwgbm90IFsiIl0KKy8vICAgICcuJy5zcGxpdCgvKC4/KSguPykvKSBzaG91bGQgYmUg
WyIiLCAiLiIsICIiLCAiIl0sIG5vdCBbIiIsICIiXQorLy8gICAgJ3Rlc3N0Jy5zcGxpdCgvKHMp
Ki8pIHNob3VsZCBiZSBbInQiLCB1bmRlZmluZWQsICJlIiwgInMiLCAidCJdLCBub3QKKy8vICAg
ICAgIFt1bmRlZmluZWQsICJ0IiwgdW5kZWZpbmVkLCAiZSIsIC4uLl0KKy8vICAgICcnLnNwbGl0
KC8uPy8pIHNob3VsZCBiZSBbXSwgbm90IFsiIl0KKy8vICAgICcuJy5zcGxpdCgvKCkoKS8pIHNo
b3VsZCBiZSBbIi4iXSwgbm90IFsiIiwgIiIsICIuIl0KKwordmFyIHN0cmluZ19zcGxpdCA9IFN0
cmluZy5wcm90b3R5cGUuc3BsaXQ7CitpZiAoCisgICAgJ2FiJy5zcGxpdCgvKD86YWIpKi8pLmxl
bmd0aCAhPT0gMiB8fAorICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT09IDQgfHwK
KyAgICAndGVzc3QnLnNwbGl0KC8ocykqLylbMV0gPT09ICJ0IiB8fAorICAgICcnLnNwbGl0KC8u
Py8pLmxlbmd0aCB8fAorICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEKKykgeworICAg
IChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBjb21wbGlhbnRFeGVjTnBjZyA9IC8oKT8/Ly5l
eGVjKCIiKVsxXSA9PT0gdm9pZCAwOyAvLyBOUENHOiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmlu
ZyBncm91cAorCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiAoc2Vw
YXJhdG9yLCBsaW1pdCkgeworICAgICAgICAgICAgdmFyIHN0cmluZyA9IHRoaXM7CisgICAgICAg
ICAgICBpZiAoc2VwYXJhdG9yID09PSB2b2lkIDAgJiYgbGltaXQgPT09IDApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFtdOworCisgICAgICAgICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3Qg
YSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdAorICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5
cGUudG9TdHJpbmcuY2FsbChzZXBhcmF0b3IpICE9PSAiW29iamVjdCBSZWdFeHBdIikgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdHJpbmdfc3BsaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIG91dHB1dCA9IFtdLAorICAgICAgICAg
ICAgICAgIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gImkiIDogIiIpICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lICA/ICJtIiA6ICIiKSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLmV4dGVuZGVkICAgPyAieCIgOiAiIikg
KyAvLyBQcm9wb3NlZCBmb3IgRVM2CisgICAgICAgICAgICAgICAgICAgICAgICAoc2VwYXJhdG9y
LnN0aWNreSAgICAgPyAieSIgOiAiIiksIC8vIEZpcmVmb3ggMysKKyAgICAgICAgICAgICAgICBs
YXN0TGFzdEluZGV4ID0gMCwKKyAgICAgICAgICAgICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBh
dm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weQorICAgICAgICAg
ICAgICAgIHNlcGFyYXRvciA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAi
ZyIpLAorICAgICAgICAgICAgICAgIHNlcGFyYXRvcjIsIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RM
ZW5ndGg7CisgICAgICAgICAgICBzdHJpbmcgKz0gIiI7IC8vIFR5cGUtY29udmVydAorICAgICAg
ICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZykgeworICAgICAgICAgICAgICAgIC8vIERvZXNu
J3QgbmVlZCBmbGFncyBneSwgYnV0IHRoZXkgZG9uJ3QgaHVydAorICAgICAgICAgICAgICAgIHNl
cGFyYXRvcjIgPSBuZXcgUmVnRXhwKCJeIiArIHNlcGFyYXRvci5zb3VyY2UgKyAiJCg/IVxccyki
LCBmbGFncyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBWYWx1ZXMgZm9yIGBsaW1p
dGAsIHBlciB0aGUgc3BlYzoKKyAgICAgICAgICAgICAqIElmIHVuZGVmaW5lZDogNDI5NDk2NzI5
NSAvLyBNYXRoLnBvdygyLCAzMikgLSAxCisgICAgICAgICAgICAgKiBJZiAwLCBJbmZpbml0eSwg
b3IgTmFOOiAwCisgICAgICAgICAgICAgKiBJZiBwb3NpdGl2ZSBudW1iZXI6IGxpbWl0ID0gTWF0
aC5mbG9vcihsaW1pdCk7IGlmIChsaW1pdCA+IDQyOTQ5NjcyOTUpIGxpbWl0IC09IDQyOTQ5Njcy
OTY7CisgICAgICAgICAgICAgKiBJZiBuZWdhdGl2ZSBudW1iZXI6IDQyOTQ5NjcyOTYgLSBNYXRo
LmZsb29yKE1hdGguYWJzKGxpbWl0KSkKKyAgICAgICAgICAgICAqIElmIG90aGVyOiBUeXBlLWNv
bnZlcnQsIHRoZW4gdXNlIHRoZSBhYm92ZSBydWxlcworICAgICAgICAgICAgICovCisgICAgICAg
ICAgICBsaW1pdCA9IGxpbWl0ID09PSB2b2lkIDAgPworICAgICAgICAgICAgICAgIC0xID4+PiAw
IDogLy8gTWF0aC5wb3coMiwgMzIpIC0gMQorICAgICAgICAgICAgICAgIGxpbWl0ID4+PiAwOyAv
LyBUb1VpbnQzMihsaW1pdCkKKyAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHNlcGFyYXRvci5l
eGVjKHN0cmluZykpIHsKKyAgICAgICAgICAgICAgICAvLyBgc2VwYXJhdG9yLmxhc3RJbmRleGAg
aXMgbm90IHJlbGlhYmxlIGNyb3NzLWJyb3dzZXIKKyAgICAgICAgICAgICAgICBsYXN0SW5kZXgg
PSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBpZiAobGFz
dEluZGV4ID4gbGFzdExhc3RJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVz
aChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNp
c3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGAgZm9yCisgICAgICAgICAgICAgICAgICAgIC8vIG5v
bnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwcworICAgICAgICAgICAgICAgICAgICBpZiAo
IWNvbXBsaWFudEV4ZWNOcGNnICYmIG1hdGNoLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoWzBdLnJlcGxhY2Uoc2VwYXJhdG9yMiwgZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxl
bmd0aCAtIDI7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJn
dW1lbnRzW2ldID09PSB2b2lkIDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1hdGNoW2ldID0gdm9pZCAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNo
Lmxlbmd0aCA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmcubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNs
aWNlKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsYXN0
TGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBsYXN0TGFzdElu
ZGV4ID0gbGFzdEluZGV4OworICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+
PSBsaW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNlcGFyYXRv
ci5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHNlcGFy
YXRvci5sYXN0SW5kZXgrKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcAorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBz
dHJpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFy
YXRvci50ZXN0KCIiKSkgeworICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgiIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBv
dXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG91dHB1dC5sZW5ndGggPiBsaW1pdCA/IG91dHB1dC5zbGljZSgw
LCBsaW1pdCkgOiBvdXRwdXQ7CisgICAgICAgIH07CisgICAgfSgpKTsKKworLy8gW2J1Z2ZpeCwg
Y2hyb21lXQorLy8gSWYgc2VwYXJhdG9yIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgcmVzdWx0IGFy
cmF5IGNvbnRhaW5zIGp1c3Qgb25lIFN0cmluZywKKy8vIHdoaWNoIGlzIHRoZSB0aGlzIHZhbHVl
IChjb252ZXJ0ZWQgdG8gYSBTdHJpbmcpLiBJZiBsaW1pdCBpcyBub3QgdW5kZWZpbmVkLAorLy8g
dGhlbiB0aGUgb3V0cHV0IGFycmF5IGlzIHRydW5jYXRlZCBzbyB0aGF0IGl0IGNvbnRhaW5zIG5v
IG1vcmUgdGhhbiBsaW1pdAorLy8gZWxlbWVudHMuCisvLyAiMCIuc3BsaXQodW5kZWZpbmVkLCAw
KSAtPiBbXQorfSBlbHNlIGlmICgiMCIuc3BsaXQodm9pZCAwLCAwKS5sZW5ndGgpIHsKKyAgICBT
dHJpbmcucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24oc2VwYXJhdG9yLCBsaW1pdCkgeworICAg
ICAgICBpZiAoc2VwYXJhdG9yID09PSB2b2lkIDAgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTsK
KyAgICAgICAgcmV0dXJuIHN0cmluZ19zcGxpdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAg
IH0KK30KKworCisvLyBFQ01BLTI2MiwgM3JkIEIuMi4zCisvLyBOb3RlIGFuIEVDTUFTY3JpcHQg
c3RhbmRhcnQsIGFsdGhvdWdoIEVDTUFTY3JpcHQgM3JkIEVkaXRpb24gaGFzIGEKKy8vIG5vbi1u
b3JtYXRpdmUgc2VjdGlvbiBzdWdnZXN0aW5nIHVuaWZvcm0gc2VtYW50aWNzIGFuZCBpdCBzaG91
bGQgYmUKKy8vIG5vcm1hbGl6ZWQgYWNyb3NzIGFsbCBicm93c2VycworLy8gW2J1Z2ZpeCwgSUUg
bHQgOV0gSUUgPCA5IHN1YnN0cigpIHdpdGggbmVnYXRpdmUgdmFsdWUgbm90IHdvcmtpbmcgaW4g
SUUKK2lmICgiIi5zdWJzdHIgJiYgIjBiIi5zdWJzdHIoLTEpICE9PSAiYiIpIHsKKyAgICB2YXIg
c3RyaW5nX3N1YnN0ciA9IFN0cmluZy5wcm90b3R5cGUuc3Vic3RyOworICAgIC8qKgorICAgICAq
ICBHZXQgdGhlIHN1YnN0cmluZyBvZiBhIHN0cmluZworICAgICAqICBAcGFyYW0gIHtpbnRlZ2Vy
fSAgc3RhcnQgICB3aGVyZSB0byBzdGFydCB0aGUgc3Vic3RyaW5nCisgICAgICogIEBwYXJhbSAg
e2ludGVnZXJ9ICBsZW5ndGggIGhvdyBtYW55IGNoYXJhY3RlcnMgdG8gcmV0dXJuCisgICAgICog
IEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBTdHJpbmcucHJvdG90eXBlLnN1YnN0ciA9
IGZ1bmN0aW9uKHN0YXJ0LCBsZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZ19zdWJzdHIu
Y2FsbCgKKyAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICBzdGFydCA8IDAgPyAoKHN0YXJ0
ID0gdGhpcy5sZW5ndGggKyBzdGFydCkgPCAwID8gMCA6IHN0YXJ0KSA6IHN0YXJ0LAorICAgICAg
ICAgICAgbGVuZ3RoCisgICAgICAgICk7CisgICAgfQorfQorCisvLyBFUzUgMTUuNS40LjIwCisv
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMjAKK3ZhciB3cyA9ICJceDA5XHgwQVx4
MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiAr
CisgICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1
MjA1Rlx1MzAwMFx1MjAyOCIgKworICAgICJcdTIwMjlcdUZFRkYiOworaWYgKCFTdHJpbmcucHJv
dG90eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7CisgICAgLy8gaHR0cDovL2Jsb2cuc3RldmVubGV2
aXRoYW4uY29tL2FyY2hpdmVzL2Zhc3Rlci10cmltLWphdmFzY3JpcHQKKyAgICAvLyBodHRwOi8v
cGVyZmVjdGlvbmtpbGxzLmNvbS93aGl0ZXNwYWNlLWRldmlhdGlvbnMvCisgICAgd3MgPSAiWyIg
KyB3cyArICJdIjsKKyAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3
cyArIHdzICsgIioiKSwKKyAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3
cyArICIqJCIpOworICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7
CisgICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK3RoaXMrIiB0byBvYmpl
Y3QiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpCisgICAgICAgICAg
ICAucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKQorICAgICAgICAgICAgLnJlcGxhY2UodHJp
bUVuZFJlZ2V4cCwgIiIpOworICAgIH07Cit9CisKKy8vCisvLyBVdGlsCisvLyA9PT09PT0KKy8v
CisKKy8vIEVTNSA5LjQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDkuNAorLy8gaHR0cDov
L2pzcGVyZi5jb20vdG8taW50ZWdlcgorCitmdW5jdGlvbiB0b0ludGVnZXIobikgeworICAgIG4g
PSArbjsKKyAgICBpZiAobiAhPT0gbikgeyAvLyBpc05hTgorICAgICAgICBuID0gMDsKKyAgICB9
IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7CisgICAg
ICAgIG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7CisgICAgfQor
ICAgIHJldHVybiBuOworfQorCitmdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCkgeworICAgIHZh
ciB0eXBlID0gdHlwZW9mIGlucHV0OworICAgIHJldHVybiAoCisgICAgICAgIGlucHV0ID09PSBu
dWxsIHx8CisgICAgICAgIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8CisgICAgICAgIHR5cGUgPT09
ICJib29sZWFuIiB8fAorICAgICAgICB0eXBlID09PSAibnVtYmVyIiB8fAorICAgICAgICB0eXBl
ID09PSAic3RyaW5nIgorICAgICk7Cit9CisKK2Z1bmN0aW9uIHRvUHJpbWl0aXZlKGlucHV0KSB7
CisgICAgdmFyIHZhbCwgdmFsdWVPZiwgdG9TdHJpbmc7CisgICAgaWYgKGlzUHJpbWl0aXZlKGlu
cHV0KSkgeworICAgICAgICByZXR1cm4gaW5wdXQ7CisgICAgfQorICAgIHZhbHVlT2YgPSBpbnB1
dC52YWx1ZU9mOworICAgIGlmICh0eXBlb2YgdmFsdWVPZiA9PT0gImZ1bmN0aW9uIikgeworICAg
ICAgICB2YWwgPSB2YWx1ZU9mLmNhbGwoaW5wdXQpOworICAgICAgICBpZiAoaXNQcmltaXRpdmUo
dmFsKSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0
b1N0cmluZyA9IGlucHV0LnRvU3RyaW5nOworICAgIGlmICh0eXBlb2YgdG9TdHJpbmcgPT09ICJm
dW5jdGlvbiIpIHsKKyAgICAgICAgdmFsID0gdG9TdHJpbmcuY2FsbChpbnB1dCk7CisgICAgICAg
IGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsOworICAgICAg
ICB9CisgICAgfQorICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsKK30KKworLy8gRVM1IDkuOQor
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4OS45Cit2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAo
bykgeworICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQg
dW5kZWZpbmVkCisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitv
KyIgdG8gb2JqZWN0Iik7CisgICAgfQorICAgIHJldHVybiBPYmplY3Qobyk7Cit9OworCit9KTsK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hp
bS9lczUtc2hpbS5taW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMv
ZXM1LXNoaW0vZXM1LXNoaW0ubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkYzBlMjkzNzA3ZmRiYzMyYTYx
MGZhNThmOTliOWU4NWQ3YzFiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoaW0ubWluLmpzCkBAIC0wLDAgKzEs
MiBAQAorKGZ1bmN0aW9uKGRlZmluaXRpb24pe2lmKHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiIp
e2RlZmluZShkZWZpbml0aW9uKX1lbHNlIGlmKHR5cGVvZiBZVUk9PSJmdW5jdGlvbiIpe1lVSS5h
ZGQoImVzNSIsZGVmaW5pdGlvbil9ZWxzZXtkZWZpbml0aW9uKCl9fSkoZnVuY3Rpb24oKXtpZihw
YXJzZUludCgiMDgiKSE9PTgpe3BhcnNlSW50PWZ1bmN0aW9uKG9yaWdQYXJzZUludCl7dmFyIGhl
eFJlZ2V4PS9eMFt4WF0vO3JldHVybiBmdW5jdGlvbiBwYXJzZUludEVTNShzdHIscmFkaXgpe3N0
cj1TdHJpbmcoc3RyKS50cmltKCk7aWYoIStyYWRpeCl7cmFkaXg9aGV4UmVnZXgudGVzdChzdHIp
PzE2OjEwfXJldHVybiBvcmlnUGFyc2VJbnQoc3RyLHJhZGl4KX19KHBhcnNlSW50KX1mdW5jdGlv
biBFbXB0eSgpe31pZighRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpe0Z1bmN0aW9uLnByb3RvdHlw
ZS5iaW5kPWZ1bmN0aW9uIGJpbmQodGhhdCl7dmFyIHRhcmdldD10aGlzO2lmKHR5cGVvZiB0YXJn
ZXQhPSJmdW5jdGlvbiIpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5i
aW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIit0YXJnZXQpfXZhciBhcmdzPV9BcnJheV9zbGlj
ZV8uY2FsbChhcmd1bWVudHMsMSk7dmFyIGJpbmRlcj1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFu
Y2VvZiBib3VuZCl7dmFyIHJlc3VsdD10YXJnZXQuYXBwbHkodGhpcyxhcmdzLmNvbmNhdChfQXJy
YXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzKSkpO2lmKE9iamVjdChyZXN1bHQpPT09cmVzdWx0KXty
ZXR1cm4gcmVzdWx0fXJldHVybiB0aGlzfWVsc2V7cmV0dXJuIHRhcmdldC5hcHBseSh0aGF0LGFy
Z3MuY29uY2F0KF9BcnJheV9zbGljZV8uY2FsbChhcmd1bWVudHMpKSl9fTt2YXIgYm91bmRMZW5n
dGg9TWF0aC5tYXgoMCx0YXJnZXQubGVuZ3RoLWFyZ3MubGVuZ3RoKTt2YXIgYm91bmRBcmdzPVtd
O2Zvcih2YXIgaT0wO2k8Ym91bmRMZW5ndGg7aSsrKXtib3VuZEFyZ3MucHVzaCgiJCIraSl9dmFy
IGJvdW5kPUZ1bmN0aW9uKCJiaW5kZXIiLCJyZXR1cm4gZnVuY3Rpb24oIitib3VuZEFyZ3Muam9p
bigiLCIpKyIpe3JldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSIpKGJpbmRlcik7
aWYodGFyZ2V0LnByb3RvdHlwZSl7RW1wdHkucHJvdG90eXBlPXRhcmdldC5wcm90b3R5cGU7Ym91
bmQucHJvdG90eXBlPW5ldyBFbXB0eTtFbXB0eS5wcm90b3R5cGU9bnVsbH1yZXR1cm4gYm91bmR9
fXZhciBjYWxsPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO3ZhciBwcm90b3R5cGVPZkFycmF5PUFy
cmF5LnByb3RvdHlwZTt2YXIgcHJvdG90eXBlT2ZPYmplY3Q9T2JqZWN0LnByb3RvdHlwZTt2YXIg
X0FycmF5X3NsaWNlXz1wcm90b3R5cGVPZkFycmF5LnNsaWNlO3ZhciBfdG9TdHJpbmc9Y2FsbC5i
aW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTt2YXIgb3ducz1jYWxsLmJpbmQocHJvdG90
eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpO3ZhciBkZWZpbmVHZXR0ZXI7dmFyIGRlZmluZVNl
dHRlcjt2YXIgbG9va3VwR2V0dGVyO3ZhciBsb29rdXBTZXR0ZXI7dmFyIHN1cHBvcnRzQWNjZXNz
b3JzO2lmKHN1cHBvcnRzQWNjZXNzb3JzPW93bnMocHJvdG90eXBlT2ZPYmplY3QsIl9fZGVmaW5l
R2V0dGVyX18iKSl7ZGVmaW5lR2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2Rl
ZmluZUdldHRlcl9fKTtkZWZpbmVTZXR0ZXI9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9f
ZGVmaW5lU2V0dGVyX18pO2xvb2t1cEdldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3Qu
X19sb29rdXBHZXR0ZXJfXyk7bG9va3VwU2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVj
dC5fX2xvb2t1cFNldHRlcl9fKX1pZihbMSwyXS5zcGxpY2UoMCkubGVuZ3RoIT0yKXt2YXIgYXJy
YXlfc3BsaWNlPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7dmFyIGFycmF5X3B1c2g9QXJyYXkucHJv
dG90eXBlLnB1c2g7dmFyIGFycmF5X3Vuc2hpZnQ9QXJyYXkucHJvdG90eXBlLnVuc2hpZnQ7aWYo
ZnVuY3Rpb24oKXtmdW5jdGlvbiBtYWtlQXJyYXkobCl7dmFyIGE9W107d2hpbGUobC0tKXthLnVu
c2hpZnQobCl9cmV0dXJuIGF9dmFyIGFycmF5PVtdLGxlbmd0aEJlZm9yZTthcnJheS5zcGxpY2Uu
YmluZChhcnJheSwwLDApLmFwcGx5KG51bGwsbWFrZUFycmF5KDIwKSk7YXJyYXkuc3BsaWNlLmJp
bmQoYXJyYXksMCwwKS5hcHBseShudWxsLG1ha2VBcnJheSgyNikpO2xlbmd0aEJlZm9yZT1hcnJh
eS5sZW5ndGg7YXJyYXkuc3BsaWNlKDUsMCwiWFhYIik7aWYobGVuZ3RoQmVmb3JlKzE9PWFycmF5
Lmxlbmd0aCl7cmV0dXJuIHRydWV9fSgpKXtBcnJheS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9u
KHN0YXJ0LGRlbGV0ZUNvdW50KXtpZighYXJndW1lbnRzLmxlbmd0aCl7cmV0dXJuW119ZWxzZXty
ZXR1cm4gYXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsW3N0YXJ0PT09dm9pZCAwPzA6c3RhcnQsZGVs
ZXRlQ291bnQ9PT12b2lkIDA/dGhpcy5sZW5ndGgtc3RhcnQ6ZGVsZXRlQ291bnRdLmNvbmNhdChf
QXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzLDIpKSl9fX1lbHNle0FycmF5LnByb3RvdHlwZS5z
cGxpY2U9ZnVuY3Rpb24oc3RhcnQsZGVsZXRlQ291bnQpe3ZhciByZXN1bHQsYXJncz1fQXJyYXlf
c2xpY2VfLmNhbGwoYXJndW1lbnRzLDIpLGFkZEVsZW1lbnRzQ291bnQ9YXJncy5sZW5ndGg7aWYo
IWFyZ3VtZW50cy5sZW5ndGgpe3JldHVybltdfWlmKHN0YXJ0PT09dm9pZCAwKXtzdGFydD0wfWlm
KGRlbGV0ZUNvdW50PT09dm9pZCAwKXtkZWxldGVDb3VudD10aGlzLmxlbmd0aC1zdGFydH1pZihh
ZGRFbGVtZW50c0NvdW50PjApe2lmKGRlbGV0ZUNvdW50PD0wKXtpZihzdGFydD09dGhpcy5sZW5n
dGgpe2FycmF5X3B1c2guYXBwbHkodGhpcyxhcmdzKTtyZXR1cm5bXX1pZihzdGFydD09MCl7YXJy
YXlfdW5zaGlmdC5hcHBseSh0aGlzLGFyZ3MpO3JldHVybltdfX1yZXN1bHQ9X0FycmF5X3NsaWNl
Xy5jYWxsKHRoaXMsc3RhcnQsc3RhcnQrZGVsZXRlQ291bnQpO2FyZ3MucHVzaC5hcHBseShhcmdz
LF9BcnJheV9zbGljZV8uY2FsbCh0aGlzLHN0YXJ0K2RlbGV0ZUNvdW50LHRoaXMubGVuZ3RoKSk7
YXJncy51bnNoaWZ0LmFwcGx5KGFyZ3MsX0FycmF5X3NsaWNlXy5jYWxsKHRoaXMsMCxzdGFydCkp
O2FyZ3MudW5zaGlmdCgwLHRoaXMubGVuZ3RoKTthcnJheV9zcGxpY2UuYXBwbHkodGhpcyxhcmdz
KTtyZXR1cm4gcmVzdWx0fXJldHVybiBhcnJheV9zcGxpY2UuY2FsbCh0aGlzLHN0YXJ0LGRlbGV0
ZUNvdW50KX19fWlmKFtdLnVuc2hpZnQoMCkhPTEpe3ZhciBhcnJheV91bnNoaWZ0PUFycmF5LnBy
b3RvdHlwZS51bnNoaWZ0O0FycmF5LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKCl7YXJyYXlf
dW5zaGlmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMubGVuZ3RofX1pZighQXJy
YXkuaXNBcnJheSl7QXJyYXkuaXNBcnJheT1mdW5jdGlvbiBpc0FycmF5KG9iail7cmV0dXJuIF90
b1N0cmluZyhvYmopPT0iW29iamVjdCBBcnJheV0ifX12YXIgYm94ZWRTdHJpbmc9T2JqZWN0KCJh
Iiksc3BsaXRTdHJpbmc9Ym94ZWRTdHJpbmdbMF0hPSJhInx8ISgwIGluIGJveGVkU3RyaW5nKTt2
YXIgYm94ZWRGb3JFYWNoPXRydWU7aWYoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpe0FycmF5LnBy
b3RvdHlwZS5mb3JFYWNoLmNhbGwoImZvbyIsZnVuY3Rpb24oaXRlbSxpLG9iail7aWYodHlwZW9m
IG9iaiE9PSJvYmplY3QiKWJveGVkRm9yRWFjaD1mYWxzZX0pfWlmKCFBcnJheS5wcm90b3R5cGUu
Zm9yRWFjaHx8IWJveGVkRm9yRWFjaCl7QXJyYXkucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24g
Zm9yRWFjaChmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYm
X3RvU3RyaW5nKHRoaXMpPT0iW29iamVjdCBTdHJpbmddIj90aGlzLnNwbGl0KCIiKTpvYmplY3Qs
dGhpc3A9YXJndW1lbnRzWzFdLGk9LTEsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZihfdG9TdHJp
bmcoZnVuKSE9IltvYmplY3QgRnVuY3Rpb25dIil7dGhyb3cgbmV3IFR5cGVFcnJvcn13aGlsZSgr
K2k8bGVuZ3RoKXtpZihpIGluIHNlbGYpe2Z1bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3Qp
fX19fWlmKCFBcnJheS5wcm90b3R5cGUubWFwKXtBcnJheS5wcm90b3R5cGUubWFwPWZ1bmN0aW9u
IG1hcChmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmX3Rv
U3RyaW5nKHRoaXMpPT0iW29iamVjdCBTdHJpbmddIj90aGlzLnNwbGl0KCIiKTpvYmplY3QsbGVu
Z3RoPXNlbGYubGVuZ3RoPj4+MCxyZXN1bHQ9QXJyYXkobGVuZ3RoKSx0aGlzcD1hcmd1bWVudHNb
MV07aWYoX3RvU3RyaW5nKGZ1bikhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpe3Rocm93IG5ldyBUeXBl
RXJyb3IoZnVuKyIgaXMgbm90IGEgZnVuY3Rpb24iKX1mb3IodmFyIGk9MDtpPGxlbmd0aDtpKysp
e2lmKGkgaW4gc2VsZilyZXN1bHRbaV09ZnVuLmNhbGwodGhpc3Asc2VsZltpXSxpLG9iamVjdCl9
cmV0dXJuIHJlc3VsdH19aWYoIUFycmF5LnByb3RvdHlwZS5maWx0ZXIpe0FycmF5LnByb3RvdHlw
ZS5maWx0ZXI9ZnVuY3Rpb24gZmlsdGVyKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxz
ZWxmPXNwbGl0U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMu
c3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHJlc3VsdD1bXSx2YWx1ZSx0
aGlzcD1hcmd1bWVudHNbMV07aWYoX3RvU3RyaW5nKGZ1bikhPSJbb2JqZWN0IEZ1bmN0aW9uXSIp
e3Rocm93IG5ldyBUeXBlRXJyb3IoZnVuKyIgaXMgbm90IGEgZnVuY3Rpb24iKX1mb3IodmFyIGk9
MDtpPGxlbmd0aDtpKyspe2lmKGkgaW4gc2VsZil7dmFsdWU9c2VsZltpXTtpZihmdW4uY2FsbCh0
aGlzcCx2YWx1ZSxpLG9iamVjdCkpe3Jlc3VsdC5wdXNoKHZhbHVlKX19fXJldHVybiByZXN1bHR9
fWlmKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpe0FycmF5LnByb3RvdHlwZS5ldmVyeT1mdW5jdGlv
biBldmVyeShmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYm
X3RvU3RyaW5nKHRoaXMpPT0iW29iamVjdCBTdHJpbmddIj90aGlzLnNwbGl0KCIiKTpvYmplY3Qs
bGVuZ3RoPXNlbGYubGVuZ3RoPj4+MCx0aGlzcD1hcmd1bWVudHNbMV07aWYoX3RvU3RyaW5nKGZ1
bikhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpe3Rocm93IG5ldyBUeXBlRXJyb3IoZnVuKyIgaXMgbm90
IGEgZnVuY3Rpb24iKX1mb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe2lmKGkgaW4gc2VsZiYmIWZ1
bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVl
fX1pZighQXJyYXkucHJvdG90eXBlLnNvbWUpe0FycmF5LnByb3RvdHlwZS5zb21lPWZ1bmN0aW9u
IHNvbWUoZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJl90
b1N0cmluZyh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxl
bmd0aD1zZWxmLmxlbmd0aD4+PjAsdGhpc3A9YXJndW1lbnRzWzFdO2lmKF90b1N0cmluZyhmdW4p
IT0iW29iamVjdCBGdW5jdGlvbl0iKXt0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBh
IGZ1bmN0aW9uIil9Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKXtpZihpIGluIHNlbGYmJmZ1bi5j
YWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfX1p
ZighQXJyYXkucHJvdG90eXBlLnJlZHVjZSl7QXJyYXkucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlv
biByZWR1Y2UoZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcm
Jl90b1N0cmluZyh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6b2JqZWN0
LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjA7aWYoX3RvU3RyaW5nKGZ1bikhPSJbb2JqZWN0IEZ1bmN0
aW9uXSIpe3Rocm93IG5ldyBUeXBlRXJyb3IoZnVuKyIgaXMgbm90IGEgZnVuY3Rpb24iKX1pZigh
bGVuZ3RoJiZhcmd1bWVudHMubGVuZ3RoPT0xKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ug
b2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9dmFyIGk9MDt2YXIgcmVzdWx0
O2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe3Jlc3VsdD1hcmd1bWVudHNbMV19ZWxzZXtkb3tpZihp
IGluIHNlbGYpe3Jlc3VsdD1zZWxmW2krK107YnJlYWt9aWYoKytpPj1sZW5ndGgpe3Rocm93IG5l
dyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUi
KX19d2hpbGUodHJ1ZSl9Zm9yKDtpPGxlbmd0aDtpKyspe2lmKGkgaW4gc2VsZil7cmVzdWx0PWZ1
bi5jYWxsKHZvaWQgMCxyZXN1bHQsc2VsZltpXSxpLG9iamVjdCl9fXJldHVybiByZXN1bHR9fWlm
KCFBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpe0FycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdo
dD1mdW5jdGlvbiByZWR1Y2VSaWdodChmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2Vs
Zj1zcGxpdFN0cmluZyYmX3RvU3RyaW5nKHRoaXMpPT0iW29iamVjdCBTdHJpbmddIj90aGlzLnNw
bGl0KCIiKTpvYmplY3QsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZihfdG9TdHJpbmcoZnVuKSE9
IltvYmplY3QgRnVuY3Rpb25dIil7dGhyb3cgbmV3IFR5cGVFcnJvcihmdW4rIiBpcyBub3QgYSBm
dW5jdGlvbiIpfWlmKCFsZW5ndGgmJmFyZ3VtZW50cy5sZW5ndGg9PTEpe3Rocm93IG5ldyBUeXBl
RXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIp
fXZhciByZXN1bHQsaT1sZW5ndGgtMTtpZihhcmd1bWVudHMubGVuZ3RoPj0yKXtyZXN1bHQ9YXJn
dW1lbnRzWzFdfWVsc2V7ZG97aWYoaSBpbiBzZWxmKXtyZXN1bHQ9c2VsZltpLS1dO2JyZWFrfWlm
KC0taTwwKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3
aXRoIG5vIGluaXRpYWwgdmFsdWUiKX19d2hpbGUodHJ1ZSl9aWYoaTwwKXtyZXR1cm4gcmVzdWx0
fWRve2lmKGkgaW4gdGhpcyl7cmVzdWx0PWZ1bi5jYWxsKHZvaWQgMCxyZXN1bHQsc2VsZltpXSxp
LG9iamVjdCl9fXdoaWxlKGktLSk7cmV0dXJuIHJlc3VsdH19aWYoIUFycmF5LnByb3RvdHlwZS5p
bmRleE9mfHxbMCwxXS5pbmRleE9mKDEsMikhPS0xKXtBcnJheS5wcm90b3R5cGUuaW5kZXhPZj1m
dW5jdGlvbiBpbmRleE9mKHNvdWdodCl7dmFyIHNlbGY9c3BsaXRTdHJpbmcmJl90b1N0cmluZyh0
aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6dG9PYmplY3QodGhpcyksbGVu
Z3RoPXNlbGYubGVuZ3RoPj4+MDtpZighbGVuZ3RoKXtyZXR1cm4tMX12YXIgaT0wO2lmKGFyZ3Vt
ZW50cy5sZW5ndGg+MSl7aT10b0ludGVnZXIoYXJndW1lbnRzWzFdKX1pPWk+PTA/aTpNYXRoLm1h
eCgwLGxlbmd0aCtpKTtmb3IoO2k8bGVuZ3RoO2krKyl7aWYoaSBpbiBzZWxmJiZzZWxmW2ldPT09
c291Z2h0KXtyZXR1cm4gaX19cmV0dXJuLTF9fWlmKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4
T2Z8fFswLDFdLmxhc3RJbmRleE9mKDAsLTMpIT0tMSl7QXJyYXkucHJvdG90eXBlLmxhc3RJbmRl
eE9mPWZ1bmN0aW9uIGxhc3RJbmRleE9mKHNvdWdodCl7dmFyIHNlbGY9c3BsaXRTdHJpbmcmJl90
b1N0cmluZyh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6dG9PYmplY3Qo
dGhpcyksbGVuZ3RoPXNlbGYubGVuZ3RoPj4+MDtpZighbGVuZ3RoKXtyZXR1cm4tMX12YXIgaT1s
ZW5ndGgtMTtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2k9TWF0aC5taW4oaSx0b0ludGVnZXIoYXJn
dW1lbnRzWzFdKSl9aT1pPj0wP2k6bGVuZ3RoLU1hdGguYWJzKGkpO2Zvcig7aT49MDtpLS0pe2lm
KGkgaW4gc2VsZiYmc291Z2h0PT09c2VsZltpXSl7cmV0dXJuIGl9fXJldHVybi0xfX1pZighT2Jq
ZWN0LmtleXMpe3ZhciBoYXNEb250RW51bUJ1Zz10cnVlLGRvbnRFbnVtcz1bInRvU3RyaW5nIiwi
dG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9m
IiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLGRvbnRFbnVtc0xlbmd0aD1k
b250RW51bXMubGVuZ3RoO2Zvcih2YXIga2V5IGlue3RvU3RyaW5nOm51bGx9KXtoYXNEb250RW51
bUJ1Zz1mYWxzZX1PYmplY3Qua2V5cz1mdW5jdGlvbiBrZXlzKG9iamVjdCl7aWYodHlwZW9mIG9i
amVjdCE9Im9iamVjdCImJnR5cGVvZiBvYmplY3QhPSJmdW5jdGlvbiJ8fG9iamVjdD09PW51bGwp
e3Rocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Qi
KX12YXIga2V5cz1bXTtmb3IodmFyIG5hbWUgaW4gb2JqZWN0KXtpZihvd25zKG9iamVjdCxuYW1l
KSl7a2V5cy5wdXNoKG5hbWUpfX1pZihoYXNEb250RW51bUJ1Zyl7Zm9yKHZhciBpPTAsaWk9ZG9u
dEVudW1zTGVuZ3RoO2k8aWk7aSsrKXt2YXIgZG9udEVudW09ZG9udEVudW1zW2ldO2lmKG93bnMo
b2JqZWN0LGRvbnRFbnVtKSl7a2V5cy5wdXNoKGRvbnRFbnVtKX19fXJldHVybiBrZXlzfX12YXIg
bmVnYXRpdmVEYXRlPS02MjE5ODc1NTJlNSxuZWdhdGl2ZVllYXJTdHJpbmc9Ii0wMDAwMDEiO2lm
KCFEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ3x8bmV3IERhdGUobmVnYXRpdmVEYXRlKS50b0lT
T1N0cmluZygpLmluZGV4T2YobmVnYXRpdmVZZWFyU3RyaW5nKT09PS0xKXtEYXRlLnByb3RvdHlw
ZS50b0lTT1N0cmluZz1mdW5jdGlvbiB0b0lTT1N0cmluZygpe3ZhciByZXN1bHQsbGVuZ3RoLHZh
bHVlLHllYXIsbW9udGg7aWYoIWlzRmluaXRlKHRoaXMpKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcigi
RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgY2FsbGVkIG9uIG5vbi1maW5pdGUgdmFsdWUuIil9
eWVhcj10aGlzLmdldFVUQ0Z1bGxZZWFyKCk7bW9udGg9dGhpcy5nZXRVVENNb250aCgpO3llYXIr
PU1hdGguZmxvb3IobW9udGgvMTIpO21vbnRoPShtb250aCUxMisxMiklMTI7cmVzdWx0PVttb250
aCsxLHRoaXMuZ2V0VVRDRGF0ZSgpLHRoaXMuZ2V0VVRDSG91cnMoKSx0aGlzLmdldFVUQ01pbnV0
ZXMoKSx0aGlzLmdldFVUQ1NlY29uZHMoKV07eWVhcj0oeWVhcjwwPyItIjp5ZWFyPjk5OTk/Iisi
OiIiKSsoIjAwMDAwIitNYXRoLmFicyh5ZWFyKSkuc2xpY2UoMDw9eWVhciYmeWVhcjw9OTk5OT8t
NDotNik7bGVuZ3RoPXJlc3VsdC5sZW5ndGg7d2hpbGUobGVuZ3RoLS0pe3ZhbHVlPXJlc3VsdFts
ZW5ndGhdO2lmKHZhbHVlPDEwKXtyZXN1bHRbbGVuZ3RoXT0iMCIrdmFsdWV9fXJldHVybiB5ZWFy
KyItIityZXN1bHQuc2xpY2UoMCwyKS5qb2luKCItIikrIlQiK3Jlc3VsdC5zbGljZSgyKS5qb2lu
KCI6IikrIi4iKygiMDAwIit0aGlzLmdldFVUQ01pbGxpc2Vjb25kcygpKS5zbGljZSgtMykrIloi
fX12YXIgZGF0ZVRvSlNPTklzU3VwcG9ydGVkPWZhbHNlO3RyeXtkYXRlVG9KU09OSXNTdXBwb3J0
ZWQ9RGF0ZS5wcm90b3R5cGUudG9KU09OJiZuZXcgRGF0ZShOYU4pLnRvSlNPTigpPT09bnVsbCYm
bmV3IERhdGUobmVnYXRpdmVEYXRlKS50b0pTT04oKS5pbmRleE9mKG5lZ2F0aXZlWWVhclN0cmlu
ZykhPT0tMSYmRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9u
KCl7cmV0dXJuIHRydWV9fSl9Y2F0Y2goZSl7fWlmKCFkYXRlVG9KU09OSXNTdXBwb3J0ZWQpe0Rh
dGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbiB0b0pTT04oa2V5KXt2YXIgbz1PYmplY3QodGhp
cyksdHY9dG9QcmltaXRpdmUobyksdG9JU087aWYodHlwZW9mIHR2PT09Im51bWJlciImJiFpc0Zp
bml0ZSh0dikpe3JldHVybiBudWxsfXRvSVNPPW8udG9JU09TdHJpbmc7aWYodHlwZW9mIHRvSVNP
IT0iZnVuY3Rpb24iKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJ0b0lTT1N0cmluZyBwcm9wZXJ0eSBp
cyBub3QgY2FsbGFibGUiKX1yZXR1cm4gdG9JU08uY2FsbChvKX19aWYoIURhdGUucGFyc2V8fCJE
YXRlLnBhcnNlIGlzIGJ1Z2d5Iil7RGF0ZT1mdW5jdGlvbihOYXRpdmVEYXRlKXtmdW5jdGlvbiBE
YXRlKFksTSxELGgsbSxzLG1zKXt2YXIgbGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGg7aWYodGhpcyBp
bnN0YW5jZW9mIE5hdGl2ZURhdGUpe3ZhciBkYXRlPWxlbmd0aD09MSYmU3RyaW5nKFkpPT09WT9u
ZXcgTmF0aXZlRGF0ZShEYXRlLnBhcnNlKFkpKTpsZW5ndGg+PTc/bmV3IE5hdGl2ZURhdGUoWSxN
LEQsaCxtLHMsbXMpOmxlbmd0aD49Nj9uZXcgTmF0aXZlRGF0ZShZLE0sRCxoLG0scyk6bGVuZ3Ro
Pj01P25ldyBOYXRpdmVEYXRlKFksTSxELGgsbSk6bGVuZ3RoPj00P25ldyBOYXRpdmVEYXRlKFks
TSxELGgpOmxlbmd0aD49Mz9uZXcgTmF0aXZlRGF0ZShZLE0sRCk6bGVuZ3RoPj0yP25ldyBOYXRp
dmVEYXRlKFksTSk6bGVuZ3RoPj0xP25ldyBOYXRpdmVEYXRlKFkpOm5ldyBOYXRpdmVEYXRlO2Rh
dGUuY29uc3RydWN0b3I9RGF0ZTtyZXR1cm4gZGF0ZX1yZXR1cm4gTmF0aXZlRGF0ZS5hcHBseSh0
aGlzLGFyZ3VtZW50cyl9dmFyIGlzb0RhdGVFeHByZXNzaW9uPW5ldyBSZWdFeHAoIl4iKyIoXFxk
ezR9fFsrLV1cXGR7Nn0pIisiKD86LShcXGR7Mn0pIisiKD86LShcXGR7Mn0pIisiKD86IisiVChc
XGR7Mn0pIisiOihcXGR7Mn0pIisiKD86IisiOihcXGR7Mn0pIisiKD86KFxcLlxcZHsxLH0pKT8i
KyIpPyIrIigiKyJafCIrIig/OiIrIihbLStdKSIrIihcXGR7Mn0pIisiOihcXGR7Mn0pIisiKSIr
Iik/KT8pPyk/IisiJCIpO3ZhciBtb250aHM9WzAsMzEsNTksOTAsMTIwLDE1MSwxODEsMjEyLDI0
MywyNzMsMzA0LDMzNCwzNjVdO2Z1bmN0aW9uIGRheUZyb21Nb250aCh5ZWFyLG1vbnRoKXt2YXIg
dD1tb250aD4xPzE6MDtyZXR1cm4gbW9udGhzW21vbnRoXStNYXRoLmZsb29yKCh5ZWFyLTE5Njkr
dCkvNCktTWF0aC5mbG9vcigoeWVhci0xOTAxK3QpLzEwMCkrTWF0aC5mbG9vcigoeWVhci0xNjAx
K3QpLzQwMCkrMzY1Kih5ZWFyLTE5NzApfWZ1bmN0aW9uIHRvVVRDKHQpe3JldHVybiBOdW1iZXIo
bmV3IE5hdGl2ZURhdGUoMTk3MCwwLDEsMCwwLDAsdCkpfWZvcih2YXIga2V5IGluIE5hdGl2ZURh
dGUpe0RhdGVba2V5XT1OYXRpdmVEYXRlW2tleV19RGF0ZS5ub3c9TmF0aXZlRGF0ZS5ub3c7RGF0
ZS5VVEM9TmF0aXZlRGF0ZS5VVEM7RGF0ZS5wcm90b3R5cGU9TmF0aXZlRGF0ZS5wcm90b3R5cGU7
RGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3I9RGF0ZTtEYXRlLnBhcnNlPWZ1bmN0aW9uIHBhcnNl
KHN0cmluZyl7dmFyIG1hdGNoPWlzb0RhdGVFeHByZXNzaW9uLmV4ZWMoc3RyaW5nKTtpZihtYXRj
aCl7dmFyIHllYXI9TnVtYmVyKG1hdGNoWzFdKSxtb250aD1OdW1iZXIobWF0Y2hbMl18fDEpLTEs
ZGF5PU51bWJlcihtYXRjaFszXXx8MSktMSxob3VyPU51bWJlcihtYXRjaFs0XXx8MCksbWludXRl
PU51bWJlcihtYXRjaFs1XXx8MCksc2Vjb25kPU51bWJlcihtYXRjaFs2XXx8MCksbWlsbGlzZWNv
bmQ9TWF0aC5mbG9vcihOdW1iZXIobWF0Y2hbN118fDApKjFlMyksaXNMb2NhbFRpbWU9Qm9vbGVh
bihtYXRjaFs0XSYmIW1hdGNoWzhdKSxzaWduT2Zmc2V0PW1hdGNoWzldPT09Ii0iPzE6LTEsaG91
ck9mZnNldD1OdW1iZXIobWF0Y2hbMTBdfHwwKSxtaW51dGVPZmZzZXQ9TnVtYmVyKG1hdGNoWzEx
XXx8MCkscmVzdWx0O2lmKGhvdXI8KG1pbnV0ZT4wfHxzZWNvbmQ+MHx8bWlsbGlzZWNvbmQ+MD8y
NDoyNSkmJm1pbnV0ZTw2MCYmc2Vjb25kPDYwJiZtaWxsaXNlY29uZDwxZTMmJm1vbnRoPi0xJiZt
b250aDwxMiYmaG91ck9mZnNldDwyNCYmbWludXRlT2Zmc2V0PDYwJiZkYXk+LTEmJmRheTxkYXlG
cm9tTW9udGgoeWVhcixtb250aCsxKS1kYXlGcm9tTW9udGgoeWVhcixtb250aCkpe3Jlc3VsdD0o
KGRheUZyb21Nb250aCh5ZWFyLG1vbnRoKStkYXkpKjI0K2hvdXIraG91ck9mZnNldCpzaWduT2Zm
c2V0KSo2MDtyZXN1bHQ9KChyZXN1bHQrbWludXRlK21pbnV0ZU9mZnNldCpzaWduT2Zmc2V0KSo2
MCtzZWNvbmQpKjFlMyttaWxsaXNlY29uZDtpZihpc0xvY2FsVGltZSl7cmVzdWx0PXRvVVRDKHJl
c3VsdCl9aWYoLTg2NGUxMzw9cmVzdWx0JiZyZXN1bHQ8PTg2NGUxMyl7cmV0dXJuIHJlc3VsdH19
cmV0dXJuIE5hTn1yZXR1cm4gTmF0aXZlRGF0ZS5wYXJzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9
O3JldHVybiBEYXRlfShEYXRlKX1pZighRGF0ZS5ub3cpe0RhdGUubm93PWZ1bmN0aW9uIG5vdygp
e3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX1pZighTnVtYmVyLnByb3RvdHlwZS50b0ZpeGVk
fHw4ZS01LnRvRml4ZWQoMykhPT0iMC4wMDAifHwuOS50b0ZpeGVkKDApPT09IjAifHwxLjI1NS50
b0ZpeGVkKDIpIT09IjEuMjUifHwweGRlMGI2YjNhNzY0MDA4MC50b0ZpeGVkKDApIT09IjEwMDAw
MDAwMDAwMDAwMDAxMjgiKXsoZnVuY3Rpb24oKXt2YXIgYmFzZSxzaXplLGRhdGEsaTtiYXNlPTFl
NztzaXplPTY7ZGF0YT1bMCwwLDAsMCwwLDBdO2Z1bmN0aW9uIG11bHRpcGx5KG4sYyl7dmFyIGk9
LTE7d2hpbGUoKytpPHNpemUpe2MrPW4qZGF0YVtpXTtkYXRhW2ldPWMlYmFzZTtjPU1hdGguZmxv
b3IoYy9iYXNlKX19ZnVuY3Rpb24gZGl2aWRlKG4pe3ZhciBpPXNpemUsYz0wO3doaWxlKC0taT49
MCl7Yys9ZGF0YVtpXTtkYXRhW2ldPU1hdGguZmxvb3IoYy9uKTtjPWMlbipiYXNlfX1mdW5jdGlv
biB0b1N0cmluZygpe3ZhciBpPXNpemU7dmFyIHM9IiI7d2hpbGUoLS1pPj0wKXtpZihzIT09IiJ8
fGk9PT0wfHxkYXRhW2ldIT09MCl7dmFyIHQ9U3RyaW5nKGRhdGFbaV0pO2lmKHM9PT0iIil7cz10
fWVsc2V7cys9IjAwMDAwMDAiLnNsaWNlKDAsNy10Lmxlbmd0aCkrdH19fXJldHVybiBzfWZ1bmN0
aW9uIHBvdyh4LG4sYWNjKXtyZXR1cm4gbj09PTA/YWNjOm4lMj09PTE/cG93KHgsbi0xLGFjYyp4
KTpwb3coeCp4LG4vMixhY2MpfWZ1bmN0aW9uIGxvZyh4KXt2YXIgbj0wO3doaWxlKHg+PTQwOTYp
e24rPTEyO3gvPTQwOTZ9d2hpbGUoeD49Mil7bis9MTt4Lz0yfXJldHVybiBufU51bWJlci5wcm90
b3R5cGUudG9GaXhlZD1mdW5jdGlvbihmcmFjdGlvbkRpZ2l0cyl7dmFyIGYseCxzLG0sZSx6LGos
aztmPU51bWJlcihmcmFjdGlvbkRpZ2l0cyk7Zj1mIT09Zj8wOk1hdGguZmxvb3IoZik7aWYoZjww
fHxmPjIwKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTnVtYmVyLnRvRml4ZWQgY2FsbGVkIHdpdGgg
aW52YWxpZCBudW1iZXIgb2YgZGVjaW1hbHMiKX14PU51bWJlcih0aGlzKTtpZih4IT09eCl7cmV0
dXJuIk5hTiJ9aWYoeDw9LTFlMjF8fHg+PTFlMjEpe3JldHVybiBTdHJpbmcoeCl9cz0iIjtpZih4
PDApe3M9Ii0iO3g9LXh9bT0iMCI7aWYoeD4xZS0yMSl7ZT1sb2coeCpwb3coMiw2OSwxKSktNjk7
ej1lPDA/eCpwb3coMiwtZSwxKTp4L3BvdygyLGUsMSk7eio9NDUwMzU5OTYyNzM3MDQ5NjtlPTUy
LWU7aWYoZT4wKXttdWx0aXBseSgwLHopO2o9Zjt3aGlsZShqPj03KXttdWx0aXBseSgxZTcsMCk7
ai09N31tdWx0aXBseShwb3coMTAsaiwxKSwwKTtqPWUtMTt3aGlsZShqPj0yMyl7ZGl2aWRlKDE8
PDIzKTtqLT0yM31kaXZpZGUoMTw8aik7bXVsdGlwbHkoMSwxKTtkaXZpZGUoMik7bT10b1N0cmlu
ZygpfWVsc2V7bXVsdGlwbHkoMCx6KTttdWx0aXBseSgxPDwtZSwwKTttPXRvU3RyaW5nKCkrIjAu
MDAwMDAwMDAwMDAwMDAwMDAwMDAiLnNsaWNlKDIsMitmKX19aWYoZj4wKXtrPW0ubGVuZ3RoO2lm
KGs8PWYpe209cysiMC4wMDAwMDAwMDAwMDAwMDAwMDAwIi5zbGljZSgwLGYtaysyKSttfWVsc2V7
bT1zK20uc2xpY2UoMCxrLWYpKyIuIittLnNsaWNlKGstZil9fWVsc2V7bT1zK219cmV0dXJuIG19
fSkoKX12YXIgc3RyaW5nX3NwbGl0PVN0cmluZy5wcm90b3R5cGUuc3BsaXQ7aWYoImFiIi5zcGxp
dCgvKD86YWIpKi8pLmxlbmd0aCE9PTJ8fCIuIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGghPT00
fHwidGVzc3QiLnNwbGl0KC8ocykqLylbMV09PT0idCJ8fCIiLnNwbGl0KC8uPy8pLmxlbmd0aHx8
Ii4iLnNwbGl0KC8oKSgpLykubGVuZ3RoPjEpeyhmdW5jdGlvbigpe3ZhciBjb21wbGlhbnRFeGVj
TnBjZz0vKCk/Py8uZXhlYygiIilbMV09PT12b2lkIDA7U3RyaW5nLnByb3RvdHlwZS5zcGxpdD1m
dW5jdGlvbihzZXBhcmF0b3IsbGltaXQpe3ZhciBzdHJpbmc9dGhpcztpZihzZXBhcmF0b3I9PT12
b2lkIDAmJmxpbWl0PT09MClyZXR1cm5bXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh
bGwoc2VwYXJhdG9yKSE9PSJbb2JqZWN0IFJlZ0V4cF0iKXtyZXR1cm4gc3RyaW5nX3NwbGl0LmFw
cGx5KHRoaXMsYXJndW1lbnRzKX12YXIgb3V0cHV0PVtdLGZsYWdzPShzZXBhcmF0b3IuaWdub3Jl
Q2FzZT8iaSI6IiIpKyhzZXBhcmF0b3IubXVsdGlsaW5lPyJtIjoiIikrKHNlcGFyYXRvci5leHRl
bmRlZD8ieCI6IiIpKyhzZXBhcmF0b3Iuc3RpY2t5PyJ5IjoiIiksbGFzdExhc3RJbmRleD0wLHNl
cGFyYXRvcj1uZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsZmxhZ3MrImciKSxzZXBhcmF0b3Iy
LG1hdGNoLGxhc3RJbmRleCxsYXN0TGVuZ3RoO3N0cmluZys9IiI7aWYoIWNvbXBsaWFudEV4ZWNO
cGNnKXtzZXBhcmF0b3IyPW5ldyBSZWdFeHAoIl4iK3NlcGFyYXRvci5zb3VyY2UrIiQoPyFcXHMp
IixmbGFncyl9bGltaXQ9bGltaXQ9PT12b2lkIDA/LTE+Pj4wOmxpbWl0Pj4+MDt3aGlsZShtYXRj
aD1zZXBhcmF0b3IuZXhlYyhzdHJpbmcpKXtsYXN0SW5kZXg9bWF0Y2guaW5kZXgrbWF0Y2hbMF0u
bGVuZ3RoO2lmKGxhc3RJbmRleD5sYXN0TGFzdEluZGV4KXtvdXRwdXQucHVzaChzdHJpbmcuc2xp
Y2UobGFzdExhc3RJbmRleCxtYXRjaC5pbmRleCkpO2lmKCFjb21wbGlhbnRFeGVjTnBjZyYmbWF0
Y2gubGVuZ3RoPjEpe21hdGNoWzBdLnJlcGxhY2Uoc2VwYXJhdG9yMixmdW5jdGlvbigpe2Zvcih2
YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aC0yO2krKyl7aWYoYXJndW1lbnRzW2ldPT09dm9pZCAw
KXttYXRjaFtpXT12b2lkIDB9fX0pfWlmKG1hdGNoLmxlbmd0aD4xJiZtYXRjaC5pbmRleDxzdHJp
bmcubGVuZ3RoKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShvdXRwdXQsbWF0Y2guc2xpY2Uo
MSkpfWxhc3RMZW5ndGg9bWF0Y2hbMF0ubGVuZ3RoO2xhc3RMYXN0SW5kZXg9bGFzdEluZGV4O2lm
KG91dHB1dC5sZW5ndGg+PWxpbWl0KXticmVha319aWYoc2VwYXJhdG9yLmxhc3RJbmRleD09PW1h
dGNoLmluZGV4KXtzZXBhcmF0b3IubGFzdEluZGV4Kyt9fWlmKGxhc3RMYXN0SW5kZXg9PT1zdHJp
bmcubGVuZ3RoKXtpZihsYXN0TGVuZ3RofHwhc2VwYXJhdG9yLnRlc3QoIiIpKXtvdXRwdXQucHVz
aCgiIil9fWVsc2V7b3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKX1yZXR1
cm4gb3V0cHV0Lmxlbmd0aD5saW1pdD9vdXRwdXQuc2xpY2UoMCxsaW1pdCk6b3V0cHV0fX0pKCl9
ZWxzZSBpZigiMCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aCl7U3RyaW5nLnByb3RvdHlwZS5zcGxp
dD1mdW5jdGlvbihzZXBhcmF0b3IsbGltaXQpe2lmKHNlcGFyYXRvcj09PXZvaWQgMCYmbGltaXQ9
PT0wKXJldHVybltdO3JldHVybiBzdHJpbmdfc3BsaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1p
ZigiIi5zdWJzdHImJiIwYiIuc3Vic3RyKC0xKSE9PSJiIil7dmFyIHN0cmluZ19zdWJzdHI9U3Ry
aW5nLnByb3RvdHlwZS5zdWJzdHI7U3RyaW5nLnByb3RvdHlwZS5zdWJzdHI9ZnVuY3Rpb24oc3Rh
cnQsbGVuZ3RoKXtyZXR1cm4gc3RyaW5nX3N1YnN0ci5jYWxsKHRoaXMsc3RhcnQ8MD8oc3RhcnQ9
dGhpcy5sZW5ndGgrc3RhcnQpPDA/MDpzdGFydDpzdGFydCxsZW5ndGgpfX12YXIgd3M9IiAgICBc
bgtcZlxyIFx4YTBcdTE2ODBcdTE4MGVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiKyJcdTIwMDRc
dTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMmZcdTIwNWZcdTMwMDBcdTIw
MjgiKyJcdTIwMjlcdWZlZmYiO2lmKCFTdHJpbmcucHJvdG90eXBlLnRyaW18fHdzLnRyaW0oKSl7
d3M9IlsiK3dzKyJdIjt2YXIgdHJpbUJlZ2luUmVnZXhwPW5ldyBSZWdFeHAoIl4iK3dzK3dzKyIq
IiksdHJpbUVuZFJlZ2V4cD1uZXcgUmVnRXhwKHdzK3dzKyIqJCIpO1N0cmluZy5wcm90b3R5cGUu
dHJpbT1mdW5jdGlvbiB0cmltKCl7aWYodGhpcz09PXZvaWQgMHx8dGhpcz09PW51bGwpe3Rocm93
IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIit0aGlzKyIgdG8gb2JqZWN0Iil9cmV0dXJu
IFN0cmluZyh0aGlzKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwiIikucmVwbGFjZSh0cmltRW5k
UmVnZXhwLCIiKX19ZnVuY3Rpb24gdG9JbnRlZ2VyKG4pe249K247aWYobiE9PW4pe249MH1lbHNl
IGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpNYXRoLmZsb29yKE1h
dGguYWJzKG4pKX1yZXR1cm4gbn1mdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCl7dmFyIHR5cGU9
dHlwZW9mIGlucHV0O3JldHVybiBpbnB1dD09PW51bGx8fHR5cGU9PT0idW5kZWZpbmVkInx8dHlw
ZT09PSJib29sZWFuInx8dHlwZT09PSJudW1iZXIifHx0eXBlPT09InN0cmluZyJ9ZnVuY3Rpb24g
dG9QcmltaXRpdmUoaW5wdXQpe3ZhciB2YWwsdmFsdWVPZix0b1N0cmluZztpZihpc1ByaW1pdGl2
ZShpbnB1dCkpe3JldHVybiBpbnB1dH12YWx1ZU9mPWlucHV0LnZhbHVlT2Y7aWYodHlwZW9mIHZh
bHVlT2Y9PT0iZnVuY3Rpb24iKXt2YWw9dmFsdWVPZi5jYWxsKGlucHV0KTtpZihpc1ByaW1pdGl2
ZSh2YWwpKXtyZXR1cm4gdmFsfX10b1N0cmluZz1pbnB1dC50b1N0cmluZztpZih0eXBlb2YgdG9T
dHJpbmc9PT0iZnVuY3Rpb24iKXt2YWw9dG9TdHJpbmcuY2FsbChpbnB1dCk7aWYoaXNQcmltaXRp
dmUodmFsKSl7cmV0dXJuIHZhbH19dGhyb3cgbmV3IFR5cGVFcnJvcn12YXIgdG9PYmplY3Q9ZnVu
Y3Rpb24obyl7aWYobz09bnVsbCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAi
K28rIiB0byBvYmplY3QiKX1yZXR1cm4gT2JqZWN0KG8pfX0pOworLy8jIHNvdXJjZU1hcHBpbmdV
Ukw9ZXM1LXNoaW0ubWFwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9MSUNFTlNFIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9MSUNFTlNFCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBlYTA2ODljODA1MzA2MjEzYTE3MDQxYWI1YTU1MDRkODAzNWViMWQKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L0xJQ0VO
U0UKQEAgLTAsMCArMSwxOSBAQAorQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVHdpdHRlciwgSW5j
IGFuZCBvdGhlcnMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy
Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQg
YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwK
K2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs
aW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz
aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29m
dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVy
bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKwor
VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh
bGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg
dGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V
VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJV
VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP
UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB
Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
IERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2luZGV4LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODg1OWQzNTY1
ZTA4YTc1ZGE4NmVjODY5YzRmZGU5NzA2MGJlNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9pbmRleC5qcwpAQCAtMCwwICsx
LDI5IEBACisvKiBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMuIExpY2Vuc2VkIHVuZGVyIFRo
ZSBNSVQgTGljZW5zZS4gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCAqLworCitk
ZWZpbmUoCisKKyAgWworICAgICcuL2xpYi9hZHZpY2UnLAorICAgICcuL2xpYi9jb21wb25lbnQn
LAorICAgICcuL2xpYi9jb21wb3NlJywKKyAgICAnLi9saWIvZGVidWcnLAorICAgICcuL2xpYi9s
b2dnZXInLAorICAgICcuL2xpYi9yZWdpc3RyeScsCisgICAgJy4vbGliL3V0aWxzJworICBdLAor
CisgIGZ1bmN0aW9uKGFkdmljZSwgY29tcG9uZW50LCBjb21wb3NlLCBkZWJ1ZywgbG9nZ2VyLCBy
ZWdpc3RyeSwgdXRpbHMpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICByZXR1cm4geworICAg
ICAgYWR2aWNlOiBhZHZpY2UsCisgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCwKKyAgICAgIGNv
bXBvc2U6IGNvbXBvc2UsCisgICAgICBkZWJ1ZzogZGVidWcsCisgICAgICBsb2dnZXI6IGxvZ2dl
ciwKKyAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSwKKyAgICAgIHV0aWxzOiB1dGlscworICAgIH07
CisKKyAgfQorKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9k
dWxlcy9mbGlnaHQvbGliL2FkdmljZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVf
bW9kdWxlcy9mbGlnaHQvbGliL2FkdmljZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzViMWI5MDFjNTkxYjA5
ZGRlNTYxMTU1ZTFjNjQxOWNjMzRmYWJiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvYWR2aWNlLmpzCkBAIC0wLDAgKzEs
NjYgQEAKKy8qIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYy4gTGljZW5zZWQgdW5kZXIgVGhl
IE1JVCBMaWNlbnNlLiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUICovCisKK2Rl
ZmluZSgKKworICBbCisgICAgJy4vdXRpbHMnCisgIF0sCisKKyAgZnVuY3Rpb24odXRpbHMpIHsK
KyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgYWR2aWNlID0geworCisgICAgICBhcm91bmQ6
IGZ1bmN0aW9uKGJhc2UsIHdyYXBwZWQpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBv
c2VkQXJvdW5kKCkgeworICAgICAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBi
ZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgICAgICB2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVu
Z3RoLCBhcmdzID0gbmV3IEFycmF5KGwgKyAxKTsKKyAgICAgICAgICBhcmdzWzBdID0gYmFzZS5i
aW5kKHRoaXMpOworICAgICAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAgICBh
cmdzW2kgKyAxXSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJu
IHdyYXBwZWQuYXBwbHkodGhpcywgYXJncyk7CisgICAgICAgIH07CisgICAgICB9LAorCisgICAg
ICBiZWZvcmU6IGZ1bmN0aW9uKGJhc2UsIGJlZm9yZSkgeworICAgICAgICB2YXIgYmVmb3JlRm4g
PSAodHlwZW9mIGJlZm9yZSA9PSAnZnVuY3Rpb24nKSA/IGJlZm9yZSA6IGJlZm9yZS5vYmpbYmVm
b3JlLmZuTmFtZV07CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEJlZm9yZSgpIHsK
KyAgICAgICAgICBiZWZvcmVGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgIHJl
dHVybiBiYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisgICAgICB9LAor
CisgICAgICBhZnRlcjogZnVuY3Rpb24oYmFzZSwgYWZ0ZXIpIHsKKyAgICAgICAgdmFyIGFmdGVy
Rm4gPSAodHlwZW9mIGFmdGVyID09ICdmdW5jdGlvbicpID8gYWZ0ZXIgOiBhZnRlci5vYmpbYWZ0
ZXIuZm5OYW1lXTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBvc2VkQWZ0ZXIoKSB7Cisg
ICAgICAgICAgdmFyIHJlcyA9IChiYXNlLnVuYm91bmQgfHwgYmFzZSkuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgICAgICBhZnRlckZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAgICAgIC8vIGEgbWl4
aW4gdGhhdCBhbGxvd3Mgb3RoZXIgbWl4aW5zIHRvIGF1Z21lbnQgZXhpc3RpbmcgZnVuY3Rpb25z
IGJ5IGFkZGluZyBhZGRpdGlvbmFsCisgICAgICAvLyBjb2RlIGJlZm9yZSwgYWZ0ZXIgb3IgYXJv
dW5kLgorICAgICAgd2l0aEFkdmljZTogZnVuY3Rpb24oKSB7CisgICAgICAgIFsnYmVmb3JlJywg
J2FmdGVyJywgJ2Fyb3VuZCddLmZvckVhY2goZnVuY3Rpb24obSkgeworICAgICAgICAgIHRoaXNb
bV0gPSBmdW5jdGlvbihtZXRob2QsIGZuKSB7CisKKyAgICAgICAgICAgIHV0aWxzLm11dGF0ZVBy
b3BlcnR5KHRoaXMsIG1ldGhvZCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIGlmICh0eXBl
b2YgdGhpc1ttZXRob2RdID09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgICAgICB0aGlzW21l
dGhvZF0gPSBhZHZpY2VbbV0odGhpc1ttZXRob2RdLCBmbik7CisgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGhpc1ttZXRob2RdID0gZm47CisgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICByZXR1cm4gdGhpc1ttZXRob2RdOworICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICB9OworICAgICAgICB9LCB0aGlzKTsKKyAgICAgIH0KKyAgICB9OworCisgICAg
cmV0dXJuIGFkdmljZTsKKyAgfQorKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9iYXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExYjRlYjYz
NTUzYTQzOThkMGM2ZWY2MjI1MmRiNzc2MWM2MDhhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9iYXNlLmpzCkBAIC0w
LDAgKzEsMzA5IEBACisvKiBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMuIExpY2Vuc2VkIHVu
ZGVyIFRoZSBNSVQgTGljZW5zZS4gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCAq
LworCitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJywKKyAgICAnLi9yZWdpc3RyeScsCisg
ICAgJy4vZGVidWcnCisgIF0sCisKKyAgZnVuY3Rpb24odXRpbHMsIHJlZ2lzdHJ5LCBkZWJ1Zykg
eworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8vIGNvbW1vbiBtaXhpbiBhbGxvY2F0ZXMgYmFz
aWMgZnVuY3Rpb25hbGl0eSAtIHVzZWQgYnkgYWxsIGNvbXBvbmVudCBwcm90b3R5cGVzCisgICAg
Ly8gY2FsbGJhY2sgY29udGV4dCBpcyBib3VuZCB0byBjb21wb25lbnQKKyAgICB2YXIgY29tcG9u
ZW50SWQgPSAwOworCisgICAgZnVuY3Rpb24gdGVhcmRvd25JbnN0YW5jZShpbnN0YW5jZUluZm8p
IHsKKyAgICAgIGluc3RhbmNlSW5mby5ldmVudHMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgICAgIHZhciBhcmdzID0gW2V2ZW50LnR5cGVdOworCisgICAgICAgIGV2ZW50
LmVsZW1lbnQgJiYgYXJncy51bnNoaWZ0KGV2ZW50LmVsZW1lbnQpOworICAgICAgICAodHlwZW9m
IGV2ZW50LmNhbGxiYWNrID09ICdmdW5jdGlvbicpICYmIGFyZ3MucHVzaChldmVudC5jYWxsYmFj
ayk7CisKKyAgICAgICAgdGhpcy5vZmYuYXBwbHkodGhpcywgYXJncyk7CisgICAgICB9LCBpbnN0
YW5jZUluZm8uaW5zdGFuY2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrU2VyaWFsaXph
YmxlKHR5cGUsIGRhdGEpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHdpbmRvdy5wb3N0TWVzc2Fn
ZShkYXRhLCAnKicpOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBjb25zb2xlLmxvZygn
dW5zZXJpYWxpemFibGUgZGF0YSBmb3IgZXZlbnQnLHR5cGUsJzonLGRhdGEpOworICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoCisgICAgICAgICAgWydUaGUgZXZlbnQnLCB0eXBlLCAnb24gY29tcG9u
ZW50JywgdGhpcy50b1N0cmluZygpLCAnd2FzIHRyaWdnZXJlZCB3aXRoIG5vbi1zZXJpYWxpemFi
bGUgZGF0YSddLmpvaW4oJyAnKQorICAgICAgICApOworICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIGluaXRBdHRyaWJ1dGVzKGF0dHJzKSB7CisgICAgICB2YXIgZGVmaW5lZEtleXMgPSBb
XSwgaW5jb21pbmdLZXlzOworCisgICAgICB0aGlzLmF0dHIgPSBuZXcgdGhpcy5hdHRyRGVmOwor
CisgICAgICBpZiAoZGVidWcuZW5hYmxlZCAmJiB3aW5kb3cuY29uc29sZSkgeworICAgICAgICBm
b3IgKHZhciBrZXkgaW4gdGhpcy5hdHRyRGVmLnByb3RvdHlwZSkgeworICAgICAgICAgIGRlZmlu
ZWRLZXlzLnB1c2goa2V5KTsKKyAgICAgICAgfQorICAgICAgICBpbmNvbWluZ0tleXMgPSBPYmpl
Y3Qua2V5cyhhdHRycyk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IGluY29taW5nS2V5cy5sZW5n
dGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgIGlmIChkZWZpbmVkS2V5cy5pbmRleE9m
KGluY29taW5nS2V5c1tpXSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFz
c2VkIHVudXNlZCBhdHRyaWJ1dGVzIGluY2x1ZGluZyAiJyArIGluY29taW5nS2V5c1tpXSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgJyIgdG8gY29tcG9uZW50ICInICsgdGhpcy50b1N0cmlu
ZygpICsgJyIuJyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIH0KKworICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuYXR0ckRlZi5wcm90b3R5cGUp
IHsKKyAgICAgICAgaWYgKHR5cGVvZiBhdHRyc1trZXldICA9PSAndW5kZWZpbmVkJykgeworICAg
ICAgICAgIGlmICh0aGlzLmF0dHJba2V5XSA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdSZXF1aXJlZCBhdHRyaWJ1dGUgIicgKyBrZXkgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICciIG5vdCBzcGVjaWZpZWQgaW4gYXR0YWNoVG8gZm9yIGNvbXBvbmVudCAi
JyArIHRoaXMudG9TdHJpbmcoKSArICciLicpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICB0aGlzLmF0dHJba2V5XSA9IGF0dHJzW2tleV07CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXR0cltrZXldID09ICdmdW5jdGlvbicpIHsKKyAgICAg
ICAgICB0aGlzLmF0dHJba2V5XSA9IHRoaXMuYXR0cltrZXldLmNhbGwodGhpcyk7CisgICAgICAg
IH0KKyAgICAgIH0KKworICAgIH0KKworICAgIGZ1bmN0aW9uIGluaXREZXByZWNhdGVkQXR0cmli
dXRlcyhhdHRycykgeworICAgICAgLy8gbWVyZ2UgZGVmYXVsdHMgd2l0aCBzdXBwbGllZCBvcHRp
b25zCisgICAgICAvLyBwdXQgb3B0aW9ucyBpbiBhdHRyLl9fcHJvdG9fXyB0byBhdm9pZCBtZXJn
ZSBvdmVyaGVhZAorICAgICAgdmFyIGF0dHIgPSBPYmplY3QuY3JlYXRlKGF0dHJzKTsKKworICAg
ICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGVmYXVsdHMpIHsKKyAgICAgICAgaWYgKCFhdHRycy5o
YXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgYXR0cltrZXldID0gdGhpcy5kZWZhdWx0
c1trZXldOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHRoaXMuYXR0ciA9IGF0dHI7CisK
KyAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGVmYXVsdHMgfHwge30pLmZvckVhY2goZnVuY3Rpb24o
a2V5KSB7CisgICAgICAgIGlmICh0aGlzLmRlZmF1bHRzW2tleV0gPT09IG51bGwgJiYgdGhpcy5h
dHRyW2tleV0gPT09IG51bGwpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVk
IGF0dHJpYnV0ZSAiJyArIGtleSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICciIG5vdCBz
cGVjaWZpZWQgaW4gYXR0YWNoVG8gZm9yIGNvbXBvbmVudCAiJyArIHRoaXMudG9TdHJpbmcoKSAr
ICciLicpOworICAgICAgICB9CisgICAgICB9LCB0aGlzKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBwcm94eUV2ZW50VG8odGFyZ2V0RXZlbnQpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbihlLCBk
YXRhKSB7CisgICAgICAgICQoZS50YXJnZXQpLnRyaWdnZXIodGFyZ2V0RXZlbnQsIGRhdGEpOwor
ICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB3aXRoQmFzZSgpIHsKKworICAgICAgLy8g
ZGVsZWdhdGUgdHJpZ2dlciwgYmluZCBhbmQgdW5iaW5kIHRvIGFuIGVsZW1lbnQKKyAgICAgIC8v
IGlmICRlbGVtZW50IG5vdCBzdXBwbGllZCwgdXNlIGNvbXBvbmVudCdzIG5vZGUKKyAgICAgIC8v
IG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uCisgICAgICAvLyBldmVudCBjYW4gYmUgZWl0
aGVyIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHR5cGUKKyAgICAgIC8vIG9mIHRoZSBldmVudCwg
b3IgYSBoYXNoIHNwZWNpZnlpbmcgYm90aCB0aGUgdHlwZQorICAgICAgLy8gYW5kIGEgZGVmYXVs
dCBmdW5jdGlvbiB0byBiZSBjYWxsZWQuCisgICAgICB0aGlzLnRyaWdnZXIgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyICRlbGVtZW50LCB0eXBlLCBkYXRhLCBldmVudCwgZGVmYXVsdEZuOwor
ICAgICAgICB2YXIgbGFzdEluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCAtIDEsIGxhc3RBcmcgPSBh
cmd1bWVudHNbbGFzdEluZGV4XTsKKworICAgICAgICBpZiAodHlwZW9mIGxhc3RBcmcgIT0gJ3N0
cmluZycgJiYgIShsYXN0QXJnICYmIGxhc3RBcmcuZGVmYXVsdEJlaGF2aW9yKSkgeworICAgICAg
ICAgIGxhc3RJbmRleC0tOworICAgICAgICAgIGRhdGEgPSBsYXN0QXJnOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGxhc3RJbmRleCA9PSAxKSB7CisgICAgICAgICAgJGVsZW1lbnQgPSAkKGFy
Z3VtZW50c1swXSk7CisgICAgICAgICAgZXZlbnQgPSBhcmd1bWVudHNbMV07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgJGVsZW1lbnQgPSB0aGlzLiRub2RlOworICAgICAgICAgIGV2ZW50
ID0gYXJndW1lbnRzWzBdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRC
ZWhhdmlvcikgeworICAgICAgICAgIGRlZmF1bHRGbiA9IGV2ZW50LmRlZmF1bHRCZWhhdmlvcjsK
KyAgICAgICAgICBldmVudCA9ICQuRXZlbnQoZXZlbnQudHlwZSk7CisgICAgICAgIH0KKworICAg
ICAgICB0eXBlID0gZXZlbnQudHlwZSB8fCBldmVudDsKKworICAgICAgICBpZiAoZGVidWcuZW5h
YmxlZCAmJiB3aW5kb3cucG9zdE1lc3NhZ2UpIHsKKyAgICAgICAgICBjaGVja1NlcmlhbGl6YWJs
ZS5jYWxsKHRoaXMsIHR5cGUsIGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVv
ZiB0aGlzLmF0dHIuZXZlbnREYXRhID09PSAnb2JqZWN0JykgeworICAgICAgICAgIGRhdGEgPSAk
LmV4dGVuZCh0cnVlLCB7fSwgdGhpcy5hdHRyLmV2ZW50RGF0YSwgZGF0YSk7CisgICAgICAgIH0K
KworICAgICAgICAkZWxlbWVudC50cmlnZ2VyKChldmVudCB8fCB0eXBlKSwgZGF0YSk7CisKKyAg
ICAgICAgaWYgKGRlZmF1bHRGbiAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHsKKyAg
ICAgICAgICAodGhpc1tkZWZhdWx0Rm5dIHx8IGRlZmF1bHRGbikuY2FsbCh0aGlzLCBldmVudCwg
ZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJGVsZW1lbnQ7CisgICAgICB9Owor
CisKKyAgICAgIHRoaXMub24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyICRlbGVtZW50LCB0
eXBlLCBjYWxsYmFjaywgb3JpZ2luYWxDYjsKKyAgICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3Vt
ZW50cy5sZW5ndGggLSAxLCBvcmlnaW4gPSBhcmd1bWVudHNbbGFzdEluZGV4XTsKKworICAgICAg
ICBpZiAodHlwZW9mIG9yaWdpbiA9PSAnb2JqZWN0JykgeworICAgICAgICAgIC8vZGVsZWdhdGUg
Y2FsbGJhY2sKKyAgICAgICAgICBvcmlnaW5hbENiID0gdXRpbHMuZGVsZWdhdGUoCisgICAgICAg
ICAgICB0aGlzLnJlc29sdmVEZWxlZ2F0ZVJ1bGVzKG9yaWdpbikKKyAgICAgICAgICApOworICAg
ICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcmlnaW4gPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICBv
cmlnaW5hbENiID0gcHJveHlFdmVudFRvKG9yaWdpbik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgb3JpZ2luYWxDYiA9IG9yaWdpbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXN0
SW5kZXggPT0gMikgeworICAgICAgICAgICRlbGVtZW50ID0gJChhcmd1bWVudHNbMF0pOworICAg
ICAgICAgIHR5cGUgPSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
JGVsZW1lbnQgPSB0aGlzLiRub2RlOworICAgICAgICAgIHR5cGUgPSBhcmd1bWVudHNbMF07Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsQ2IgIT0gJ2Z1bmN0aW9uJyAm
JiB0eXBlb2Ygb3JpZ2luYWxDYiAhPSAnb2JqZWN0JykgeworICAgICAgICAgIHRocm93IG5ldyBF
cnJvcignVW5hYmxlIHRvIGJpbmQgdG8gIicgKyB0eXBlICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJyIgYmVjYXVzZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24gb3Ig
YW4gb2JqZWN0Jyk7CisgICAgICAgIH0KKworICAgICAgICBjYWxsYmFjayA9IG9yaWdpbmFsQ2Iu
YmluZCh0aGlzKTsKKyAgICAgICAgY2FsbGJhY2sudGFyZ2V0ID0gb3JpZ2luYWxDYjsKKyAgICAg
ICAgY2FsbGJhY2suY29udGV4dCA9IHRoaXM7CisKKyAgICAgICAgJGVsZW1lbnQub24odHlwZSwg
Y2FsbGJhY2spOworCisgICAgICAgIC8vIHN0b3JlIGV2ZXJ5IGJvdW5kIHZlcnNpb24gb2YgdGhl
IGNhbGxiYWNrCisgICAgICAgIG9yaWdpbmFsQ2IuYm91bmQgfHwgKG9yaWdpbmFsQ2IuYm91bmQg
PSBbXSk7CisgICAgICAgIG9yaWdpbmFsQ2IuYm91bmQucHVzaChjYWxsYmFjayk7CisKKyAgICAg
ICAgcmV0dXJuIGNhbGxiYWNrOworICAgICAgfTsKKworICAgICAgdGhpcy5vZmYgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyICRlbGVtZW50LCB0eXBlLCBjYWxsYmFjazsKKyAgICAgICAgdmFy
IGxhc3RJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOworCisgICAgICAgIGlmICh0eXBlb2Yg
YXJndW1lbnRzW2xhc3RJbmRleF0gPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgIGNhbGxiYWNr
ID0gYXJndW1lbnRzW2xhc3RJbmRleF07CisgICAgICAgICAgbGFzdEluZGV4IC09IDE7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobGFzdEluZGV4ID09IDEpIHsKKyAgICAgICAgICAkZWxlbWVu
dCA9ICQoYXJndW1lbnRzWzBdKTsKKyAgICAgICAgICB0eXBlID0gYXJndW1lbnRzWzFdOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKKyAgICAgICAg
ICB0eXBlID0gYXJndW1lbnRzWzBdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNhbGxiYWNr
KSB7CisgICAgICAgICAgLy90aGlzIGNhbGxiYWNrIG1heSBiZSB0aGUgb3JpZ2luYWwgZnVuY3Rp
b24gb3IgYSBib3VuZCB2ZXJzaW9uCisgICAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb25zID0gY2Fs
bGJhY2sudGFyZ2V0ID8gY2FsbGJhY2sudGFyZ2V0LmJvdW5kIDogY2FsbGJhY2suYm91bmQgfHwg
W107CisgICAgICAgICAgLy9zZXQgY2FsbGJhY2sgdG8gdmVyc2lvbiBib3VuZCBhZ2FpbnN0IHRo
aXMgaW5zdGFuY2UKKyAgICAgICAgICBib3VuZEZ1bmN0aW9ucyAmJiBib3VuZEZ1bmN0aW9ucy5z
b21lKGZ1bmN0aW9uKGZuLCBpLCBhcnIpIHsKKyAgICAgICAgICAgIGlmIChmbi5jb250ZXh0ICYm
ICh0aGlzLmlkZW50aXR5ID09IGZuLmNvbnRleHQuaWRlbnRpdHkpKSB7CisgICAgICAgICAgICAg
IGFyci5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgIGNhbGxiYWNrID0gZm47CisgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHRoaXMpOwor
ICAgICAgICAgICRlbGVtZW50Lm9mZih0eXBlLCBjYWxsYmFjayk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBldmVudHMgb2YgYHRoaXNgIGluc3RhbmNl
CisgICAgICAgICAgLy8gYW5kIHVuYmluZCB1c2luZyB0aGUgY2FsbGJhY2sKKyAgICAgICAgICBy
ZWdpc3RyeS5maW5kSW5zdGFuY2VJbmZvKHRoaXMpLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChl
dmVudCkgeworICAgICAgICAgICAgaWYgKHR5cGUgPT0gZXZlbnQudHlwZSkgeworICAgICAgICAg
ICAgICAkZWxlbWVudC5vZmYodHlwZSwgZXZlbnQuY2FsbGJhY2spOworICAgICAgICAgICAgfQor
ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICRlbGVtZW50OworICAg
ICAgfTsKKworICAgICAgdGhpcy5yZXNvbHZlRGVsZWdhdGVSdWxlcyA9IGZ1bmN0aW9uKHJ1bGVJ
bmZvKSB7CisgICAgICAgIHZhciBydWxlcyA9IHt9OworCisgICAgICAgIE9iamVjdC5rZXlzKHJ1
bGVJbmZvKS5mb3JFYWNoKGZ1bmN0aW9uKHIpIHsKKyAgICAgICAgICBpZiAoIShyIGluIHRoaXMu
YXR0cikpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50ICInICsgdGhp
cy50b1N0cmluZygpICsgJyIgd2FudHMgdG8gbGlzdGVuIG9uICInICsgciArICciIGJ1dCBubyBz
dWNoIGF0dHJpYnV0ZSB3YXMgZGVmaW5lZC4nKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcnVs
ZXNbdGhpcy5hdHRyW3JdXSA9ICh0eXBlb2YgcnVsZUluZm9bcl0gPT0gJ3N0cmluZycpID8gcHJv
eHlFdmVudFRvKHJ1bGVJbmZvW3JdKSA6IHJ1bGVJbmZvW3JdOworICAgICAgICB9LCB0aGlzKTsK
KworICAgICAgICByZXR1cm4gcnVsZXM7CisgICAgICB9OworCisgICAgICB0aGlzLnNlbGVjdCA9
IGZ1bmN0aW9uKGF0dHJpYnV0ZUtleSkgeworICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5maW5k
KHRoaXMuYXR0clthdHRyaWJ1dGVLZXldKTsKKyAgICAgIH07CisKKyAgICAgIC8vIE5ldy1zdHls
ZSBhdHRyaWJ1dGVzCisKKyAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGZ1bmN0aW9uKGF0dHJzKSB7
CisKKyAgICAgICAgdmFyIEF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpIHt9OworCisgICAgICAgIGlm
ICh0aGlzLmF0dHJEZWYpIHsKKyAgICAgICAgICBBdHRyaWJ1dGVzLnByb3RvdHlwZSA9IG5ldyB0
aGlzLmF0dHJEZWY7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBuYW1lIGluIGF0dHJz
KSB7CisgICAgICAgICAgQXR0cmlidXRlcy5wcm90b3R5cGVbbmFtZV0gPSBhdHRyc1tuYW1lXTsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYXR0ckRlZiA9IEF0dHJpYnV0ZXM7CisgICAgICB9
OworCisgICAgICAvLyBEZXByZWNhdGVkIGF0dHJpYnV0ZXMKKworICAgICAgdGhpcy5kZWZhdWx0
QXR0cnMgPSBmdW5jdGlvbihkZWZhdWx0cykgeworICAgICAgICB1dGlscy5wdXNoKHRoaXMuZGVm
YXVsdHMsIGRlZmF1bHRzLCB0cnVlKSB8fCAodGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzKTsKKyAg
ICAgIH07CisKKyAgICAgIHRoaXMuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKG5vZGUsIGF0dHJzKSB7
CisgICAgICAgIGF0dHJzID0gYXR0cnMgfHwge307CisgICAgICAgIHRoaXMuaWRlbnRpdHkgfHwg
KHRoaXMuaWRlbnRpdHkgPSBjb21wb25lbnRJZCsrKTsKKworICAgICAgICBpZiAoIW5vZGUpIHsK
KyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBuZWVkcyBhIG5vZGUnKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChub2RlLmpxdWVyeSkgeworICAgICAgICAgIHRoaXMubm9k
ZSA9IG5vZGVbMF07CisgICAgICAgICAgdGhpcy4kbm9kZSA9IG5vZGU7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsKKyAgICAgICAgICB0aGlzLiRub2RlID0g
JChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmF0dHJEZWYpIHsKKyAgICAg
ICAgICBpbml0QXR0cmlidXRlcy5jYWxsKHRoaXMsIGF0dHJzKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICBpbml0RGVwcmVjYXRlZEF0dHJpYnV0ZXMuY2FsbCh0aGlzLCBhdHRycyk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH07CisKKyAgICAgIHRoaXMu
dGVhcmRvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVhcmRvd25JbnN0YW5jZShyZWdpc3Ry
eS5maW5kSW5zdGFuY2VJbmZvKHRoaXMpKTsKKyAgICAgIH07CisgICAgfQorCisgICAgcmV0dXJu
IHdpdGhCYXNlOworICB9CispOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvY29tcG9uZW50LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvY29tcG9uZW50LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM2
MWY4ODAxMTM4ODVjYmNmNWIzMjVjYzQ2MDJjNDY0MjQ3YWY1YzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9jb21wb25l
bnQuanMKQEAgLTAsMCArMSwxMjcgQEAKKy8qIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYy4g
TGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlLiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj
ZW5zZXMvTUlUICovCisKK2RlZmluZSgKKworICBbCisgICAgJy4vYWR2aWNlJywKKyAgICAnLi91
dGlscycsCisgICAgJy4vY29tcG9zZScsCisgICAgJy4vYmFzZScsCisgICAgJy4vcmVnaXN0cnkn
LAorICAgICcuL2xvZ2dlcicsCisgICAgJy4vZGVidWcnCisgIF0sCisKKyAgZnVuY3Rpb24oYWR2
aWNlLCB1dGlscywgY29tcG9zZSwgd2l0aEJhc2UsIHJlZ2lzdHJ5LCB3aXRoTG9nZ2luZywgZGVi
dWcpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgZnVuY3Rpb25OYW1lUmVnRXggPSAv
ZnVuY3Rpb24gKC4qPylccz9cKC87CisKKyAgICAvLyB0ZWFyZG93biBmb3IgYWxsIGluc3RhbmNl
cyBvZiB0aGlzIGNvbnN0cnVjdG9yCisgICAgZnVuY3Rpb24gdGVhcmRvd25BbGwoKSB7CisgICAg
ICB2YXIgY29tcG9uZW50SW5mbyA9IHJlZ2lzdHJ5LmZpbmRDb21wb25lbnRJbmZvKHRoaXMpOwor
CisgICAgICBjb21wb25lbnRJbmZvICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudEluZm8uaW5zdGFu
Y2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKKyAgICAgICAgdmFyIGluZm8gPSBjb21wb25lbnRJ
bmZvLmluc3RhbmNlc1trXTsKKyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IGEgcHJldmlv
dXMgdGVhcmRvd24gY2F1c2VkIGFub3RoZXIgY29tcG9uZW50IHRvIHRlYXJkb3duLAorICAgICAg
ICAvLyBzbyB3ZSBjYW4ndCBhc3N1bWUgdGhhdCB0aGUgaW5zdGFuY2VzIG9iamVjdCBpcyBhcyBp
dCB3YXMuCisgICAgICAgIGlmIChpbmZvICYmIGluZm8uaW5zdGFuY2UpIHsKKyAgICAgICAgICBp
bmZvLmluc3RhbmNlLnRlYXJkb3duKCk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGF0dGFjaFRvKHNlbGVjdG9yLyosIG9wdGlvbnMgYXJncyAqLykgeworICAg
ICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgorICAg
ICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXko
bCAtIDEpOworICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgYXJn
c1tpIC0gMV0gPSBhcmd1bWVudHNbaV07CisgICAgICB9CisKKyAgICAgIGlmICghc2VsZWN0b3Ip
IHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgbmVlZHMgdG8gYmUgYXR0YWNo
VG9cJ2QgYSBqUXVlcnkgb2JqZWN0LCBuYXRpdmUgbm9kZSBvciBzZWxlY3RvciBzdHJpbmcnKTsK
KyAgICAgIH0KKworICAgICAgdmFyIG9wdGlvbnMgPSB1dGlscy5tZXJnZS5hcHBseSh1dGlscywg
YXJncyk7CisgICAgICB2YXIgY29tcG9uZW50SW5mbyA9IHJlZ2lzdHJ5LmZpbmRDb21wb25lbnRJ
bmZvKHRoaXMpOworCisgICAgICAkKHNlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uKGksIG5vZGUpIHsK
KyAgICAgICAgaWYgKGNvbXBvbmVudEluZm8gJiYgY29tcG9uZW50SW5mby5pc0F0dGFjaGVkVG8o
bm9kZSkpIHsKKyAgICAgICAgICAvLyBhbHJlYWR5IGF0dGFjaGVkCisgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgKG5ldyB0aGlzKS5pbml0aWFsaXplKG5vZGUsIG9wdGlv
bnMpOworICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwcmV0dHlQ
cmludE1peGlucygpIHsKKyAgICAgIC8vY291bGQgYmUgY2FsbGVkIGZyb20gY29uc3RydWN0b3Ig
b3IgY29uc3RydWN0b3IucHJvdG90eXBlCisgICAgICB2YXIgbWl4ZWRJbiA9IHRoaXMubWl4ZWRJ
biB8fCB0aGlzLnByb3RvdHlwZS5taXhlZEluIHx8IFtdOworICAgICAgcmV0dXJuIG1peGVkSW4u
bWFwKGZ1bmN0aW9uKG1peGluKSB7CisgICAgICAgIGlmIChtaXhpbi5uYW1lID09IG51bGwpIHsK
KyAgICAgICAgICAvLyBmdW5jdGlvbiBuYW1lIHByb3BlcnR5IG5vdCBzdXBwb3J0ZWQgYnkgdGhp
cyBicm93c2VyLCB1c2UgcmVnZXgKKyAgICAgICAgICB2YXIgbSA9IG1peGluLnRvU3RyaW5nKCku
bWF0Y2goZnVuY3Rpb25OYW1lUmVnRXgpOworICAgICAgICAgIHJldHVybiAobSAmJiBtWzFdKSA/
IG1bMV0gOiAnJzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gKG1peGluLm5h
bWUgIT0gJ3dpdGhCYXNlJykgPyBtaXhpbi5uYW1lIDogJyc7CisgICAgICAgIH0KKyAgICAgIH0p
LmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpOworICAgIH07CisKKworICAgIC8vIGRlZmluZSB0
aGUgY29uc3RydWN0b3IgZm9yIGEgY3VzdG9tIGNvbXBvbmVudCB0eXBlCisgICAgLy8gdGFrZXMg
YW4gdW5saW1pdGVkIG51bWJlciBvZiBtaXhpbiBmdW5jdGlvbnMgYXMgYXJndW1lbnRzCisgICAg
Ly8gdHlwaWNhbCBhcGkgY2FsbCB3aXRoIDMgbWl4aW5zOiBkZWZpbmUodGltZWxpbmUsIHdpdGhU
d2VldENhcGFiaWxpdHksIHdpdGhTY3JvbGxDYXBhYmlsaXR5KTsKKyAgICBmdW5jdGlvbiBkZWZp
bmUoLyptaXhpbnMqLykgeworICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJl
bmNobWFya2VkIGZhc3RlcgorICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAg
dmFyIG1peGlucyA9IG5ldyBBcnJheShsKTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsg
aSsrKSB7CisgICAgICAgIG1peGluc1tpXSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgIH0KKworICAg
ICAgdmFyIENvbXBvbmVudCA9IGZ1bmN0aW9uKCkge307CisKKyAgICAgIENvbXBvbmVudC50b1N0
cmluZyA9IENvbXBvbmVudC5wcm90b3R5cGUudG9TdHJpbmcgPSBwcmV0dHlQcmludE1peGluczsK
KyAgICAgIGlmIChkZWJ1Zy5lbmFibGVkKSB7CisgICAgICAgIENvbXBvbmVudC5kZXNjcmliZSA9
IENvbXBvbmVudC5wcm90b3R5cGUuZGVzY3JpYmUgPSBDb21wb25lbnQudG9TdHJpbmcoKTsKKyAg
ICAgIH0KKworICAgICAgLy8gJ29wdGlvbnMnIGlzIG9wdGlvbmFsIGhhc2ggdG8gYmUgbWVyZ2Vk
IHdpdGggJ2RlZmF1bHRzJyBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24KKyAgICAgIENvbXBv
bmVudC5hdHRhY2hUbyA9IGF0dGFjaFRvOworICAgICAgLy8gZW5hYmxlcyBleHRlbnNpb24gb2Yg
ZXhpc3RpbmcgImJhc2UiIENvbXBvbmVudHMKKyAgICAgIENvbXBvbmVudC5taXhpbiA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgbmV3Q29tcG9uZW50ID0gZGVmaW5lKCk7IC8vVE9ETzogZml4
IHByZXR0eSBwcmludAorICAgICAgICB2YXIgbmV3UHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShD
b21wb25lbnQucHJvdG90eXBlKTsKKyAgICAgICAgbmV3UHJvdG90eXBlLm1peGVkSW4gPSBbXS5j
b25jYXQoQ29tcG9uZW50LnByb3RvdHlwZS5taXhlZEluKTsKKyAgICAgICAgbmV3UHJvdG90eXBl
LmRlZmF1bHRzID0gdXRpbHMubWVyZ2UoQ29tcG9uZW50LnByb3RvdHlwZS5kZWZhdWx0cyk7Cisg
ICAgICAgIG5ld1Byb3RvdHlwZS5hdHRyRGVmID0gQ29tcG9uZW50LnByb3RvdHlwZS5hdHRyRGVm
OworICAgICAgICBjb21wb3NlLm1peGluKG5ld1Byb3RvdHlwZSwgYXJndW1lbnRzKTsKKyAgICAg
ICAgbmV3Q29tcG9uZW50LnByb3RvdHlwZSA9IG5ld1Byb3RvdHlwZTsKKyAgICAgICAgbmV3Q29t
cG9uZW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG5ld0NvbXBvbmVudDsKKyAgICAgICAgcmV0
dXJuIG5ld0NvbXBvbmVudDsKKyAgICAgIH07CisgICAgICBDb21wb25lbnQudGVhcmRvd25BbGwg
PSB0ZWFyZG93bkFsbDsKKworICAgICAgLy8gcHJlcGVuZCBjb21tb24gbWl4aW5zIHRvIHN1cHBs
aWVkIGxpc3QsIHRoZW4gbWl4aW4gYWxsIGZsYXZvcnMKKyAgICAgIGlmIChkZWJ1Zy5lbmFibGVk
KSB7CisgICAgICAgIG1peGlucy51bnNoaWZ0KHdpdGhMb2dnaW5nKTsKKyAgICAgIH0KKyAgICAg
IG1peGlucy51bnNoaWZ0KHdpdGhCYXNlLCBhZHZpY2Uud2l0aEFkdmljZSwgcmVnaXN0cnkud2l0
aFJlZ2lzdHJhdGlvbik7CisgICAgICBjb21wb3NlLm1peGluKENvbXBvbmVudC5wcm90b3R5cGUs
IG1peGlucyk7CisKKyAgICAgIHJldHVybiBDb21wb25lbnQ7CisgICAgfQorCisgICAgZGVmaW5l
LnRlYXJkb3duQWxsID0gZnVuY3Rpb24oKSB7CisgICAgICByZWdpc3RyeS5jb21wb25lbnRzLnNs
aWNlKCkuZm9yRWFjaChmdW5jdGlvbihjKSB7CisgICAgICAgIGMuY29tcG9uZW50LnRlYXJkb3du
QWxsKCk7CisgICAgICB9KTsKKyAgICAgIHJlZ2lzdHJ5LnJlc2V0KCk7CisgICAgfTsKKworICAg
IHJldHVybiBkZWZpbmU7CisgIH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvY29tcG9zZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
ODI1NTBjZjJmM2FlMTM3MjRmN2Q5M2RlOGIyOTcxMzg2N2RiMmQwCi0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvY29tcG9z
ZS5qcwpAQCAtMCwwICsxLDQxIEBACisvKiBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMuIExp
Y2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZS4gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu
c2VzL01JVCAqLworCitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJworICBdLAorCisgIGZ1
bmN0aW9uKHV0aWxzKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIGRvbnRMb2NrID0g
WydtaXhlZEluJywgJ2F0dHJEZWYnXTsKKworICAgIGZ1bmN0aW9uIHNldFdyaXRhYmlsaXR5KG9i
aiwgd3JpdGFibGUpIHsKKyAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAo
a2V5KSB7CisgICAgICAgIGlmIChkb250TG9jay5pbmRleE9mKGtleSkgPCAwKSB7CisgICAgICAg
ICAgdXRpbHMucHJvcGVydHlXcml0YWJpbGl0eShvYmosIGtleSwgd3JpdGFibGUpOworICAgICAg
ICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtaXhpbihiYXNlLCBtaXhpbnMp
IHsKKyAgICAgIGJhc2UubWl4ZWRJbiA9IGJhc2UuaGFzT3duUHJvcGVydHkoJ21peGVkSW4nKSA/
IGJhc2UubWl4ZWRJbiA6IFtdOworCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5s
ZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYmFzZS5taXhlZEluLmluZGV4T2YobWl4aW5zW2ld
KSA9PSAtMSkgeworICAgICAgICAgIHNldFdyaXRhYmlsaXR5KGJhc2UsIGZhbHNlKTsKKyAgICAg
ICAgICBtaXhpbnNbaV0uY2FsbChiYXNlKTsKKyAgICAgICAgICBiYXNlLm1peGVkSW4ucHVzaCht
aXhpbnNbaV0pOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHNldFdyaXRhYmlsaXR5KGJh
c2UsIHRydWUpOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICBtaXhpbjogbWl4aW4KKyAg
ICB9OworCisgIH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2Rl
X21vZHVsZXMvZmxpZ2h0L2xpYi9kZWJ1Zy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25v
ZGVfbW9kdWxlcy9mbGlnaHQvbGliL2RlYnVnLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlODMzMGY3ODA0MWIy
ODQ4YzAyYjM2YmZkMDY2YzE1MmM3ZmY0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9kZWJ1Zy5qcwpAQCAtMCwwICsx
LDE2MyBAQAorLyogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLiBMaWNlbnNlZCB1bmRlciBU
aGUgTUlUIExpY2Vuc2UuIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgKi8KKwor
ZGVmaW5lKAorCisgIFsnLi9yZWdpc3RyeSddLAorCisgIGZ1bmN0aW9uKHJlZ2lzdHJ5KSB7Cisg
ICAgJ3VzZSBzdHJpY3QnOworCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisgICAgLy8gU2VhcmNoIG9iamVjdCBtb2RlbAorICAgIC8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZnVuY3Rpb24gdHJhdmVy
c2UodXRpbCwgc2VhcmNoVGVybSwgb3B0aW9ucykgeworICAgICAgb3B0aW9ucyA9IG9wdGlvbnMg
fHwge307CisgICAgICB2YXIgb2JqID0gb3B0aW9ucy5vYmogfHwgd2luZG93OworICAgICAgdmFy
IHBhdGggPSBvcHRpb25zLnBhdGggfHwgKChvYmogPT0gd2luZG93KSA/ICd3aW5kb3cnIDogJycp
OworICAgICAgdmFyIHByb3BzID0gT2JqZWN0LmtleXMob2JqKTsKKyAgICAgIHByb3BzLmZvckVh
Y2goZnVuY3Rpb24ocHJvcCkgeworICAgICAgICBpZiAoKHRlc3RzW3V0aWxdIHx8IHV0aWwpKHNl
YXJjaFRlcm0sIG9iaiwgcHJvcCkpIHsKKyAgICAgICAgICBjb25zb2xlLmxvZyhbcGF0aCwgJy4n
LCBwcm9wXS5qb2luKCcnKSwgJy0+JywgWycoJywgdHlwZW9mIG9ialtwcm9wXSwgJyknXS5qb2lu
KCcnKSwgb2JqW3Byb3BdKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlw
ZS50b1N0cmluZy5jYWxsKG9ialtwcm9wXSkgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgKG9ialtw
cm9wXSAhPSBvYmopICYmIHBhdGguc3BsaXQoJy4nKS5pbmRleE9mKHByb3ApID09IC0xKSB7Cisg
ICAgICAgICAgdHJhdmVyc2UodXRpbCwgc2VhcmNoVGVybSwge29iajogb2JqW3Byb3BdLCBwYXRo
OiBbcGF0aCxwcm9wXS5qb2luKCcuJyl9KTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gc2VhcmNoKHV0aWwsIGV4cGVjdGVkLCBzZWFyY2hUZXJtLCBvcHRpb25z
KSB7CisgICAgICBpZiAoIWV4cGVjdGVkIHx8IHR5cGVvZiBzZWFyY2hUZXJtID09IGV4cGVjdGVk
KSB7CisgICAgICAgIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgY29uc29sZS5lcnJvcihbc2VhcmNoVGVybSwgJ211c3QgYmUnLCBl
eHBlY3RlZF0uam9pbignICcpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgdGVzdHMgPSB7
CisgICAgICAnbmFtZSc6IGZ1bmN0aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVybiBz
ZWFyY2hUZXJtID09IHByb3A7fSwKKyAgICAgICduYW1lQ29udGFpbnMnOiBmdW5jdGlvbihzZWFy
Y2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4gcHJvcC5pbmRleE9mKHNlYXJjaFRlcm0pID4gLTE7
fSwKKyAgICAgICd0eXBlJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJu
IG9ialtwcm9wXSBpbnN0YW5jZW9mIHNlYXJjaFRlcm07fSwKKyAgICAgICd2YWx1ZSc6IGZ1bmN0
aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVybiBvYmpbcHJvcF0gPT09IHNlYXJjaFRl
cm07fSwKKyAgICAgICd2YWx1ZUNvZXJjZWQnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHBy
b3ApIHtyZXR1cm4gb2JqW3Byb3BdID09IHNlYXJjaFRlcm07fQorICAgIH07CisKKyAgICBmdW5j
dGlvbiBieU5hbWUoc2VhcmNoVGVybSwgb3B0aW9ucykge3NlYXJjaCgnbmFtZScsICdzdHJpbmcn
LCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9CisgICAgZnVuY3Rpb24gYnlOYW1lQ29udGFpbnMoc2Vh
cmNoVGVybSwgb3B0aW9ucykge3NlYXJjaCgnbmFtZUNvbnRhaW5zJywgJ3N0cmluZycsIHNlYXJj
aFRlcm0sIG9wdGlvbnMpO30KKyAgICBmdW5jdGlvbiBieVR5cGUoc2VhcmNoVGVybSwgb3B0aW9u
cykge3NlYXJjaCgndHlwZScsICdmdW5jdGlvbicsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO30KKyAg
ICBmdW5jdGlvbiBieVZhbHVlKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3ZhbHVlJywg
bnVsbCwgc2VhcmNoVGVybSwgb3B0aW9ucyk7fQorICAgIGZ1bmN0aW9uIGJ5VmFsdWVDb2VyY2Vk
KHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3ZhbHVlQ29lcmNlZCcsIG51bGwsIHNlYXJj
aFRlcm0sIG9wdGlvbnMpO30KKyAgICBmdW5jdGlvbiBjdXN0b20oZm4sIG9wdGlvbnMpIHt0cmF2
ZXJzZShmbiwgbnVsbCwgb3B0aW9ucyk7fQorCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisgICAgLy8gRXZlbnQgbG9nZ2luZworICAgIC8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgdmFyIEFMTCA9ICdh
bGwnOyAvL25vIGZpbHRlcgorCisgICAgLy9sb2cgbm90aGluZyBieSBkZWZhdWx0CisgICAgdmFy
IGxvZ0ZpbHRlciA9IHsKKyAgICAgIGV2ZW50TmFtZXM6IFtdLAorICAgICAgYWN0aW9uczogW10K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBmaWx0ZXJFdmVudExvZ3NCeUFjdGlvbigvKmFjdGlvbnMq
LykgeworICAgICAgdmFyIGFjdGlvbnMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisKKyAg
ICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzLmxlbmd0aCB8fCAobG9nRmlsdGVyLmV2ZW50TmFtZXMg
PSBBTEwpOworICAgICAgbG9nRmlsdGVyLmFjdGlvbnMgPSBhY3Rpb25zLmxlbmd0aCA/IGFjdGlv
bnMgOiBBTEw7CisgICAgICBzYXZlTG9nRmlsdGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZmlsdGVyRXZlbnRMb2dzQnlOYW1lKC8qZXZlbnROYW1lcyovKSB7CisgICAgICB2YXIgZXZlbnRO
YW1lcyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKKworICAgICAgbG9nRmlsdGVyLmFjdGlv
bnMubGVuZ3RoIHx8IChsb2dGaWx0ZXIuYWN0aW9ucyA9IEFMTCk7CisgICAgICBsb2dGaWx0ZXIu
ZXZlbnROYW1lcyA9IGV2ZW50TmFtZXMubGVuZ3RoID8gZXZlbnROYW1lcyA6IEFMTDsKKyAgICAg
IHNhdmVMb2dGaWx0ZXIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBoaWRlQWxsRXZlbnRMb2dz
KCkgeworICAgICAgbG9nRmlsdGVyLmFjdGlvbnMgPSBbXTsKKyAgICAgIGxvZ0ZpbHRlci5ldmVu
dE5hbWVzID0gW107CisgICAgICBzYXZlTG9nRmlsdGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gc2hvd0FsbEV2ZW50TG9ncygpIHsKKyAgICAgIGxvZ0ZpbHRlci5hY3Rpb25zID0gQUxMOwor
ICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBBTEw7CisgICAgICBzYXZlTG9nRmlsdGVyKCk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gc2F2ZUxvZ0ZpbHRlcigpIHsKKyAgICAgIHRyeSB7Cisg
ICAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKSB7CisgICAgICAgICAgbG9jYWxTdG9yYWdl
LnNldEl0ZW0oJ2xvZ0ZpbHRlcl9ldmVudE5hbWVzJywgbG9nRmlsdGVyLmV2ZW50TmFtZXMpOwor
ICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsb2dGaWx0ZXJfYWN0aW9ucycsIGxvZ0Zp
bHRlci5hY3Rpb25zKTsKKyAgICAgICAgfQorICAgICAgfSBjYXRjaCAoaWdub3JlZCkge307Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcmV0cmlldmVMb2dGaWx0ZXIoKSB7CisgICAgICB2YXIgZXZl
bnROYW1lcywgYWN0aW9uczsKKyAgICAgIHRyeSB7CisgICAgICAgIGV2ZW50TmFtZXMgPSAod2lu
ZG93LmxvY2FsU3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9nRmlsdGVyX2V2ZW50
TmFtZXMnKSk7CisgICAgICAgIGFjdGlvbnMgPSAod2luZG93LmxvY2FsU3RvcmFnZSAmJiBsb2Nh
bFN0b3JhZ2UuZ2V0SXRlbSgnbG9nRmlsdGVyX2FjdGlvbnMnKSk7CisgICAgICB9IGNhdGNoIChp
Z25vcmVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGV2ZW50TmFtZXMgJiYg
KGxvZ0ZpbHRlci5ldmVudE5hbWVzID0gZXZlbnROYW1lcyk7CisgICAgICBhY3Rpb25zICYmIChs
b2dGaWx0ZXIuYWN0aW9ucyA9IGFjdGlvbnMpOworCisgICAgICAvLyByZWNvbnN0aXR1dGUgYXJy
YXlzIGluIHBsYWNlCisgICAgICBPYmplY3Qua2V5cyhsb2dGaWx0ZXIpLmZvckVhY2goZnVuY3Rp
b24oaykgeworICAgICAgICB2YXIgdGhpc1Byb3AgPSBsb2dGaWx0ZXJba107CisgICAgICAgIGlm
ICh0eXBlb2YgdGhpc1Byb3AgPT0gJ3N0cmluZycgJiYgdGhpc1Byb3AgIT09IEFMTCkgeworICAg
ICAgICAgIGxvZ0ZpbHRlcltrXSA9IHRoaXNQcm9wID8gdGhpc1Byb3Auc3BsaXQoJywnKSA6IFtd
OworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICBl
bmFibGU6IGZ1bmN0aW9uKGVuYWJsZSkgeworICAgICAgICB0aGlzLmVuYWJsZWQgPSAhIWVuYWJs
ZTsKKworICAgICAgICBpZiAoZW5hYmxlICYmIHdpbmRvdy5jb25zb2xlKSB7CisgICAgICAgICAg
Y29uc29sZS5pbmZvKCdCb290aW5nIGluIERFQlVHIG1vZGUnKTsKKyAgICAgICAgICBjb25zb2xl
LmluZm8oJ1lvdSBjYW4gY29uZmlndXJlIGV2ZW50IGxvZ2dpbmcgd2l0aCBERUJVRy5ldmVudHMu
bG9nQWxsKCkvbG9nTm9uZSgpL2xvZ0J5TmFtZSgpL2xvZ0J5QWN0aW9uKCknKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHJpZXZlTG9nRmlsdGVyKCk7CisKKyAgICAgICAgd2luZG93LkRFQlVH
ID0gdGhpczsKKyAgICAgIH0sCisKKyAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSwKKworICAgICAg
ZmluZDogeworICAgICAgICBieU5hbWU6IGJ5TmFtZSwKKyAgICAgICAgYnlOYW1lQ29udGFpbnM6
IGJ5TmFtZUNvbnRhaW5zLAorICAgICAgICBieVR5cGU6IGJ5VHlwZSwKKyAgICAgICAgYnlWYWx1
ZTogYnlWYWx1ZSwKKyAgICAgICAgYnlWYWx1ZUNvZXJjZWQ6IGJ5VmFsdWVDb2VyY2VkLAorICAg
ICAgICBjdXN0b206IGN1c3RvbQorICAgICAgfSwKKworICAgICAgZXZlbnRzOiB7CisgICAgICAg
IGxvZ0ZpbHRlcjogbG9nRmlsdGVyLAorCisgICAgICAgIC8vIEFjY2VwdHMgYW55IG51bWJlciBv
ZiBhY3Rpb24gYXJncworICAgICAgICAvLyBlLmcuIERFQlVHLmV2ZW50cy5sb2dCeUFjdGlvbigi
b24iLCAib2ZmIikKKyAgICAgICAgbG9nQnlBY3Rpb246IGZpbHRlckV2ZW50TG9nc0J5QWN0aW9u
LAorCisgICAgICAgIC8vIEFjY2VwdHMgYW55IG51bWJlciBvZiBldmVudCBuYW1lIGFyZ3MgKGlu
Yy4gcmVnZXggb3Igd2lsZGNhcmRzKQorICAgICAgICAvLyBlLmcuIERFQlVHLmV2ZW50cy5sb2dC
eU5hbWUoL3VpLiovLCAiKlRocmVhZCoiKTsKKyAgICAgICAgbG9nQnlOYW1lOiBmaWx0ZXJFdmVu
dExvZ3NCeU5hbWUsCisKKyAgICAgICAgbG9nQWxsOiBzaG93QWxsRXZlbnRMb2dzLAorICAgICAg
ICBsb2dOb25lOiBoaWRlQWxsRXZlbnRMb2dzCisgICAgICB9CisgICAgfTsKKyAgfQorKTsKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGli
L2xvZ2dlci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQv
bGliL2xvZ2dlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTJhMjg5ZWNkODY0MThmNjI0MDA5MWY5M2Y0MTVl
ZTgyMWEyMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9k
ZV9tb2R1bGVzL2ZsaWdodC9saWIvbG9nZ2VyLmpzCkBAIC0wLDAgKzEsOTggQEAKKy8qIENvcHly
aWdodCAyMDEzIFR3aXR0ZXIsIEluYy4gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlLiBo
dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUICovCisKK2RlZmluZSgKKworICBbCisg
ICAgJy4vdXRpbHMnCisgIF0sCisKKyAgZnVuY3Rpb24odXRpbHMpIHsKKyAgICAndXNlIHN0cmlj
dCc7CisKKyAgICB2YXIgYWN0aW9uU3ltYm9scyA9IHsKKyAgICAgIG9uOiAnPC0nLAorICAgICAg
dHJpZ2dlcjogJy0+JywKKyAgICAgIG9mZjogJ3ggJworICAgIH07CisKKyAgICBmdW5jdGlvbiBl
bGVtVG9TdHJpbmcoZWxlbSkgeworICAgICAgdmFyIHRhZ1N0ciA9IGVsZW0udGFnTmFtZSA/IGVs
ZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpIDogZWxlbS50b1N0cmluZygpOworICAgICAgdmFyIGNs
YXNzU3RyID0gZWxlbS5jbGFzc05hbWUgPyAnLicgKyAoZWxlbS5jbGFzc05hbWUpIDogJyc7Cisg
ICAgICB2YXIgcmVzdWx0ID0gdGFnU3RyICsgY2xhc3NTdHI7CisgICAgICByZXR1cm4gZWxlbS50
YWdOYW1lID8gWydcJycsICdcJyddLmpvaW4ocmVzdWx0KSA6IHJlc3VsdDsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBsb2coYWN0aW9uLCBjb21wb25lbnQsIGV2ZW50QXJncykgeworICAgICAgaWYg
KCF3aW5kb3cuREVCVUcgfHwgIXdpbmRvdy5ERUJVRy5lbmFibGVkKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKyAgICAgIHZhciBuYW1lLCBldmVudFR5cGUsIGVsZW0sIGZuLCBwYXlsb2Fk
LCBsb2dGaWx0ZXIsIHRvUmVnRXhwLCBhY3Rpb25Mb2dnYWJsZSwgbmFtZUxvZ2dhYmxlLCBpbmZv
OworCisgICAgICBpZiAodHlwZW9mIGV2ZW50QXJnc1tldmVudEFyZ3MubGVuZ3RoIC0gMV0gPT0g
J2Z1bmN0aW9uJykgeworICAgICAgICBmbiA9IGV2ZW50QXJncy5wb3AoKTsKKyAgICAgICAgZm4g
PSBmbi51bmJvdW5kIHx8IGZuOyAvLyB1c2UgdW5ib3VuZCB2ZXJzaW9uIGlmIGFueSAoYmV0dGVy
IGluZm8pCisgICAgICB9CisKKyAgICAgIGlmIChldmVudEFyZ3MubGVuZ3RoID09IDEpIHsKKyAg
ICAgICAgZWxlbSA9IGNvbXBvbmVudC4kbm9kZVswXTsKKyAgICAgICAgZXZlbnRUeXBlID0gZXZl
bnRBcmdzWzBdOworICAgICAgfSBlbHNlIGlmICgoZXZlbnRBcmdzLmxlbmd0aCA9PSAyKSAmJiB0
eXBlb2YgZXZlbnRBcmdzWzFdID09ICdvYmplY3QnICYmICFldmVudEFyZ3NbMV0udHlwZSkgewor
ICAgICAgICAvLzIgYXJncywgZmlyc3QgYXJnIGlzIG5vdCBlbGVtCisgICAgICAgIGVsZW0gPSBj
b21wb25lbnQuJG5vZGVbMF07CisgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50QXJnc1swXTsKKyAg
ICAgICAgaWYgKGFjdGlvbiA9PSAidHJpZ2dlciIpIHsKKyAgICAgICAgICBwYXlsb2FkID0gZXZl
bnRBcmdzWzFdOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAvLzIrIGFyZ3Ms
IGZpcnN0IGFyZyBpcyBlbGVtCisgICAgICAgIGVsZW0gPSBldmVudEFyZ3NbMF07CisgICAgICAg
IGV2ZW50VHlwZSA9IGV2ZW50QXJnc1sxXTsKKyAgICAgICAgaWYgKGFjdGlvbiA9PSAidHJpZ2dl
ciIpIHsKKyAgICAgICAgICBwYXlsb2FkID0gZXZlbnRBcmdzWzJdOworICAgICAgICB9CisgICAg
ICB9CisKKyAgICAgIG5hbWUgPSB0eXBlb2YgZXZlbnRUeXBlID09ICdvYmplY3QnID8gZXZlbnRU
eXBlLnR5cGUgOiBldmVudFR5cGU7CisKKyAgICAgIGxvZ0ZpbHRlciA9IERFQlVHLmV2ZW50cy5s
b2dGaWx0ZXI7CisKKyAgICAgIC8vIG5vIHJlZ2V4IGZvciB5b3UsIGFjdGlvbnMuLi4KKyAgICAg
IGFjdGlvbkxvZ2dhYmxlID0gbG9nRmlsdGVyLmFjdGlvbnMgPT0gJ2FsbCcgfHwgKGxvZ0ZpbHRl
ci5hY3Rpb25zLmluZGV4T2YoYWN0aW9uKSA+IC0xKTsKKyAgICAgIC8vIGV2ZW50IG5hbWUgZmls
dGVyIGFsbG93IHdpbGRjYXJkcyBvciByZWdleC4uLgorICAgICAgdG9SZWdFeHAgPSBmdW5jdGlv
bihleHByKSB7CisgICAgICAgIHJldHVybiBleHByLnRlc3QgPyBleHByIDogbmV3IFJlZ0V4cCgn
XicgKyBleHByLnJlcGxhY2UoL1wqL2csICcuKicpICsgJyQnKTsKKyAgICAgIH07CisgICAgICBu
YW1lTG9nZ2FibGUgPQorICAgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9PSAnYWxsJyB8fAor
ICAgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcy5zb21lKGZ1bmN0aW9uKGUpIHtyZXR1cm4gdG9S
ZWdFeHAoZSkudGVzdChuYW1lKTt9KTsKKworICAgICAgaWYgKGFjdGlvbkxvZ2dhYmxlICYmIG5h
bWVMb2dnYWJsZSkgeworICAgICAgICBpbmZvID0gW2FjdGlvblN5bWJvbHNbYWN0aW9uXSwgYWN0
aW9uLCAnWycgKyBuYW1lICsgJ10nXTsKKyAgICAgICAgcGF5bG9hZCAmJiBpbmZvLnB1c2gocGF5
bG9hZCk7CisgICAgICAgIGluZm8ucHVzaChlbGVtVG9TdHJpbmcoZWxlbSkpOworICAgICAgICBp
bmZvLnB1c2goY29tcG9uZW50LmNvbnN0cnVjdG9yLmRlc2NyaWJlLnNwbGl0KCcgJykuc2xpY2Uo
MCwzKS5qb2luKCcgJykpOworICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkICYmIGFjdGlv
biA9PSAndHJpZ2dlcicgJiYgY29uc29sZS5ncm91cENvbGxhcHNlZChhY3Rpb24sIG5hbWUpOwor
ICAgICAgICBjb25zb2xlLmluZm8uYXBwbHkoY29uc29sZSwgaW5mbyk7CisgICAgICB9CisgICAg
fQorCisgICAgZnVuY3Rpb24gd2l0aExvZ2dpbmcoKSB7CisgICAgICB0aGlzLmJlZm9yZSgndHJp
Z2dlcicsIGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coJ3RyaWdnZXInLCB0aGlzLCB1dGlscy50
b0FycmF5KGFyZ3VtZW50cykpOworICAgICAgfSk7CisgICAgICBpZiAoY29uc29sZS5ncm91cENv
bGxhcHNlZCkgeworICAgICAgICB0aGlzLmFmdGVyKCd0cmlnZ2VyJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpOworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICAg
IHRoaXMuYmVmb3JlKCdvbicsIGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coJ29uJywgdGhpcywg
dXRpbHMudG9BcnJheShhcmd1bWVudHMpKTsKKyAgICAgIH0pOworICAgICAgdGhpcy5iZWZvcmUo
J29mZicsIGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coJ29mZicsIHRoaXMsIHV0aWxzLnRvQXJy
YXkoYXJndW1lbnRzKSk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gd2l0aExvZ2dp
bmc7CisgIH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21v
ZHVsZXMvZmxpZ2h0L2xpYi9yZWdpc3RyeS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25v
ZGVfbW9kdWxlcy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2MDBiNTg2OTcx
MmZjY2JhZGFjZDRmZWRiNWVkZWY2ZjIwODEzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9yZWdpc3RyeS5qcwpAQCAt
MCwwICsxLDIyNCBAQAorLyogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLiBMaWNlbnNlZCB1
bmRlciBUaGUgTUlUIExpY2Vuc2UuIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQg
Ki8KKworZGVmaW5lKAorCisgIFtdLAorCisgIGZ1bmN0aW9uKCkgeworICAgICd1c2Ugc3RyaWN0
JzsKKworICAgIGZ1bmN0aW9uIHBhcnNlRXZlbnRBcmdzKGluc3RhbmNlLCBhcmdzKSB7CisgICAg
ICB2YXIgZWxlbWVudCwgdHlwZSwgY2FsbGJhY2s7CisgICAgICB2YXIgZW5kID0gYXJncy5sZW5n
dGg7CisKKyAgICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ2Z1bmN0aW9uJykgewor
ICAgICAgICBlbmQgLT0gMTsKKyAgICAgICAgY2FsbGJhY2sgPSBhcmdzW2VuZF07CisgICAgICB9
CisKKyAgICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ29iamVjdCcpIHsKKyAgICAg
ICAgZW5kIC09IDE7CisgICAgICB9CisKKyAgICAgIGlmIChlbmQgPT0gMikgeworICAgICAgICBl
bGVtZW50ID0gYXJnc1swXTsKKyAgICAgICAgdHlwZSA9IGFyZ3NbMV07CisgICAgICB9IGVsc2Ug
eworICAgICAgICBlbGVtZW50ID0gaW5zdGFuY2Uubm9kZTsKKyAgICAgICAgdHlwZSA9IGFyZ3Nb
MF07CisgICAgICB9CisKKyAgICAgIHJldHVybiB7CisgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQs
CisgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaworICAgICAg
fTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaEV2ZW50KGEsIGIpIHsKKyAgICAgIHJldHVy
biAoCisgICAgICAgIChhLmVsZW1lbnQgPT0gYi5lbGVtZW50KSAmJgorICAgICAgICAoYS50eXBl
ID09IGIudHlwZSkgJiYKKyAgICAgICAgKGIuY2FsbGJhY2sgPT0gbnVsbCB8fCAoYS5jYWxsYmFj
ayA9PSBiLmNhbGxiYWNrKSkKKyAgICAgICk7CisgICAgfQorCisgICAgZnVuY3Rpb24gUmVnaXN0
cnkoKSB7CisKKyAgICAgIHZhciByZWdpc3RyeSA9IHRoaXM7CisKKyAgICAgICh0aGlzLnJlc2V0
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuY29tcG9uZW50cyA9IFtdOworICAgICAgICB0
aGlzLmFsbEluc3RhbmNlcyA9IHt9OworICAgICAgICB0aGlzLmV2ZW50cyA9IFtdOworICAgICAg
fSkuY2FsbCh0aGlzKTsKKworICAgICAgZnVuY3Rpb24gQ29tcG9uZW50SW5mbyhjb21wb25lbnQp
IHsKKyAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgICAgIHRoaXMuYXR0
YWNoZWRUbyA9IFtdOworICAgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9OworCisgICAgICAgIHRo
aXMuYWRkSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICAgIHZhciBpbnN0
YW5jZUluZm8gPSBuZXcgSW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKKyAgICAgICAgICB0aGlzLmlu
c3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV0gPSBpbnN0YW5jZUluZm87CisgICAgICAgICAgdGhp
cy5hdHRhY2hlZFRvLnB1c2goaW5zdGFuY2Uubm9kZSk7CisKKyAgICAgICAgICByZXR1cm4gaW5z
dGFuY2VJbmZvOworICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVtb3ZlSW5zdGFuY2UgPSBm
dW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICAgIGRlbGV0ZSB0aGlzLmluc3RhbmNlc1tpbnN0
YW5jZS5pZGVudGl0eV07CisgICAgICAgICAgdmFyIGluZGV4T2ZOb2RlID0gdGhpcy5hdHRhY2hl
ZFRvLmluZGV4T2YoaW5zdGFuY2Uubm9kZSk7CisgICAgICAgICAgKGluZGV4T2ZOb2RlID4gLTEp
ICYmIHRoaXMuYXR0YWNoZWRUby5zcGxpY2UoaW5kZXhPZk5vZGUsIDEpOworCisgICAgICAgICAg
aWYgKCFPYmplY3Qua2V5cyh0aGlzLmluc3RhbmNlcykubGVuZ3RoKSB7CisgICAgICAgICAgICAv
L2lmIEkgaG9sZCBubyBtb3JlIGluc3RhbmNlcyByZW1vdmUgbWUgZnJvbSByZWdpc3RyeQorICAg
ICAgICAgICAgcmVnaXN0cnkucmVtb3ZlQ29tcG9uZW50SW5mbyh0aGlzKTsKKyAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5pc0F0dGFjaGVkVG8gPSBmdW5jdGlvbihub2Rl
KSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0YWNoZWRUby5pbmRleE9mKG5vZGUpID4gLTE7
CisgICAgICAgIH07CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIEluc3RhbmNlSW5mbyhpbnN0
YW5jZSkgeworICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7CisgICAgICAgIHRoaXMu
ZXZlbnRzID0gW107CisKKyAgICAgICAgdGhpcy5hZGRCaW5kID0gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKGV2ZW50KTsKKyAgICAgICAgICByZWdpc3RyeS5l
dmVudHMucHVzaChldmVudCk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZW1vdmVCaW5k
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMCwgZTsgZSA9IHRo
aXMuZXZlbnRzW2ldOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEV2ZW50KGUsIGV2ZW50
KSkgeworICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgfQorCisgICAgICB0aGlzLmFkZElu
c3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKKyAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRo
aXMuZmluZENvbXBvbmVudEluZm8oaW5zdGFuY2UpOworCisgICAgICAgIGlmICghY29tcG9uZW50
KSB7CisgICAgICAgICAgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEluZm8oaW5zdGFuY2UuY29u
c3RydWN0b3IpOworICAgICAgICAgIHRoaXMuY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgaW5zdCA9IGNvbXBvbmVudC5hZGRJbnN0YW5jZShpbnN0
YW5jZSk7CisKKyAgICAgICAgdGhpcy5hbGxJbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldID0g
aW5zdDsKKworICAgICAgICByZXR1cm4gY29tcG9uZW50OworICAgICAgfTsKKworICAgICAgdGhp
cy5yZW1vdmVJbnN0YW5jZSA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgICAgIC8vcmVtb3Zl
IGZyb20gY29tcG9uZW50IGluZm8KKyAgICAgICAgdmFyIGNvbXBvbmVudEluZm8gPSB0aGlzLmZp
bmRDb21wb25lbnRJbmZvKGluc3RhbmNlKTsKKyAgICAgICAgY29tcG9uZW50SW5mbyAmJiBjb21w
b25lbnRJbmZvLnJlbW92ZUluc3RhbmNlKGluc3RhbmNlKTsKKworICAgICAgICAvL3JlbW92ZSBm
cm9tIHJlZ2lzdHJ5CisgICAgICAgIGRlbGV0ZSB0aGlzLmFsbEluc3RhbmNlc1tpbnN0YW5jZS5p
ZGVudGl0eV07CisgICAgICB9OworCisgICAgICB0aGlzLnJlbW92ZUNvbXBvbmVudEluZm8gPSBm
dW5jdGlvbihjb21wb25lbnRJbmZvKSB7CisgICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29tcG9u
ZW50cy5pbmRleE9mKGNvbXBvbmVudEluZm8pOworICAgICAgICAoaW5kZXggPiAtMSkgJiYgdGhp
cy5jb21wb25lbnRzLnNwbGljZShpbmRleCwgMSk7CisgICAgICB9OworCisgICAgICB0aGlzLmZp
bmRDb21wb25lbnRJbmZvID0gZnVuY3Rpb24od2hpY2gpIHsKKyAgICAgICAgdmFyIGNvbXBvbmVu
dCA9IHdoaWNoLmF0dGFjaFRvID8gd2hpY2ggOiB3aGljaC5jb25zdHJ1Y3RvcjsKKworICAgICAg
ICBmb3IgKHZhciBpID0gMCwgYzsgYyA9IHRoaXMuY29tcG9uZW50c1tpXTsgaSsrKSB7CisgICAg
ICAgICAgaWYgKGMuY29tcG9uZW50ID09PSBjb21wb25lbnQpIHsKKyAgICAgICAgICAgIHJldHVy
biBjOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgfTsKKworICAgICAgdGhpcy5maW5kSW5zdGFuY2VJbmZvID0gZnVuY3Rpb24oaW5zdGFuY2Up
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYWxsSW5zdGFuY2VzW2luc3RhbmNlLmlkZW50aXR5XSB8
fCBudWxsOworICAgICAgfTsKKworICAgICAgdGhpcy5nZXRCb3VuZEV2ZW50TmFtZXMgPSBmdW5j
dGlvbihpbnN0YW5jZSkgeworICAgICAgICByZXR1cm4gdGhpcy5maW5kSW5zdGFuY2VJbmZvKGlu
c3RhbmNlKS5ldmVudHMubWFwKGZ1bmN0aW9uKGV2KSB7CisgICAgICAgICAgcmV0dXJuIGV2LnR5
cGU7CisgICAgICAgIH0pOworICAgICAgfTsKKworICAgICAgdGhpcy5maW5kSW5zdGFuY2VJbmZv
QnlOb2RlID0gZnVuY3Rpb24obm9kZSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAg
ICAgIE9iamVjdC5rZXlzKHRoaXMuYWxsSW5zdGFuY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsK
KyAgICAgICAgICB2YXIgdGhpc0luc3RhbmNlSW5mbyA9IHRoaXMuYWxsSW5zdGFuY2VzW2tdOwor
ICAgICAgICAgIGlmICh0aGlzSW5zdGFuY2VJbmZvLmluc3RhbmNlLm5vZGUgPT09IG5vZGUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXNJbnN0YW5jZUluZm8pOworICAgICAgICAgIH0K
KyAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9OworCisg
ICAgICB0aGlzLm9uID0gZnVuY3Rpb24oY29tcG9uZW50T24pIHsKKyAgICAgICAgdmFyIGluc3Rh
bmNlID0gcmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKSwgYm91bmRDYWxsYmFjazsKKwor
ICAgICAgICAvLyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQgYmVuY2htYXJrZWQgZmFzdGVy
CisgICAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aCwgaSA9IDE7CisgICAgICAgIHZhciBv
dGhlckFyZ3MgPSBuZXcgQXJyYXkobCAtIDEpOworICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykg
eworICAgICAgICAgIG90aGVyQXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaW5zdGFuY2UpIHsKKyAgICAgICAgICBib3VuZENhbGxiYWNrID0gY29t
cG9uZW50T24uYXBwbHkobnVsbCwgb3RoZXJBcmdzKTsKKyAgICAgICAgICBpZiAoYm91bmRDYWxs
YmFjaykgeworICAgICAgICAgICAgb3RoZXJBcmdzW290aGVyQXJncy5sZW5ndGggLSAxXSA9IGJv
dW5kQ2FsbGJhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBldmVudCA9IHBhcnNlRXZl
bnRBcmdzKHRoaXMsIG90aGVyQXJncyk7CisgICAgICAgICAgaW5zdGFuY2UuYWRkQmluZChldmVu
dCk7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIHRoaXMub2ZmID0gZnVuY3Rpb24oLypl
bCwgdHlwZSwgY2FsbGJhY2sqLykgeworICAgICAgICB2YXIgZXZlbnQgPSBwYXJzZUV2ZW50QXJn
cyh0aGlzLCBhcmd1bWVudHMpLAorICAgICAgICAgICAgaW5zdGFuY2UgPSByZWdpc3RyeS5maW5k
SW5zdGFuY2VJbmZvKHRoaXMpOworCisgICAgICAgIGlmIChpbnN0YW5jZSkgeworICAgICAgICAg
IGluc3RhbmNlLnJlbW92ZUJpbmQoZXZlbnQpOworICAgICAgICB9CisKKyAgICAgICAgLy9yZW1v
dmUgZnJvbSBnbG9iYWwgZXZlbnQgcmVnaXN0cnkKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGU7
IGUgPSByZWdpc3RyeS5ldmVudHNbaV07IGkrKykgeworICAgICAgICAgIGlmIChtYXRjaEV2ZW50
KGUsIGV2ZW50KSkgeworICAgICAgICAgICAgcmVnaXN0cnkuZXZlbnRzLnNwbGljZShpLCAxKTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIC8vIGRlYnVnIHRvb2xz
IG1heSB3YW50IHRvIGFkZCBhZHZpY2UgdG8gdHJpZ2dlcgorICAgICAgcmVnaXN0cnkudHJpZ2dl
ciA9IGZ1bmN0aW9uKCkge307CisKKyAgICAgIHRoaXMudGVhcmRvd24gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmVnaXN0cnkucmVtb3ZlSW5zdGFuY2UodGhpcyk7CisgICAgICB9OworCisgICAg
ICB0aGlzLndpdGhSZWdpc3RyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5hZnRl
cignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJlZ2lzdHJ5LmFkZEluc3Rh
bmNlKHRoaXMpOworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLmFyb3VuZCgnb24nLCByZWdp
c3RyeS5vbik7CisgICAgICAgIHRoaXMuYWZ0ZXIoJ29mZicsIHJlZ2lzdHJ5Lm9mZik7CisgICAg
ICAgIC8vZGVidWcgdG9vbHMgbWF5IHdhbnQgdG8gYWRkIGFkdmljZSB0byB0cmlnZ2VyCisgICAg
ICAgIHdpbmRvdy5ERUJVRyAmJiBERUJVRy5lbmFibGVkICYmIHRoaXMuYWZ0ZXIoJ3RyaWdnZXIn
LCByZWdpc3RyeS50cmlnZ2VyKTsKKyAgICAgICAgdGhpcy5hZnRlcigndGVhcmRvd24nLCB7b2Jq
OiByZWdpc3RyeSwgZm5OYW1lOiAndGVhcmRvd24nfSk7CisgICAgICB9OworCisgICAgfQorCisg
ICAgcmV0dXJuIG5ldyBSZWdpc3RyeTsKKyAgfQorKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL3V0aWxzLmpzIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvdXRpbHMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uM2IxMGI1NzRmMmY3YTY4ZGNjYTQ0MDRkNDZkMTIxZGYxYjVjODgwZgotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL3V0
aWxzLmpzCkBAIC0wLDAgKzEsMzA0IEBACisvKiBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMu
IExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZS4gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xp
Y2Vuc2VzL01JVCAqLworCitkZWZpbmUoCisKKyAgWycuL2RlYnVnJ10sCisKKyAgZnVuY3Rpb24o
ZGVidWcpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgREVGQVVMVF9JTlRFUlZBTCA9
IDEwMDsKKworICAgIGZ1bmN0aW9uIGNhbldyaXRlUHJvdGVjdCgpIHsKKyAgICAgIHZhciB3cml0
ZVByb3RlY3RTdXBwb3J0ZWQgPSBkZWJ1Zy5lbmFibGVkICYmICFPYmplY3QucHJvcGVydHlJc0Vu
dW1lcmFibGUoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicpOworICAgICAgaWYgKHdyaXRlUHJv
dGVjdFN1cHBvcnRlZCkgeworICAgICAgICAvL0lFOCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ig
aXMgYnVpbHQtaW4gYnV0IHRocm93cyBleGVwdGlvbiBvbiBub24gRE9NIG9iamVjdHMKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVj
dCwgJ2tleXMnKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiB3cml0ZVByb3RlY3RTdXBwb3J0
ZWQ7CisgICAgfQorCisgICAgdmFyIHV0aWxzID0geworCisgICAgICBpc0RvbU9iajogZnVuY3Rp
b24ob2JqKSB7CisgICAgICAgIHJldHVybiAhIShvYmoubm9kZVR5cGUgfHwgKG9iaiA9PT0gd2lu
ZG93KSk7CisgICAgICB9LAorCisgICAgICB0b0FycmF5OiBmdW5jdGlvbihvYmosIGZyb20pIHsK
KyAgICAgICAgZnJvbSA9IGZyb20gfHwgMDsKKyAgICAgICAgdmFyIGxlbiA9IG9iai5sZW5ndGgs
IGFyciA9IG5ldyBBcnJheShsZW4gLSBmcm9tKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGZyb207
IGkgPCBsZW47IGkrKykgeworICAgICAgICAgIGFycltpIC0gZnJvbV0gPSBvYmpbaV07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGFycjsKKyAgICAgIH0sCisKKyAgICAgIC8vIHJldHVybnMg
bmV3IG9iamVjdCByZXByZXNlbnRpbmcgbXVsdGlwbGUgb2JqZWN0cyBtZXJnZWQgdG9nZXRoZXIK
KyAgICAgIC8vIG9wdGlvbmFsIGZpbmFsIGFyZ3VtZW50IGlzIGJvb2xlYW4gd2hpY2ggc3BlY2lm
aWVzIGlmIG1lcmdlIGlzIHJlY3Vyc2l2ZQorICAgICAgLy8gb3JpZ2luYWwgb2JqZWN0cyBhcmUg
dW5tb2RpZmllZAorICAgICAgLy8KKyAgICAgIC8vIHVzYWdlOgorICAgICAgLy8gICB2YXIgYmFz
ZSA9IHthOjIsIGI6Nn07CisgICAgICAvLyAgIHZhciBleHRyYSA9IHtiOjMsIGM6NH07CisgICAg
ICAvLyAgIG1lcmdlKGJhc2UsIGV4dHJhKTsgLy97YToyLCBiOjMsIGM6NH0KKyAgICAgIC8vICAg
YmFzZTsgLy97YToyLCBiOjZ9CisgICAgICAvLworICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIs
IGI6Nn07CisgICAgICAvLyAgIHZhciBleHRyYSA9IHtiOjMsIGM6NH07CisgICAgICAvLyAgIHZh
ciBleHRyYUV4dHJhID0ge2E6NCwgZDo5fTsKKyAgICAgIC8vICAgbWVyZ2UoYmFzZSwgZXh0cmEs
IGV4dHJhRXh0cmEpOyAvL3thOjQsIGI6MywgYzo0LiBkOiA5fQorICAgICAgLy8gICBiYXNlOyAv
L3thOjIsIGI6Nn0KKyAgICAgIC8vCisgICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjp7YmI6
NCwgY2M6NX19OworICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YTo0LCBiOntjYzo3LCBkZDoxfX07
CisgICAgICAvLyAgIG1lcmdlKGJhc2UsIGV4dHJhLCB0cnVlKTsgLy97YTo0LCBiOntiYjo0LCBj
Yzo3LCBkZDoxfX0KKyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9CisKKyAgICAgIG1lcmdl
OiBmdW5jdGlvbigvKm9iajEsIG9iajIsLi4uLmRlZXBDb3B5Ki8pIHsKKyAgICAgICAgLy8gdW5w
YWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgorICAgICAgICB2YXIg
bCA9IGFyZ3VtZW50cy5sZW5ndGgsCisgICAgICAgICAgICBhcmdzID0gbmV3IEFycmF5KGwgKyAx
KTsKKworICAgICAgICBpZiAobCA9PT0gMCkgeworICAgICAgICAgIHJldHVybiB7fTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgICAgICAg
YXJnc1tpICsgMV0gPSBhcmd1bWVudHNbaV07CisgICAgICAgIH0KKworICAgICAgICAvL3N0YXJ0
IHdpdGggZW1wdHkgb2JqZWN0IHNvIGEgY29weSBpcyBjcmVhdGVkCisgICAgICAgIGFyZ3NbMF0g
PSB7fTsKKworICAgICAgICBpZiAoYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB0cnVlKSB7Cisg
ICAgICAgICAgLy9qcXVlcnkgZXh0ZW5kIHJlcXVpcmVzIGRlZXAgY29weSBhcyBmaXJzdCBhcmcK
KyAgICAgICAgICBhcmdzLnBvcCgpOworICAgICAgICAgIGFyZ3MudW5zaGlmdCh0cnVlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiAkLmV4dGVuZC5hcHBseSh1bmRlZmluZWQsIGFyZ3Mp
OworICAgICAgfSwKKworICAgICAgLy8gdXBkYXRlcyBiYXNlIGluIHBsYWNlIGJ5IGNvcHlpbmcg
cHJvcGVydGllcyBvZiBleHRyYSB0byBpdAorICAgICAgLy8gb3B0aW9uYWxseSBjbG9iYmVyIHBy
b3RlY3RlZAorICAgICAgLy8gdXNhZ2U6CisgICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2
fTsKKyAgICAgIC8vICAgdmFyIGV4dHJhID0ge2M6NH07CisgICAgICAvLyAgIHB1c2goYmFzZSwg
ZXh0cmEpOyAvL3thOjIsIGI6NiwgYzo0fQorICAgICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Niwg
Yzo0fQorICAgICAgLy8KKyAgICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OworICAgICAg
Ly8gICB2YXIgZXh0cmEgPSB7YjogNCBjOjR9OworICAgICAgLy8gICBwdXNoKGJhc2UsIGV4dHJh
LCB0cnVlKTsgLy9FcnJvciAoInV0aWxzLnB1c2ggYXR0ZW1wdGVkIHRvIG92ZXJ3cml0ZSAnYicg
d2hpbGUgcnVubmluZyBpbiBwcm90ZWN0ZWQgbW9kZSIpCisgICAgICAvLyAgIGJhc2U7IC8ve2E6
MiwgYjo2fQorICAgICAgLy8KKyAgICAgIC8vIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBrZXkgd2ls
bCBtZXJnZSByZWN1cnNpdmVseSB3aGVuIHByb3RlY3QgaXMgZmFsc2UKKyAgICAgIC8vIGVnOgor
ICAgICAgLy8gdmFyIGJhc2UgPSB7YToxNiwgYjp7YmI6NCwgY2M6MTB9fTsKKyAgICAgIC8vIHZh
ciBleHRyYSA9IHtiOntjYzoyNSwgZGQ6MTl9LCBjOjV9OworICAgICAgLy8gcHVzaChiYXNlLCBl
eHRyYSk7IC8ve2E6MTYsIHtiYjo0LCBjYzoyNSwgZGQ6MTl9LCBjOjV9CisgICAgICAvLworICAg
ICAgcHVzaDogZnVuY3Rpb24oYmFzZSwgZXh0cmEsIHByb3RlY3QpIHsKKyAgICAgICAgaWYgKGJh
c2UpIHsKKyAgICAgICAgICBPYmplY3Qua2V5cyhleHRyYSB8fCB7fSkuZm9yRWFjaChmdW5jdGlv
bihrZXkpIHsKKyAgICAgICAgICAgIGlmIChiYXNlW2tleV0gJiYgcHJvdGVjdCkgeworICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3V0aWxzLnB1c2ggYXR0ZW1wdGVkIHRvIG92ZXJ3cml0
ZSAiJyArIGtleSArICciIHdoaWxlIHJ1bm5pbmcgaW4gcHJvdGVjdGVkIG1vZGUnKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlW2tleV0gPT0gJ29iamVjdCcg
JiYgdHlwZW9mIGV4dHJhW2tleV0gPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgICAgLy8gcmVj
dXJzZQorICAgICAgICAgICAgICB0aGlzLnB1c2goYmFzZVtrZXldLCBleHRyYVtrZXldKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIC8vIG5vIHByb3RlY3QsIHNvIGV4dHJh
IHdpbnMKKyAgICAgICAgICAgICAgYmFzZVtrZXldID0gZXh0cmFba2V5XTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiYXNl
OworICAgICAgfSwKKworICAgICAgLy8gSWYgb2JqLmtleSBwb2ludHMgdG8gYW4gZW51bWVyYWJs
ZSBwcm9wZXJ0eSwgcmV0dXJuIGl0cyB2YWx1ZQorICAgICAgLy8gSWYgb2JqLmtleSBwb2ludHMg
dG8gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSwgcmV0dXJuIHVuZGVmaW5lZAorICAgICAgZ2V0
RW51bWVyYWJsZVByb3BlcnR5OiBmdW5jdGlvbihvYmosIGtleSkgeworICAgICAgICByZXR1cm4g
b2JqLnByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkgPyBvYmpba2V5XSA6IHVuZGVmaW5lZDsKKyAg
ICAgIH0sCisKKyAgICAgIC8vIGJ1aWxkIGEgZnVuY3Rpb24gZnJvbSBvdGhlciBmdW5jdGlvbihz
KQorICAgICAgLy8gdXRpbHMuY29tcG9zZShhLGIsYykgLT4gYShiKGMoKSkpOworICAgICAgLy8g
aW1wbGVtZW50YXRpb24gbGlmdGVkIGZyb20gdW5kZXJzY29yZS5qcyAoYykgMjAwOS0yMDEyIEpl
cmVteSBBc2hrZW5hcworICAgICAgY29tcG9zZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBm
dW5jcyA9IGFyZ3VtZW50czsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CisKKyAgICAgICAgICBmb3IgKHZhciBpID0gZnVuY3Mu
bGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGFyZ3MgPSBbZnVuY3NbaV0u
YXBwbHkodGhpcywgYXJncyldOworICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiBhcmdz
WzBdOworICAgICAgICB9OworICAgICAgfSwKKworICAgICAgLy8gQ2FuIG9ubHkgdW5pcXVlIGFy
cmF5cyBvZiBob21vZ2VuZW91cyBwcmltaXRpdmVzLCBlLmcuIGFuIGFycmF5IG9mIG9ubHkgc3Ry
aW5ncywgYW4gYXJyYXkgb2Ygb25seSBib29sZWFucywgb3IgYW4gYXJyYXkgb2Ygb25seSBudW1l
cmljcworICAgICAgdW5pcXVlQXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7CisgICAgICAgIHZhciB1
ID0ge30sIGEgPSBbXTsKKworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0
aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgIGlmICh1Lmhhc093blByb3BlcnR5KGFycmF5W2ld
KSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgYS5w
dXNoKGFycmF5W2ldKTsKKyAgICAgICAgICB1W2FycmF5W2ldXSA9IDE7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gYTsKKyAgICAgIH0sCisKKyAgICAgIGRlYm91bmNlOiBmdW5jdGlvbihm
dW5jLCB3YWl0LCBpbW1lZGlhdGUpIHsKKyAgICAgICAgaWYgKHR5cGVvZiB3YWl0ICE9ICdudW1i
ZXInKSB7CisgICAgICAgICAgd2FpdCA9IERFRkFVTFRfSU5URVJWQUw7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgdGltZW91dCwgcmVzdWx0OworCisgICAgICAgIHJldHVybiBmdW5jdGlvbigp
IHsKKyAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CisgICAg
ICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0aW1lb3V0ID0gbnVs
bDsKKyAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7CisgICAgICAgICAgICAgIHJlc3VsdCA9
IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsK
KyAgICAgICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDsKKworICAgICAg
ICAgIHRpbWVvdXQgJiYgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOworICAgICAgICAgIHRpbWVvdXQg
PSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTsKKworICAgICAgICAgIGlmIChjYWxsTm93KSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAgICAg
IH0KKworICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgICB9LAorCisg
ICAgICB0aHJvdHRsZTogZnVuY3Rpb24oZnVuYywgd2FpdCkgeworICAgICAgICBpZiAodHlwZW9m
IHdhaXQgIT0gJ251bWJlcicpIHsKKyAgICAgICAgICB3YWl0ID0gREVGQVVMVF9JTlRFUlZBTDsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBjb250ZXh0LCBhcmdzLCB0aW1lb3V0LCB0aHJvdHRs
aW5nLCBtb3JlLCByZXN1bHQ7CisgICAgICAgIHZhciB3aGVuRG9uZSA9IHRoaXMuZGVib3VuY2Uo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgbW9yZSA9IHRocm90dGxpbmcgPSBmYWxzZTsKKyAgICAg
ICAgfSwgd2FpdCk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGNv
bnRleHQgPSB0aGlzOyBhcmdzID0gYXJndW1lbnRzOworICAgICAgICAgIHZhciBsYXRlciA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBpZiAo
bW9yZSkgeworICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hlbkRvbmUoKTsKKyAgICAgICAgICB9Owor
CisgICAgICAgICAgaWYgKCF0aW1lb3V0KSB7CisgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGlt
ZW91dChsYXRlciwgd2FpdCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHRocm90dGxp
bmcpIHsKKyAgICAgICAgICAgIG1vcmUgPSB0cnVlOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aHJvdHRsaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBw
bHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2hlbkRvbmUoKTsK
KyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgfSwKKworICAgICAg
Y291bnRUaGVuOiBmdW5jdGlvbihudW0sIGJhc2UpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgICAgICAgIGlmICghLS1udW0pIHsgcmV0dXJuIGJhc2UuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsgfQorICAgICAgICB9OworICAgICAgfSwKKworICAgICAgZGVsZWdhdGU6IGZ1bmN0
aW9uKHJ1bGVzKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihlLCBkYXRhKSB7CisgICAgICAg
ICAgdmFyIHRhcmdldCA9ICQoZS50YXJnZXQpLCBwYXJlbnQ7CisKKyAgICAgICAgICBPYmplY3Qu
a2V5cyhydWxlcykuZm9yRWFjaChmdW5jdGlvbihzZWxlY3RvcikgeworICAgICAgICAgICAgaWYg
KCFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgJiYgKHBhcmVudCA9IHRhcmdldC5jbG9zZXN0KHNl
bGVjdG9yKSkubGVuZ3RoKSB7CisgICAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHt9OworICAg
ICAgICAgICAgICBkYXRhLmVsID0gcGFyZW50WzBdOworICAgICAgICAgICAgICByZXR1cm4gcnVs
ZXNbc2VsZWN0b3JdLmFwcGx5KHRoaXMsIFtlLCBkYXRhXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfSwgdGhpcyk7CisgICAgICAgIH07CisgICAgICB9LAorCisgICAgICAvLyBlbnN1cmVz
IHRoYXQgYSBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uY2UuCisgICAgICAvLyB1c2Fn
ZToKKyAgICAgIC8vIHdpbGwgb25seSBjcmVhdGUgdGhlIGFwcGxpY2F0aW9uIG9uY2UKKyAgICAg
IC8vICAgdmFyIGluaXRpYWxpemUgPSB1dGlscy5vbmNlKGNyZWF0ZUFwcGxpY2F0aW9uKQorICAg
ICAgLy8gICAgIGluaXRpYWxpemUoKTsKKyAgICAgIC8vICAgICBpbml0aWFsaXplKCk7CisgICAg
ICAvLworICAgICAgLy8gd2lsbCBvbmx5IGRlbGV0ZSBhIHJlY29yZCBvbmNlCisgICAgICAvLyAg
IHZhciBteUhhbmxkZXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAvLyAgICAgJC5hamF4KHt0eXBl
OiAnREVMRVRFJywgdXJsOiAnc29tZXVybC5jb20nLCBkYXRhOiB7aWQ6IDF9fSk7CisgICAgICAv
LyAgIH07CisgICAgICAvLyAgIHRoaXMub24oJ2NsaWNrJywgdXRpbHMub25jZShteUhhbmRsZXIp
KTsKKyAgICAgIC8vCisgICAgICBvbmNlOiBmdW5jdGlvbihmdW5jKSB7CisgICAgICAgIHZhciBy
YW4sIHJlc3VsdDsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYg
KHJhbikgeworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICB9CisKKyAgICAg
ICAgICByYW4gPSB0cnVlOworICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKworICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH07CisgICAgICB9
LAorCisgICAgICBwcm9wZXJ0eVdyaXRhYmlsaXR5OiBmdW5jdGlvbihvYmosIHByb3AsIHdyaXRh
YmxlKSB7CisgICAgICAgIGlmIChjYW5Xcml0ZVByb3RlY3QoKSAmJiBvYmouaGFzT3duUHJvcGVy
dHkocHJvcCkpIHsKKyAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7
IHdyaXRhYmxlOiB3cml0YWJsZSB9KTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgLy8g
UHJvcGVydHkgbG9ja2luZy91bmxvY2tpbmcKKyAgICAgIG11dGF0ZVByb3BlcnR5OiBmdW5jdGlv
bihvYmosIHByb3AsIG9wKSB7CisgICAgICAgIHZhciB3cml0YWJsZTsKKworICAgICAgICBpZiAo
IWNhbldyaXRlUHJvdGVjdCgpIHx8ICFvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsKKyAgICAg
ICAgICBvcC5jYWxsKG9iaik7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgd3JpdGFibGUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCku
d3JpdGFibGU7CisKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB3
cml0YWJsZTogdHJ1ZSB9KTsKKyAgICAgICAgb3AuY2FsbChvYmopOworICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7IHdyaXRhYmxlOiB3cml0YWJsZSB9KTsKKworICAg
ICAgfQorCisgICAgfTsKKworICAgIHJldHVybiB1dGlsczsKKyAgfQorKTsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvUkVBRE1FLm1kIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9SRUFETUUubWQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmEzMTc0YTc3ODFlMDg5MjhkMzkxNmU1NjdhYmZlYmQ2ZTk1MDAyYQotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkv
UkVBRE1FLm1kCkBAIC0wLDAgKzEsNjUgQEAKKyMgalF1ZXJ5CisKKz4galF1ZXJ5IGlzIGEgZmFz
dCwgc21hbGwsIGFuZCBmZWF0dXJlLXJpY2ggSmF2YVNjcmlwdCBsaWJyYXJ5LgorCitGb3IgaW5m
b3JtYXRpb24gb24gaG93IHRvIGdldCBzdGFydGVkIGFuZCBob3cgdG8gdXNlIGpRdWVyeSwgcGxl
YXNlIHNlZSBbalF1ZXJ5J3MgZG9jdW1lbnRhdGlvbl0oaHR0cDovL2FwaS5qcXVlcnkuY29tLyku
CitGb3Igc291cmNlIGZpbGVzIGFuZCBpc3N1ZXMsIHBsZWFzZSB2aXNpdCB0aGUgW2pRdWVyeSBy
ZXBvXShodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeSkuCisKKyMjIEluY2x1ZGluZyBq
UXVlcnkKKworQmVsb3cgYXJlIHNvbWUgb2YgdGhlIG1vc3QgY29tbW9uIHdheXMgdG8gaW5jbHVk
ZSBqUXVlcnkuCisKKyMjIyBCcm93c2VyCisKKyMjIyMgU2NyaXB0IHRhZworCitgYGBodG1sCis8
c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTIuMi4wLm1pbi5qcyI+
PC9zY3JpcHQ+CitgYGAKKworIyMjIyBCYWJlbAorCitbQmFiZWxdKGh0dHA6Ly9iYWJlbGpzLmlv
LykgaXMgYSBuZXh0IGdlbmVyYXRpb24gSmF2YVNjcmlwdCBjb21waWxlci4gT25lIG9mIHRoZSBm
ZWF0dXJlcyBpcyB0aGUgYWJpbGl0eSB0byB1c2UgRVM2L0VTMjAxNSBtb2R1bGVzIG5vdywgZXZl
biB0aG91Z2ggYnJvd3NlcnMgZG8gbm90IHlldCBzdXBwb3J0IHRoaXMgZmVhdHVyZSBuYXRpdmVs
eS4KKworYGBganMKK2ltcG9ydCAkIGZyb20gImpxdWVyeSI7CitgYGAKKworIyMjIyBCcm93c2Vy
aWZ5L1dlYnBhY2sKKworVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byB1c2UgW0Jyb3dzZXJpZnld
KGh0dHA6Ly9icm93c2VyaWZ5Lm9yZy8pIGFuZCBbV2VicGFja10oaHR0cHM6Ly93ZWJwYWNrLmdp
dGh1Yi5pby8pLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGVzZSB0b29scywgcGxl
YXNlIHJlZmVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb2plY3QncyBkb2N1bWVudGlvbi4gSW4g
dGhlIHNjcmlwdCwgaW5jbHVkaW5nIGpRdWVyeSB3aWxsIHVzdWFsbHkgbG9vayBsaWtlIHRoaXMu
Li4KKworYGBganMKK3ZhciAkID0gcmVxdWlyZSgianF1ZXJ5Iik7CitgYGAKKworIyMjIyBBTUQg
KEFzeW5jaHJvbm91cyBNb2R1bGUgRGVmaW5pdGlvbikKKworQU1EIGlzIGEgbW9kdWxlIGZvcm1h
dCBidWlsdCBmb3IgdGhlIGJyb3dzZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCB3ZSByZWNvbW1l
bmQgW3JlcXVpcmUuanMnIGRvY3VtZW50YXRpb25dKGh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3Mv
d2h5YW1kLmh0bWwpLgorCitgYGBqcworZGVmaW5lKFsianF1ZXJ5Il0sIGZ1bmN0aW9uKCQpIHsK
KworfSk7CitgYGAKKworIyMjIE5vZGUKKworVG8gaW5jbHVkZSBqUXVlcnkgaW4gW05vZGVdKG5v
ZGVqcy5vcmcpLCBmaXJzdCBpbnN0YWxsIHdpdGggbnBtLgorCitgYGBzaAorbnBtIGluc3RhbGwg
anF1ZXJ5CitgYGAKKworRm9yIGpRdWVyeSB0byB3b3JrIGluIE5vZGUsIGEgd2luZG93IHdpdGgg
YSBkb2N1bWVudCBpcyByZXF1aXJlZC4gU2luY2Ugbm8gc3VjaCB3aW5kb3cgZXhpc3RzIG5hdGl2
ZWx5IGluIE5vZGUsIG9uZSBjYW4gYmUgbW9ja2VkIGJ5IHRvb2xzIHN1Y2ggYXMgW2pzZG9tXSho
dHRwczovL2dpdGh1Yi5jb20vdG1wdmFyL2pzZG9tKS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciB0
ZXN0aW5nIHB1cnBvc2VzLgorCitgYGBqcworcmVxdWlyZSgianNkb20iKS5lbnYoIiIsIGZ1bmN0
aW9uKGVyciwgd2luZG93KSB7CisJaWYgKGVycikgeworCQljb25zb2xlLmVycm9yKGVycik7CisJ
CXJldHVybjsKKwl9CisKKwl2YXIgJCA9IHJlcXVpcmUoImpxdWVyeSIpKHdpbmRvdyk7Cit9KTsK
K2BgYApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2px
dWVyeS9kaXN0L2pxdWVyeS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9qcXVlcnkvZGlzdC9qcXVlcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU4YTVhOTUwZGNkY2YzY2FhZjA0
ZmM5ZjZiMWRjY2Q1MzE2YTlmYgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMKQEAgLTAsMCArMSw5ODE0
IEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjIuMi40CisgKiBodHRwOi8v
anF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMKKyAqIGh0dHA6Ly9zaXp6bGVq
cy5jb20vCisgKgorICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250
cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cDovL2px
dWVyeS5vcmcvbGljZW5zZQorICoKKyAqIERhdGU6IDIwMTYtMDUtMjBUMTc6MjNaCisgKi8KKwor
KGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7CisKKyAgICBpZiAoIHR5cGVvZiBtb2R1bGUg
PT09ICJvYmplY3QiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gIm9iamVjdCIgKSB7Cisg
ICAgICAgIC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hl
cmUgYSBwcm9wZXIgYHdpbmRvd2AKKyAgICAgICAgLy8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUg
ZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS4KKyAgICAgICAgLy8gRm9yIGVudmlyb25tZW50cyB0aGF0
IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGAKKyAgICAgICAgLy8gKHN1
Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuCisgICAg
ICAgIC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJl
YWwgYHdpbmRvd2AuCisgICAgICAgIC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoImpxdWVy
eSIpKHdpbmRvdyk7CisgICAgICAgIC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8u
CisgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID8KKyAgICAgICAgICAg
IGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDoKKyAgICAgICAgICAgIGZ1bmN0aW9uKCB3ICkgewor
ICAgICAgICAgICAgICAgIGlmICggIXcuZG9jdW1lbnQgKSB7CisgICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvciggImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1l
bnQiICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWN0b3J5
KCB3ICk7CisgICAgICAgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGZhY3RvcnkoIGds
b2JhbCApOworICAgIH0KKworLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5
ZXQKK30odHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5j
dGlvbiggd2luZG93LCBub0dsb2JhbCApIHsKKworLy8gU3VwcG9ydDogRmlyZWZveCAxOCsKKy8v
IENhbid0IGJlIGluIHN0cmljdCBtb2RlLCBzZXZlcmFsIGxpYnMgaW5jbHVkaW5nIEFTUC5ORVQg
dHJhY2UKKy8vIHRoZSBzdGFjayB2aWEgYXJndW1lbnRzLmNhbGxlci5jYWxsZWUgYW5kIEZpcmVm
b3ggZGllcyBpZgorLy8geW91IHRyeSB0byB0cmFjZSB0aHJvdWdoICJ1c2Ugc3RyaWN0IiBjYWxs
IGNoYWlucy4gKCMxMzMzNSkKKy8vInVzZSBzdHJpY3QiOwordmFyIGFyciA9IFtdOworCit2YXIg
ZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7CisKK3ZhciBzbGljZSA9IGFyci5zbGljZTsKKwor
dmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7CisKK3ZhciBwdXNoID0gYXJyLnB1c2g7CisKK3ZhciBp
bmRleE9mID0gYXJyLmluZGV4T2Y7CisKK3ZhciBjbGFzczJ0eXBlID0ge307CisKK3ZhciB0b1N0
cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7CisKK3ZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhh
c093blByb3BlcnR5OworCit2YXIgc3VwcG9ydCA9IHt9OworCisKKwordmFyCisgICAgdmVyc2lv
biA9ICIyLjIuNCIsCisKKyAgICAvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQorICAg
IGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKworICAgICAgICAvLyBU
aGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdl
bmhhbmNlZCcKKyAgICAgICAgLy8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3Qg
YWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZCkKKyAgICAgICAgcmV0dXJu
IG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKKyAgICB9LAorCisgICAg
Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjEKKyAgICAvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5k
IE5CU1AKKyAgICBydHJpbSA9IC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywK
KworICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZworICAgIHJtc1By
ZWZpeCA9IC9eLW1zLS8sCisgICAgcmRhc2hBbHBoYSA9IC8tKFtcZGEtel0pL2dpLAorCisgICAg
Ly8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKQorICAg
IGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIgKSB7CisgICAgICAgIHJldHVybiBs
ZXR0ZXIudG9VcHBlckNhc2UoKTsKKyAgICB9OworCitqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90
eXBlID0geworCisgICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNl
ZAorICAgIGpxdWVyeTogdmVyc2lvbiwKKworICAgIGNvbnN0cnVjdG9yOiBqUXVlcnksCisKKyAg
ICAvLyBTdGFydCB3aXRoIGFuIGVtcHR5IHNlbGVjdG9yCisgICAgc2VsZWN0b3I6ICIiLAorCisg
ICAgLy8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwCisgICAgbGVu
Z3RoOiAwLAorCisgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBzbGlj
ZS5jYWxsKCB0aGlzICk7CisgICAgfSwKKworICAgIC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4g
dGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKKyAgICAvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQg
ZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQorICAgIGdldDogZnVuY3Rpb24oIG51bSApIHsK
KyAgICAgICAgcmV0dXJuIG51bSAhPSBudWxsID8KKworICAgICAgICAgICAgLy8gUmV0dXJuIGp1
c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldAorICAgICAgICAgICAgKCBudW0gPCAwID8g
dGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdICkgOgorCisgICAgICAgICAg
ICAvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5CisgICAgICAgICAg
ICBzbGljZS5jYWxsKCB0aGlzICk7CisgICAgfSwKKworICAgIC8vIFRha2UgYW4gYXJyYXkgb2Yg
ZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2sKKyAgICAvLyAocmV0dXJuaW5nIHRo
ZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldCkKKyAgICBwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVt
cyApIHsKKworICAgICAgICAvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNl
dAorICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVs
ZW1zICk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChh
cyBhIHJlZmVyZW5jZSkKKyAgICAgICAgcmV0LnByZXZPYmplY3QgPSB0aGlzOworICAgICAgICBy
ZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKKworICAgICAgICAvLyBSZXR1cm4gdGhlIG5ld2x5
LWZvcm1lZCBlbGVtZW50IHNldAorICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICAv
LyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0
LgorICAgIGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVy
eS5lYWNoKCB0aGlzLCBjYWxsYmFjayApOworICAgIH0sCisKKyAgICBtYXA6IGZ1bmN0aW9uKCBj
YWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0
aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5j
YWxsKCBlbGVtLCBpLCBlbGVtICk7CisgICAgICAgIH0gKSApOworICAgIH0sCisKKyAgICBzbGlj
ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBw
bHkoIHRoaXMsIGFyZ3VtZW50cyApICk7CisgICAgfSwKKworICAgIGZpcnN0OiBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXEoIDAgKTsKKyAgICB9LAorCisgICAgbGFzdDogZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVxKCAtMSApOworICAgIH0sCisKKyAgICBl
cTogZnVuY3Rpb24oIGkgKSB7CisgICAgICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCwKKyAgICAg
ICAgICAgIGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7CisgICAgICAgIHJldHVybiB0aGlz
LnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTsKKyAg
ICB9LAorCisgICAgZW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHJldk9i
amVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7CisgICAgfSwKKworICAgIC8vIEZvciBpbnRlcm5h
bCB1c2Ugb25seS4KKyAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBs
aWtlIGEgalF1ZXJ5IG1ldGhvZC4KKyAgICBwdXNoOiBwdXNoLAorICAgIHNvcnQ6IGFyci5zb3J0
LAorICAgIHNwbGljZTogYXJyLnNwbGljZQorfTsKKworalF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5m
bi5leHRlbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5
LCBjb3B5SXNBcnJheSwgY2xvbmUsCisgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8
IHt9LAorICAgICAgICBpID0gMSwKKyAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwK
KyAgICAgICAgZGVlcCA9IGZhbHNlOworCisgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVh
dGlvbgorICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgeworICAgICAgICBk
ZWVwID0gdGFyZ2V0OworCisgICAgICAgIC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJn
ZXQKKyAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307CisgICAgICAgIGkrKzsK
KyAgICB9CisKKyAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBz
b21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKKyAgICBpZiAoIHR5cGVvZiB0YXJnZXQg
IT09ICJvYmplY3QiICYmICFqUXVlcnkuaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7CisgICAgICAg
IHRhcmdldCA9IHt9OworICAgIH0KKworICAgIC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9u
bHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAorICAgIGlmICggaSA9PT0gbGVuZ3RoICkgeworICAg
ICAgICB0YXJnZXQgPSB0aGlzOworICAgICAgICBpLS07CisgICAgfQorCisgICAgZm9yICggOyBp
IDwgbGVuZ3RoOyBpKysgKSB7CisKKyAgICAgICAgLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwv
dW5kZWZpbmVkIHZhbHVlcworICAgICAgICBpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBd
ICkgIT0gbnVsbCApIHsKKworICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdAor
ICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworICAgICAgICAgICAgICAgIHNy
YyA9IHRhcmdldFsgbmFtZSBdOworICAgICAgICAgICAgICAgIGNvcHkgPSBvcHRpb25zWyBuYW1l
IF07CisKKyAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wCisgICAg
ICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJlY3Vy
c2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5cworICAgICAgICAgICAg
ICAgIGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8
fAorICAgICAgICAgICAgICAgICAgICAoIGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoIGNv
cHkgKSApICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb3B5SXNBcnJheSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheSggc3JjICkgPyBzcmMg
OiBbXTsKKworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApID8gc3JjIDog
e307CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBOZXZl
ciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KKyAgICAgICAgICAgICAgICAgICAg
dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOworCisg
ICAgICAgICAgICAgICAgLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0WyBuYW1lIF0gPSBjb3B5OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbW9kaWZpZWQg
b2JqZWN0CisgICAgcmV0dXJuIHRhcmdldDsKK307CisKK2pRdWVyeS5leHRlbmQoIHsKKworICAg
IC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQorICAgIGV4cGFu
ZG86ICJqUXVlcnkiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cRC9n
LCAiIiApLAorCisgICAgLy8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFk
eSBtb2R1bGUKKyAgICBpc1JlYWR5OiB0cnVlLAorCisgICAgZXJyb3I6IGZ1bmN0aW9uKCBtc2cg
KSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvciggbXNnICk7CisgICAgfSwKKworICAgIG5vb3A6
IGZ1bmN0aW9uKCkge30sCisKKyAgICBpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkgeworICAg
ICAgICByZXR1cm4galF1ZXJ5LnR5cGUoIG9iaiApID09PSAiZnVuY3Rpb24iOworICAgIH0sCisK
KyAgICBpc0FycmF5OiBBcnJheS5pc0FycmF5LAorCisgICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBv
YmogKSB7CisgICAgICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7
CisgICAgfSwKKworICAgIGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKKworICAgICAgICAv
LyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAobnVsbHx0cnVl
fGZhbHNlfCIiKQorICAgICAgICAvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJl
ciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzICgiMHguLi4iKQorICAgICAgICAv
LyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU4KKyAgICAgICAgLy8gYWRkaW5n
IDEgY29ycmVjdHMgbG9zcyBvZiBwcmVjaXNpb24gZnJvbSBwYXJzZUZsb2F0ICgjMTUxMDApCisg
ICAgICAgIHZhciByZWFsU3RyaW5nT2JqID0gb2JqICYmIG9iai50b1N0cmluZygpOworICAgICAg
ICByZXR1cm4gIWpRdWVyeS5pc0FycmF5KCBvYmogKSAmJiAoIHJlYWxTdHJpbmdPYmogLSBwYXJz
ZUZsb2F0KCByZWFsU3RyaW5nT2JqICkgKyAxICkgPj0gMDsKKyAgICB9LAorCisgICAgaXNQbGFp
bk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgdmFyIGtleTsKKworICAgICAgICAv
LyBOb3QgcGxhaW4gb2JqZWN0czoKKyAgICAgICAgLy8gLSBBbnkgb2JqZWN0IG9yIHZhbHVlIHdo
b3NlIGludGVybmFsIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyBub3QgIltvYmplY3QgT2JqZWN0XSIK
KyAgICAgICAgLy8gLSBET00gbm9kZXMKKyAgICAgICAgLy8gLSB3aW5kb3cKKyAgICAgICAgaWYg
KCBqUXVlcnkudHlwZSggb2JqICkgIT09ICJvYmplY3QiIHx8IG9iai5ub2RlVHlwZSB8fCBqUXVl
cnkuaXNXaW5kb3coIG9iaiApICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9i
amVjdAorICAgICAgICBpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgorICAgICAgICAgICAgICAgICFo
YXNPd24uY2FsbCggb2JqLCAiY29uc3RydWN0b3IiICkgJiYKKyAgICAgICAgICAgICAgICAhaGFz
T3duLmNhbGwoIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwge30sICJpc1Byb3RvdHlwZU9m
IiApICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAs
CisgICAgICAgIC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUg
b3duCisgICAgICAgIGZvciAoIGtleSBpbiBvYmogKSB7fQorCisgICAgICAgIHJldHVybiBrZXkg
PT09IHVuZGVmaW5lZCB8fCBoYXNPd24uY2FsbCggb2JqLCBrZXkgKTsKKyAgICB9LAorCisgICAg
aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgdmFyIG5hbWU7CisgICAg
ICAgIGZvciAoIG5hbWUgaW4gb2JqICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICB0eXBlOiBmdW5jdGlv
biggb2JqICkgeworICAgICAgICBpZiAoIG9iaiA9PSBudWxsICkgeworICAgICAgICAgICAgcmV0
dXJuIG9iaiArICIiOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZDw0
LjAsIGlPUzw2IChmdW5jdGlvbmlzaCBSZWdFeHApCisgICAgICAgIHJldHVybiB0eXBlb2Ygb2Jq
ID09PSAib2JqZWN0IiB8fCB0eXBlb2Ygb2JqID09PSAiZnVuY3Rpb24iID8KKyAgICAgICAgICAg
IGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgIm9iamVjdCIgOgorICAgICAg
ICAgICAgdHlwZW9mIG9iajsKKyAgICB9LAorCisgICAgLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGlu
IGEgZ2xvYmFsIGNvbnRleHQKKyAgICBnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSApIHsKKyAg
ICAgICAgdmFyIHNjcmlwdCwKKyAgICAgICAgICAgIGluZGlyZWN0ID0gZXZhbDsKKworICAgICAg
ICBjb2RlID0galF1ZXJ5LnRyaW0oIGNvZGUgKTsKKworICAgICAgICBpZiAoIGNvZGUgKSB7CisK
KyAgICAgICAgICAgIC8vIElmIHRoZSBjb2RlIGluY2x1ZGVzIGEgdmFsaWQsIHByb2xvZ3VlIHBv
c2l0aW9uCisgICAgICAgICAgICAvLyBzdHJpY3QgbW9kZSBwcmFnbWEsIGV4ZWN1dGUgY29kZSBi
eSBpbmplY3RpbmcgYQorICAgICAgICAgICAgLy8gc2NyaXB0IHRhZyBpbnRvIHRoZSBkb2N1bWVu
dC4KKyAgICAgICAgICAgIGlmICggY29kZS5pbmRleE9mKCAidXNlIHN0cmljdCIgKSA9PT0gMSAp
IHsKKyAgICAgICAgICAgICAgICBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2Ny
aXB0IiApOworICAgICAgICAgICAgICAgIHNjcmlwdC50ZXh0ID0gY29kZTsKKyAgICAgICAgICAg
ICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKCBzY3JpcHQgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAg
ICAvLyBPdGhlcndpc2UsIGF2b2lkIHRoZSBET00gbm9kZSBjcmVhdGlvbiwgaW5zZXJ0aW9uCisg
ICAgICAgICAgICAgICAgLy8gYW5kIHJlbW92YWwgYnkgdXNpbmcgYW4gaW5kaXJlY3QgZ2xvYmFs
IGV2YWwKKworICAgICAgICAgICAgICAgIGluZGlyZWN0KCBjb2RlICk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNl
OyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcworICAgIC8vIFN1cHBvcnQ6IElFOS0x
MSsKKyAgICAvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAo
Izk1NzIpCisgICAgY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgeworICAgICAgICByZXR1
cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhh
LCBmY2FtZWxDYXNlICk7CisgICAgfSwKKworICAgIG5vZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwg
bmFtZSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgfSwKKworICAgIGVhY2g6
IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkgeworICAgICAgICB2YXIgbGVuZ3RoLCBpID0gMDsK
KworICAgICAgICBpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHsKKyAgICAgICAgICAgIGxlbmd0
aCA9IG9iai5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkg
XSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9y
ICggaSBpbiBvYmogKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpb
IGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBvYmo7CisgICAgfSwKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xCisg
ICAgdHJpbTogZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgIHJldHVybiB0ZXh0ID09IG51bGwg
PworICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAgKCB0ZXh0ICsgIiIgKS5yZXBsYWNlKCBy
dHJpbSwgIiIgKTsKKyAgICB9LAorCisgICAgLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNh
Z2Ugb25seQorICAgIG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsKKyAgICAg
ICAgdmFyIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAgICAgICAgaWYgKCBhcnIgIT0gbnVsbCAp
IHsKKyAgICAgICAgICAgIGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHsKKyAg
ICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZW9mIGFyciA9PT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgICAgICBbIGFyciBdIDogYXJy
CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgcHVzaC5jYWxsKCByZXQsIGFyciApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgaW5BcnJheTogZnVuY3Rpb24oIGVsZW0s
IGFyciwgaSApIHsKKyAgICAgICAgcmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNh
bGwoIGFyciwgZWxlbSwgaSApOworICAgIH0sCisKKyAgICBtZXJnZTogZnVuY3Rpb24oIGZpcnN0
LCBzZWNvbmQgKSB7CisgICAgICAgIHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCwKKyAgICAgICAg
ICAgIGogPSAwLAorICAgICAgICAgICAgaSA9IGZpcnN0Lmxlbmd0aDsKKworICAgICAgICBmb3Ig
KCA7IGogPCBsZW47IGorKyApIHsKKyAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsg
aiBdOworICAgICAgICB9CisKKyAgICAgICAgZmlyc3QubGVuZ3RoID0gaTsKKworICAgICAgICBy
ZXR1cm4gZmlyc3Q7CisgICAgfSwKKworICAgIGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJh
Y2ssIGludmVydCApIHsKKyAgICAgICAgdmFyIGNhbGxiYWNrSW52ZXJzZSwKKyAgICAgICAgICAg
IG1hdGNoZXMgPSBbXSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbGVuZ3RoID0g
ZWxlbXMubGVuZ3RoLAorICAgICAgICAgICAgY2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0OworCisg
ICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKKyAg
ICAgICAgLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KKyAgICAgICAgZm9yICgg
OyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICBjYWxsYmFja0ludmVyc2UgPSAhY2Fs
bGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKKyAgICAgICAgICAgIGlmICggY2FsbGJhY2tJbnZlcnNl
ICE9PSBjYWxsYmFja0V4cGVjdCApIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goIGVs
ZW1zWyBpIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBt
YXRjaGVzOworICAgIH0sCisKKyAgICAvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkK
KyAgICBtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHsKKyAgICAgICAgdmFy
IGxlbmd0aCwgdmFsdWUsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIHJldCA9IFtd
OworCisgICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9m
IHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzCisgICAgICAgIGlmICggaXNBcnJheUxpa2Uo
IGVsZW1zICkgKSB7CisgICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGg7CisgICAgICAg
ICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKKworICAgICAgICAgICAgICAgIGlmICgg
dmFsdWUgIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIHZhbHVlICk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEdvIHRocm91
Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBmb3IgKCBpIGluIGVsZW1zICkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2so
IGVsZW1zWyBpIF0sIGksIGFyZyApOworCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBu
dWxsICkgeworICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggdmFsdWUgKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGbGF0dGVu
IGFueSBuZXN0ZWQgYXJyYXlzCisgICAgICAgIHJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQg
KTsKKyAgICB9LAorCisgICAgLy8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCisg
ICAgZ3VpZDogMSwKKworICAgIC8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlv
bmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQorICAgIC8vIGFyZ3VtZW50cy4KKyAgICBwcm94
eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkgeworICAgICAgICB2YXIgdG1wLCBhcmdzLCBwcm94
eTsKKworICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAic3RyaW5nIiApIHsKKyAgICAg
ICAgICAgIHRtcCA9IGZuWyBjb250ZXh0IF07CisgICAgICAgICAgICBjb250ZXh0ID0gZm47Cisg
ICAgICAgICAgICBmbiA9IHRtcDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFF1aWNrIGNoZWNr
IHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCisgICAgICAg
IC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRl
ZmluZWQuCisgICAgICAgIGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgeworICAgICAg
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNpbXVsYXRl
ZCBiaW5kCisgICAgICAgIGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTsKKyAgICAg
ICAgcHJveHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSggY29u
dGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApOwor
ICAgICAgICB9OworCisgICAgICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0
byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAorICAg
ICAgICBwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKKwor
ICAgICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKworICAgIG5vdzogRGF0ZS5ub3csCisKKyAg
ICAvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0
cyBhdHRhY2ggdGhlaXIKKyAgICAvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4
aXN0LgorICAgIHN1cHBvcnQ6IHN1cHBvcnQKK30gKTsKKworLy8gSlNIaW50IHdvdWxkIGVycm9y
IG9uIHRoaXMgY29kZSBkdWUgdG8gdGhlIFN5bWJvbCBub3QgYmVpbmcgZGVmaW5lZCBpbiBFUzUu
CisvLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuanNoaW50cmMgd291bGQgY3JlYXRlIGEgZGFu
Z2VyIG9mIHVzaW5nIHRoZSBnbG9iYWwKKy8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBp
dCBzZWVtcyBzYWZlciB0byBqdXN0IGRpc2FibGUgSlNIaW50IGZvciB0aGVzZQorLy8gdGhyZWUg
bGluZXMuCisvKiBqc2hpbnQgaWdub3JlOiBzdGFydCAqLworaWYgKCB0eXBlb2YgU3ltYm9sID09
PSAiZnVuY3Rpb24iICkgeworICAgIGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJb
IFN5bWJvbC5pdGVyYXRvciBdOworfQorLyoganNoaW50IGlnbm9yZTogZW5kICovCisKKy8vIFBv
cHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcAoralF1ZXJ5LmVhY2goICJCb29sZWFuIE51bWJlciBT
dHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3Bs
aXQoICIgIiApLAorZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgY2xhc3MydHlwZVsgIltvYmpl
Y3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKK30gKTsKKworZnVuY3Rp
b24gaXNBcnJheUxpa2UoIG9iaiApIHsKKworICAgIC8vIFN1cHBvcnQ6IGlPUyA4LjIgKG5vdCBy
ZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKQorICAgIC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2
ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSkKKyAgICAvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1
ZSB0byBmYWxzZSBuZWdhdGl2ZXMKKyAgICAvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGlu
IElFCisgICAgdmFyIGxlbmd0aCA9ICEhb2JqICYmICJsZW5ndGgiIGluIG9iaiAmJiBvYmoubGVu
Z3RoLAorICAgICAgICB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApOworCisgICAgaWYgKCB0eXBl
ID09PSAiZnVuY3Rpb24iIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZSA9PT0gImFycmF5IiB8fCBsZW5n
dGggPT09IDAgfHwKKyAgICAgICAgdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYgbGVuZ3Ro
ID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7Cit9Cit2YXIgU2l6emxlID0KKy8qIQorICog
U2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMi4xCisgKiBodHRwOi8vc2l6emxlanMuY29t
LworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0
b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqIGh0dHA6Ly9qcXVlcnku
b3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAyMDE1LTEwLTE3CisgKi8KKyhmdW5jdGlvbiggd2lu
ZG93ICkgeworCit2YXIgaSwKKyAgICBzdXBwb3J0LAorICAgIEV4cHIsCisgICAgZ2V0VGV4dCwK
KyAgICBpc1hNTCwKKyAgICB0b2tlbml6ZSwKKyAgICBjb21waWxlLAorICAgIHNlbGVjdCwKKyAg
ICBvdXRlcm1vc3RDb250ZXh0LAorICAgIHNvcnRJbnB1dCwKKyAgICBoYXNEdXBsaWNhdGUsCisK
KyAgICAvLyBMb2NhbCBkb2N1bWVudCB2YXJzCisgICAgc2V0RG9jdW1lbnQsCisgICAgZG9jdW1l
bnQsCisgICAgZG9jRWxlbSwKKyAgICBkb2N1bWVudElzSFRNTCwKKyAgICByYnVnZ3lRU0EsCisg
ICAgcmJ1Z2d5TWF0Y2hlcywKKyAgICBtYXRjaGVzLAorICAgIGNvbnRhaW5zLAorCisgICAgLy8g
SW5zdGFuY2Utc3BlY2lmaWMgZGF0YQorICAgIGV4cGFuZG8gPSAic2l6emxlIiArIDEgKiBuZXcg
RGF0ZSgpLAorICAgIHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCwKKyAgICBkaXJydW5z
ID0gMCwKKyAgICBkb25lID0gMCwKKyAgICBjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAg
ICB0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICBjb21waWxlckNhY2hlID0gY3JlYXRl
Q2FjaGUoKSwKKyAgICBzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgaWYg
KCBhID09PSBiICkgeworICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gMDsKKyAgICB9LAorCisgICAgLy8gR2VuZXJhbC1wdXJwb3NlIGNv
bnN0YW50cworICAgIE1BWF9ORUdBVElWRSA9IDEgPDwgMzEsCisKKyAgICAvLyBJbnN0YW5jZSBt
ZXRob2RzCisgICAgaGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSwKKyAgICBhcnIgPSBbXSwK
KyAgICBwb3AgPSBhcnIucG9wLAorICAgIHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsCisgICAgcHVz
aCA9IGFyci5wdXNoLAorICAgIHNsaWNlID0gYXJyLnNsaWNlLAorICAgIC8vIFVzZSBhIHN0cmlw
cGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZQorICAgIC8vIGh0dHA6
Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNQorICAgIGluZGV4T2YgPSBmdW5jdGlv
biggbGlzdCwgZWxlbSApIHsKKyAgICAgICAgdmFyIGkgPSAwLAorICAgICAgICAgICAgbGVuID0g
bGlzdC5sZW5ndGg7CisgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAg
ICAgaWYgKCBsaXN0W2ldID09PSBlbGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9LAorCisg
ICAgYm9vbGVhbnMgPSAiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8
Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3Blbnxy
ZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLAorCisgICAgLy8gUmVndWxhciBleHByZXNzaW9ucwor
CisgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UK
KyAgICB3aGl0ZXNwYWNlID0gIltcXHgyMFxcdFxcclxcblxcZl0iLAorCisgICAgLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCisg
ICAgaWRlbnRpZmllciA9ICIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsCisKKyAg
ICAvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMv
I2F0dHJpYnV0ZS1zZWxlY3RvcnMKKyAgICBhdHRyaWJ1dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNl
ICsgIiooIiArIGlkZW50aWZpZXIgKyAiKSg/OiIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgLy8g
T3BlcmF0b3IgKGNhcHR1cmUgMikKKyAgICAgICAgIiooWypeJHwhfl0/PSkiICsgd2hpdGVzcGFj
ZSArCisgICAgICAgIC8vICJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJz
IFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdIgorICAgICAg
ICAiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwi
fCgiICsgaWRlbnRpZmllciArICIpKXwpIiArIHdoaXRlc3BhY2UgKworICAgICAgICAiKlxcXSIs
CisKKyAgICBwc2V1ZG9zID0gIjooIiArIGlkZW50aWZpZXIgKyAiKSg/OlxcKCgiICsKKyAgICAg
ICAgLy8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUg
aW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czoKKyAgICAgICAgLy8gMS4gcXVvdGVk
IChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpCisgICAgICAgICIoJygoPzpcXFxc
LnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCIgKworICAgICAgICAv
LyAyLiBzaW1wbGUgKGNhcHR1cmUgNikKKyAgICAgICAgIigoPzpcXFxcLnxbXlxcXFwoKVtcXF1d
fCIgKyBhdHRyaWJ1dGVzICsgIikqKXwiICsKKyAgICAgICAgLy8gMy4gYW55dGhpbmcgZWxzZSAo
Y2FwdHVyZSAyKQorICAgICAgICAiLioiICsKKyAgICAgICAgIilcXCl8KSIsCisKKyAgICAvLyBM
ZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29t
ZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyCisgICAgcndo
aXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgIisiLCAiZyIgKSwKKyAgICBydHJp
bSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiK3woKD86XnxbXlxcXFxdKSg/Olxc
XFwuKSopIiArIHdoaXRlc3BhY2UgKyAiKyQiLCAiZyIgKSwKKworICAgIHJjb21tYSA9IG5ldyBS
ZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKiwiICsgd2hpdGVzcGFjZSArICIqIiApLAorICAg
IHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKihbPit+XXwi
ICsgd2hpdGVzcGFjZSArICIpIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKKworICAgIHJhdHRyaWJ1
dGVRdW90ZXMgPSBuZXcgUmVnRXhwKCAiPSIgKyB3aGl0ZXNwYWNlICsgIiooW15cXF0nXCJdKj8p
IiArIHdoaXRlc3BhY2UgKyAiKlxcXSIsICJnIiApLAorCisgICAgcnBzZXVkbyA9IG5ldyBSZWdF
eHAoIHBzZXVkb3MgKSwKKyAgICByaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoICJeIiArIGlkZW50
aWZpZXIgKyAiJCIgKSwKKworICAgIG1hdGNoRXhwciA9IHsKKyAgICAgICAgIklEIjogbmV3IFJl
Z0V4cCggIl4jKCIgKyBpZGVudGlmaWVyICsgIikiICksCisgICAgICAgICJDTEFTUyI6IG5ldyBS
ZWdFeHAoICJeXFwuKCIgKyBpZGVudGlmaWVyICsgIikiICksCisgICAgICAgICJUQUciOiBuZXcg
UmVnRXhwKCAiXigiICsgaWRlbnRpZmllciArICJ8WypdKSIgKSwKKyAgICAgICAgIkFUVFIiOiBu
ZXcgUmVnRXhwKCAiXiIgKyBhdHRyaWJ1dGVzICksCisgICAgICAgICJQU0VVRE8iOiBuZXcgUmVn
RXhwKCAiXiIgKyBwc2V1ZG9zICksCisgICAgICAgICJDSElMRCI6IG5ldyBSZWdFeHAoICJeOihv
bmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiICsgd2hp
dGVzcGFjZSArCisgICAgICAgICAgICAiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyB3
aGl0ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdoaXRlc3BhY2UgKworICAgICAgICAgICAgIioo
XFxkKyl8KSkiICsgd2hpdGVzcGFjZSArICIqXFwpfCkiLCAiaSIgKSwKKyAgICAgICAgImJvb2wi
OiBuZXcgUmVnRXhwKCAiXig/OiIgKyBib29sZWFucyArICIpJCIsICJpIiApLAorICAgICAgICAv
LyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKCkKKyAgICAgICAgLy8gV2Ug
dXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YAorICAgICAgICAibmVlZHNDb250
ZXh0IjogbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqWz4rfl18OihldmVufG9kZHxl
cXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsKKyAgICAgICAgICAgIHdoaXRlc3BhY2Ug
KyAiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVteLV18JCkiLCAi
aSIgKQorICAgIH0sCisKKyAgICByaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8
YnV0dG9uKSQvaSwKKyAgICByaGVhZGVyID0gL15oXGQkL2ksCisKKyAgICBybmF0aXZlID0gL15b
XntdK1x7XHMqXFtuYXRpdmUgXHcvLAorCisgICAgLy8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2
YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCisgICAgcnF1aWNrRXhwciA9IC9eKD86
IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sCisKKyAgICByc2libGluZyA9IC9bK35dLywK
KyAgICByZXNjYXBlID0gLyd8XFwvZywKKworICAgIC8vIENTUyBlc2NhcGVzIGh0dHA6Ly93d3cu
dzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnMKKyAgICBydW5l
c2NhcGUgPSBuZXcgUmVnRXhwKCAiXFxcXChbXFxkYS1mXXsxLDZ9IiArIHdoaXRlc3BhY2UgKyAi
P3woIiArIHdoaXRlc3BhY2UgKyAiKXwuKSIsICJpZyIgKSwKKyAgICBmdW5lc2NhcGUgPSBmdW5j
dGlvbiggXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UgKSB7CisgICAgICAgIHZhciBoaWdo
ID0gIjB4IiArIGVzY2FwZWQgLSAweDEwMDAwOworICAgICAgICAvLyBOYU4gbWVhbnMgbm9uLWNv
ZGVwb2ludAorICAgICAgICAvLyBTdXBwb3J0OiBGaXJlZm94PDI0CisgICAgICAgIC8vIFdvcmth
cm91bmQgZXJyb25lb3VzIG51bWVyaWMgaW50ZXJwcmV0YXRpb24gb2YgKyIweCIKKyAgICAgICAg
cmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgPworICAgICAgICAgICAg
ZXNjYXBlZCA6CisgICAgICAgICAgICBoaWdoIDwgMCA/CisgICAgICAgICAgICAgICAgLy8gQk1Q
IGNvZGVwb2ludAorICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAw
eDEwMDAwICkgOgorICAgICAgICAgICAgICAgIC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9p
bnQgKHN1cnJvZ2F0ZSBwYWlyKQorICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUo
IGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApOworICAgIH0sCisK
KyAgICAvLyBVc2VkIGZvciBpZnJhbWVzCisgICAgLy8gU2VlIHNldERvY3VtZW50KCkKKyAgICAv
LyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSAiUGVybWlzc2lvbiBEZW5p
ZWQiCisgICAgLy8gZXJyb3IgaW4gSUUKKyAgICB1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHNldERvY3VtZW50KCk7CisgICAgfTsKKworLy8gT3B0aW1pemUgZm9yIHB1c2gu
YXBwbHkoIF8sIE5vZGVMaXN0ICkKK3RyeSB7CisgICAgcHVzaC5hcHBseSgKKyAgICAgICAgKGFy
ciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLAorICAgICAgICBwcmVm
ZXJyZWREb2MuY2hpbGROb2RlcworICAgICk7CisgICAgLy8gU3VwcG9ydDogQW5kcm9pZDw0LjAK
KyAgICAvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5CisgICAgYXJyWyBwcmVm
ZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTsKK30gY2F0Y2ggKCBlICkgewor
ICAgIHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID8KKworICAgICAgICAvLyBMZXZlcmFnZSBz
bGljZSBpZiBwb3NzaWJsZQorICAgICAgICBmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7CisgICAg
ICAgICAgICBwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTsKKyAg
ICAgICAgfSA6CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUU8OQorICAgICAgICAvLyBPdGhlcndp
c2UgYXBwZW5kIGRpcmVjdGx5CisgICAgICAgIGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHsKKyAg
ICAgICAgICAgIHZhciBqID0gdGFyZ2V0Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICBpID0gMDsK
KyAgICAgICAgICAgIC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aAorICAgICAgICAgICAg
d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fQorICAgICAgICAgICAgdGFyZ2V0
Lmxlbmd0aCA9IGogLSAxOworICAgICAgICB9CisgICAgfTsKK30KKworZnVuY3Rpb24gU2l6emxl
KCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsKKyAgICB2YXIgbSwgaSwgZWxl
bSwgbmlkLCBuaWRzZWxlY3QsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLAorICAgICAgICBu
ZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsCisKKyAgICAgICAg
Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1
bWVudAorICAgICAgICBub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTsK
KworICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOworCisgICAgLy8gUmV0dXJuIGVhcmx5IGZy
b20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHQKKyAgICBpZiAoIHR5cGVv
ZiBzZWxlY3RvciAhPT0gInN0cmluZyIgfHwgIXNlbGVjdG9yIHx8CisgICAgICAgIG5vZGVUeXBl
ICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHsKKworICAgICAg
ICByZXR1cm4gcmVzdWx0czsKKyAgICB9CisKKyAgICAvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBv
cGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzCisgICAg
aWYgKCAhc2VlZCApIHsKKworICAgICAgICBpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJE
b2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkgeworICAg
ICAgICAgICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKKyAgICAgICAgfQorICAgICAgICBjb250
ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworICAgICAgICBpZiAoIGRvY3VtZW50SXNIVE1M
ICkgeworCisgICAgICAgICAgICAvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNp
bXBsZSwgdHJ5IHVzaW5nIGEgImdldCpCeSoiIERPTSBtZXRob2QKKyAgICAgICAgICAgIC8vIChl
eGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24n
dCBleGlzdCkKKyAgICAgICAgICAgIGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJx
dWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBJRCBz
ZWxlY3RvcgorICAgICAgICAgICAgICAgIGlmICggKG0gPSBtYXRjaFsxXSkgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRG9jdW1lbnQgY29udGV4dAorICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxl
bSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUg
aW5zdGVhZCBvZiBJRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5pZCA9
PT0gbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBl
bGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudCBj
b250ZXh0CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9ucworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJ
RAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuZXdDb250ZXh0ICYmIChlbGVtID0gbmV3
Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLmlkID09PSBtICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIFR5cGUgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVz
dWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgICAgICAgICAgICAgIC8vIENsYXNz
IHNlbGVjdG9yCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYg
c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmCisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICBw
dXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSAp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5
U2VsZWN0b3JBbGwKKyAgICAgICAgICAgIGlmICggc3VwcG9ydC5xc2EgJiYKKyAgICAgICAgICAg
ICAgICAhY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXSAmJgorICAgICAgICAgICAgICAg
ICghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIG5vZGVUeXBlICE9PSAxICkgeworICAgICAgICAgICAgICAgICAgICBu
ZXdDb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0b3IgPSBz
ZWxlY3RvcjsKKworICAgICAgICAgICAgICAgIC8vIHFTQSBsb29rcyBvdXRzaWRlIEVsZW1lbnQg
Y29udGV4dCwgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudAorICAgICAgICAgICAgICAgIC8vIFRo
YW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHdvcmthcm91bmQgdGVjaG5pcXVlCisgICAg
ICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPD04CisgICAgICAgICAgICAgICAgLy8gRXhjbHVk
ZSBvYmplY3QgZWxlbWVudHMKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb250ZXh0Lm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgeworCisgICAgICAgICAgICAgICAg
ICAgIC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNz
YXJ5CisgICAgICAgICAgICAgICAgICAgIGlmICggKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRl
KCAiaWQiICkpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gbmlkLnJlcGxhY2Uo
IHJlc2NhcGUsICJcXCQmIiApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIChuaWQgPSBleHBh
bmRvKSApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
UHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgICAgIGdy
b3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApOworICAgICAgICAgICAgICAgICAgICBpID0gZ3Jv
dXBzLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgbmlkc2VsZWN0ID0gcmlkZW50aWZpZXIu
dGVzdCggbmlkICkgPyAiIyIgKyBuaWQgOiAiW2lkPSciICsgbmlkICsgIiddIjsKKyAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91
cHNbaV0gPSBuaWRzZWxlY3QgKyAiICIgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RvciA9IGdyb3Vw
cy5qb2luKCAiLCIgKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmQgY29udGV4dCBm
b3Igc2libGluZyBzZWxlY3RvcnMKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IHJz
aWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9k
ZSApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICggbmV3U2VsZWN0b3IgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFs
bCggbmV3U2VsZWN0b3IgKQorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNo
ICggcXNhRXJyb3IgKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggImlkIiApOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWxsIG90aGVycwor
ICAgIHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICksIGNvbnRl
eHQsIHJlc3VsdHMsIHNlZWQgKTsKK30KKworLyoqCisgKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hl
cyBvZiBsaW1pdGVkIHNpemUKKyAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9
IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGgK
KyAqICBwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRo
ZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKQorICogIGRlbGV0aW5nIHRo
ZSBvbGRlc3QgZW50cnkKKyAqLworZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7CisgICAgdmFyIGtl
eXMgPSBbXTsKKworICAgIGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkgeworICAgICAgICAv
LyBVc2UgKGtleSArICIgIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlw
ZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKKyAgICAgICAgaWYgKCBrZXlzLnB1c2goIGtl
eSArICIgIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHsKKyAgICAgICAgICAgIC8vIE9ubHkga2Vl
cCB0aGUgbW9zdCByZWNlbnQgZW50cmllcworICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBrZXlz
LnNoaWZ0KCkgXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGNhY2hlWyBrZXkgKyAiICIg
XSA9IHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlOworfQorCisvKioKKyAqIE1hcmsg
YSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlCisgKiBAcGFyYW0ge0Z1bmN0aW9u
fSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFyaworICovCitmdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZu
ICkgeworICAgIGZuWyBleHBhbmRvIF0gPSB0cnVlOworICAgIHJldHVybiBmbjsKK30KKworLyoq
CisgKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudAorICogQHBhcmFtIHtGdW5jdGlv
bn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGRpdiBhbmQgZXhwZWN0cyBhIGJvb2xlYW4gcmVzdWx0
CisgKi8KK2Z1bmN0aW9uIGFzc2VydCggZm4gKSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuICEhZm4oIGRp
diApOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZmlu
YWxseSB7CisgICAgICAgIC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdAorICAg
ICAgICBpZiAoIGRpdi5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQoIGRpdiApOworICAgICAgICB9CisgICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5
IGluIElFCisgICAgICAgIGRpdiA9IG51bGw7CisgICAgfQorfQorCisvKioKKyAqIEFkZHMgdGhl
IHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnMKKyAqIEBwYXJhbSB7
U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMKKyAqIEBwYXJh
bSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZAorICov
CitmdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkgeworICAgIHZhciBhcnIgPSBh
dHRycy5zcGxpdCgifCIpLAorICAgICAgICBpID0gYXJyLmxlbmd0aDsKKworICAgIHdoaWxlICgg
aS0tICkgeworICAgICAgICBFeHByLmF0dHJIYW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjsKKyAg
ICB9Cit9CisKKy8qKgorICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5ncwor
ICogQHBhcmFtIHtFbGVtZW50fSBhCisgKiBAcGFyYW0ge0VsZW1lbnR9IGIKKyAqIEByZXR1cm5z
IHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRo
YW4gMCBpZiBhIGZvbGxvd3MgYgorICovCitmdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7
CisgICAgdmFyIGN1ciA9IGIgJiYgYSwKKyAgICAgICAgZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBl
ID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiYKKyAgICAgICAgICAgICggfmIuc291cmNlSW5k
ZXggfHwgTUFYX05FR0FUSVZFICkgLQorICAgICAgICAgICAgKCB+YS5zb3VyY2VJbmRleCB8fCBN
QVhfTkVHQVRJVkUgKTsKKworICAgIC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUg
b24gYm90aCBub2RlcworICAgIGlmICggZGlmZiApIHsKKyAgICAgICAgcmV0dXJuIGRpZmY7Cisg
ICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYiBmb2xsb3dzIGEKKyAgICBpZiAoIGN1ciApIHsKKyAg
ICAgICAgd2hpbGUgKCAoY3VyID0gY3VyLm5leHRTaWJsaW5nKSApIHsKKyAgICAgICAgICAgIGlm
ICggY3VyID09PSBiICkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhID8gMSA6IC0xOworfQorCisvKioK
KyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXMK
KyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRv
KCB0eXBlICkgeworICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFyIG5h
bWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHJldHVybiBuYW1lID09
PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKKyAgICB9OworfQorCisvKioKKyAqIFJl
dHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucworICogQHBhcmFt
IHtTdHJpbmd9IHR5cGUKKyAqLworZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkg
eworICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFyIG5hbWUgPSBlbGVt
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHJldHVybiAobmFtZSA9PT0gImlucHV0
IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBlID09PSB0eXBlOworICAgIH07Cit9
CisKKy8qKgorICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3Np
dGlvbmFscworICogQHBhcmFtIHtGdW5jdGlvbn0gZm4KKyAqLworZnVuY3Rpb24gY3JlYXRlUG9z
aXRpb25hbFBzZXVkbyggZm4gKSB7CisgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbigg
YXJndW1lbnQgKSB7CisgICAgICAgIGFyZ3VtZW50ID0gK2FyZ3VtZW50OworICAgICAgICByZXR1
cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworICAgICAgICAgICAg
dmFyIGosCisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0
aCwgYXJndW1lbnQgKSwKKyAgICAgICAgICAgICAgICBpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsK
KworICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBp
bmRleGVzCisgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICBpZiAo
IHNlZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkgeworICAgICAgICAgICAgICAgICAgICBz
ZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLyoqCisgKiBDaGVja3MgYSBu
b2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0CisgKiBAcGFyYW0ge0VsZW1lbnR8
T2JqZWN0PX0gY29udGV4dAorICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRo
ZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlCisgKi8K
K2Z1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkgeworICAgIHJldHVybiBjb250ZXh0ICYm
IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiAmJiBj
b250ZXh0OworfQorCisvLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZQorc3Vw
cG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307CisKKy8qKgorICogRGV0ZWN0cyBYTUwgbm9kZXMK
KyAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50
CisgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBu
b2RlCisgKi8KK2lzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
Ly8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0
IHlldCBleGlzdAorICAgIC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMz
KQorICAgIHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQg
fHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50OworICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBk
b2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1MIiA6IGZhbHNlOworfTsKKworLyoqCisg
KiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJl
bnQgZG9jdW1lbnQKKyAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQg
b3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50CisgKiBAcmV0dXJu
cyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50CisgKi8KK3NldERvY3VtZW50
ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7CisgICAgdmFyIGhhc0Nv
bXBhcmUsIHBhcmVudCwKKyAgICAgICAgZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8
fCBub2RlIDogcHJlZmVycmVkRG9jOworCisgICAgLy8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBp
bnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWQKKyAgICBpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwg
ZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkgeworICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQ7CisgICAgfQorCisgICAgLy8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXMK
KyAgICBkb2N1bWVudCA9IGRvYzsKKyAgICBkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50OworICAgIGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApOworCisgICAgLy8g
U3VwcG9ydDogSUUgOS0xMSwgRWRnZQorICAgIC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRz
IGFmdGVyIHVubG9hZCB0aHJvd3MgInBlcm1pc3Npb24gZGVuaWVkIiBlcnJvcnMgKGpRdWVyeSAj
MTM5MzYpCisgICAgaWYgKCAocGFyZW50ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcpICYmIHBhcmVu
dC50b3AgIT09IHBhcmVudCApIHsKKyAgICAgICAgLy8gU3VwcG9ydDogSUUgMTEKKyAgICAgICAg
aWYgKCBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgIHBhcmVudC5hZGRF
dmVudExpc3RlbmVyKCAidW5sb2FkIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTsKKworICAgICAg
ICAvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seQorICAgICAgICB9IGVsc2UgaWYgKCBwYXJlbnQu
YXR0YWNoRXZlbnQgKSB7CisgICAgICAgICAgICBwYXJlbnQuYXR0YWNoRXZlbnQoICJvbnVubG9h
ZCIsIHVubG9hZEhhbmRsZXIgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEF0dHJpYnV0
ZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyAgICAvLyBTdXBwb3J0OiBJRTw4CisgICAgLy8g
VmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5v
dCBwcm9wZXJ0aWVzCisgICAgLy8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpCisgICAgc3VwcG9y
dC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgIGRpdi5jbGFz
c05hbWUgPSAiaSI7CisgICAgICAgIHJldHVybiAhZGl2LmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1l
Iik7CisgICAgfSk7CisKKyAgICAvKiBnZXRFbGVtZW50KHMpQnkqCisgICAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLworCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5z
IG9ubHkgZWxlbWVudHMKKyAgICBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0
KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3Jl
YXRlQ29tbWVudCgiIikgKTsKKyAgICAgICAgcmV0dXJuICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoIioiKS5sZW5ndGg7CisgICAgfSk7CisKKyAgICAvLyBTdXBwb3J0OiBJRTw5CisgICAgc3Vw
cG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lICk7CisKKyAgICAvLyBTdXBwb3J0OiBJRTwxMAorICAgIC8vIENo
ZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZQorICAgIC8vIFRo
ZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1hdGlj
YWxseS1zZXQgbmFtZXMsCisgICAgLy8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5
TmFtZSB0ZXN0CisgICAgc3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7
CisgICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlkID0gZXhwYW5kbzsKKyAgICAg
ICAgcmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7CisgICAgfSk7CisKKyAgICAvLyBJRCBmaW5k
IGFuZCBmaWx0ZXIKKyAgICBpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHsKKyAgICAgICAgRXhwci5m
aW5kWyJJRCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkgeworICAgICAgICAgICAgaWYgKCB0
eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJ
c0hUTUwgKSB7CisgICAgICAgICAgICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlk
KCBpZCApOworICAgICAgICAgICAgICAgIHJldHVybiBtID8gWyBtIF0gOiBbXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgRXhwci5maWx0ZXJbIklEIl0gPSBmdW5jdGlvbigg
aWQgKSB7CisgICAgICAgICAgICB2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBm
dW5lc2NhcGUgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgPT09IGF0dHJJZDsKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU3VwcG9y
dDogSUU2LzcKKyAgICAgICAgLy8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEg
ZmluZCBzaG9ydGN1dAorICAgICAgICBkZWxldGUgRXhwci5maW5kWyJJRCJdOworCisgICAgICAg
IEV4cHIuZmlsdGVyWyJJRCJdID0gIGZ1bmN0aW9uKCBpZCApIHsKKyAgICAgICAgICAgIHZhciBh
dHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApOworICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciBub2RlID0gdHlw
ZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gInVuZGVmaW5lZCIgJiYKKyAgICAgICAgICAg
ICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDsKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH07CisgICAgfQorCisgICAgLy8gVGFnCisgICAgRXhwci5maW5kWyJUQUciXSA9IHN1cHBv
cnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPworICAgICAgICBmdW5jdGlvbiggdGFnLCBjb250ZXh0
ICkgeworICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworCisgICAgICAgICAgICAvLyBEb2N1bWVudEZyYWdt
ZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE4KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN1cHBv
cnQucXNhICkgeworICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwoIHRhZyApOworICAgICAgICAgICAgfQorICAgICAgICB9IDoKKworICAgICAgICBmdW5jdGlv
biggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgdmFyIGVsZW0sCisgICAgICAgICAgICAg
ICAgdG1wID0gW10sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgLy8g
QnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVu
dEZyYWdtZW50IG5vZGVzIHRvbworICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBjb250ZXh0Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKKworICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBw
b3NzaWJsZSBjb21tZW50cworICAgICAgICAgICAgaWYgKCB0YWcgPT09ICIqIiApIHsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdG1wLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgfTsKKworICAgIC8vIENsYXNzCisg
ICAgRXhwci5maW5kWyJDTEFTUyJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYm
IGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7CisgICAgICAgIGlmICggdHlwZW9mIGNv
bnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgZG9jdW1lbnRJ
c0hUTUwgKSB7CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKCBjbGFzc05hbWUgKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKiBRU0EvbWF0Y2hl
c1NlbGVjdG9yCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLy8gUVNBIGFuZCBtYXRjaGVz
U2VsZWN0b3Igc3VwcG9ydAorCisgICAgLy8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9y
dHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSkKKyAgICByYnVnZ3lNYXRjaGVzID0g
W107CisKKyAgICAvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21l
IDIxKQorICAgIC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0
IHRocm93cyBhbiBlcnJvcgorICAgIC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50
YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWUKKyAgICAvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRv
IHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvcgorICAg
IC8vIFNlZSBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OAorICAgIHJidWdneVFT
QSA9IFtdOworCisgICAgaWYgKCAoc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwgKSkgKSB7CisgICAgICAgIC8vIEJ1aWxkIFFTQSByZWdleAorICAg
ICAgICAvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pCisgICAgICAg
IGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICAgICAgLy8gU2VsZWN0IGlzIHNldCB0
byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZQorICAgICAgICAgICAgLy8gVGhpcyBpcyB0byB0ZXN0
IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5CisgICAgICAgICAgICAvLyBzZXR0aW5n
IGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSwKKyAgICAgICAgICAgIC8vIHNpbmNlIGl0cyBw
cmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoCisgICAgICAgICAgICAvLyBodHRwOi8vYnVncy5qcXVl
cnkuY29tL3RpY2tldC8xMjM1OQorICAgICAgICAgICAgZG9jRWxlbS5hcHBlbmRDaGlsZCggZGl2
ICkuaW5uZXJIVE1MID0gIjxhIGlkPSciICsgZXhwYW5kbyArICInPjwvYT4iICsKKyAgICAgICAg
ICAgICAgICAiPHNlbGVjdCBpZD0nIiArIGV4cGFuZG8gKyAiLVxyXFwnIG1zYWxsb3djYXB0dXJl
PScnPiIgKworICAgICAgICAgICAgICAgICI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwv
c2VsZWN0PiI7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTYK
KyAgICAgICAgICAgIC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3Ry
aW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj0KKyAgICAgICAgICAgIC8vIFRoZSB0ZXN0IGF0dHJp
YnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0ICJzYWZlIiBmb3IgV2luUlQKKyAgICAg
ICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2
NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uCisgICAgICAgICAgICBpZiAoIGRpdi5xdWVyeVNl
bGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAg
ICAgICByYnVnZ3lRU0EucHVzaCggIlsqXiRdPSIgKyB3aGl0ZXNwYWNlICsgIiooPzonJ3xcIlwi
KSIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4CisgICAg
ICAgICAgICAvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kICJ2YWx1ZSIgYXJlIG5vdCB0cmVhdGVk
IGNvcnJlY3RseQorICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxl
Y3RlZF0iKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICJcXFsi
ICsgd2hpdGVzcGFjZSArICIqKD86dmFsdWV8IiArIGJvb2xlYW5zICsgIikiICk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQs
IFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44KworICAgICAgICAgICAgaWYg
KCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoICJbaWR+PSIgKyBleHBhbmRvICsgIi1dIiApLmxlbmd0
aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgifj0iKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVy
biBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKKyAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkCisgICAgICAg
ICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0
cworICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVu
Z3RoICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCI6Y2hlY2tlZCIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4Kwor
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
Njg1MQorICAgICAgICAgICAgLy8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2liaW5nLWNvbWJpbmF0
b3Igc2VsZWN0b3JgIGZhaWxzCisgICAgICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFs
bCggImEjIiArIGV4cGFuZG8gKyAiKyoiICkubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJi
dWdneVFTQS5wdXNoKCIuIy4rWyt+XSIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwor
ICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IFdpbmRvd3MgOCBOYXRpdmUgQXBwcworICAgICAgICAgICAgLy8gVGhlIHR5cGUgYW5kIG5hbWUg
YXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50Cisg
ICAgICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwor
ICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAidHlwZSIsICJoaWRkZW4iICk7CisgICAg
ICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCAibmFtZSIsICJE
IiApOworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTgKKyAgICAgICAgICAgIC8vIEVuZm9y
Y2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZQorICAgICAgICAgICAgaWYgKCBk
aXYucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGggKSB7CisgICAgICAgICAgICAg
ICAgcmJ1Z2d5UVNBLnB1c2goICJuYW1lIiArIHdoaXRlc3BhY2UgKyAiKlsqXiR8IX5dPz0iICk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNh
YmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJs
ZWQpCisgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNl
ZSBsYXRlciB0ZXN0cworICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjpl
bmFibGVkIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAiOmVu
YWJsZWQiLCAiOmRpc2FibGVkIiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBP
cGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvcwor
ICAgICAgICAgICAgZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKTsKKyAgICAgICAgICAgIHJi
dWdneVFTQS5wdXNoKCIsLio6Iik7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGlmICggKHN1
cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAobWF0Y2hlcyA9IGRvY0VsZW0u
bWF0Y2hlcyB8fAorICAgICAgICBkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fAorICAg
ICAgICBkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fAorICAgICAgICBkb2NFbGVtLm9NYXRj
aGVzU2VsZWN0b3IgfHwKKyAgICAgICAgZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7
CisKKyAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgICAgICAvLyBDaGVj
ayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3IKKyAgICAgICAg
ICAgIC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpCisgICAgICAgICAgICBzdXBwb3J0
LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYiICk7CisKKyAgICAg
ICAgICAgIC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb24KKyAgICAgICAgICAg
IC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKKyAgICAgICAg
ICAgIG1hdGNoZXMuY2FsbCggZGl2LCAiW3MhPScnXTp4IiApOworICAgICAgICAgICAgcmJ1Z2d5
TWF0Y2hlcy5wdXNoKCAiIT0iLCBwc2V1ZG9zICk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpv
aW4oInwiKSApOworICAgIHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBu
ZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oInwiKSApOworCisgICAgLyogQ29udGFpbnMK
KyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgaGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9j
RWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApOworCisgICAgLy8gRWxlbWVudCBjb250YWlu
cyBhbm90aGVyCisgICAgLy8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlCisgICAgLy8gQXMg
aW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGYKKyAgICBjb250YWlucyA9IGhh
c0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgPworICAgICAgICBm
dW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgICAgIHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09
IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsCisgICAgICAgICAgICAgICAgYnVwID0gYiAmJiBi
LnBhcmVudE5vZGU7CisgICAgICAgICAgICByZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYg
YnVwLm5vZGVUeXBlID09PSAxICYmICgKKyAgICAgICAgICAgICAgICBhZG93bi5jb250YWlucyA/
CisgICAgICAgICAgICAgICAgICAgIGFkb3duLmNvbnRhaW5zKCBidXAgKSA6CisgICAgICAgICAg
ICAgICAgICAgIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQ
b3NpdGlvbiggYnVwICkgJiAxNgorICAgICAgICAgICAgKSk7CisgICAgICAgIH0gOgorICAgICAg
ICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgICAgIGlmICggYiApIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBiID09PSBhICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH07CisKKyAgICAvKiBTb3J0aW5nCisg
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLy8gRG9jdW1lbnQgb3JkZXIgc29ydGluZworICAg
IHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgPworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworCisgICAg
ICAgIC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsCisgICAgICAgIGlmICggYSA9PT0gYiAp
IHsKKyAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBv
bmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb24KKyAgICAgICAgdmFyIGNv
bXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBv
c2l0aW9uOworICAgICAgICBpZiAoIGNvbXBhcmUgKSB7CisgICAgICAgICAgICByZXR1cm4gY29t
cGFyZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3Ro
IGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnQKKyAgICAgICAgY29tcGFyZSA9ICgg
YS5vd25lckRvY3VtZW50IHx8IGEgKSA9PT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID8KKyAg
ICAgICAgICAgIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6CisKKyAgICAgICAgICAg
IC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZAorICAgICAgICAgICAg
MTsKKworICAgICAgICAvLyBEaXNjb25uZWN0ZWQgbm9kZXMKKyAgICAgICAgaWYgKCBjb21wYXJl
ICYgMSB8fAorICAgICAgICAgICAgKCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkgeworCisgICAgICAgICAgICAvLyBD
aG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQg
ZG9jdW1lbnQKKyAgICAgICAgICAgIGlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3Vt
ZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNv
bnRhaW5zKHByZWZlcnJlZERvYywgYikgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyCisg
ICAgICAgICAgICByZXR1cm4gc29ydElucHV0ID8KKyAgICAgICAgICAgICAgICAoIGluZGV4T2Yo
IHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6CisgICAgICAgICAg
ICAgICAgMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb21wYXJlICYgNCA/IC0xIDog
MTsKKyAgICB9IDoKKyAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgLy8gRXhpdCBlYXJs
eSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbAorICAgICAgICBpZiAoIGEgPT09IGIgKSB7Cisg
ICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgY3VyLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAg
ICAgICBhdXAgPSBhLnBhcmVudE5vZGUsCisgICAgICAgICAgICBidXAgPSBiLnBhcmVudE5vZGUs
CisgICAgICAgICAgICBhcCA9IFsgYSBdLAorICAgICAgICAgICAgYnAgPSBbIGIgXTsKKworICAg
ICAgICAvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5l
Y3RlZAorICAgICAgICBpZiAoICFhdXAgfHwgIWJ1cCApIHsKKyAgICAgICAgICAgIHJldHVybiBh
ID09PSBkb2N1bWVudCA/IC0xIDoKKyAgICAgICAgICAgICAgICBiID09PSBkb2N1bWVudCA/IDEg
OgorICAgICAgICAgICAgICAgIGF1cCA/IC0xIDoKKyAgICAgICAgICAgICAgICBidXAgPyAxIDoK
KyAgICAgICAgICAgICAgICBzb3J0SW5wdXQgPworICAgICAgICAgICAgICAgICggaW5kZXhPZigg
c29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDoKKyAgICAgICAgICAg
ICAgICAwOworCisgICAgICAgIC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBk
byBhIHF1aWNrIGNoZWNrCisgICAgICAgIH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkgeworICAg
ICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9y
IGNvbXBhcmlzb24KKyAgICAgICAgY3VyID0gYTsKKyAgICAgICAgd2hpbGUgKCAoY3VyID0gY3Vy
LnBhcmVudE5vZGUpICkgeworICAgICAgICAgICAgYXAudW5zaGlmdCggY3VyICk7CisgICAgICAg
IH0KKyAgICAgICAgY3VyID0gYjsKKyAgICAgICAgd2hpbGUgKCAoY3VyID0gY3VyLnBhcmVudE5v
ZGUpICkgeworICAgICAgICAgICAgYnAudW5zaGlmdCggY3VyICk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeQorICAg
ICAgICB3aGlsZSAoIGFwW2ldID09PSBicFtpXSApIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBpID8KKyAgICAgICAgICAgIC8vIERvIGEgc2libGluZyBj
aGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvcgorICAgICAgICAgICAgc2li
bGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBu
b2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdAorICAgICAgICAgICAgYXBbaV0gPT09IHBy
ZWZlcnJlZERvYyA/IC0xIDoKKyAgICAgICAgICAgIGJwW2ldID09PSBwcmVmZXJyZWREb2MgPyAx
IDoKKyAgICAgICAgICAgIDA7CisgICAgfTsKKworICAgIHJldHVybiBkb2N1bWVudDsKK307CisK
K1NpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkgeworICAgIHJldHVy
biBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7Cit9OworCitTaXp6bGUubWF0
Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7CisgICAgLy8gU2V0IGRvY3Vt
ZW50IHZhcnMgaWYgbmVlZGVkCisgICAgaWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVt
ICkgIT09IGRvY3VtZW50ICkgeworICAgICAgICBzZXREb2N1bWVudCggZWxlbSApOworICAgIH0K
KworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAor
ICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIHJhdHRyaWJ1dGVRdW90ZXMsICI9JyQxJ10iICk7CisK
KyAgICBpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmCisg
ICAgICAgICFjb21waWxlckNhY2hlWyBleHByICsgIiAiIF0gJiYKKyAgICAgICAgKCAhcmJ1Z2d5
TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJgorICAgICAgICAoICFy
YnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7CisKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsK
KworICAgICAgICAgICAgLy8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9u
IGRpc2Nvbm5lY3RlZCBub2RlcworICAgICAgICAgICAgaWYgKCByZXQgfHwgc3VwcG9ydC5kaXNj
b25uZWN0ZWRNYXRjaCB8fAorICAgICAgICAgICAgICAgICAgICAvLyBBcyB3ZWxsLCBkaXNjb25u
ZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudAorICAgICAgICAgICAgICAg
ICAgICAvLyBmcmFnbWVudCBpbiBJRSA5CisgICAgICAgICAgICAgICAgICAgIGVsZW0uZG9jdW1l
bnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkge30KKyAgICB9
CisKKyAgICByZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5s
ZW5ndGggPiAwOworfTsKKworU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVs
ZW0gKSB7CisgICAgLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisgICAgaWYgKCAoIGNv
bnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkgeworICAgICAg
ICBzZXREb2N1bWVudCggY29udGV4dCApOworICAgIH0KKyAgICByZXR1cm4gY29udGFpbnMoIGNv
bnRleHQsIGVsZW0gKTsKK307CisKK1NpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUg
KSB7CisgICAgLy8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkCisgICAgaWYgKCAoIGVsZW0u
b3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkgeworICAgICAgICBzZXREb2N1
bWVudCggZWxlbSApOworICAgIH0KKworICAgIHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFt
ZS50b0xvd2VyQ2FzZSgpIF0sCisgICAgICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0
LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KQorICAgICAgICB2YWwgPSBmbiAm
JiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/Cisg
ICAgICAgICAgICBmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOgorICAgICAgICAg
ICAgdW5kZWZpbmVkOworCisgICAgcmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAg
dmFsIDoKKyAgICAgICAgc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/Cisg
ICAgICAgICAgICBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDoKKyAgICAgICAgICAgICh2YWwg
PSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgPworICAgICAg
ICAgICAgICAgIHZhbC52YWx1ZSA6CisgICAgICAgICAgICAgICAgbnVsbDsKK307CisKK1Npenps
ZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCAiU3ludGF4
IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOworfTsKKworLyoqCisg
KiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzCisgKiBAcGFyYW0ge0Fy
cmF5TGlrZX0gcmVzdWx0cworICovCitTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1
bHRzICkgeworICAgIHZhciBlbGVtLAorICAgICAgICBkdXBsaWNhdGVzID0gW10sCisgICAgICAg
IGogPSAwLAorICAgICAgICBpID0gMDsKKworICAgIC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2Fu
IGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2UKKyAgICBoYXNEdXBsaWNh
dGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzOworICAgIHNvcnRJbnB1dCA9ICFzdXBwb3J0
LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApOworICAgIHJlc3VsdHMuc29ydCggc29y
dE9yZGVyICk7CisKKyAgICBpZiAoIGhhc0R1cGxpY2F0ZSApIHsKKyAgICAgICAgd2hpbGUgKCAo
ZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CisgICAgICAgICAgICBpZiAoIGVsZW0gPT09IHJlc3Vs
dHNbIGkgXSApIHsKKyAgICAgICAgICAgICAgICBqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKCBqLS0gKSB7CisgICAgICAg
ICAgICByZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0
cworICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNQor
ICAgIHNvcnRJbnB1dCA9IG51bGw7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK307CisKKy8qKgor
ICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBh
cnJheSBvZiBET00gbm9kZXMKKyAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbQorICovCitn
ZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICB2YXIgbm9k
ZSwKKyAgICAgICAgcmV0ID0gIiIsCisgICAgICAgIGkgPSAwLAorICAgICAgICBub2RlVHlwZSA9
IGVsZW0ubm9kZVR5cGU7CisKKyAgICBpZiAoICFub2RlVHlwZSApIHsKKyAgICAgICAgLy8gSWYg
bm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkKKyAgICAgICAgd2hp
bGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7CisgICAgICAgICAgICAvLyBEbyBub3QgdHJhdmVy
c2UgY29tbWVudCBub2RlcworICAgICAgICAgICAgcmV0ICs9IGdldFRleHQoIG5vZGUgKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5
IHx8IG5vZGVUeXBlID09PSAxMSApIHsKKyAgICAgICAgLy8gVXNlIHRleHRDb250ZW50IGZvciBl
bGVtZW50cworICAgICAgICAvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVu
Y3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKQorICAgICAgICBpZiAoIHR5cGVvZiBlbGVt
LnRleHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLnRl
eHRDb250ZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVHJhdmVyc2UgaXRz
IGNoaWxkcmVuCisgICAgICAgICAgICBmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVt
OyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKKyAgICAgICAgICAgICAgICByZXQgKz0gZ2V0
VGV4dCggZWxlbSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmICgg
bm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7CisgICAgICAgIHJldHVybiBlbGVt
Lm5vZGVWYWx1ZTsKKyAgICB9CisgICAgLy8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9j
ZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzCisKKyAgICByZXR1cm4gcmV0OworfTsKKworRXhwciA9
IFNpenpsZS5zZWxlY3RvcnMgPSB7CisKKyAgICAvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVz
ZXIKKyAgICBjYWNoZUxlbmd0aDogNTAsCisKKyAgICBjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlv
biwKKworICAgIG1hdGNoOiBtYXRjaEV4cHIsCisKKyAgICBhdHRySGFuZGxlOiB7fSwKKworICAg
IGZpbmQ6IHt9LAorCisgICAgcmVsYXRpdmU6IHsKKyAgICAgICAgIj4iOiB7IGRpcjogInBhcmVu
dE5vZGUiLCBmaXJzdDogdHJ1ZSB9LAorICAgICAgICAiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIg
fSwKKyAgICAgICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiB0cnVlIH0s
CisgICAgICAgICJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KKyAgICB9LAorCisgICAg
cHJlRmlsdGVyOiB7CisgICAgICAgICJBVFRSIjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAg
ICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSAp
OworCisgICAgICAgICAgICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0
aGVyIHF1b3RlZCBvciB1bnF1b3RlZAorICAgICAgICAgICAgbWF0Y2hbM10gPSAoIG1hdGNoWzNd
IHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5l
c2NhcGUgKTsKKworICAgICAgICAgICAgaWYgKCBtYXRjaFsyXSA9PT0gIn49IiApIHsKKyAgICAg
ICAgICAgICAgICBtYXRjaFszXSA9ICIgIiArIG1hdGNoWzNdICsgIiAiOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTsKKyAgICAgICAgfSwK
KworICAgICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisgICAgICAgICAgICAvKiBt
YXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElMRCJdCisgICAgICAgICAgICAgICAgMSB0eXBlIChv
bmx5fG50aHwuLi4pCisgICAgICAgICAgICAgICAgMiB3aGF0IChjaGlsZHxvZi10eXBlKQorICAg
ICAgICAgICAgICAgIDMgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxcZCpuKFsrLV1cZCspP3wuLi4p
CisgICAgICAgICAgICAgICAgNCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9c
ZCpufCkKKyAgICAgICAgICAgICAgICA1IHNpZ24gb2YgeG4tY29tcG9uZW50CisgICAgICAgICAg
ICAgICAgNiB4IG9mIHhuLWNvbXBvbmVudAorICAgICAgICAgICAgICAgIDcgc2lnbiBvZiB5LWNv
bXBvbmVudAorICAgICAgICAgICAgICAgIDggeSBvZiB5LWNvbXBvbmVudAorICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTsKKworICAg
ICAgICAgICAgaWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyApID09PSAibnRoIiApIHsKKyAgICAg
ICAgICAgICAgICAvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudAorICAgICAgICAgICAgICAgIGlm
ICggIW1hdGNoWzNdICkgeworICAgICAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNo
WzBdICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gbnVtZXJpYyB4
IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxECisgICAgICAgICAgICAgICAg
Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMQorICAg
ICAgICAgICAgICAgIG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2
XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSAiZXZlbiIgfHwgbWF0Y2hbM10gPT09ICJvZGQi
ICkgKTsKKyAgICAgICAgICAgICAgICBtYXRjaFs1XSA9ICsoICggbWF0Y2hbN10gKyBtYXRjaFs4
XSApIHx8IG1hdGNoWzNdID09PSAib2RkIiApOworCisgICAgICAgICAgICAvLyBvdGhlciB0eXBl
cyBwcm9oaWJpdCBhcmd1bWVudHMKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGNoWzNdICkg
eworICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICB9LAorCisgICAgICAgICJQ
U0VVRE8iOiBmdW5jdGlvbiggbWF0Y2ggKSB7CisgICAgICAgICAgICB2YXIgZXhjZXNzLAorICAg
ICAgICAgICAgICAgIHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdOworCisgICAgICAg
ICAgICBpZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFswXSApICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBB
Y2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pcworICAgICAgICAgICAgaWYgKCBtYXRjaFszXSAp
IHsKKyAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8ICIi
OworCisgICAgICAgICAgICAvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVk
IGFyZ3VtZW50cworICAgICAgICAgICAgfSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50
ZXN0KCB1bnF1b3RlZCApICYmCisgICAgICAgICAgICAgICAgLy8gR2V0IGV4Y2VzcyBmcm9tIHRv
a2VuaXplIChyZWN1cnNpdmVseSkKKyAgICAgICAgICAgICAgICAoZXhjZXNzID0gdG9rZW5pemUo
IHVucXVvdGVkLCB0cnVlICkpICYmCisgICAgICAgICAgICAgICAgLy8gYWR2YW5jZSB0byB0aGUg
bmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCisgICAgICAgICAgICAgICAgKGV4Y2VzcyA9IHVucXVv
dGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5s
ZW5ndGgpICkgeworCisgICAgICAgICAgICAgICAgLy8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5k
ZXgKKyAgICAgICAgICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwLCBleGNlc3Mg
KTsKKyAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3Mg
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV0dXJuIG9ubHkgY2FwdHVyZXMg
bmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpCisg
ICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTsKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICBmaWx0ZXI6IHsKKworICAgICAgICAiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1lU2Vs
ZWN0b3IgKSB7CisgICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJl
cGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAg
IHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSAiKiIgPworICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSA6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICAiQ0xBU1MiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkgeworICAg
ICAgICAgICAgdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyAiICIgXTsKKwor
ICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gfHwKKyAgICAgICAgICAgICAgICAocGF0dGVybiA9
IG5ldyBSZWdFeHAoICIoXnwiICsgd2hpdGVzcGFjZSArICIpIiArIGNsYXNzTmFtZSArICIoIiAr
IHdoaXRlc3BhY2UgKyAifCQpIiApKSAmJgorICAgICAgICAgICAgICAgIGNsYXNzQ2FjaGUoIGNs
YXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
YXR0ZXJuLnRlc3QoIHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gInN0cmluZyIgJiYgZWxlbS5j
bGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJiBl
bGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8fCAiIiApOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9LAorCisgICAgICAgICJBVFRSIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBj
aGVjayApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTsKKworICAgICAg
ICAgICAgICAgIGlmICggcmVzdWx0ID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRvciA9PT0gIiE9IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCAhb3BlcmF0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiIjsKKworICAg
ICAgICAgICAgICAgIHJldHVybiBvcGVyYXRvciA9PT0gIj0iID8gcmVzdWx0ID09PSBjaGVjayA6
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiIT0iID8gcmVzdWx0ICE9PSBjaGVj
ayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiXj0iID8gY2hlY2sgJiYgcmVz
dWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRv
ciA9PT0gIio9IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOgorICAg
ICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIiQ9IiA/IGNoZWNrICYmIHJlc3VsdC5zbGlj
ZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJh
dG9yID09PSAifj0iID8gKCAiICIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsICIgIiAp
ICsgIiAiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0b3IgPT09ICJ8PSIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hl
Y2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6CisgICAgICAgICAgICAgICAgICAgIGZh
bHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0hJTEQiOiBmdW5j
dGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgeworICAgICAgICAgICAg
dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gIm50aCIsCisgICAgICAgICAgICAg
ICAgZm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09ICJsYXN0IiwKKyAgICAgICAgICAgICAg
ICBvZlR5cGUgPSB3aGF0ID09PSAib2YtdHlwZSI7CisKKyAgICAgICAgICAgIHJldHVybiBmaXJz
dCA9PT0gMSAmJiBsYXN0ID09PSAwID8KKworICAgICAgICAgICAgICAgIC8vIFNob3J0Y3V0IGZv
ciA6bnRoLSoobikKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICEhZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAgICAgIH0g
OgorCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9k
ZSwgbm9kZUluZGV4LCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpciA9IHNpbXBs
ZSAhPT0gZm9yd2FyZCA/ICJuZXh0U2libGluZyIgOiAicHJldmlvdXNTaWJsaW5nIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCBwYXJlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDooZmlyc3R8
bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
c2ltcGxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZGlyICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9IG5vZGVbIGRpciBdKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2ZUeXBlID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkgPT09IG5hbWUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhh
dmVuJ3QgeWV0IGRvbmUgc28pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
ID0gZGlyID0gdHlwZSA9PT0gIm9ubHkiICYmICFzdGFydCAmJiAibmV4dFNpYmxpbmciOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5s
YXN0Q2hpbGQgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9uLXhtbCA6bnRoLWNo
aWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleAor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdh
eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsg
ZXhwYW5kbyBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9y
dDogSUUgPDkgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuZCBhZ2Fp
bnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRlckNhY2hlWyBub2RlLnVuaXF1
ZUlEIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IHVuaXF1
ZUNhY2hlWyB0eXBlIF0gfHwgW107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVz
WyBub2RlSW5kZXggXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5v
ZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0
aGUgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZmYgPSBub2RlSW5k
ZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAx
ICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBk
aWZmIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFp
bGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHVzZUNhY2hlICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChu
b2RlWyBleHBhbmRvIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBu
b2RlLnVuaXF1ZUlEIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChv
dXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5z
ICYmIGNhY2hlWyAxIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYgPSBu
b2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8geG1sIDpudGgtY2hpbGQoLi4uKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10
eXBlKC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpZmYgPT09IGZhbHNl
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHNhbWUgbG9v
cCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBu
b2RlWyBkaXIgXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZmYg
PSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggKCBvZlR5cGUgPworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ub2RlVHlwZSA9
PT0gMSApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytkaWZm
ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUg
dGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggdXNlQ2FjaGUgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0g
fHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8OSBvbmx5CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRy
b3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dGVy
Q2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZm
IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlID09PSBlbGVtICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4g
Y2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICBkaWZmIC09
IGxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwg
KCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgIlBT
RVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgLy8gcHNl
dWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisgICAgICAgICAgICAvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzCisgICAgICAgICAgICAv
LyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBh
cmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycworICAgICAgICAgICAgLy8gUmVtZW1iZXIg
dGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcworICAgICAgICAgICAgdmFyIGFy
Z3MsCisgICAgICAgICAgICAgICAgZm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIu
c2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAorICAgICAgICAgICAgICAgICAg
ICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1ZG8gKTsKKworICAg
ICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhh
dAorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0
ZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIC8vIGp1c3QgYXMgU2l6emxlIGRvZXMKKyAgICAgICAg
ICAgIGlmICggZm5bIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZm4oIGFy
Z3VtZW50ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEJ1dCBtYWludGFpbiBz
dXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworICAgICAgICAgICAgaWYgKCBmbi5sZW5ndGggPiAx
ICkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCAiIiwgYXJndW1l
bnQgXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3Bl
cnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KKyAgICAgICAgICAgICAgICAgICAgbWFya0Z1
bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gZm4oIHNl
ZWQsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG1hdGNoZWQu
bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4
IF0gPSBtYXRjaGVkW2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0pIDoKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTsKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZu
OworICAgICAgICB9CisgICAgfSwKKworICAgIHBzZXVkb3M6IHsKKyAgICAgICAgLy8gUG90ZW50
aWFsbHkgY29tcGxleCBwc2V1ZG9zCisgICAgICAgICJub3QiOiBtYXJrRnVuY3Rpb24oZnVuY3Rp
b24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgLy8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2Vk
IHRvIGNvbXBpbGUKKyAgICAgICAgICAgIC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5k
IHRyYWlsaW5nCisgICAgICAgICAgICAvLyBzcGFjZXMgYXMgY29tYmluYXRvcnMKKyAgICAgICAg
ICAgIHZhciBpbnB1dCA9IFtdLAorICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbXSwKKyAgICAg
ICAgICAgICAgICBtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIk
MSIgKSApOworCisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID8KKyAgICAg
ICAgICAgICAgICBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQs
IHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0sCisgICAgICAgICAgICAgICAg
ICAgICAgICB1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpID0gc2VlZC5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYAorICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGVs
ZW0gPSB1bm1hdGNoZWRbaV0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRb
aV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pIDoKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgICAgICAgICBp
bnB1dFswXSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIoIGlucHV0LCBudWxs
LCB4bWwsIHJlc3VsdHMgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qga2VlcCB0aGUg
ZWxlbWVudCAoaXNzdWUgIzI5OSkKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRbMF0gPSBudWxs
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJlc3VsdHMucG9wKCk7CisgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImhhcyI6IG1hcmtGdW5jdGlvbihmdW5j
dGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGgg
PiAwOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImNvbnRhaW5zIjog
bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAgdGV4dCA9IHRleHQu
cmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLnRleHRDb250ZW50
IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+
IC0xOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAgLy8gIldoZXRoZXIg
YW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3IKKyAgICAgICAg
Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUKKyAgICAg
ICAgLy8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQywKKyAgICAgICAgLy8gb3IgYmVn
aW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSAiLSIu
CisgICAgICAgIC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5n
dWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LgorICAgICAgICAvLyBU
aGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1l
LiIKKyAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVk
bworICAgICAgICAibGFuZyI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7CisgICAg
ICAgICAgICAvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyCisgICAgICAg
ICAgICBpZiAoICFyaWRlbnRpZmllci50ZXN0KGxhbmcgfHwgIiIpICkgeworICAgICAgICAgICAg
ICAgIFNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIGxhbmc6ICIgKyBsYW5nICk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVz
Y2FwZSApLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW1MYW5nOworICAgICAgICAgICAgICAgIGRvIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmxhbmcgOgorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoImxh
bmciKSkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1MYW5nID0gZWxlbUxhbmcu
dG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtTGFuZyA9
PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgIi0iICkgPT09IDA7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBh
cmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9OworICAgICAgICB9KSwKKworICAgICAgICAvLyBNaXNj
ZWxsYW5lb3VzCisgICAgICAgICJ0YXJnZXQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoOwor
ICAgICAgICAgICAgcmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkOwor
ICAgICAgICB9LAorCisgICAgICAgICJyb290IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICByZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTsKKyAgICAgICAgfSwKKworICAgICAgICAiZm9j
dXMiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBkb2N1
bWVudC5hY3RpdmVFbGVtZW50ICYmICghZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFz
Rm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7
CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gQm9vbGVhbiBwcm9wZXJ0aWVzCisgICAgICAgICJl
bmFibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNh
YmxlZCA9PT0gZmFsc2U7CisgICAgICAgIH0sCisKKyAgICAgICAgImRpc2FibGVkIjogZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsK
KyAgICAgICAgfSwKKworICAgICAgICAiY2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgLy8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQg
YW5kIHNlbGVjdGVkIGVsZW1lbnRzCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorICAgICAgICAgICAg
dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAg
cmV0dXJuIChub2RlTmFtZSA9PT0gImlucHV0IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVO
YW1lID09PSAib3B0aW9uIiAmJiAhIWVsZW0uc2VsZWN0ZWQpOworICAgICAgICB9LAorCisgICAg
ICAgICJzZWxlY3RlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gQWNjZXNz
aW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAorICAgICAgICAgICAg
Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseQorICAgICAgICAgICAgaWYgKCBlbGVt
LnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVk
SW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVk
ID09PSB0cnVlOworICAgICAgICB9LAorCisgICAgICAgIC8vIENvbnRlbnRzCisgICAgICAgICJl
bXB0eSI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG8KKyAgICAgICAgICAgIC8vIDplbXB0eSBpcyBu
ZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0
OyBlbnRpdHkgcmVmOiA1KSwKKyAgICAgICAgICAgIC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNv
bW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pCisgICAgICAgICAgICAv
LyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFy
IGFzIGNoaWxkcmVuCisgICAgICAgICAgICBmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBl
bGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0ubm9kZVR5cGUgPCA2ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0sCisKKyAgICAgICAgInBhcmVudCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgcmV0dXJuICFFeHByLnBzZXVkb3NbImVtcHR5Il0oIGVsZW0gKTsKKyAgICAgICAg
fSwKKworICAgICAgICAvLyBFbGVtZW50L2lucHV0IHR5cGVzCisgICAgICAgICJoZWFkZXIiOiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0u
bm9kZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiaW5wdXQiOiBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICAgICAgICAgIHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsK
KyAgICAgICAgfSwKKworICAgICAgICAiYnV0dG9uIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAg
ICAgIHJldHVybiBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gImJ1dHRvbiIgfHwg
bmFtZSA9PT0gImJ1dHRvbiI7CisgICAgICAgIH0sCisKKyAgICAgICAgInRleHQiOiBmdW5jdGlv
biggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBhdHRyOworICAgICAgICAgICAgcmV0dXJuIGVs
ZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJgorICAgICAgICAgICAgICAg
IGVsZW0udHlwZSA9PT0gInRleHQiICYmCisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJ
RTw4CisgICAgICAgICAgICAgICAgLy8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4s
ICJzZWFyY2giKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09ICJ0ZXh0IgorICAgICAgICAgICAg
ICAgICggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpKSA9PSBudWxsIHx8IGF0dHIu
dG9Mb3dlckNhc2UoKSA9PT0gInRleHQiICk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gUG9z
aXRpb24taW4tY29sbGVjdGlvbgorICAgICAgICAiZmlyc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNl
dWRvKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIFsgMCBdOworICAgICAgICB9KSwK
KworICAgICAgICAibGFzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNo
SW5kZXhlcywgbGVuZ3RoICkgeworICAgICAgICAgICAgcmV0dXJuIFsgbGVuZ3RoIC0gMSBdOwor
ICAgICAgICB9KSwKKworICAgICAgICAiZXEiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0
aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisgICAgICAgICAgICByZXR1
cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07CisgICAg
ICAgIH0pLAorCisgICAgICAgICJldmVuIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlv
biggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CisgICAgICAgICAgICB2YXIgaSA9IDA7CisgICAg
ICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHsKKyAgICAgICAgICAgICAgICBt
YXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSksCisKKyAgICAgICAgIm9kZCI6IGNyZWF0ZVBvc2l0
aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworICAgICAgICAg
ICAgdmFyIGkgPSAxOworICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7
CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAgIH0pLAorCisgICAgICAg
ICJsdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVu
Z3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJn
dW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsKKyAgICAgICAgICAgIGZvciAoIDsgLS1pID49IDA7
ICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwKKworICAg
ICAgICAiZ3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMs
IGxlbmd0aCwgYXJndW1lbnQgKSB7CisgICAgICAgICAgICB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/
IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7CisgICAgICAgICAgICBmb3IgKCA7ICsraSA8
IGxlbmd0aDsgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAgIH0p
CisgICAgfQorfTsKKworRXhwci5wc2V1ZG9zWyJudGgiXSA9IEV4cHIucHNldWRvc1siZXEiXTsK
KworLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3MKK2ZvciAoIGkgaW4geyByYWRpbzog
dHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTog
dHJ1ZSB9ICkgeworICAgIEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkg
KTsKK30KK2ZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7CisgICAg
RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTsKK30KKworLy8gRWFz
eSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzCitmdW5jdGlvbiBzZXRGaWx0ZXJzKCkg
e30KK3NldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zOwor
RXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTsKKwordG9rZW5pemUgPSBTaXp6bGUu
dG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHsKKyAgICB2YXIgbWF0
Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSwKKyAgICAgICAgc29GYXIsIGdyb3VwcywgcHJlRmls
dGVycywKKyAgICAgICAgY2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsKKwor
ICAgIGlmICggY2FjaGVkICkgeworICAgICAgICByZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hl
ZC5zbGljZSggMCApOworICAgIH0KKworICAgIHNvRmFyID0gc2VsZWN0b3I7CisgICAgZ3JvdXBz
ID0gW107CisgICAgcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOworCisgICAgd2hpbGUgKCBz
b0ZhciApIHsKKworICAgICAgICAvLyBDb21tYSBhbmQgZmlyc3QgcnVuCisgICAgICAgIGlmICgg
IW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgeworICAgICAgICAg
ICAgaWYgKCBtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25zdW1lIHRyYWls
aW5nIGNvbW1hcyBhcyB2YWxpZAorICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xpY2Uo
IG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Z3JvdXBzLnB1c2goICh0b2tlbnMgPSBbXSkgKTsKKyAgICAgICAgfQorCisgICAgICAgIG1hdGNo
ZWQgPSBmYWxzZTsKKworICAgICAgICAvLyBDb21iaW5hdG9ycworICAgICAgICBpZiAoIChtYXRj
aCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHsKKyAgICAgICAgICAgIG1hdGNoZWQg
PSBtYXRjaC5zaGlmdCgpOworICAgICAgICAgICAgdG9rZW5zLnB1c2goeworICAgICAgICAgICAg
ICAgIHZhbHVlOiBtYXRjaGVkLAorICAgICAgICAgICAgICAgIC8vIENhc3QgZGVzY2VuZGFudCBj
b21iaW5hdG9ycyB0byBzcGFjZQorICAgICAgICAgICAgICAgIHR5cGU6IG1hdGNoWzBdLnJlcGxh
Y2UoIHJ0cmltLCAiICIgKQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBzb0ZhciA9IHNv
RmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmls
dGVycworICAgICAgICBmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkgeworICAgICAgICAgICAg
aWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZp
bHRlcnNbIHR5cGUgXSB8fAorICAgICAgICAgICAgICAgIChtYXRjaCA9IHByZUZpbHRlcnNbIHR5
cGUgXSggbWF0Y2ggKSkpICkgeworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBtYXRjaC5zaGlm
dCgpOworICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWU6IG1hdGNoZWQsCisgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgIG1hdGNoZXM6IG1hdGNoCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggIW1hdGNoZWQgKSB7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbGVuZ3RoIG9m
IHRoZSBpbnZhbGlkIGV4Y2VzcworICAgIC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZworICAgIC8v
IE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2VucworICAgIHJldHVybiBw
YXJzZU9ubHkgPworICAgICAgICBzb0Zhci5sZW5ndGggOgorICAgICAgICBzb0ZhciA/CisgICAg
ICAgICAgICBTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOgorICAgICAgICAgICAgLy8gQ2FjaGUg
dGhlIHRva2VucworICAgICAgICAgICAgdG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNs
aWNlKCAwICk7Cit9OworCitmdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7CisgICAgdmFy
IGkgPSAwLAorICAgICAgICBsZW4gPSB0b2tlbnMubGVuZ3RoLAorICAgICAgICBzZWxlY3RvciA9
ICIiOworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICBzZWxlY3RvciArPSB0
b2tlbnNbaV0udmFsdWU7CisgICAgfQorICAgIHJldHVybiBzZWxlY3RvcjsKK30KKworZnVuY3Rp
b24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHsKKyAgICB2YXIg
ZGlyID0gY29tYmluYXRvci5kaXIsCisgICAgICAgIGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYm
IGRpciA9PT0gInBhcmVudE5vZGUiLAorICAgICAgICBkb25lTmFtZSA9IGRvbmUrKzsKKworICAg
IHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID8KKyAgICAgICAgLy8gQ2hlY2sgYWdhaW5zdCBjbG9z
ZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50CisgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBj
b250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0p
ICkgeworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05v
bkVsZW1lbnRzICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlciggZWxlbSwg
Y29udGV4dCwgeG1sICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9IDoKKworICAgICAgICAvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcg
ZWxlbWVudHMKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAg
ICAgICAgIHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsCisgICAgICAgICAg
ICAgICAgbmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07CisKKyAgICAgICAgICAgIC8v
IFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3Qg
YmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZworICAgICAgICAgICAgaWYgKCB4bWwgKSB7
CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVu
dHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRl
eHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
IChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0u
bm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9
IHt9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVy
dGllcyAoalF1ZXJ5IGdoLTE3MDkpCisgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNo
ZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlx
dWVJRCBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChvbGRDYWNoZSA9
IHVuaXF1ZUNhY2hlWyBkaXIgXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRD
YWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJl
c3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91
cyBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlWyBkaXIg
XSA9IG5ld0NhY2hlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBtYXRjaCBt
ZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIo
IGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9OworfQorCitmdW5jdGlvbiBlbGVtZW50TWF0Y2hl
ciggbWF0Y2hlcnMgKSB7CisgICAgcmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgPworICAgICAg
ICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgdmFyIGkgPSBt
YXRjaGVycy5sZW5ndGg7CisgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSA6CisgICAgICAgIG1hdGNo
ZXJzWzBdOworfQorCitmdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4
dHMsIHJlc3VsdHMgKSB7CisgICAgdmFyIGkgPSAwLAorICAgICAgICBsZW4gPSBjb250ZXh0cy5s
ZW5ndGg7CisgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgIFNpenpsZSggc2Vs
ZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7CisgICAgfQorICAgIHJldHVybiByZXN1bHRz
OworfQorCitmdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4
dCwgeG1sICkgeworICAgIHZhciBlbGVtLAorICAgICAgICBuZXdVbm1hdGNoZWQgPSBbXSwKKyAg
ICAgICAgaSA9IDAsCisgICAgICAgIGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsCisgICAgICAgIG1h
cHBlZCA9IG1hcCAhPSBudWxsOworCisgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAg
ICAgIGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgeworICAgICAgICAgICAgaWYgKCAhZmls
dGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAg
bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICBpZiAoIG1hcHBlZCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgbWFwLnB1c2goIGkgKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbmV3VW5tYXRj
aGVkOworfQorCitmdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRj
aGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7CisgICAgaWYgKCBw
b3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7CisgICAgICAgIHBvc3RGaWx0
ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7CisgICAgfQorICAgIGlmICggcG9zdEZpbmRl
ciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkgeworICAgICAgICBwb3N0RmluZGVyID0gc2V0
TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7CisgICAgfQorICAgIHJldHVybiBt
YXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHsKKyAg
ICAgICAgdmFyIHRlbXAsIGksIGVsZW0sCisgICAgICAgICAgICBwcmVNYXAgPSBbXSwKKyAgICAg
ICAgICAgIHBvc3RNYXAgPSBbXSwKKyAgICAgICAgICAgIHByZWV4aXN0aW5nID0gcmVzdWx0cy5s
ZW5ndGgsCisKKyAgICAgICAgICAgIC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBv
ciBjb250ZXh0CisgICAgICAgICAgICBlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cygg
c2VsZWN0b3IgfHwgIioiLCBjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0
LCBbXSApLAorCisgICAgICAgICAgICAvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQs
IHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb24KKyAgICAg
ICAgICAgIG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgPwor
ICAgICAgICAgICAgICAgIGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRl
eHQsIHhtbCApIDoKKyAgICAgICAgICAgICAgICBlbGVtcywKKworICAgICAgICAgICAgbWF0Y2hl
ck91dCA9IG1hdGNoZXIgPworICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBwb3N0Rmlu
ZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0
aW5nIHJlc3VsdHMsCisgICAgICAgICAgICAgICAgcG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVG
aWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgPworCisgICAgICAgICAgICAgICAg
ICAgIC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQorICAgICAgICAg
ICAgICAgICAgICBbXSA6CisKKyAgICAgICAgICAgICAgICAgICAgLy8gLi4ub3RoZXJ3aXNlIHVz
ZSByZXN1bHRzIGRpcmVjdGx5CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgOgorICAgICAg
ICAgICAgICAgIG1hdGNoZXJJbjsKKworICAgICAgICAvLyBGaW5kIHByaW1hcnkgbWF0Y2hlcwor
ICAgICAgICBpZiAoIG1hdGNoZXIgKSB7CisgICAgICAgICAgICBtYXRjaGVyKCBtYXRjaGVySW4s
IG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXBw
bHkgcG9zdEZpbHRlcgorICAgICAgICBpZiAoIHBvc3RGaWx0ZXIgKSB7CisgICAgICAgICAgICB0
ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTsKKyAgICAgICAgICAgIHBvc3RG
aWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTsKKworICAgICAgICAgICAgLy8gVW4tbWF0
Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJbgorICAg
ICAgICAgICAgaSA9IHRlbXAubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IHRlbXBbaV0pICkgeworICAgICAgICAgICAgICAg
ICAgICBtYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBd
ID0gZWxlbSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKCBzZWVkICkgeworICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyIHx8IHBy
ZUZpbHRlciApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHBvc3RGaW5kZXIgKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRo
aXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0cworICAgICAgICAgICAgICAg
ICAgICB0ZW1wID0gW107CisgICAgICAgICAgICAgICAgICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEg
ZmluYWwgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goIChtYXRj
aGVySW5baV0gPSBlbGVtKSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBvc3RGaW5kZXIoIG51bGwsIChtYXRj
aGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8g
a2VlcCB0aGVtIHN5bmNocm9uaXplZAorICAgICAgICAgICAgICAgIGkgPSBtYXRjaGVyT3V0Lmxl
bmd0aDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0p
ID4gLTEgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbdGVtcF0gPSAhKHJlc3Vs
dHNbdGVtcF0gPSBlbGVtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywg
dGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1hdGNoZXJPdXQgPSBjb25kZW5zZSgKKyAgICAgICAgICAgICAgICBtYXRjaGVyT3V0ID09
PSByZXN1bHRzID8KKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4
aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ck91dAorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAg
ICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwg
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVz
dWx0cywgbWF0Y2hlck91dCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9
CisKK2Z1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7CisgICAgdmFyIGNoZWNr
Q29udGV4dCwgbWF0Y2hlciwgaiwKKyAgICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKKyAgICAg
ICAgbGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSwKKyAg
ICAgICAgaW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZl
WyIgIl0sCisgICAgICAgIGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCwKKworICAgICAgICAv
LyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFj
aGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKQorICAgICAgICBtYXRjaENvbnRleHQgPSBh
ZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVt
ID09PSBjaGVja0NvbnRleHQ7CisgICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwK
KyAgICAgICAgbWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAt
MTsKKyAgICAgICAgfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAorICAgICAgICBtYXRjaGVy
cyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgIHZhciBy
ZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0
Q29udGV4dCApICkgfHwgKAorICAgICAgICAgICAgICAgIChjaGVja0NvbnRleHQgPSBjb250ZXh0
KS5ub2RlVHlwZSA/CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQ29udGV4dCggZWxlbSwgY29u
dGV4dCwgeG1sICkgOgorICAgICAgICAgICAgICAgICAgICBtYXRjaEFueUNvbnRleHQoIGVsZW0s
IGNvbnRleHQsIHhtbCApICk7CisgICAgICAgICAgICAvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxl
bWVudCAoaXNzdWUgIzI5OSkKKyAgICAgICAgICAgIGNoZWNrQ29udGV4dCA9IG51bGw7CisgICAg
ICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9IF07CisKKyAgICBmb3IgKCA7IGkgPCBsZW47
IGkrKyApIHsKKyAgICAgICAgaWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tp
XS50eXBlIF0pICkgeworICAgICAgICAgICAgbWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoZWxl
bWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIpIF07CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHko
IG51bGwsIHRva2Vuc1tpXS5tYXRjaGVzICk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiBzcGVj
aWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyCisgICAgICAgICAgICBpZiAoIG1h
dGNoZXJbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHJl
bGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKKyAgICAgICAgICAg
ICAgICBqID0gKytpOworICAgICAgICAgICAgICAgIGZvciAoIDsgaiA8IGxlbjsgaisrICkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0g
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0TWF0Y2hlcigK
KyAgICAgICAgICAgICAgICAgICAgaSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICks
CisgICAgICAgICAgICAgICAgICAgIGkgPiAxICYmIHRvU2VsZWN0b3IoCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29t
YmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYAorICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmNvbmNhdCh7IHZhbHVlOiB0b2tl
bnNbIGkgLSAyIF0udHlwZSA9PT0gIiAiID8gIioiIDogIiIgfSkKKyAgICAgICAgICAgICAgICAg
ICAgKS5yZXBsYWNlKCBydHJpbSwgIiQxIiApLAorICAgICAgICAgICAgICAgICAgICBtYXRjaGVy
LAorICAgICAgICAgICAgICAgICAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5z
LnNsaWNlKCBpLCBqICkgKSwKKyAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiBtYXRjaGVy
RnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLAorICAgICAgICAgICAg
ICAgICAgICBqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApCisgICAgICAgICAgICAgICAg
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMg
KTsKK30KKworZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hl
cnMsIHNldE1hdGNoZXJzICkgeworICAgIHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+
IDAsCisgICAgICAgIGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLAorICAg
ICAgICBzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRz
LCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICB2YXIgZWxlbSwgaiwgbWF0Y2hlciwKKyAgICAg
ICAgICAgICAgICBtYXRjaGVkQ291bnQgPSAwLAorICAgICAgICAgICAgICAgIGkgPSAiMCIsCisg
ICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gc2VlZCAmJiBbXSwKKyAgICAgICAgICAgICAgICBz
ZXRNYXRjaGVkID0gW10sCisgICAgICAgICAgICAgICAgY29udGV4dEJhY2t1cCA9IG91dGVybW9z
dENvbnRleHQsCisgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIg
c2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dAorICAgICAgICAgICAgICAgIGVsZW1z
ID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kWyJUQUciXSggIioiLCBvdXRlcm1vc3Qg
KSwKKyAgICAgICAgICAgICAgICAvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRo
ZSBvdXRlcm1vc3QgbWF0Y2hlcgorICAgICAgICAgICAgICAgIGRpcnJ1bnNVbmlxdWUgPSAoZGly
cnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEp
LAorICAgICAgICAgICAgICAgIGxlbiA9IGVsZW1zLmxlbmd0aDsKKworICAgICAgICAgICAgaWYg
KCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICAgICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRl
eHQgPT09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGly
ZWN0bHkgdG8gcmVzdWx0cworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU8OSwgU2FmYXJpCisg
ICAgICAgICAgICAvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogImxlbmd0aCI7
IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkCisgICAgICAgICAgICBm
b3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaiA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICggIWNvbnRleHQgJiYgZWxlbS5v
d25lckRvY3VtZW50ICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
dERvY3VtZW50KCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICB4bWwgPSAhZG9jdW1l
bnRJc0hUTUw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIG91dGVy
bW9zdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVycworICAgICAg
ICAgICAgICAgIGlmICggYnlTZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZXkgd2ls
bCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlZENvdW50LS07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1h
dGNoZWQgb3Igbm90CisgICAgICAgICAgICAgICAgICAgIGlmICggc2VlZCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRp
bmcgaXQgdG8gYG1hdGNoZWRDb3VudGAKKyAgICAgICAgICAgIC8vIG1ha2VzIHRoZSBsYXR0ZXIg
bm9ubmVnYXRpdmUuCisgICAgICAgICAgICBtYXRjaGVkQ291bnQgKz0gaTsKKworICAgICAgICAg
ICAgLy8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzCisgICAgICAgICAg
ICAvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQg
ZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgCisgICAgICAgICAgICAvLyBlcXVhbHMgYGlg
KSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9v
cCBiZWNhdXNlIHdlIGhhdmUKKyAgICAgICAgICAgIC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5k
IG5vIHNlZWQuCisgICAgICAgICAgICAvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmlu
ZyAiMCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdAorICAg
ICAgICAgICAgLy8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSAiMDAiIGBtYXRjaGVkQ291
bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzbworICAgICAgICAgICAgLy8gbnVt
ZXJpY2FsbHkgemVyby4KKyAgICAgICAgICAgIGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENv
dW50ICkgeworICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgIHdoaWxlICgg
KG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqKytdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQg
Zm9yIHNvcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVkQ291bnQgPiAwICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxs
KCByZXN1bHRzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFs
IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRN
YXRjaGVkICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWRkIG1h
dGNoZXMgdG8gcmVzdWx0cworICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNl
dE1hdGNoZWQgKTsKKworICAgICAgICAgICAgICAgIC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1
Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZwor
ICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVu
Z3RoID4gMCAmJgorICAgICAgICAgICAgICAgICAgICAoIG1hdGNoZWRDb3VudCArIHNldE1hdGNo
ZXJzLmxlbmd0aCApID4gMSApIHsKKworICAgICAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVl
U29ydCggcmVzdWx0cyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1h
dGNoZXJzCisgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBk
aXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0
ID0gY29udGV4dEJhY2t1cDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHVu
bWF0Y2hlZDsKKyAgICAgICAgfTsKKworICAgIHJldHVybiBieVNldCA/CisgICAgICAgIG1hcmtG
dW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOgorICAgICAgICBzdXBlck1hdGNoZXI7Cit9CisKK2Nv
bXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50
ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CisgICAgdmFyIGksCisgICAgICAgIHNldE1hdGNoZXJzID0g
W10sCisgICAgICAgIGVsZW1lbnRNYXRjaGVycyA9IFtdLAorICAgICAgICBjYWNoZWQgPSBjb21w
aWxlckNhY2hlWyBzZWxlY3RvciArICIgIiBdOworCisgICAgaWYgKCAhY2FjaGVkICkgeworICAg
ICAgICAvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBj
YW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnQKKyAgICAgICAgaWYgKCAhbWF0Y2ggKSB7
CisgICAgICAgICAgICBtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApOworICAgICAgICB9Cisg
ICAgICAgIGkgPSBtYXRjaC5sZW5ndGg7CisgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAg
ICAgICAgY2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7CisgICAgICAgICAg
ICBpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkgeworICAgICAgICAgICAgICAgIHNldE1hdGNoZXJz
LnB1c2goIGNhY2hlZCApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBl
bGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24KKyAgICAgICAgY2FjaGVk
ID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxl
bWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7CisKKyAgICAgICAgLy8gU2F2ZSBzZWxlY3Rv
ciBhbmQgdG9rZW5pemF0aW9uCisgICAgICAgIGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yOwor
ICAgIH0KKyAgICByZXR1cm4gY2FjaGVkOworfTsKKworLyoqCisgKiBBIGxvdy1sZXZlbCBzZWxl
Y3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkCisgKiAgc2Vs
ZWN0b3IgZnVuY3Rpb25zCisgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBz
ZWxlY3RvciBvciBhIHByZS1jb21waWxlZAorICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdp
dGggU2l6emxlLmNvbXBpbGUKKyAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dAorICogQHBhcmFt
IHtBcnJheX0gW3Jlc3VsdHNdCisgKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxl
bWVudHMgdG8gbWF0Y2ggYWdhaW5zdAorICovCitzZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVu
Y3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgeworICAgIHZhciBpLCB0
b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLAorICAgICAgICBjb21waWxlZCA9IHR5cGVvZiBzZWxl
Y3RvciA9PT0gImZ1bmN0aW9uIiAmJiBzZWxlY3RvciwKKyAgICAgICAgbWF0Y2ggPSAhc2VlZCAm
JiB0b2tlbml6ZSggKHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IpICk7
CisKKyAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKKworICAgIC8vIFRyeSB0byBtaW5pbWl6
ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFu
ZCBubyBzZWVkCisgICAgLy8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250
ZXh0KQorICAgIGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkgeworCisgICAgICAgIC8vIFJlZHVj
ZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElECisgICAg
ICAgIHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTsKKyAgICAgICAgaWYg
KCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09ICJJRCIg
JiYKKyAgICAgICAgICAgICAgICBzdXBwb3J0LmdldEJ5SWQgJiYgY29udGV4dC5ub2RlVHlwZSA9
PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJgorICAgICAgICAgICAgICAgIEV4cHIucmVsYXRpdmVb
IHRva2Vuc1sxXS50eXBlIF0gKSB7CisKKyAgICAgICAgICAgIGNvbnRleHQgPSAoIEV4cHIuZmlu
ZFsiSUQiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKSwg
Y29udGV4dCApIHx8IFtdIClbMF07CisgICAgICAgICAgICBpZiAoICFjb250ZXh0ICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAgICAgICAgICAvLyBQcmVjb21waWxl
ZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVs
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb21waWxlZCApIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGgg
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRv
LWxlZnQgbWF0Y2hpbmcKKyAgICAgICAgaSA9IG1hdGNoRXhwclsibmVlZHNDb250ZXh0Il0udGVz
dCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoOworICAgICAgICB3aGlsZSAoIGktLSAp
IHsKKyAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOworCisgICAgICAgICAgICAvLyBBYm9y
dCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yCisgICAgICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVb
ICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7
CisgICAgICAgICAgICAgICAgLy8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGlu
ZyBzaWJsaW5nIGNvbWJpbmF0b3JzCisgICAgICAgICAgICAgICAgaWYgKCAoc2VlZCA9IGZpbmQo
CisgICAgICAgICAgICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBl
LCBmdW5lc2NhcGUgKSwKKyAgICAgICAgICAgICAgICAgICAgcnNpYmxpbmcudGVzdCggdG9rZW5z
WzBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4
dAorICAgICAgICAgICAgICAgICkpICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHNl
ZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseQorICAg
ICAgICAgICAgICAgICAgICB0b2tlbnMuc3BsaWNlKCBpLCAxICk7CisgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9u
IGlmIG9uZSBpcyBub3QgcHJvdmlkZWQKKyAgICAvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQg
cmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlCisgICAgKCBj
b21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKAorICAgICAgICBzZWVkLAor
ICAgICAgICBjb250ZXh0LAorICAgICAgICAhZG9jdW1lbnRJc0hUTUwsCisgICAgICAgIHJlc3Vs
dHMsCisgICAgICAgICFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVz
dENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQKKyAgICApOworICAgIHJl
dHVybiByZXN1bHRzOworfTsKKworLy8gT25lLXRpbWUgYXNzaWdubWVudHMKKworLy8gU29ydCBz
dGFiaWxpdHkKK3N1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIiIpLnNvcnQoIHNv
cnRPcmRlciApLmpvaW4oIiIpID09PSBleHBhbmRvOworCisvLyBTdXBwb3J0OiBDaHJvbWUgMTQt
MzUrCisvLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRv
IHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uCitzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhh
c0R1cGxpY2F0ZTsKKworLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50
CitzZXREb2N1bWVudCgpOworCisvLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYu
MC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KQorLy8gRGV0YWNoZWQgbm9kZXMgY29u
Zm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqCitzdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFz
c2VydChmdW5jdGlvbiggZGl2MSApIHsKKyAgICAvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1
cm5zIDQgKGZvbGxvd2luZykKKyAgICByZXR1cm4gZGl2MS5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
biggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikgKSAmIDE7Cit9KTsKKworLy8gU3VwcG9y
dDogSUU8OAorLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgImludGVycG9sYXRpb24iCisv
LyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44
NSUyOS5hc3B4CitpZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICBkaXYuaW5uZXJI
VE1MID0gIjxhIGhyZWY9JyMnPjwvYT4iOworICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRB
dHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiIDsKK30pICkgeworICAgIGFkZEhhbmRsZSggInR5cGV8
aHJlZnxoZWlnaHR8d2lkdGgiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisgICAg
ICAgIGlmICggIWlzWE1MICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRl
KCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJ0eXBlIiA/IDEgOiAyICk7CisgICAgICAg
IH0KKyAgICB9KTsKK30KKworLy8gU3VwcG9ydDogSUU8OQorLy8gVXNlIGRlZmF1bHRWYWx1ZSBp
biBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoInZhbHVlIikKK2lmICggIXN1cHBvcnQuYXR0cmlidXRl
cyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgZGl2LmlubmVySFRNTCA9ICI8aW5w
dXQvPiI7CisgICAgZGl2LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCAidmFsdWUiLCAiIiApOwor
ICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9PT0gIiI7
Cit9KSApIHsKKyAgICBhZGRIYW5kbGUoICJ2YWx1ZSIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBp
c1hNTCApIHsKKyAgICAgICAgaWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSAiaW5wdXQiICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVl
OworICAgICAgICB9CisgICAgfSk7Cit9CisKKy8vIFN1cHBvcnQ6IElFPDkKKy8vIFVzZSBnZXRB
dHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXMKK2lm
ICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAgIHJldHVybiBkaXYuZ2V0QXR0cmlidXRl
KCJkaXNhYmxlZCIpID09IG51bGw7Cit9KSApIHsKKyAgICBhZGRIYW5kbGUoIGJvb2xlYW5zLCBm
dW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisgICAgICAgIHZhciB2YWw7CisgICAgICAg
IGlmICggIWlzWE1MICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1
ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6CisgICAgICAgICAgICAgICAgICAgICh2YWwgPSBlbGVt
LmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/CisgICAgICAgICAg
ICAgICAgICAgIHZhbC52YWx1ZSA6CisgICAgICAgICAgICAgICAgbnVsbDsKKyAgICAgICAgfQor
ICAgIH0pOworfQorCityZXR1cm4gU2l6emxlOworCit9KSggd2luZG93ICk7CisKKworCitqUXVl
cnkuZmluZCA9IFNpenpsZTsKK2pRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9yczsKK2pRdWVy
eS5leHByWyAiOiIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7CitqUXVlcnkudW5pcXVlU29ydCA9
IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDsKK2pRdWVyeS50ZXh0ID0gU2l6emxl
LmdldFRleHQ7CitqUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7CitqUXVlcnkuY29udGFp
bnMgPSBTaXp6bGUuY29udGFpbnM7CisKKworCit2YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRp
ciwgdW50aWwgKSB7CisgICAgdmFyIG1hdGNoZWQgPSBbXSwKKyAgICAgICAgdHJ1bmNhdGUgPSB1
bnRpbCAhPT0gdW5kZWZpbmVkOworCisgICAgd2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSAp
ICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7CisgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9
PT0gMSApIHsKKyAgICAgICAgICAgIGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMo
IHVudGlsICkgKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtYXRjaGVkLnB1c2goIGVsZW0gKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gbWF0Y2hlZDsKK307CisKKwordmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7
CisgICAgdmFyIG1hdGNoZWQgPSBbXTsKKworICAgIGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxp
bmcgKSB7CisgICAgICAgIGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgewor
ICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBuICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gbWF0Y2hlZDsKK307CisKKwordmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5t
YXRjaC5uZWVkc0NvbnRleHQ7CisKK3ZhciByc2luZ2xlVGFnID0gKCAvXjwoW1x3LV0rKVxzKlwv
Pz4oPzo8XC9cMT58KSQvICk7CisKKworCit2YXIgcmlzU2ltcGxlID0gL14uW146I1xbXC4sXSok
LzsKKworLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVy
IGFuZCBub3QKK2Z1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkgewor
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkgeworICAgICAgICByZXR1
cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAgICAg
ICAgIC8qIGpzaGludCAtVzAxOCAqLworICAgICAgICAgICAgcmV0dXJuICEhcXVhbGlmaWVyLmNh
bGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90OworICAgICAgICB9ICk7CisKKyAgICB9CisKKyAg
ICBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVw
KCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gKCBlbGVt
ID09PSBxdWFsaWZpZXIgKSAhPT0gbm90OworICAgICAgICB9ICk7CisKKyAgICB9CisKKyAgICBp
ZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgeworICAgICAgICBpZiAoIHJpc1Np
bXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZmls
dGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTsKKyAgICAgICAgfQorCisgICAgICAgIHF1
YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMgKTsKKyAgICB9CisK
KyAgICByZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICAgICAgcmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09
IG5vdDsKKyAgICB9ICk7Cit9CisKK2pRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxl
bXMsIG5vdCApIHsKKyAgICB2YXIgZWxlbSA9IGVsZW1zWyAwIF07CisKKyAgICBpZiAoIG5vdCAp
IHsKKyAgICAgICAgZXhwciA9ICI6bm90KCIgKyBleHByICsgIikiOworICAgIH0KKworICAgIHJl
dHVybiBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSA/CisgICAgICAg
IGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBb
XSA6CisgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVt
cywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9
PT0gMTsKKyAgICAgICAgfSApICk7Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgZmlu
ZDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgaSwKKyAgICAgICAgICAgIGxl
biA9IHRoaXMubGVuZ3RoLAorICAgICAgICAgICAgcmV0ID0gW10sCisgICAgICAgICAgICBzZWxm
ID0gdGhpczsKKworICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5m
aWx0ZXIoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGVu
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxm
WyBpIF0sIHRoaXMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAp
ICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgewor
ICAgICAgICAgICAgalF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gTmVlZGVkIGJlY2F1c2UgJCggc2VsZWN0b3IsIGNvbnRleHQg
KSBiZWNvbWVzICQoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApCisgICAgICAgIHJldCA9IHRo
aXMucHVzaFN0YWNrKCBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZSggcmV0ICkgOiByZXQgKTsKKyAg
ICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciA/IHRoaXMuc2VsZWN0b3IgKyAiICIg
KyBzZWxlY3RvciA6IHNlbGVjdG9yOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisgICAg
ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApOworICAgIH0sCisg
ICAgbm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7CisgICAgfSwKKyAg
ICBpczogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gISF3aW5ub3coCisg
ICAgICAgICAgICB0aGlzLAorCisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25h
bC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0
CisgICAgICAgICAgICAvLyBzbyAkKCJwOmZpcnN0IikuaXMoInA6bGFzdCIpIHdvbid0IHJldHVy
biB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byAicCIuCisgICAgICAgICAgICB0eXBlb2Ygc2VsZWN0
b3IgPT09ICJzdHJpbmciICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/CisgICAg
ICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvciApIDoKKyAgICAgICAgICAgICAgICBzZWxlY3Rv
ciB8fCBbXSwKKyAgICAgICAgICAgIGZhbHNlCisgICAgICAgICkubGVuZ3RoOworICAgIH0KK30g
KTsKKworCisvLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdAorCisKKy8vIEEgY2VudHJhbCBy
ZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KQordmFyIHJvb3RqUXVlcnksCisK
KyAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5ncworICAgIC8vIFBy
aW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgj
OTUyMSkKKyAgICAvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0
IHdpdGggPCkKKyAgICBycXVpY2tFeHByID0gL14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3
LV0qKSkkLywKKworICAgIGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3Rv
ciwgY29udGV4dCwgcm9vdCApIHsKKyAgICAgICAgdmFyIG1hdGNoLCBlbGVtOworCisgICAgICAg
IC8vIEhBTkRMRTogJCgiIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSkKKyAgICAg
ICAgaWYgKCAhc2VsZWN0b3IgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpR
dWVyeQorICAgICAgICAvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIx
MDEpCisgICAgICAgIHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7CisKKyAgICAgICAgLy8gSGFu
ZGxlIEhUTUwgc3RyaW5ncworICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmlu
ZyIgKSB7CisgICAgICAgICAgICBpZiAoIHNlbGVjdG9yWyAwIF0gPT09ICI8IiAmJgorICAgICAg
ICAgICAgICAgIHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09ICI+IiAmJgorICAg
ICAgICAgICAgICAgIHNlbGVjdG9yLmxlbmd0aCA+PSAzICkgeworCisgICAgICAgICAgICAgICAg
Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRN
TCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKKyAgICAgICAgICAgICAgICBtYXRjaCA9IFsgbnVs
bCwgc2VsZWN0b3IsIG51bGwgXTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBz
cGVjaWZpZWQgZm9yICNpZAorICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0g
fHwgIWNvbnRleHQgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChodG1sKSAt
PiAkKGFycmF5KQorICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbIDEgXSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0
WyAwIF0gOiBjb250ZXh0OworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wdGlvbiB0byBydW4g
c2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdAorICAgICAgICAgICAgICAgICAgICAvLyBJ
bnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3Qg
cHJlc2VudAorICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5w
YXJzZUhUTUwoCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsgMSBdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25l
ckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUKKyAgICAgICAgICAgICAgICAgICAgKSApOworCisgICAgICAgICAgICAgICAgICAgIC8v
IEhBTkRMRTogJChodG1sLCBwcm9wcykKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByc2luZ2xl
VGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCAp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbWF0Y2ggaW4gY29udGV4dCApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBh
cmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0g
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0
IGFzIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBt
YXRjaCBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisKKyAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoI2lkKQorICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApOworCisgICAgICAgICAgICAgICAgICAgIC8vIFN1
cHBvcnQ6IEJsYWNrYmVycnkgNC42CisgICAgICAgICAgICAgICAgICAgIC8vIGdFQklEIHJldHVy
bnMgbm9kZXMgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAoIzY5NjMpCisgICAgICAgICAgICAg
ICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkg
b2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzWyAwIF0gPSBlbGVtOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBIQU5E
TEU6ICQoZXhwciwgJCguLi4pKQorICAgICAgICAgICAgfSBlbHNlIGlmICggIWNvbnRleHQgfHwg
Y29udGV4dC5qcXVlcnkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICggY29udGV4dCB8fCBy
b290ICkuZmluZCggc2VsZWN0b3IgKTsKKworICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIs
IGNvbnRleHQpCisgICAgICAgICAgICAvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAk
KGNvbnRleHQpLmZpbmQoZXhwcikKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEhBTkRMRTogJChET01FbGVtZW50KQorICAgICAg
ICB9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgIHRoaXMuY29u
dGV4dCA9IHRoaXNbIDAgXSA9IHNlbGVjdG9yOworICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAx
OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisKKyAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0
aW9uKQorICAgICAgICAvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKKyAgICAgICAgfSBl
bHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICByb290LnJl
YWR5KCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgaW1tZWRpYXRl
bHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnQKKyAgICAgICAgICAgICAgICBzZWxlY3RvciggalF1
ZXJ5ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0
b3I7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0OworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7
CisgICAgfTsKKworLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlw
ZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgoraW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47CisK
Ky8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2UKK3Jvb3RqUXVlcnkgPSBqUXVlcnkoIGRv
Y3VtZW50ICk7CisKKwordmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50
aWx8QWxsKSkvLAorCisgICAgLy8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlx
dWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXQKKyAgICBndWFyYW50ZWVkVW5p
cXVlID0geworICAgICAgICBjaGlsZHJlbjogdHJ1ZSwKKyAgICAgICAgY29udGVudHM6IHRydWUs
CisgICAgICAgIG5leHQ6IHRydWUsCisgICAgICAgIHByZXY6IHRydWUKKyAgICB9OworCitqUXVl
cnkuZm4uZXh0ZW5kKCB7CisgICAgaGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkgeworICAgICAgICB2
YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksCisgICAgICAgICAgICBsID0gdGFy
Z2V0cy5sZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sg
aSBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBjbG9zZXN0
OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkgeworICAgICAgICB2YXIgY3VyLAorICAg
ICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGgsCisgICAgICAgICAg
ICBtYXRjaGVkID0gW10sCisgICAgICAgICAgICBwb3MgPSBybmVlZHNDb250ZXh0LnRlc3QoIHNl
bGVjdG9ycyApIHx8IHR5cGVvZiBzZWxlY3RvcnMgIT09ICJzdHJpbmciID8KKyAgICAgICAgICAg
ICAgICBqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6CisgICAg
ICAgICAgICAgICAgMDsKKworICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAg
ICAgICBmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9
IGN1ci5wYXJlbnROb2RlICkgeworCisgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHNraXAgZG9j
dW1lbnQgZnJhZ21lbnRzCisgICAgICAgICAgICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPCAxMSAm
JiAoIHBvcyA/CisgICAgICAgICAgICAgICAgICAgIHBvcy5pbmRleCggY3VyICkgPiAtMSA6CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxl
CisgICAgICAgICAgICAgICAgICAgIGN1ci5ub2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyAp
ICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBjdXIgKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0
aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApOworICAgIH0s
CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRo
ZSBzZXQKKyAgICBpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgLy8gTm8gYXJn
dW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQKKyAgICAgICAgaWYgKCAhZWxlbSApIHsKKyAg
ICAgICAgICAgIHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8g
dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEluZGV4IGluIHNlbGVjdG9yCisgICAgICAgIGlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJp
bmciICkgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICks
IHRoaXNbIDAgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gTG9jYXRlIHRoZSBwb3NpdGlv
biBvZiB0aGUgZGVzaXJlZCBlbGVtZW50CisgICAgICAgIHJldHVybiBpbmRleE9mLmNhbGwoIHRo
aXMsCisKKyAgICAgICAgICAgIC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhl
IGZpcnN0IGVsZW1lbnQgaXMgdXNlZAorICAgICAgICAgICAgZWxlbS5qcXVlcnkgPyBlbGVtWyAw
IF0gOiBlbGVtCisgICAgICAgICk7CisgICAgfSwKKworICAgIGFkZDogZnVuY3Rpb24oIHNlbGVj
dG9yLCBjb250ZXh0ICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soCisgICAgICAg
ICAgICBqUXVlcnkudW5pcXVlU29ydCgKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHRo
aXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApCisgICAgICAgICAgICApCisg
ICAgICAgICk7CisgICAgfSwKKworICAgIGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID8KKyAgICAgICAgICAg
IHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yICkKKyAg
ICAgICAgKTsKKyAgICB9Cit9ICk7CisKK2Z1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkgewor
ICAgIHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkg
e30KKyAgICByZXR1cm4gY3VyOworfQorCitqUXVlcnkuZWFjaCggeworICAgIHBhcmVudDogZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Cisg
ICAgICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6
IG51bGw7CisgICAgfSwKKyAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
cmV0dXJuIGRpciggZWxlbSwgInBhcmVudE5vZGUiICk7CisgICAgfSwKKyAgICBwYXJlbnRzVW50
aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxl
bSwgInBhcmVudE5vZGUiLCB1bnRpbCApOworICAgIH0sCisgICAgbmV4dDogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAibmV4dFNpYmxpbmciICk7Cisg
ICAgfSwKKyAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIHNpYmxp
bmcoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAgICBuZXh0QWxsOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgIm5leHRTaWJsaW5nIiAp
OworICAgIH0sCisgICAgcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVy
biBkaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAgICBuZXh0VW50aWw6
IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwg
Im5leHRTaWJsaW5nIiwgdW50aWwgKTsKKyAgICB9LAorICAgIHByZXZVbnRpbDogZnVuY3Rpb24o
IGVsZW0sIGksIHVudGlsICkgeworICAgICAgICByZXR1cm4gZGlyKCBlbGVtLCAicHJldmlvdXNT
aWJsaW5nIiwgdW50aWwgKTsKKyAgICB9LAorICAgIHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZp
cnN0Q2hpbGQsIGVsZW0gKTsKKyAgICB9LAorICAgIGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTsKKyAgICB9LAor
ICAgIGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0uY29u
dGVudERvY3VtZW50IHx8IGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApOworICAg
IH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHsKKyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1
bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBtYXRjaGVkID0galF1ZXJ5
Lm1hcCggdGhpcywgZm4sIHVudGlsICk7CisKKyAgICAgICAgaWYgKCBuYW1lLnNsaWNlKCAtNSAp
ICE9PSAiVW50aWwiICkgeworICAgICAgICAgICAgc2VsZWN0b3IgPSB1bnRpbDsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5n
IiApIHsKKyAgICAgICAgICAgIG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0
Y2hlZCApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7CisK
KyAgICAgICAgICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzCisgICAgICAgICAgICBpZiAoICFndWFy
YW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnVuaXF1ZVNv
cnQoIG1hdGNoZWQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV2ZXJzZSBv
cmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXMKKyAgICAgICAgICAgIGlmICgg
cnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVkLnJl
dmVyc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlz
LnB1c2hTdGFjayggbWF0Y2hlZCApOworICAgIH07Cit9ICk7Cit2YXIgcm5vdHdoaXRlID0gKCAv
XFMrL2cgKTsKKworCisKKy8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8g
T2JqZWN0LWZvcm1hdHRlZCBvbmVzCitmdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkg
eworICAgIHZhciBvYmplY3QgPSB7fTsKKyAgICBqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCgg
cm5vdHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkgeworICAgICAgICBvYmplY3Rb
IGZsYWcgXSA9IHRydWU7CisgICAgfSApOworICAgIHJldHVybiBvYmplY3Q7Cit9CisKKy8qCisg
KiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoK
KyAqCisgKiAgb3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0
aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvdworICogICAgICAgICAgdGhlIGNhbGxiYWNrIGxpc3Qg
YmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdAorICoKKyAqIEJ5IGRl
ZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlz
dCBhbmQgY2FuIGJlCisgKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVzLgorICoKKyAqIFBvc3NpYmxl
IG9wdGlvbnM6CisgKgorICogIG9uY2U6ICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGUgY2FsbGJh
Y2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpCisgKgorICog
IG1lbW9yeTogICAgICAgICB3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3
aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkCisgKiAgICAgICAgICAgICAgICAgIGFmdGVyIHRo
ZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1vcml6
ZWQiCisgKiAgICAgICAgICAgICAgICAgIHZhbHVlcyAobGlrZSBhIERlZmVycmVkKQorICoKKyAq
ICB1bmlxdWU6ICAgICAgICAgd2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRl
ZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpCisgKgorICogIHN0b3BPbkZhbHNlOiAg
ICBpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2UKKyAqCisg
Ki8KK2pRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKKworICAgIC8vIENv
bnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBp
ZiBuZWVkZWQKKyAgICAvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpCisgICAgb3B0aW9ucyA9
IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/CisgICAgICAgIGNyZWF0ZU9wdGlvbnMoIG9w
dGlvbnMgKSA6CisgICAgICAgIGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7CisKKyAgICB2
YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZworICAgICAgICBm
aXJpbmcsCisKKyAgICAgICAgLy8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUg
bGlzdHMKKyAgICAgICAgbWVtb3J5LAorCisgICAgICAgIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0
IHdhcyBhbHJlYWR5IGZpcmVkCisgICAgICAgIGZpcmVkLAorCisgICAgICAgIC8vIEZsYWcgdG8g
cHJldmVudCBmaXJpbmcKKyAgICAgICAgbG9ja2VkLAorCisgICAgICAgIC8vIEFjdHVhbCBjYWxs
YmFjayBsaXN0CisgICAgICAgIGxpc3QgPSBbXSwKKworICAgICAgICAvLyBRdWV1ZSBvZiBleGVj
dXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0cworICAgICAgICBxdWV1ZSA9IFtdLAorCisg
ICAgICAgIC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5
IGFkZC9yZW1vdmUgYXMgbmVlZGVkKQorICAgICAgICBmaXJpbmdJbmRleCA9IC0xLAorCisgICAg
ICAgIC8vIEZpcmUgY2FsbGJhY2tzCisgICAgICAgIGZpcmUgPSBmdW5jdGlvbigpIHsKKworICAg
ICAgICAgICAgLy8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nCisgICAgICAgICAgICBsb2NrZWQgPSBv
cHRpb25zLm9uY2U7CisKKyAgICAgICAgICAgIC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwg
cGVuZGluZyBleGVjdXRpb25zLAorICAgICAgICAgICAgLy8gcmVzcGVjdGluZyBmaXJpbmdJbmRl
eCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlcworICAgICAgICAgICAgZmlyZWQgPSBmaXJp
bmcgPSB0cnVlOworICAgICAgICAgICAgZm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4
ID0gLTEgKSB7CisgICAgICAgICAgICAgICAgbWVtb3J5ID0gcXVldWUuc2hpZnQoKTsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJt
aW5hdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBw
bHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3Qg
cmUtZmlyZQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0CisgICAgICAgICAgICBp
ZiAoICFvcHRpb25zLm1lbW9yeSApIHsKKyAgICAgICAgICAgICAgICBtZW1vcnkgPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlyaW5nID0gZmFsc2U7CisKKyAgICAgICAg
ICAgIC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kCisgICAgICAgICAg
ICBpZiAoIGxvY2tlZCApIHsKKworICAgICAgICAgICAgICAgIC8vIEtlZXAgYW4gZW1wdHkgbGlz
dCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHMKKyAgICAgICAgICAgICAgICBp
ZiAoIG1lbW9yeSApIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtdOworCisgICAgICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudAorICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSAiIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gQWN0dWFsIENh
bGxiYWNrcyBvYmplY3QKKyAgICAgICAgc2VsZiA9IHsKKworICAgICAgICAgICAgLy8gQWRkIGEg
Y2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdAorICAgICAg
ICAgICAgYWRkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIGxpc3QgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVu
LCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBt
ZW1vcnkgJiYgIWZpcmluZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4
ID0gbGlzdC5sZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCgg
bWVtb3J5ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAo
IGZ1bmN0aW9uIGFkZCggYXJncyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5l
YWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZyApICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKCBhcmcgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIGpRdWVyeS50eXBlKCBhcmcg
KSAhPT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SW5zcGVjdCByZWN1cnNpdmVseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQo
IGFyZyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgfSApKCBhcmd1bWVudHMgKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZmlyZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdAorICAgICAgICAgICAg
cmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggYXJndW1l
bnRzLCBmdW5jdGlvbiggXywgYXJnICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXg7
CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBh
cmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dC5zcGxpY2UoIGluZGV4LCAxICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRs
ZSBmaXJpbmcgaW5kZXhlcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmRleCA8PSBm
aXJpbmdJbmRleCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleC0t
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0
aGUgbGlzdC4KKyAgICAgICAgICAgIC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4g
d2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLgorICAgICAgICAgICAg
aGFzOiBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuID8KKyAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6CisgICAgICAg
ICAgICAgICAgICAgIGxpc3QubGVuZ3RoID4gMDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKKyAgICAgICAgICAgIGVt
cHR5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIGxpc3QgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGxpc3QgPSBbXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBEaXNhYmxl
IC5maXJlIGFuZCAuYWRkCisgICAgICAgICAgICAvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5n
IGV4ZWN1dGlvbnMKKyAgICAgICAgICAgIC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVl
cworICAgICAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgbG9j
a2VkID0gcXVldWUgPSBbXTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gbWVtb3J5ID0gIiI7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhbGlzdDsKKyAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIERpc2FibGUgLmZpcmUKKyAgICAgICAgICAg
IC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291
bGQgaGF2ZSBubyBlZmZlY3QpCisgICAgICAgICAgICAvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVj
dXRpb25zCisgICAgICAgICAgICBsb2NrOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBs
b2NrZWQgPSBxdWV1ZSA9IFtdOworICAgICAgICAgICAgICAgIGlmICggIW1lbW9yeSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgbGlzdCA9IG1lbW9yeSA9ICIiOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBsb2NrZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhIWxvY2tlZDsK
KyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRo
IHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHMKKyAgICAgICAgICAgIGZpcmVXaXRoOiBm
dW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFsb2NrZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IFtdOworICAgICAgICAgICAg
ICAgICAgICBhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJn
cyBdOworICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKCBhcmdzICk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggIWZpcmluZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIENhbGwg
YWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzCisgICAgICAgICAgICBm
aXJlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmZpcmVXaXRoKCB0aGlzLCBh
cmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkg
YmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQorICAgICAgICAgICAgZmlyZWQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIHJldHVybiAhIWZpcmVkOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgcmV0dXJuIHNlbGY7Cit9OworCisKK2pRdWVyeS5leHRlbmQoIHsKKworICAg
IERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKKyAgICAgICAgdmFyIHR1cGxlcyA9IFsKKwor
ICAgICAgICAgICAgICAgIC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBm
aW5hbCBzdGF0ZQorICAgICAgICAgICAgICAgIFsgInJlc29sdmUiLCAiZG9uZSIsIGpRdWVyeS5D
YWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwgInJlc29sdmVkIiBdLAorICAgICAgICAgICAgICAg
IFsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLCAi
cmVqZWN0ZWQiIF0sCisgICAgICAgICAgICAgICAgWyAibm90aWZ5IiwgInByb2dyZXNzIiwgalF1
ZXJ5LkNhbGxiYWNrcyggIm1lbW9yeSIgKSBdCisgICAgICAgICAgICBdLAorICAgICAgICAgICAg
c3RhdGUgPSAicGVuZGluZyIsCisgICAgICAgICAgICBwcm9taXNlID0geworICAgICAgICAgICAg
ICAgIHN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRl
OworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgYWx3YXlzOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCgg
YXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5G
YWlsLCBmblByb2dyZXNzICovICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZm5zID0gYXJn
dW1lbnRzOworICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5j
dGlvbiggbmV3RGVmZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCgg
dHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGZuID0galF1ZXJ5LmlzRnVuY3Rpb24oIGZuc1sgaSBdICkgJiYgZm5zWyBpIF07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBw
cm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBw
bHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC5wcm9taXNlKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIG5ld0Rl
ZmVyLm5vdGlmeSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRv
bmUoIG5ld0RlZmVyLnJlc29sdmUgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d0RlZmVyWyB0dXBsZVsgMCBdICsgIldpdGgiIF0oCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcyA9PT0gcHJvbWlzZSA/IG5ld0RlZmVyLnByb21pc2UoKSA6IHRo
aXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPyBbIHJldHVy
bmVkIF0gOiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmbnMgPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9ICkucHJvbWlzZSgp
OworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBHZXQgYSBwcm9taXNl
IGZvciB0aGlzIGRlZmVycmVkCisgICAgICAgICAgICAgICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVk
LCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdAorICAgICAgICAgICAg
ICAgIHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVmZXJyZWQg
PSB7fTsKKworICAgICAgICAvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0CisgICAgICAgIHBy
b21pc2UucGlwZSA9IHByb21pc2UudGhlbjsKKworICAgICAgICAvLyBBZGQgbGlzdC1zcGVjaWZp
YyBtZXRob2RzCisgICAgICAgIGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBs
ZSApIHsKKyAgICAgICAgICAgIHZhciBsaXN0ID0gdHVwbGVbIDIgXSwKKyAgICAgICAgICAgICAg
ICBzdGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07CisKKyAgICAgICAgICAgIC8vIHByb21pc2VbIGRv
bmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkCisgICAgICAgICAgICBwcm9taXNlWyB0
dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDsKKworICAgICAgICAgICAgLy8gSGFuZGxlIHN0YXRlCisg
ICAgICAgICAgICBpZiAoIHN0YXRlU3RyaW5nICkgeworICAgICAgICAgICAgICAgIGxpc3QuYWRk
KCBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2
ZWQgfCByZWplY3RlZCBdCisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVTdHJpbmc7
CisKKyAgICAgICAgICAgICAgICAvLyBbIHJlamVjdF9saXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlz
YWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCisgICAgICAgICAgICAgICAgfSwgdHVwbGVzWyBpIF4g
MSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAyIF1bIDIgXS5sb2NrICk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGRlZmVycmVkWyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0K
KyAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDAgXSArICJXaXRoIiBdKCB0aGlzID09PSBkZWZl
cnJlZCA/IHByb21pc2UgOiB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDAg
XSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsKKyAgICAgICAgfSApOworCisgICAgICAgIC8v
IE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQorICAgICAgICBwcm9taXNlLnByb21pc2UoIGRl
ZmVycmVkICk7CisKKyAgICAgICAgLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQorICAgICAgICBp
ZiAoIGZ1bmMgKSB7CisgICAgICAgICAgICBmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCAp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsIGRvbmUhCisgICAgICAgIHJldHVybiBkZWZl
cnJlZDsKKyAgICB9LAorCisgICAgLy8gRGVmZXJyZWQgaGVscGVyCisgICAgd2hlbjogZnVuY3Rp
b24oIHN1Ym9yZGluYXRlIC8qICwgLi4uLCBzdWJvcmRpbmF0ZU4gKi8gKSB7CisgICAgICAgIHZh
ciBpID0gMCwKKyAgICAgICAgICAgIHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVu
dHMgKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3RoLAorCisgICAg
ICAgICAgICAvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzCisgICAgICAg
ICAgICByZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwKKyAgICAgICAgICAgICAgICAoIHN1Ym9y
ZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/IGxl
bmd0aCA6IDAsCisKKyAgICAgICAgICAgIC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQuCisgICAgICAg
ICAgICAvLyBJZiByZXNvbHZlVmFsdWVzIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJl
ZCwganVzdCB1c2UgdGhhdC4KKyAgICAgICAgICAgIGRlZmVycmVkID0gcmVtYWluaW5nID09PSAx
ID8gc3Vib3JkaW5hdGUgOiBqUXVlcnkuRGVmZXJyZWQoKSwKKworICAgICAgICAgICAgLy8gVXBk
YXRlIGZ1bmN0aW9uIGZvciBib3RoIHJlc29sdmUgYW5kIHByb2dyZXNzIHZhbHVlcworICAgICAg
ICAgICAgdXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpLCBjb250ZXh0cywgdmFsdWVzICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHRzWyBpIF0gPSB0aGlzOworICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbIGkg
XSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZXMgPT09IHByb2dyZXNzVmFsdWVzICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQubm90aWZ5V2l0aCggY29udGV4dHMs
IHZhbHVlcyApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmlu
ZyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNv
bnRleHRzLCB2YWx1ZXMgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBwcm9ncmVzc1ZhbHVlcywgcHJvZ3Jl
c3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzOworCisgICAgICAgIC8vIEFkZCBsaXN0ZW5lcnMg
dG8gRGVmZXJyZWQgc3Vib3JkaW5hdGVzOyB0cmVhdCBvdGhlcnMgYXMgcmVzb2x2ZWQKKyAgICAg
ICAgaWYgKCBsZW5ndGggPiAxICkgeworICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMgPSBuZXcg
QXJyYXkoIGxlbmd0aCApOworICAgICAgICAgICAgcHJvZ3Jlc3NDb250ZXh0cyA9IG5ldyBBcnJh
eSggbGVuZ3RoICk7CisgICAgICAgICAgICByZXNvbHZlQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxl
bmd0aCApOworICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJl
c29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc29s
dmVWYWx1ZXNbIGkgXS5wcm9taXNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9ncmVz
cyggdXBkYXRlRnVuYyggaSwgcHJvZ3Jlc3NDb250ZXh0cywgcHJvZ3Jlc3NWYWx1ZXMgKSApCisg
ICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRl
eHRzLCByZXNvbHZlVmFsdWVzICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgLmZhaWwoIGRl
ZmVycmVkLnJlamVjdCApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIC0tcmVtYWluaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGFueXRoaW5nLCBy
ZXNvbHZlIHRoZSBtYXN0ZXIKKyAgICAgICAgaWYgKCAhcmVtYWluaW5nICkgeworICAgICAgICAg
ICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyAp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTsKKyAgICB9
Cit9ICk7CisKKworLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5Cit2YXIgcmVhZHlM
aXN0OworCitqUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7CisKKyAgICAvLyBBZGQg
dGhlIGNhbGxiYWNrCisgICAgalF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBmbiApOworCisg
ICAgcmV0dXJuIHRoaXM7Cit9OworCitqUXVlcnkuZXh0ZW5kKCB7CisKKyAgICAvLyBJcyB0aGUg
RE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgorICAgIGlz
UmVhZHk6IGZhbHNlLAorCisgICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1z
IHRvIHdhaXQgZm9yIGJlZm9yZQorICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2
NzgxCisgICAgcmVhZHlXYWl0OiAxLAorCisgICAgLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJl
YWR5IGV2ZW50CisgICAgaG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKKyAgICAgICAgaWYg
KCBob2xkICkgeworICAgICAgICAgICAgalF1ZXJ5LnJlYWR5V2FpdCsrOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgLy8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQorICAgIHJlYWR5OiBmdW5j
dGlvbiggd2FpdCApIHsKKworICAgICAgICAvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBo
b2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5CisgICAgICAgIGlmICggd2FpdCA9PT0gdHJ1ZSA/
IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJl
YWR5CisgICAgICAgIGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKKworICAgICAgICAvLyBJZiBhIG5v
cm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBi
ZQorICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCAp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJl
IGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKKyAgICAgICAgcmVhZHlMaXN0LnJlc29s
dmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOworCisgICAgICAgIC8vIFRyaWdnZXIgYW55
IGJvdW5kIHJlYWR5IGV2ZW50cworICAgICAgICBpZiAoIGpRdWVyeS5mbi50cmlnZ2VySGFuZGxl
ciApIHsKKyAgICAgICAgICAgIGpRdWVyeSggZG9jdW1lbnQgKS50cmlnZ2VySGFuZGxlciggInJl
YWR5IiApOworICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLm9mZiggInJlYWR5IiApOwor
ICAgICAgICB9CisgICAgfQorfSApOworCisvKioKKyAqIFRoZSByZWFkeSBldmVudCBoYW5kbGVy
IGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kCisgKi8KK2Z1bmN0aW9uIGNvbXBsZXRlZCgpIHsKKyAg
ICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBs
ZXRlZCApOworICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCAibG9hZCIsIGNvbXBsZXRl
ZCApOworICAgIGpRdWVyeS5yZWFkeSgpOworfQorCitqUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1
bmN0aW9uKCBvYmogKSB7CisgICAgaWYgKCAhcmVhZHlMaXN0ICkgeworCisgICAgICAgIHJlYWR5
TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOworCisgICAgICAgIC8vIENhdGNoIGNhc2VzIHdoZXJl
ICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkCisgICAgICAgIC8vIGFmdGVyIHRoZSBicm93
c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgorICAgICAgICAvLyBTdXBwb3J0OiBJRTkt
MTAgb25seQorICAgICAgICAvLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyAiaW50ZXJhY3Rp
dmUiIHRvbyBzb29uCisgICAgICAgIGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBs
ZXRlIiB8fAorICAgICAgICAgICAgKCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAibG9hZGluZyIg
JiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkgeworCisgICAgICAgICAg
ICAvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0
dW5pdHkgdG8gZGVsYXkgcmVhZHkKKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVl
cnkucmVhZHkgKTsKKworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBVc2UgdGhl
IGhhbmR5IGV2ZW50IGNhbGxiYWNrCisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCAiRE9NQ29udGVudExvYWRlZCIsIGNvbXBsZXRlZCApOworCisgICAgICAgICAgICAvLyBB
IGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yaworICAgICAg
ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgY29tcGxldGVkICk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlYWR5TGlzdC5wcm9taXNlKCBvYmogKTsKK307CisK
Ky8vIEtpY2sgb2ZmIHRoZSBET00gcmVhZHkgY2hlY2sgZXZlbiBpZiB0aGUgdXNlciBkb2VzIG5v
dAoralF1ZXJ5LnJlYWR5LnByb21pc2UoKTsKKworCisKKworLy8gTXVsdGlmdW5jdGlvbmFsIG1l
dGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uCisvLyBUaGUgdmFsdWUv
cyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb24KK3ZhciBhY2Nl
c3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0
LCByYXcgKSB7CisgICAgdmFyIGkgPSAwLAorICAgICAgICBsZW4gPSBlbGVtcy5sZW5ndGgsCisg
ICAgICAgIGJ1bGsgPSBrZXkgPT0gbnVsbDsKKworICAgIC8vIFNldHMgbWFueSB2YWx1ZXMKKyAg
ICBpZiAoIGpRdWVyeS50eXBlKCBrZXkgKSA9PT0gIm9iamVjdCIgKSB7CisgICAgICAgIGNoYWlu
YWJsZSA9IHRydWU7CisgICAgICAgIGZvciAoIGkgaW4ga2V5ICkgeworICAgICAgICAgICAgYWNj
ZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7CisgICAg
ICAgIH0KKworICAgIC8vIFNldHMgb25lIHZhbHVlCisgICAgfSBlbHNlIGlmICggdmFsdWUgIT09
IHVuZGVmaW5lZCApIHsKKyAgICAgICAgY2hhaW5hYmxlID0gdHJ1ZTsKKworICAgICAgICBpZiAo
ICFqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJhdyA9IHRydWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGJ1bGsgKSB7CisKKyAgICAgICAgICAgIC8vIEJ1
bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldAorICAgICAgICAgICAgaWYg
KCByYXcgKSB7CisgICAgICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7CisgICAg
ICAgICAgICAgICAgZm4gPSBudWxsOworCisgICAgICAgICAgICAvLyAuLi5leGNlcHQgd2hlbiBl
eGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGJ1bGsgPSBmbjsKKyAgICAgICAgICAgICAgICBmbiA9IGZ1bmN0aW9uKCBlbGVtLCBr
ZXksIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVsay5jYWxsKCBqUXVl
cnkoIGVsZW0gKSwgdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmbiApIHsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8
IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgIGZuKAorICAgICAgICAgICAgICAgICAgICBl
bGVtc1sgaSBdLCBrZXksIHJhdyA/CisgICAgICAgICAgICAgICAgICAgIHZhbHVlIDoKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0s
IGtleSApICkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGNoYWluYWJsZSA/CisgICAgICAgIGVsZW1zIDoKKworICAgICAg
ICAvLyBHZXRzCisgICAgICAgIGJ1bGsgPworICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMgKSA6
CisgICAgICAgICAgICBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDsKK307
Cit2YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHsKKworICAgIC8vIEFjY2VwdHMg
b25seToKKyAgICAvLyAgLSBOb2RlCisgICAgLy8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERQorICAg
IC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFCisgICAgLy8gIC0gT2JqZWN0CisgICAgLy8gICAg
LSBBbnkKKyAgICAvKiBqc2hpbnQgLVcwMTggKi8KKyAgICByZXR1cm4gb3duZXIubm9kZVR5cGUg
PT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7Cit9
OworCisKKworCitmdW5jdGlvbiBEYXRhKCkgeworICAgIHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5l
eHBhbmRvICsgRGF0YS51aWQrKzsKK30KKworRGF0YS51aWQgPSAxOworCitEYXRhLnByb3RvdHlw
ZSA9IHsKKworICAgIHJlZ2lzdGVyOiBmdW5jdGlvbiggb3duZXIsIGluaXRpYWwgKSB7CisgICAg
ICAgIHZhciB2YWx1ZSA9IGluaXRpYWwgfHwge307CisKKyAgICAgICAgLy8gSWYgaXQgaXMgYSBu
b2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlcgorICAgICAgICAv
LyB1c2UgcGxhaW4gYXNzaWdubWVudAorICAgICAgICBpZiAoIG93bmVyLm5vZGVUeXBlICkgewor
ICAgICAgICAgICAgb3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7CisKKyAgICAgICAgLy8g
T3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlLCBub24td3JpdGFibGUgcHJv
cGVydHkKKyAgICAgICAgLy8gY29uZmlndXJhYmlsaXR5IG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0
aGUgcHJvcGVydHkgdG8gYmUKKyAgICAgICAgLy8gZGVsZXRlZCB3aXRoIHRoZSBkZWxldGUgb3Bl
cmF0b3IKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eSggb3duZXIsIHRoaXMuZXhwYW5kbywgeworICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwK
KyAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
b3duZXJbIHRoaXMuZXhwYW5kbyBdOworICAgIH0sCisgICAgY2FjaGU6IGZ1bmN0aW9uKCBvd25l
ciApIHsKKworICAgICAgICAvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5v
ZGVzIGluIG1vZGVybiBicm93c2VycywKKyAgICAgICAgLy8gYnV0IHdlIHNob3VsZCBub3QsIHNl
ZSAjODMzNS4KKyAgICAgICAgLy8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuCisgICAg
ICAgIGlmICggIWFjY2VwdERhdGEoIG93bmVyICkgKSB7CisgICAgICAgICAgICByZXR1cm4ge307
CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVh
ZHkgaGFzIGEgY2FjaGUKKyAgICAgICAgdmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBd
OworCisgICAgICAgIC8vIElmIG5vdCwgY3JlYXRlIG9uZQorICAgICAgICBpZiAoICF2YWx1ZSAp
IHsKKyAgICAgICAgICAgIHZhbHVlID0ge307CisKKyAgICAgICAgICAgIC8vIFdlIGNhbiBhY2Nl
cHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLAorICAgICAg
ICAgICAgLy8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS4KKyAgICAgICAgICAgIC8vIEFs
d2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LgorICAgICAgICAgICAgaWYgKCBhY2NlcHREYXRh
KCBvd25lciApICkgeworCisgICAgICAgICAgICAgICAgLy8gSWYgaXQgaXMgYSBub2RlIHVubGlr
ZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlcgorICAgICAgICAgICAgICAgIC8v
IHVzZSBwbGFpbiBhc3NpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKCBvd25lci5ub2RlVHlw
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgb3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7
CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1l
cmFibGUgcHJvcGVydHkKKyAgICAgICAgICAgICAgICAvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0
cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZQorICAgICAgICAgICAgICAgIC8vIGRlbGV0
ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWQKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8s
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9ICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHZhbHVlOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVl
ICkgeworICAgICAgICB2YXIgcHJvcCwKKyAgICAgICAgICAgIGNhY2hlID0gdGhpcy5jYWNoZSgg
b3duZXIgKTsKKworICAgICAgICAvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdz
CisgICAgICAgIGlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAg
Y2FjaGVbIGRhdGEgXSA9IHZhbHVlOworCisgICAgICAgIC8vIEhhbmRsZTogWyBvd25lciwgeyBw
cm9wZXJ0aWVzIH0gXSBhcmdzCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIENv
cHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0CisgICAgICAg
ICAgICBmb3IgKCBwcm9wIGluIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgY2FjaGVbIHByb3Ag
XSA9IGRhdGFbIHByb3AgXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gY2FjaGU7CisgICAgfSwKKyAgICBnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkgeworICAg
ICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgdGhpcy5jYWNoZSgg
b3duZXIgKSA6CisgICAgICAgICAgICBvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRo
aXMuZXhwYW5kbyBdWyBrZXkgXTsKKyAgICB9LAorICAgIGFjY2VzczogZnVuY3Rpb24oIG93bmVy
LCBrZXksIHZhbHVlICkgeworICAgICAgICB2YXIgc3RvcmVkOworCisgICAgICAgIC8vIEluIGNh
c2VzIHdoZXJlIGVpdGhlcjoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAxLiBObyBrZXkgd2Fz
IHNwZWNpZmllZAorICAgICAgICAvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBi
dXQgbm8gdmFsdWUgcHJvdmlkZWQKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGFrZSB0aGUgInJl
YWQiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZQorICAgICAgICAv
LyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6CisgICAgICAgIC8v
CisgICAgICAgIC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3QKKyAgICAgICAgLy8gICAy
LiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleQorICAgICAgICAvLworICAgICAgICBpZiAoIGtl
eSA9PT0gdW5kZWZpbmVkIHx8CisgICAgICAgICAgICAgICAgKCAoIGtleSAmJiB0eXBlb2Yga2V5
ID09PSAic3RyaW5nIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHsKKworICAgICAgICAg
ICAgc3RvcmVkID0gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTsKKworICAgICAgICAgICAgcmV0dXJu
IHN0b3JlZCAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICBzdG9yZWQgOiB0aGlzLmdl
dCggb3duZXIsIGpRdWVyeS5jYW1lbENhc2UoIGtleSApICk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1
ZQorICAgICAgICAvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmpl
Y3RzKSB3aXRoIGVpdGhlcjoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAxLiBBbiBvYmplY3Qg
b2YgcHJvcGVydGllcworICAgICAgICAvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZQorICAgICAgICAv
LworICAgICAgICB0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTsKKworICAgICAgICAvLyBT
aW5jZSB0aGUgInNldCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzCisg
ICAgICAgIC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdh
cyB0YWtlblsqXQorICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDog
a2V5OworICAgIH0sCisgICAgcmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHsKKyAgICAg
ICAgdmFyIGksIG5hbWUsIGNhbWVsLAorICAgICAgICAgICAgY2FjaGUgPSBvd25lclsgdGhpcy5l
eHBhbmRvIF07CisKKyAgICAgICAgaWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoIG93bmVyICk7CisKKyAgICAgICAgfSBl
bHNlIHsKKworICAgICAgICAgICAgLy8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQg
c3RyaW5nIG9mIGtleXMKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGtleSApICkg
eworCisgICAgICAgICAgICAgICAgLy8gSWYgIm5hbWUiIGlzIGFuIGFycmF5IG9mIGtleXMuLi4K
KyAgICAgICAgICAgICAgICAvLyBXaGVuIGRhdGEgaXMgaW5pdGlhbGx5IGNyZWF0ZWQsIHZpYSAo
ImtleSIsICJ2YWwiKSBzaWduYXR1cmUsCisgICAgICAgICAgICAgICAgLy8ga2V5cyB3aWxsIGJl
IGNvbnZlcnRlZCB0byBjYW1lbENhc2UuCisgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlcmUg
aXMgbm8gd2F5IHRvIHRlbGwgX2hvd18gYSBrZXkgd2FzIGFkZGVkLCByZW1vdmUKKyAgICAgICAg
ICAgICAgICAvLyBib3RoIHBsYWluIGtleSBhbmQgY2FtZWxDYXNlIGtleS4gIzEyNzg2CisgICAg
ICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG9ubHkgcGVuYWxpemUgdGhlIGFycmF5IGFyZ3VtZW50
IHBhdGguCisgICAgICAgICAgICAgICAgbmFtZSA9IGtleS5jb25jYXQoIGtleS5tYXAoIGpRdWVy
eS5jYW1lbENhc2UgKSApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
YW1lbCA9IGpRdWVyeS5jYW1lbENhc2UoIGtleSApOworCisgICAgICAgICAgICAgICAgLy8gVHJ5
IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFueSBtYW5pcHVsYXRpb24KKyAgICAgICAgICAg
ICAgICBpZiAoIGtleSBpbiBjYWNoZSApIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IFsg
a2V5LCBjYW1lbCBdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LgorICAgICAg
ICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBu
b24td2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICAgICBuYW1lID0gY2FtZWw7CisgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBuYW1lIGluIGNhY2hlID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsgbmFtZSBdIDogKCBuYW1lLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaSA9IG5hbWUubGVuZ3Ro
OworCisgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAgICBkZWxldGUg
Y2FjaGVbIG5hbWVbIGkgXSBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhCisgICAgICAgIGlm
ICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7
CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NSsKKyAgICAgICAgICAg
IC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9w
ZXJ0aWVzCisgICAgICAgICAgICAvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5l
ZCBpbnN0ZWFkCisgICAgICAgICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9t
aXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3CisgICAgICAgICAgICBpZiAoIG93bmVyLm5vZGVU
eXBlICkgeworICAgICAgICAgICAgICAgIG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG93bmVyWyB0
aGlzLmV4cGFuZG8gXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisgICAgaGFz
RGF0YTogZnVuY3Rpb24oIG93bmVyICkgeworICAgICAgICB2YXIgY2FjaGUgPSBvd25lclsgdGhp
cy5leHBhbmRvIF07CisgICAgICAgIHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVl
cnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTsKKyAgICB9Cit9OwordmFyIGRhdGFQcml2ID0gbmV3
IERhdGEoKTsKKwordmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTsKKworCisKKy8vICBJbXBsZW1l
bnRhdGlvbiBTdW1tYXJ5CisvLworLy8gIDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFu
dGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2gKKy8vICAyLiBJbXByb3ZlIHRoZSBt
b2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2UKKy8vICAgICAg
cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLgorLy8gIDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUg
bWVjaGFuaXNtIHRvIHN1cHBvcnQgInByaXZhdGUiIGFuZCAidXNlciIgZGF0YS4KKy8vICA0LiBf
TmV2ZXJfIGV4cG9zZSAicHJpdmF0ZSIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2Rh
dGEsIF9yZW1vdmVEYXRhKQorLy8gIDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRl
dGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKQorLy8gIDYuIFBy
b3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAg
aW4gMjAxNAorCit2YXIgcmJyYWNlID0gL14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLywK
KyAgICBybXVsdGlEYXNoID0gL1tBLVpdL2c7CisKK2Z1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBr
ZXksIGRhdGEgKSB7CisgICAgdmFyIG5hbWU7CisKKyAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3Vu
ZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55CisgICAgLy8gZGF0YSBmcm9tIHRoZSBIVE1M
NSBkYXRhLSogYXR0cmlidXRlCisgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5u
b2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgbmFtZSA9ICJkYXRhLSIgKyBrZXkucmVwbGFjZSgg
cm11bHRpRGFzaCwgIi0kJiIgKS50b0xvd2VyQ2FzZSgpOworICAgICAgICBkYXRhID0gZWxlbS5n
ZXRBdHRyaWJ1dGUoIG5hbWUgKTsKKworICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3Ry
aW5nIiApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEg
PT09ICJ0cnVlIiA/IHRydWUgOgorICAgICAgICAgICAgICAgICAgICBkYXRhID09PSAiZmFsc2Ui
ID8gZmFsc2UgOgorICAgICAgICAgICAgICAgICAgICBkYXRhID09PSAibnVsbCIgPyBudWxsIDoK
KworICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQg
ZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZworICAgICAgICAgICAgICAgICAgICArZGF0YSArICIi
ID09PSBkYXRhID8gK2RhdGEgOgorICAgICAgICAgICAgICAgICAgICByYnJhY2UudGVzdCggZGF0
YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSApIDoKKyAgICAgICAgICAgICAgICAgICAgZGF0
YTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkge30KKworICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyCisgICAgICAgICAg
ICBkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZGF0YTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworICAgIGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICByZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2
Lmhhc0RhdGEoIGVsZW0gKTsKKyAgICB9LAorCisgICAgZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5h
bWUsIGRhdGEgKSB7CisgICAgICAgIHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUs
IGRhdGEgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUg
KSB7CisgICAgICAgIGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApOworICAgIH0sCisKKyAg
ICAvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhh
dmUgYmVlbiByZXBsYWNlZAorICAgIC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1l
dGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLgorICAgIF9kYXRhOiBmdW5jdGlvbiggZWxl
bSwgbmFtZSwgZGF0YSApIHsKKyAgICAgICAgcmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwg
bmFtZSwgZGF0YSApOworICAgIH0sCisKKyAgICBfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0s
IG5hbWUgKSB7CisgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApOworICAgIH0K
K30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZh
bHVlICkgeworICAgICAgICB2YXIgaSwgbmFtZSwgZGF0YSwKKyAgICAgICAgICAgIGVsZW0gPSB0
aGlzWyAwIF0sCisgICAgICAgICAgICBhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzOwor
CisgICAgICAgIC8vIEdldHMgYWxsIHZhbHVlcworICAgICAgICBpZiAoIGtleSA9PT0gdW5kZWZp
bmVkICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAg
ICBkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgImhhc0RhdGFBdHRycyIg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGF0dHJzLmxlbmd0aDsKKyAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1
cHBvcnQ6IElFMTErCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYXR0cnMgZWxlbWVu
dHMgY2FuIGJlIG51bGwgKCMxNDg5NCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXR0
cnNbIGkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gYXR0cnNbIGkg
XS5uYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmFtZS5pbmRleE9mKCAi
ZGF0YS0iICkgPT09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg
PSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkYXRhUHJpdi5zZXQoIGVs
ZW0sICJoYXNEYXRhQXR0cnMiLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFNldHMgbXVsdGlwbGUgdmFsdWVzCisgICAgICAgIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVj
dCIgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICBkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApOworICAgICAgICAgICAgfSApOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVl
ICkgeworICAgICAgICAgICAgdmFyIGRhdGEsIGNhbWVsS2V5OworCisgICAgICAgICAgICAvLyBU
aGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eQor
ICAgICAgICAgICAgLy8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0
aGlzWyAwIF0pIGFuZCB0aGUKKyAgICAgICAgICAgIC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBu
b3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0CisgICAgICAgICAgICAvLyB3aWxs
IHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsCisg
ICAgICAgICAgICAvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEg
ZGF0YSBjYWNoZSBpcyBtYWRlLgorICAgICAgICAgICAgaWYgKCBlbGVtICYmIHZhbHVlID09PSB1
bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZy
b20gdGhlIGNhY2hlCisgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUga2V5IGFzLWlzCisgICAg
ICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICkgfHwKKworICAgICAg
ICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCBkYXNoZWQga2V5IGlmIGl0IGV4aXN0cyAoZ2gt
Mjc3OSkKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBmb3IgMi4yLnggb25seQorICAg
ICAgICAgICAgICAgICAgICBkYXRhVXNlci5nZXQoIGVsZW0sIGtleS5yZXBsYWNlKCBybXVsdGlE
YXNoLCAiLSQmIiApLnRvTG93ZXJDYXNlKCkgKTsKKworICAgICAgICAgICAgICAgIGlmICggZGF0
YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYW1lbEtleSA9IGpRdWVyeS5jYW1l
bENhc2UoIGtleSApOworCisgICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgZGF0YSBm
cm9tIHRoZSBjYWNoZQorICAgICAgICAgICAgICAgIC8vIHdpdGggdGhlIGtleSBjYW1lbGl6ZWQK
KyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBjYW1lbEtleSApOwor
ICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBBdHRlbXB0IHRvICJkaXNjb3ZlciIgdGhlIGRhdGEgaW4KKyAgICAgICAgICAgICAgICAv
LyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFB
dHRyKCBlbGVtLCBjYW1lbEtleSwgdW5kZWZpbmVkICk7CisgICAgICAgICAgICAgICAgaWYgKCBk
YXRhICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFdlIHRyaWVkIHJlYWxseSBo
YXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC4KKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNldCB0aGUgZGF0YS4uLgorICAgICAg
ICAgICAgY2FtZWxLZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTsKKyAgICAgICAgICAgIHRo
aXMuZWFjaCggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCwgYXR0ZW1w
dCB0byBzdG9yZSBhIGNvcHkgb3IgcmVmZXJlbmNlIG9mIGFueQorICAgICAgICAgICAgICAgIC8v
IGRhdGEgdGhhdCBtaWdodCd2ZSBiZWVuIHN0b3JlIHdpdGggYSBjYW1lbENhc2VkIGtleS4KKyAg
ICAgICAgICAgICAgICB2YXIgZGF0YSA9IGRhdGFVc2VyLmdldCggdGhpcywgY2FtZWxLZXkgKTsK
KworICAgICAgICAgICAgICAgIC8vIEZvciBIVE1MNSBkYXRhLSogYXR0cmlidXRlIGludGVyb3As
IHdlIGhhdmUgdG8KKyAgICAgICAgICAgICAgICAvLyBzdG9yZSBwcm9wZXJ0eSBuYW1lcyB3aXRo
IGRhc2hlcyBpbiBhIGNhbWVsQ2FzZSBmb3JtLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWln
aHQgbm90IGFwcGx5IHRvIGFsbCBwcm9wZXJ0aWVzLi4uKgorICAgICAgICAgICAgICAgIGRhdGFV
c2VyLnNldCggdGhpcywgY2FtZWxLZXksIHZhbHVlICk7CisKKyAgICAgICAgICAgICAgICAvLyAq
Li4uIEluIHRoZSBjYXNlIG9mIHByb3BlcnRpZXMgdGhhdCBtaWdodCBfYWN0dWFsbHlfCisgICAg
ICAgICAgICAgICAgLy8gaGF2ZSBkYXNoZXMsIHdlIG5lZWQgdG8gYWxzbyBzdG9yZSBhIGNvcHkg
b2YgdGhhdAorICAgICAgICAgICAgICAgIC8vIHVuY2hhbmdlZCBwcm9wZXJ0eS4KKyAgICAgICAg
ICAgICAgICBpZiAoIGtleS5pbmRleE9mKCAiLSIgKSA+IC0xICYmIGRhdGEgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVl
ICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOworICAgICAgICB9LCBudWxs
LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTsKKyAgICB9LAorCisg
ICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSAp
OworICAgICAgICB9ICk7CisgICAgfQorfSApOworCisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBx
dWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHZhciBxdWV1ZTsK
KworICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICB0eXBlID0gKCB0eXBlIHx8ICJm
eCIgKSArICJxdWV1ZSI7CisgICAgICAgICAgICBxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwg
dHlwZSApOworCisgICAgICAgICAgICAvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0
IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCisgICAgICAgICAgICBpZiAoIGRhdGEg
KSB7CisgICAgICAgICAgICAgICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoIGRhdGEg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0s
IHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goIGRhdGEgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcXVldWUgfHwgW107Cisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7
CisgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKyAgICAgICAgdmFyIHF1ZXVlID0galF1
ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksCisgICAgICAgICAgICBzdGFydExlbmd0aCA9IHF1ZXVl
Lmxlbmd0aCwKKyAgICAgICAgICAgIGZuID0gcXVldWUuc2hpZnQoKSwKKyAgICAgICAgICAgIGhv
b2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksCisgICAgICAgICAgICBuZXh0
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5
cGUgKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRl
cXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbAorICAgICAgICBpZiAo
IGZuID09PSAiaW5wcm9ncmVzcyIgKSB7CisgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7
CisgICAgICAgICAgICBzdGFydExlbmd0aC0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBm
biApIHsKKworICAgICAgICAgICAgLy8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVu
dCB0aGUgZnggcXVldWUgZnJvbSBiZWluZworICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBk
ZXF1ZXVlZAorICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICkgeworICAgICAgICAgICAg
ICAgIHF1ZXVlLnVuc2hpZnQoICJpbnByb2dyZXNzIiApOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uCisgICAgICAg
ICAgICBkZWxldGUgaG9va3Muc3RvcDsKKyAgICAgICAgICAgIGZuLmNhbGwoIGVsZW0sIG5leHQs
IGhvb2tzICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFzdGFydExlbmd0aCAmJiBob29r
cyApIHsKKyAgICAgICAgICAgIGhvb2tzLmVtcHR5LmZpcmUoKTsKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICAvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3Ig
cmV0dXJuIHRoZSBjdXJyZW50IG9uZQorICAgIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwg
dHlwZSApIHsKKyAgICAgICAgdmFyIGtleSA9IHR5cGUgKyAicXVldWVIb29rcyI7CisgICAgICAg
IHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxl
bSwga2V5LCB7CisgICAgICAgICAgICBlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVt
b3J5IiApLmFkZCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGF0YVByaXYucmVtb3Zl
KCBlbGVtLCBbIHR5cGUgKyAicXVldWUiLCBrZXkgXSApOworICAgICAgICAgICAgfSApCisgICAg
ICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBxdWV1ZTog
ZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHZhciBzZXR0ZXIgPSAyOworCisgICAg
ICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgZGF0YSA9
IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gImZ4IjsKKyAgICAgICAgICAgIHNldHRlci0tOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkgewor
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAg
IHRoaXMgOgorICAgICAgICAgICAgdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTsKKworICAg
ICAgICAgICAgICAgIC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlCisgICAgICAgICAg
ICAgICAgalF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVldWVbIDAgXSAhPT0gImlucHJvZ3Jlc3MiICkgewor
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKTsKKyAgICB9LAorICAgIGRlcXVldWU6IGZ1bmN0
aW9uKCB0eXBlICkgeworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisgICAgICAgIH0gKTsKKyAg
ICB9LAorICAgIGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgeworICAgICAgICByZXR1cm4g
dGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOworICAgIH0sCisKKyAgICAvLyBHZXQgYSBw
cm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlCisgICAgLy8gYXJl
IGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpCisgICAgcHJvbWlzZTogZnVuY3Rp
b24oIHR5cGUsIG9iaiApIHsKKyAgICAgICAgdmFyIHRtcCwKKyAgICAgICAgICAgIGNvdW50ID0g
MSwKKyAgICAgICAgICAgIGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksCisgICAgICAgICAgICBl
bGVtZW50cyA9IHRoaXMsCisgICAgICAgICAgICBpID0gdGhpcy5sZW5ndGgsCisgICAgICAgICAg
ICByZXNvbHZlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWNvdW50
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywg
WyBlbGVtZW50cyBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAg
ICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIG9iaiA9
IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAg
IHR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAg
ICAgICB0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyAicXVldWVIb29r
cyIgKTsKKyAgICAgICAgICAgIGlmICggdG1wICYmIHRtcC5lbXB0eSApIHsKKyAgICAgICAgICAg
ICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXNvbHZlKCk7CisgICAgICAgIHJl
dHVybiBkZWZlci5wcm9taXNlKCBvYmogKTsKKyAgICB9Cit9ICk7Cit2YXIgcG51bSA9ICggL1sr
LV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLyApLnNvdXJjZTsKKwordmFyIHJjc3NO
dW0gPSBuZXcgUmVnRXhwKCAiXig/OihbKy1dKT18KSgiICsgcG51bSArICIpKFthLXolXSopJCIs
ICJpIiApOworCisKK3ZhciBjc3NFeHBhbmQgPSBbICJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwg
IkxlZnQiIF07CisKK3ZhciBpc0hpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHsKKworICAg
ICAgICAvLyBpc0hpZGRlbiBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0
aW9uOworICAgICAgICAvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJn
dW1lbnQKKyAgICAgICAgZWxlbSA9IGVsIHx8IGVsZW07CisgICAgICAgIHJldHVybiBqUXVlcnku
Y3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUiIHx8CisgICAgICAgICAgICAhalF1ZXJ5
LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTsKKyAgICB9OworCisKKworZnVu
Y3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHsKKyAgICB2
YXIgYWRqdXN0ZWQsCisgICAgICAgIHNjYWxlID0gMSwKKyAgICAgICAgbWF4SXRlcmF0aW9ucyA9
IDIwLAorICAgICAgICBjdXJyZW50VmFsdWUgPSB0d2VlbiA/CisgICAgICAgICAgICBmdW5jdGlv
bigpIHsgcmV0dXJuIHR3ZWVuLmN1cigpOyB9IDoKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgIiIgKTsgfSwKKyAgICAgICAgaW5pdGlhbCA9
IGN1cnJlbnRWYWx1ZSgpLAorICAgICAgICB1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRz
WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKSwKKworICAg
ICAgICAvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50
aWFsIHVuaXQgbWlzbWF0Y2hlcworICAgICAgICBpbml0aWFsSW5Vbml0ID0gKCBqUXVlcnkuY3Nz
TnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gInB4IiAmJiAraW5pdGlhbCApICYmCisgICAgICAg
ICAgICByY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApOworCisgICAgaWYg
KCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHsKKworICAg
ICAgICAvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzCisgICAgICAgIHVuaXQg
PSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2Ug
dXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uCisgICAgICAgIHZhbHVlUGFydHMg
PSB2YWx1ZVBhcnRzIHx8IFtdOworCisgICAgICAgIC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRl
IGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50CisgICAgICAgIGluaXRpYWxJblVuaXQgPSAr
aW5pdGlhbCB8fCAxOworCisgICAgICAgIGRvIHsKKworICAgICAgICAgICAgLy8gSWYgcHJldmlv
dXMgaXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJsZSB1bnRpbCB3ZSBnZXQgKnNvbWV0aGluZyou
CisgICAgICAgICAgICAvLyBVc2Ugc3RyaW5nIGZvciBkb3VibGluZyBzbyB3ZSBkb24ndCBhY2Np
ZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvdworICAgICAgICAgICAgc2NhbGUg
PSBzY2FsZSB8fCAiLjUiOworCisgICAgICAgICAgICAvLyBBZGp1c3QgYW5kIGFwcGx5CisgICAg
ICAgICAgICBpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlOworICAgICAgICAg
ICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApOworCisg
ICAgICAgIC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVu
LmN1cigpCisgICAgICAgIC8vIEJyZWFrIHRoZSBsb29wIGlmIHNjYWxlIGlzIHVuY2hhbmdlZCBv
ciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2guCisgICAgICAgIH0gd2hpbGUg
KAorICAgICAgICAgICAgc2NhbGUgIT09ICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRp
YWwgKSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJhdGlvbnMKKyAgICAgICAgKTsKKyAgICB9
CisKKyAgICBpZiAoIHZhbHVlUGFydHMgKSB7CisgICAgICAgIGluaXRpYWxJblVuaXQgPSAraW5p
dGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwOworCisgICAgICAgIC8vIEFwcGx5IHJlbGF0aXZl
IG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZAorICAgICAgICBhZGp1c3RlZCA9IHZhbHVlUGFy
dHNbIDEgXSA/CisgICAgICAgICAgICBpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0g
KyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOgorICAgICAgICAgICAgK3ZhbHVlUGFydHNbIDIgXTsK
KyAgICAgICAgaWYgKCB0d2VlbiApIHsKKyAgICAgICAgICAgIHR3ZWVuLnVuaXQgPSB1bml0Owor
ICAgICAgICAgICAgdHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0OworICAgICAgICAgICAgdHdl
ZW4uZW5kID0gYWRqdXN0ZWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGFkanVzdGVk
OworfQordmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApOwor
Cit2YXIgcnRhZ05hbWUgPSAoIC88KFtcdzotXSspLyApOworCit2YXIgcnNjcmlwdFR5cGUgPSAo
IC9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApOworCisKKworLy8gV2UgaGF2ZSB0byBjbG9z
ZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMCkKK3ZhciB3cmFwTWFwID0gewor
CisgICAgLy8gU3VwcG9ydDogSUU5CisgICAgb3B0aW9uOiBbIDEsICI8c2VsZWN0IG11bHRpcGxl
PSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSwKKworICAgIC8vIFhIVE1MIHBhcnNlcnMgZG8g
bm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlCisgICAgLy8gc2FtZSB3YXkgdGhh
dCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlbgorICAgIC8vIHRoaXMg
Ynkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy4KKyAgICB0aGVh
ZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKKyAgICBjb2w6IFsgMiwgIjx0YWJsZT48
Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCisgICAgdHI6IFsgMiwgIjx0YWJs
ZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0sCisgICAgdGQ6IFsgMywgIjx0YWJsZT48
dGJvZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCisKKyAgICBfZGVmYXVsdDog
WyAwLCAiIiwgIiIgXQorfTsKKworLy8gU3VwcG9ydDogSUU5Cit3cmFwTWFwLm9wdGdyb3VwID0g
d3JhcE1hcC5vcHRpb247CisKK3dyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1h
cC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7Cit3cmFwTWFwLnRo
ID0gd3JhcE1hcC50ZDsKKworCitmdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHsKKwor
ICAgIC8vIFN1cHBvcnQ6IElFOS0xMSsKKyAgICAvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8t
YXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpCisgICAg
dmFyIHJldCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZp
bmVkIiA/CisgICAgICAgICAgICBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwg
IioiICkgOgorICAgICAgICAgICAgdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0g
InVuZGVmaW5lZCIgPworICAgICAgICAgICAgICAgIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCgg
dGFnIHx8ICIqIiApIDoKKyAgICAgICAgICAgIFtdOworCisgICAgcmV0dXJuIHRhZyA9PT0gdW5k
ZWZpbmVkIHx8IHRhZyAmJiBqUXVlcnkubm9kZU5hbWUoIGNvbnRleHQsIHRhZyApID8KKyAgICAg
ICAgalF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICkgOgorICAgICAgICByZXQ7Cit9CisK
KworLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkCitmdW5j
dGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7CisgICAgdmFyIGkgPSAw
LAorICAgICAgICBsID0gZWxlbXMubGVuZ3RoOworCisgICAgZm9yICggOyBpIDwgbDsgaSsrICkg
eworICAgICAgICBkYXRhUHJpdi5zZXQoCisgICAgICAgICAgICBlbGVtc1sgaSBdLAorICAgICAg
ICAgICAgImdsb2JhbEV2YWwiLAorICAgICAgICAgICAgIXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2
LmdldCggcmVmRWxlbWVudHNbIGkgXSwgImdsb2JhbEV2YWwiICkKKyAgICAgICAgKTsKKyAgICB9
Cit9CisKKwordmFyIHJodG1sID0gLzx8JiM/XHcrOy87CisKK2Z1bmN0aW9uIGJ1aWxkRnJhZ21l
bnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7CisgICAg
dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBjb250YWlucywgaiwKKyAgICAgICAgZnJhZ21lbnQg
PSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAgICAgbm9kZXMgPSBbXSwK
KyAgICAgICAgaSA9IDAsCisgICAgICAgIGwgPSBlbGVtcy5sZW5ndGg7CisKKyAgICBmb3IgKCA7
IGkgPCBsOyBpKysgKSB7CisgICAgICAgIGVsZW0gPSBlbGVtc1sgaSBdOworCisgICAgICAgIGlm
ICggZWxlbSB8fCBlbGVtID09PSAwICkgeworCisgICAgICAgICAgICAvLyBBZGQgbm9kZXMgZGly
ZWN0bHkKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LnR5cGUoIGVsZW0gKSA9PT0gIm9iamVjdCIg
KSB7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMSwgUGhhbnRvbUpT
PDIKKyAgICAgICAgICAgICAgICAvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9u
IGFuY2llbnQgV2ViS2l0CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxl
bS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApOworCisgICAgICAgICAgICAvLyBDb252ZXJ0
IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGUKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoICFyaHRt
bC50ZXN0KCBlbGVtICkgKSB7CisgICAgICAgICAgICAgICAgbm9kZXMucHVzaCggY29udGV4dC5j
cmVhdGVUZXh0Tm9kZSggZWxlbSApICk7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgaHRtbCBp
bnRvIERPTSBub2RlcworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0bXAg
PSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggImRp
diIgKSApOworCisgICAgICAgICAgICAgICAgLy8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXBy
ZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgIHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSAp
IHx8IFsgIiIsICIiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgd3Jh
cCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7CisgICAgICAgICAgICAgICAg
dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkg
KyB3cmFwWyAyIF07CisKKyAgICAgICAgICAgICAgICAvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBl
cnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnQKKyAgICAgICAgICAgICAgICBqID0gd3JhcFsgMCBdOwor
ICAgICAgICAgICAgICAgIHdoaWxlICggai0tICkgeworICAgICAgICAgICAgICAgICAgICB0bXAg
PSB0bXAubGFzdENoaWxkOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8MgorICAgICAgICAgICAgICAgIC8vIHB1
c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXQKKyAgICAgICAg
ICAgICAgICBqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApOworCisgICAgICAg
ICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXIKKyAgICAgICAgICAg
ICAgICB0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkOworCisgICAgICAgICAgICAgICAgLy8gRW5z
dXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKQorICAgICAgICAgICAg
ICAgIHRtcC50ZXh0Q29udGVudCA9ICIiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudAorICAgIGZyYWdtZW50LnRl
eHRDb250ZW50ID0gIiI7CisKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoICggZWxlbSA9IG5vZGVz
WyBpKysgXSApICkgeworCisgICAgICAgIC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUg
Y29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpCisgICAgICAgIGlmICggc2VsZWN0aW9uICYm
IGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkgeworICAgICAgICAgICAg
aWYgKCBpZ25vcmVkICkgeworICAgICAgICAgICAgICAgIGlnbm9yZWQucHVzaCggZWxlbSApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBjb250YWlucyA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7
CisKKyAgICAgICAgLy8gQXBwZW5kIHRvIGZyYWdtZW50CisgICAgICAgIHRtcCA9IGdldEFsbCgg
ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgInNjcmlwdCIgKTsKKworICAgICAgICAvLyBQ
cmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5CisgICAgICAgIGlmICggY29udGFpbnMg
KSB7CisgICAgICAgICAgICBzZXRHbG9iYWxFdmFsKCB0bXAgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENhcHR1cmUgZXhlY3V0YWJsZXMKKyAgICAgICAgaWYgKCBzY3JpcHRzICkgeworICAg
ICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICB3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0g
KSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8
fCAiIiApICkgeworICAgICAgICAgICAgICAgICAgICBzY3JpcHRzLnB1c2goIGVsZW0gKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gZnJhZ21lbnQ7Cit9CisKKworKCBmdW5jdGlvbigpIHsKKyAgICB2YXIgZnJhZ21lbnQg
PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCisgICAgICAgIGRpdiA9IGZyYWdt
ZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApICksCisgICAg
ICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImlucHV0IiApOworCisgICAgLy8g
U3VwcG9ydDogQW5kcm9pZCA0LjAtNC4zLCBTYWZhcmk8PTUuMQorICAgIC8vIENoZWNrIHN0YXRl
IGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpCisgICAgLy8gU3VwcG9ydDogV2luZG93
cyBXZWIgQXBwcyAoV1dBKQorICAgIC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRB
dHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKQorICAgIGlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUi
LCAicmFkaW8iICk7CisgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAiY2hlY2tlZCIsICJjaGVja2Vk
IiApOworICAgIGlucHV0LnNldEF0dHJpYnV0ZSggIm5hbWUiLCAidCIgKTsKKworICAgIGRpdi5h
cHBlbmRDaGlsZCggaW5wdXQgKTsKKworICAgIC8vIFN1cHBvcnQ6IFNhZmFyaTw9NS4xLCBBbmRy
b2lkPDQuMgorICAgIC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUg
Y29ycmVjdGx5IGluIGZyYWdtZW50cworICAgIHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9u
ZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDsKKworICAg
IC8vIFN1cHBvcnQ6IElFPD0xMSsKKyAgICAvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVj
a2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZAorICAgIGRpdi5pbm5lckhUTUwg
PSAiPHRleHRhcmVhPng8L3RleHRhcmVhPiI7CisgICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9
ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7Cit9ICkoKTsK
KworCit2YXIKKyAgICBya2V5RXZlbnQgPSAvXmtleS8sCisgICAgcm1vdXNlRXZlbnQgPSAvXig/
Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sCisgICAgcnR5cGVu
YW1lc3BhY2UgPSAvXihbXi5dKikoPzpcLiguKyl8KS87CisKK2Z1bmN0aW9uIHJldHVyblRydWUo
KSB7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHJldHVybkZhbHNlKCkgeworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8gU3VwcG9ydDogSUU5CisvLyBTZWUgIzEzMzkzIGZvciBt
b3JlIGluZm8KK2Z1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkgeworICAgIHRyeSB7CisgICAg
ICAgIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50OworICAgIH0gY2F0Y2ggKCBlcnIgKSB7
IH0KK30KKworZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9u
ZSApIHsKKyAgICB2YXIgb3JpZ0ZuLCB0eXBlOworCisgICAgLy8gVHlwZXMgY2FuIGJlIGEgbWFw
IG9mIHR5cGVzL2hhbmRsZXJzCisgICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkg
eworCisgICAgICAgIC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApCisgICAgICAg
IGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsKKworICAgICAgICAgICAgLy8g
KCB0eXBlcy1PYmplY3QsIGRhdGEgKQorICAgICAgICAgICAgZGF0YSA9IGRhdGEgfHwgc2VsZWN0
b3I7CisgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAg
ICBmb3IgKCB0eXBlIGluIHR5cGVzICkgeworICAgICAgICAgICAgb24oIGVsZW0sIHR5cGUsIHNl
bGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZWxlbTsKKyAgICB9CisKKyAgICBpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxs
ICkgeworCisgICAgICAgIC8vICggdHlwZXMsIGZuICkKKyAgICAgICAgZm4gPSBzZWxlY3RvcjsK
KyAgICAgICAgZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgIH0gZWxzZSBpZiAoIGZu
ID09IG51bGwgKSB7CisgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiAp
IHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcywgc2VsZWN0b3IsIGZuICkKKyAgICAgICAgICAg
IGZuID0gZGF0YTsKKyAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgIH0gZWxz
ZSB7CisKKyAgICAgICAgICAgIC8vICggdHlwZXMsIGRhdGEsIGZuICkKKyAgICAgICAgICAgIGZu
ID0gZGF0YTsKKyAgICAgICAgICAgIGRhdGEgPSBzZWxlY3RvcjsKKyAgICAgICAgICAgIHNlbGVj
dG9yID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgfQorICAgIGlmICggZm4gPT09IGZhbHNl
ICkgeworICAgICAgICBmbiA9IHJldHVybkZhbHNlOworICAgIH0gZWxzZSBpZiAoICFmbiApIHsK
KyAgICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisgICAgaWYgKCBvbmUgPT09IDEgKSB7Cisg
ICAgICAgIG9yaWdGbiA9IGZuOworICAgICAgICBmbiA9IGZ1bmN0aW9uKCBldmVudCApIHsKKwor
ICAgICAgICAgICAgLy8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5z
IHRoZSBpbmZvCisgICAgICAgICAgICBqUXVlcnkoKS5vZmYoIGV2ZW50ICk7CisgICAgICAgICAg
ICByZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdG
bgorICAgICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVy
eS5ndWlkKysgKTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3Ig
KTsKKyAgICB9ICk7Cit9CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBl
dmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCisgKiBQcm9wcyB0byBE
ZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgorICov
CitqUXVlcnkuZXZlbnQgPSB7CisKKyAgICBnbG9iYWw6IHt9LAorCisgICAgYWRkOiBmdW5jdGlv
biggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkgeworCisgICAgICAgIHZh
ciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCwKKyAgICAgICAgICAgIGV2ZW50cywgdCwg
aGFuZGxlT2JqLAorICAgICAgICAgICAgc3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFj
ZXMsIG9yaWdUeXBlLAorICAgICAgICAgICAgZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0g
KTsKKworICAgICAgICAvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2Nv
bW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKQorICAgICAgICBpZiAoICFlbGVt
RGF0YSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENh
bGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUg
aGFuZGxlcgorICAgICAgICBpZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKKyAgICAgICAgICAgIGhh
bmRsZU9iakluID0gaGFuZGxlcjsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5o
YW5kbGVyOworICAgICAgICAgICAgc2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3RvcjsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVu
aXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlcgorICAgICAgICBpZiAoICFoYW5k
bGVyLmd1aWQgKSB7CisgICAgICAgICAgICBoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVy
ZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdAorICAgICAgICBpZiAoICEo
IGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkgeworICAgICAgICAgICAgZXZlbnRzID0gZWxl
bURhdGEuZXZlbnRzID0ge307CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhKCBldmVudEhhbmRs
ZSA9IGVsZW1EYXRhLmhhbmRsZSApICkgeworICAgICAgICAgICAgZXZlbnRIYW5kbGUgPSBlbGVt
RGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKKworICAgICAgICAgICAgICAgIC8vIERpc2Nh
cmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCisgICAg
ICAgICAgICAgICAgLy8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1
bmxvYWRlZAorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZp
bmVkIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgPworICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDog
dW5kZWZpbmVkOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRs
ZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKKyAgICAgICAgdHlwZXMgPSAo
IHR5cGVzIHx8ICIiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgIiIgXTsKKyAgICAgICAgdCA9
IHR5cGVzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCB0LS0gKSB7CisgICAgICAgICAgICB0bXAg
PSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107CisgICAgICAgICAgICB0
eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTsKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSAoIHRt
cFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKKworICAgICAgICAgICAgLy8gVGhl
cmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJz
CisgICAgICAgICAgICBpZiAoICF0eXBlICkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBl
LCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGUKKyAg
ICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9Owor
CisgICAgICAgICAgICAvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBl
dmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGUKKyAgICAgICAgICAgIHR5cGUgPSAo
IHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwg
dHlwZTsKKworICAgICAgICAgICAgLy8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVz
ZXQgdHlwZQorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBl
IF0gfHwge307CisKKyAgICAgICAgICAgIC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2
ZW50IGhhbmRsZXJzCisgICAgICAgICAgICBoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBvcmlnVHlwZTogb3Jp
Z1R5cGUsCisgICAgICAgICAgICAgICAgZGF0YTogZGF0YSwKKyAgICAgICAgICAgICAgICBoYW5k
bGVyOiBoYW5kbGVyLAorICAgICAgICAgICAgICAgIGd1aWQ6IGhhbmRsZXIuZ3VpZCwKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgbmVlZHNDb250
ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2Vs
ZWN0b3IgKSwKKyAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggIi4i
ICkKKyAgICAgICAgICAgIH0sIGhhbmRsZU9iakluICk7CisKKyAgICAgICAgICAgIC8vIEluaXQg
dGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0CisgICAgICAgICAgICBp
ZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHsKKyAgICAgICAgICAgICAgICBo
YW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107CisgICAgICAgICAgICAgICAgaGFuZGxlcnMu
ZGVsZWdhdGVDb3VudCA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBPbmx5IHVzZSBhZGRFdmVu
dExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2UKKyAg
ICAgICAgICAgICAgICBpZiAoICFzcGVjaWFsLnNldHVwIHx8CisgICAgICAgICAgICAgICAgICAg
IHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUg
KSA9PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLmFkZEV2ZW50
TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVu
ZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggc3BlY2lhbC5hZGQg
KSB7CisgICAgICAgICAgICAgICAgc3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7
CisKKyAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkgeworICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRv
IHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnQKKyAgICAgICAg
ICAgIGlmICggc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKCBo
YW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2
ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvbgorICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgfSwKKwor
ICAgIC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAor
ICAgIHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFw
cGVkVHlwZXMgKSB7CisKKyAgICAgICAgdmFyIGosIG9yaWdDb3VudCwgdG1wLAorICAgICAgICAg
ICAgZXZlbnRzLCB0LCBoYW5kbGVPYmosCisgICAgICAgICAgICBzcGVjaWFsLCBoYW5kbGVycywg
dHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsCisgICAgICAgICAgICBlbGVtRGF0YSA9IGRhdGFQ
cml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTsKKworICAgICAgICBp
ZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9uY2UgZm9yIGVhY2ggdHlw
ZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWQKKyAgICAgICAgdHlwZXMg
PSAoIHR5cGVzIHx8ICIiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgIiIgXTsKKyAgICAgICAg
dCA9IHR5cGVzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCB0LS0gKSB7CisgICAgICAgICAgICB0
bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107CisgICAgICAgICAg
ICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTsKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSAo
IHRtcFsgMiBdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKKworICAgICAgICAgICAgLy8g
VW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRo
ZSBlbGVtZW50CisgICAgICAgICAgICBpZiAoICF0eXBlICkgeworICAgICAgICAgICAgICAgIGZv
ciAoIHR5cGUgaW4gZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
cmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUg
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlw
ZSBdIHx8IHt9OworICAgICAgICAgICAgdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVn
YXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOworICAgICAgICAgICAgaGFuZGxl
cnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTsKKyAgICAgICAgICAgIHRtcCA9IHRtcFsgMiBdICYm
CisgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCggIihefFxcLikiICsgbmFtZXNwYWNlcy5qb2lu
KCAiXFwuKD86LipcXC58KSIgKSArICIoXFwufCQpIiApOworCisgICAgICAgICAgICAvLyBSZW1v
dmUgbWF0Y2hpbmcgZXZlbnRzCisgICAgICAgICAgICBvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMu
bGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKCBqLS0gKSB7CisgICAgICAgICAgICAgICAgaGFu
ZGxlT2JqID0gaGFuZGxlcnNbIGogXTsKKworICAgICAgICAgICAgICAgIGlmICggKCBtYXBwZWRU
eXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgKCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkg
JiYKKyAgICAgICAgICAgICAgICAgICAgKCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFt
ZXNwYWNlICkgKSAmJgorICAgICAgICAgICAgICAgICAgICAoICFzZWxlY3RvciB8fCBzZWxlY3Rv
ciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxl
Y3RvciA9PT0gIioqIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVy
cy5kZWxlZ2F0ZUNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNw
ZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBS
ZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBu
byBtb3JlIGhhbmRsZXJzIGV4aXN0CisgICAgICAgICAgICAvLyAoYXZvaWRzIHBvdGVudGlhbCBm
b3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5k
bGVycykKKyAgICAgICAgICAgIGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7
CisgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fAorICAgICAgICAgICAg
ICAgICAgICBzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRh
LmhhbmRsZSApID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVt
b3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbIHR5cGUgXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBp
ZiBpdCdzIG5vIGxvbmdlciB1c2VkCisgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3Qo
IGV2ZW50cyApICkgeworICAgICAgICAgICAgZGF0YVByaXYucmVtb3ZlKCBlbGVtLCAiaGFuZGxl
IGV2ZW50cyIgKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBkaXNwYXRjaDogZnVuY3Rpb24o
IGV2ZW50ICkgeworCisgICAgICAgIC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJv
bSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdAorICAgICAgICBldmVudCA9IGpRdWVyeS5ldmVudC5m
aXgoIGV2ZW50ICk7CisKKyAgICAgICAgdmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2Jq
LAorICAgICAgICAgICAgaGFuZGxlclF1ZXVlID0gW10sCisgICAgICAgICAgICBhcmdzID0gc2xp
Y2UuY2FsbCggYXJndW1lbnRzICksCisgICAgICAgICAgICBoYW5kbGVycyA9ICggZGF0YVByaXYu
Z2V0KCB0aGlzLCAiZXZlbnRzIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSwKKyAgICAg
ICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9
OworCisgICAgICAgIC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0
aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50CisgICAgICAgIGFyZ3NbIDAgXSA9IGV2ZW50Owor
ICAgICAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7CisKKyAgICAgICAgLy8gQ2FsbCB0
aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwg
aWYgZGVzaXJlZAorICAgICAgICBpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5w
cmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVybWluZSBoYW5kbGVycworICAg
ICAgICBoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZl
bnQsIGhhbmRsZXJzICk7CisKKyAgICAgICAgLy8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBt
YXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXMKKyAgICAgICAgaSA9IDA7Cisg
ICAgICAgIHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVu
dC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworICAgICAgICAgICAgZXZlbnQuY3VycmVudFRh
cmdldCA9IG1hdGNoZWQuZWxlbTsKKworICAgICAgICAgICAgaiA9IDA7CisgICAgICAgICAgICB3
aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJgorICAgICAg
ICAgICAgICAgICFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworCisg
ICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGhhdmUgbm8g
bmFtZXNwYWNlLCBvciAyKSBoYXZlIG5hbWVzcGFjZShzKQorICAgICAgICAgICAgICAgIC8vIGEg
c3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2
ZSBubyBuYW1lc3BhY2UpLgorICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnJuYW1lc3BhY2Ug
fHwgZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOworICAgICAgICAg
ICAgICAgICAgICBldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7CisKKyAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUg
XSB8fCB7fSApLmhhbmRsZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmhh
bmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZv
ciB0aGUgbWFwcGVkIHR5cGUKKyAgICAgICAgaWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHsK
KyAgICAgICAgICAgIHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OworICAgIH0sCisKKyAgICBo
YW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHsKKyAgICAgICAgdmFyIGksIG1h
dGNoZXMsIHNlbCwgaGFuZGxlT2JqLAorICAgICAgICAgICAgaGFuZGxlclF1ZXVlID0gW10sCisg
ICAgICAgICAgICBkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKKyAgICAg
ICAgICAgIGN1ciA9IGV2ZW50LnRhcmdldDsKKworICAgICAgICAvLyBTdXBwb3J0IChhdCBsZWFz
dCk6IENocm9tZSwgSUU5CisgICAgICAgIC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnMKKyAgICAg
ICAgLy8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKCMxMzE4MCkKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveDw9NDIrCisgICAgICAgIC8vIEF2b2lk
IG5vbi1sZWZ0LWNsaWNrIGluIEZGIGJ1dCBkb24ndCBibG9jayBJRSByYWRpbyBldmVudHMgKCMz
ODYxLCBnaC0yMzQzKQorICAgICAgICBpZiAoIGRlbGVnYXRlQ291bnQgJiYgY3VyLm5vZGVUeXBl
ICYmCisgICAgICAgICAgICAoIGV2ZW50LnR5cGUgIT09ICJjbGljayIgfHwgaXNOYU4oIGV2ZW50
LmJ1dHRvbiApIHx8IGV2ZW50LmJ1dHRvbiA8IDEgKSApIHsKKworICAgICAgICAgICAgZm9yICgg
OyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7CisKKyAgICAg
ICAgICAgICAgICAvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOCkKKyAgICAgICAg
ICAgICAgICAvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5
MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NCkKKyAgICAgICAgICAgICAgICBpZiAoIGN1ci5ub2Rl
VHlwZSA9PT0gMSAmJiAoIGN1ci5kaXNhYmxlZCAhPT0gdHJ1ZSB8fCBldmVudC50eXBlICE9PSAi
Y2xpY2siICkgKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUg
cHJvcGVydGllcyAoIzEzMjAzKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsID0gaGFuZGxl
T2JqLnNlbGVjdG9yICsgIiAiOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNo
ZXNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWwsIHRoaXMs
IG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXNbIHNlbCBdICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJR
dWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZXMgfSApOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVy
cworICAgICAgICBpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7CisgICAg
ICAgICAgICBoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiB0aGlzLCBoYW5kbGVyczogaGFuZGxl
cnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gaGFuZGxlclF1ZXVlOworICAgIH0sCisKKyAgICAvLyBJbmNsdWRlcyBzb21lIGV2ZW50IHBy
b3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQgTW91c2VFdmVudAorICAgIHByb3BzOiAoICJhbHRL
ZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBkZXRhaWwgZXZlbnRQ
aGFzZSAiICsKKyAgICAgICAgIm1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQg
dGltZVN0YW1wIHZpZXcgd2hpY2giICkuc3BsaXQoICIgIiApLAorCisgICAgZml4SG9va3M6IHt9
LAorCisgICAga2V5SG9va3M6IHsKKyAgICAgICAgcHJvcHM6ICJjaGFyIGNoYXJDb2RlIGtleSBr
ZXlDb2RlIi5zcGxpdCggIiAiICksCisgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBv
cmlnaW5hbCApIHsKKworICAgICAgICAgICAgLy8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzCisg
ICAgICAgICAgICBpZiAoIGV2ZW50LndoaWNoID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAg
ZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3JpZ2luYWwuY2hhckNv
ZGUgOiBvcmlnaW5hbC5rZXlDb2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gZXZlbnQ7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgbW91c2VIb29rczogeworICAgICAg
ICBwcm9wczogKCAiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0
WSBwYWdlWCBwYWdlWSAiICsKKyAgICAgICAgICAgICJzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50
IiApLnNwbGl0KCAiICIgKSwKKyAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdp
bmFsICkgeworICAgICAgICAgICAgdmFyIGV2ZW50RG9jLCBkb2MsIGJvZHksCisgICAgICAgICAg
ICAgICAgYnV0dG9uID0gb3JpZ2luYWwuYnV0dG9uOworCisgICAgICAgICAgICAvLyBDYWxjdWxh
dGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlCisgICAgICAgICAg
ICBpZiAoIGV2ZW50LnBhZ2VYID09IG51bGwgJiYgb3JpZ2luYWwuY2xpZW50WCAhPSBudWxsICkg
eworICAgICAgICAgICAgICAgIGV2ZW50RG9jID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQg
fHwgZG9jdW1lbnQ7CisgICAgICAgICAgICAgICAgZG9jID0gZXZlbnREb2MuZG9jdW1lbnRFbGVt
ZW50OworICAgICAgICAgICAgICAgIGJvZHkgPSBldmVudERvYy5ib2R5OworCisgICAgICAgICAg
ICAgICAgZXZlbnQucGFnZVggPSBvcmlnaW5hbC5jbGllbnRYICsKKyAgICAgICAgICAgICAgICAg
ICAgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwg
MCApIC0KKyAgICAgICAgICAgICAgICAgICAgKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9k
eSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApOworICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VZ
ID0gb3JpZ2luYWwuY2xpZW50WSArCisgICAgICAgICAgICAgICAgICAgICggZG9jICYmIGRvYy5z
Y3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3JvbGxUb3AgIHx8IDAgKSAtCisgICAgICAgICAg
ICAgICAgICAgICggZG9jICYmIGRvYy5jbGllbnRUb3AgIHx8IGJvZHkgJiYgYm9keS5jbGllbnRU
b3AgIHx8IDAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHdoaWNoIGZv
ciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodAorICAgICAgICAg
ICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24ndCB1c2UgaXQKKyAg
ICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gKCBidXR0b24gJiAxID8gMSA6ICggYnV0dG9u
ICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICB9CisgICAgfSwKKworICAgIGZpeDog
ZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICBpZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBd
ICkgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICB9CisKKyAgICAgICAgLy8g
Q3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2JqZWN0IGFuZCBub3JtYWxpemUg
c29tZSBwcm9wZXJ0aWVzCisgICAgICAgIHZhciBpLCBwcm9wLCBjb3B5LAorICAgICAgICAgICAg
dHlwZSA9IGV2ZW50LnR5cGUsCisgICAgICAgICAgICBvcmlnaW5hbEV2ZW50ID0gZXZlbnQsCisg
ICAgICAgICAgICBmaXhIb29rID0gdGhpcy5maXhIb29rc1sgdHlwZSBdOworCisgICAgICAgIGlm
ICggIWZpeEhvb2sgKSB7CisgICAgICAgICAgICB0aGlzLmZpeEhvb2tzWyB0eXBlIF0gPSBmaXhI
b29rID0KKyAgICAgICAgICAgICAgICBybW91c2VFdmVudC50ZXN0KCB0eXBlICkgPyB0aGlzLm1v
dXNlSG9va3MgOgorICAgICAgICAgICAgICAgIHJrZXlFdmVudC50ZXN0KCB0eXBlICkgPyB0aGlz
LmtleUhvb2tzIDoKKyAgICAgICAgICAgICAgICB7fTsKKyAgICAgICAgfQorICAgICAgICBjb3B5
ID0gZml4SG9vay5wcm9wcyA/IHRoaXMucHJvcHMuY29uY2F0KCBmaXhIb29rLnByb3BzICkgOiB0
aGlzLnByb3BzOworCisgICAgICAgIGV2ZW50ID0gbmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxF
dmVudCApOworCisgICAgICAgIGkgPSBjb3B5Lmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCBpLS0g
KSB7CisgICAgICAgICAgICBwcm9wID0gY29weVsgaSBdOworICAgICAgICAgICAgZXZlbnRbIHBy
b3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN1
cHBvcnQ6IENvcmRvdmEgMi41IChXZWJLaXQpICgjMTMyNTUpCisgICAgICAgIC8vIEFsbCBldmVu
dHMgc2hvdWxkIGhhdmUgYSB0YXJnZXQ7IENvcmRvdmEgZGV2aWNlcmVhZHkgZG9lc24ndAorICAg
ICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBk
b2N1bWVudDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN1cHBvcnQ6IFNhZmFyaSA2LjArLCBD
aHJvbWU8MjgKKyAgICAgICAgLy8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1
MDQsICMxMzE0MykKKyAgICAgICAgaWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7
CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmaXhIb29rLmZpbHRlciA/IGZpeEhvb2suZmlsdGVy
KCBldmVudCwgb3JpZ2luYWxFdmVudCApIDogZXZlbnQ7CisgICAgfSwKKworICAgIHNwZWNpYWw6
IHsKKyAgICAgICAgbG9hZDogeworCisgICAgICAgICAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBp
bWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCisgICAgICAgICAg
ICBub0J1YmJsZTogdHJ1ZQorICAgICAgICB9LAorICAgICAgICBmb2N1czogeworCisgICAgICAg
ICAgICAvLyBGaXJlIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVl
bmNlIGlzIGNvcnJlY3QKKyAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGlmICggdGhpcyAhPT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmZvY3Vz
ICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIKKyAgICAgICAgfSwKKyAgICAgICAgYmx1
cjogeworICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
aWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5ibHVyKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVs
ZWdhdGVUeXBlOiAiZm9jdXNvdXQiCisgICAgICAgIH0sCisgICAgICAgIGNsaWNrOiB7CisKKyAg
ICAgICAgICAgIC8vIEZvciBjaGVja2JveCwgZmlyZSBuYXRpdmUgZXZlbnQgc28gY2hlY2tlZCBz
dGF0ZSB3aWxsIGJlIHJpZ2h0CisgICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiAmJiB0aGlzLmNsaWNr
ICYmIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgImlucHV0IiApICkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBGb3IgY3Jv
c3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNsaWNrKCkgb24gbGlu
a3MKKyAgICAgICAgICAgIF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZXZlbnQudGFyZ2V0LCAiYSIgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBiZWZvcmV1bmxvYWQ6IHsKKyAgICAgICAg
ICAgIHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisgICAgICAgICAgICAgICAg
Ly8gU3VwcG9ydDogRmlyZWZveCAyMCsKKyAgICAgICAgICAgICAgICAvLyBGaXJlZm94IGRvZXNu
J3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuCisgICAgICAgICAg
ICAgICAgaWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2
ZW50ICkgeworICAgICAgICAgICAgICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZh
bHVlID0gZXZlbnQucmVzdWx0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK307CisKK2pRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVt
LCB0eXBlLCBoYW5kbGUgKSB7CisKKyAgICAvLyBUaGlzICJpZiIgaXMgbmVlZGVkIGZvciBwbGFp
biBvYmplY3RzCisgICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAg
IGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7CisgICAgfQorfTsKKwor
alF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7CisKKyAgICAvLyBBbGxvdyBp
bnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKKyAgICBpZiAoICEoIHRoaXMg
aW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHsKKyAgICAgICAgcmV0dXJuIG5ldyBqUXVlcnku
RXZlbnQoIHNyYywgcHJvcHMgKTsKKyAgICB9CisKKyAgICAvLyBFdmVudCBvYmplY3QKKyAgICBp
ZiAoIHNyYyAmJiBzcmMudHlwZSApIHsKKyAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3Jj
OworICAgICAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTsKKworICAgICAgICAvLyBFdmVudHMgYnVi
YmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAor
ICAgICAgICAvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUg
Y29ycmVjdCB2YWx1ZS4KKyAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVm
YXVsdFByZXZlbnRlZCB8fAorICAgICAgICAgICAgICAgIHNyYy5kZWZhdWx0UHJldmVudGVkID09
PSB1bmRlZmluZWQgJiYKKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4w
CisgICAgICAgICAgICAgICAgc3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/CisgICAgICAgICAg
ICByZXR1cm5UcnVlIDoKKyAgICAgICAgICAgIHJldHVybkZhbHNlOworCisgICAgLy8gRXZlbnQg
dHlwZQorICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMudHlwZSA9IHNyYzsKKyAgICB9CisKKyAg
ICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9i
amVjdAorICAgIGlmICggcHJvcHMgKSB7CisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRoaXMsIHBy
b3BzICk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2
ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKKyAgICB0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGlt
ZVN0YW1wIHx8IGpRdWVyeS5ub3coKTsKKworICAgIC8vIE1hcmsgaXQgYXMgZml4ZWQKKyAgICB0
aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTsKK307CisKKy8vIGpRdWVyeS5FdmVudCBpcyBi
YXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3Vh
Z2UgQmluZGluZworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1F
dmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCitqUXVlcnkuRXZlbnQucHJv
dG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsCisgICAgaXNEZWZhdWx0
UHJldmVudGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJu
RmFsc2UsCisgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAor
ICAgIGlzU2ltdWxhdGVkOiBmYWxzZSwKKworICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAgICAgdGhpcy5p
c0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOworCisgICAgICAgIGlmICggZSAmJiAhdGhp
cy5pc1NpbXVsYXRlZCApIHsKKyAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAg
ICAgfQorICAgIH0sCisgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9u
U3RvcHBlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAgaWYgKCBlICYmICF0aGlzLmlzU2ltdWxh
dGVkICkgeworICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfQorICAg
IH0sCisgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAgICAgdGhpcy5pc0ltbWVkaWF0ZVBy
b3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAgaWYgKCBlICYmICF0aGlz
LmlzU2ltdWxhdGVkICkgeworICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24o
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfQor
fTsKKworLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9v
dXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzCisvLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29y
a3MgaW4galF1ZXJ5LgorLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVh
dmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXQKKy8vCisvLyBTdXBwb3J0OiBTYWZhcmkgNyBv
bmx5CisvLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZToKKy8vIGh0dHBz
Oi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNTgKKy8v
IGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJv
bWUgdmVyc2lvbnMgYXMgd2VsbCkuCitqUXVlcnkuZWFjaCggeworICAgIG1vdXNlZW50ZXI6ICJt
b3VzZW92ZXIiLAorICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIsCisgICAgcG9pbnRlcmVudGVy
OiAicG9pbnRlcm92ZXIiLAorICAgIHBvaW50ZXJsZWF2ZTogInBvaW50ZXJvdXQiCit9LCBmdW5j
dGlvbiggb3JpZywgZml4ICkgeworICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7
CisgICAgICAgIGRlbGVnYXRlVHlwZTogZml4LAorICAgICAgICBiaW5kVHlwZTogZml4LAorCisg
ICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgdmFyIHJldCwK
KyAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLAorICAgICAgICAgICAgICAgIHJlbGF0ZWQg
PSBldmVudC5yZWxhdGVkVGFyZ2V0LAorICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50
LmhhbmRsZU9iajsKKworICAgICAgICAgICAgLy8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0
aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC4KKyAgICAgICAgICAg
IC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJy
b3dzZXIgd2luZG93CisgICAgICAgICAgICBpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0g
dGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7CisgICAg
ICAgICAgICAgICAgZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTsKKyAgICAgICAgICAg
ICAgICByZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Cisg
ICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IGZpeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9OworfSApOworCitqUXVlcnkuZm4uZXh0
ZW5kKCB7CisgICAgb246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgewor
ICAgICAgICByZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTsKKyAg
ICB9LAorICAgIG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7Cisg
ICAgICAgIHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOwor
ICAgIH0sCisgICAgb2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsKKyAgICAg
ICAgdmFyIGhhbmRsZU9iaiwgdHlwZTsKKyAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2
ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7CisKKyAgICAgICAgICAgIC8vICggZXZl
bnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnQKKyAgICAgICAgICAgIGhhbmRsZU9iaiA9IHR5
cGVzLmhhbmRsZU9iajsKKyAgICAgICAgICAgIGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQg
KS5vZmYoCisgICAgICAgICAgICAgICAgaGFuZGxlT2JqLm5hbWVzcGFjZSA/CisgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZU9iai5vcmlnVHlwZSArICIuIiArIGhhbmRsZU9iai5uYW1lc3BhY2Ug
OgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoub3JpZ1R5cGUsCisgICAgICAgICAgICAg
ICAgaGFuZGxlT2JqLnNlbGVjdG9yLAorICAgICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVy
CisgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgeworCisgICAgICAgICAgICAv
LyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKQorICAgICAgICAgICAgZm9yICggdHlwZSBp
biB0eXBlcyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5
cGVzWyB0eXBlIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICB9CisgICAgICAgIGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxl
Y3RvciA9PT0gImZ1bmN0aW9uIiApIHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcyBbLCBmbl0g
KQorICAgICAgICAgICAgZm4gPSBzZWxlY3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW5k
ZWZpbmVkOworICAgICAgICB9CisgICAgICAgIGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAg
ICAgICAgZm4gPSByZXR1cm5GYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMs
IHR5cGVzLCBmbiwgc2VsZWN0b3IgKTsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworCit2
YXIKKyAgICByeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxs
aW5rfG1ldGF8cGFyYW0pKChbXHc6LV0rKVtePl0qKVwvPi9naSwKKworICAgIC8vIFN1cHBvcnQ6
IElFIDEwLTExLCBFZGdlIDEwMjQwKworICAgIC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3Jv
dXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuCisgICAgLy8gU2VlIGh0dHBzOi8vY29u
bmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi8KKyAgICBybm9J
bm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSwKKworICAgIC8vIGNoZWNrZWQ9ImNo
ZWNrZWQiIG9yIGNoZWNrZWQKKyAgICByY2hlY2tlZCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMq
LmNoZWNrZWQuKS9pLAorICAgIHJzY3JpcHRUeXBlTWFza2VkID0gL150cnVlXC8oLiopLywKKyAg
ICByY2xlYW5TY3JpcHQgPSAvXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyok
L2c7CisKKy8vIE1hbmlwdWxhdGluZyB0YWJsZXMgcmVxdWlyZXMgYSB0Ym9keQorZnVuY3Rpb24g
bWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkgeworICAgIHJldHVybiBqUXVlcnku
bm9kZU5hbWUoIGVsZW0sICJ0YWJsZSIgKSAmJgorICAgICAgICBqUXVlcnkubm9kZU5hbWUoIGNv
bnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgInRy
IiApID8KKworICAgICAgICBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAidGJvZHkiIClbIDAg
XSB8fAorICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCggZWxlbS5vd25lckRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoICJ0Ym9keSIgKSApIDoKKyAgICAgICAgZWxlbTsKK30KKworLy8gUmVwbGFj
ZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUg
RE9NIG1hbmlwdWxhdGlvbgorZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHsKKyAgICBl
bGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCAidHlwZSIgKSAhPT0gbnVsbCApICsgIi8i
ICsgZWxlbS50eXBlOworICAgIHJldHVybiBlbGVtOworfQorZnVuY3Rpb24gcmVzdG9yZVNjcmlw
dCggZWxlbSApIHsKKyAgICB2YXIgbWF0Y2ggPSByc2NyaXB0VHlwZU1hc2tlZC5leGVjKCBlbGVt
LnR5cGUgKTsKKworICAgIGlmICggbWF0Y2ggKSB7CisgICAgICAgIGVsZW0udHlwZSA9IG1hdGNo
WyAxIF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoICJ0eXBl
IiApOworICAgIH0KKworICAgIHJldHVybiBlbGVtOworfQorCitmdW5jdGlvbiBjbG9uZUNvcHlF
dmVudCggc3JjLCBkZXN0ICkgeworICAgIHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFD
dXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzOworCisgICAgaWYgKCBkZXN0Lm5vZGVUeXBl
ICE9PSAxICkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gMS4gQ29weSBwcml2
YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy4KKyAgICBpZiAoIGRhdGFQcml2Lmhhc0Rh
dGEoIHNyYyApICkgeworICAgICAgICBwZGF0YU9sZCA9IGRhdGFQcml2LmFjY2Vzcyggc3JjICk7
CisgICAgICAgIHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KCBkZXN0LCBwZGF0YU9sZCApOworICAg
ICAgICBldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7CisKKyAgICAgICAgaWYgKCBldmVudHMgKSB7
CisgICAgICAgICAgICBkZWxldGUgcGRhdGFDdXIuaGFuZGxlOworICAgICAgICAgICAgcGRhdGFD
dXIuZXZlbnRzID0ge307CisKKyAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gZXZlbnRzICkgewor
ICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBp
IDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCBkZXN0
LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gMi4gQ29weSB1c2VyIGRhdGEKKyAg
ICBpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkgeworICAgICAgICB1ZGF0YU9sZCA9IGRh
dGFVc2VyLmFjY2Vzcyggc3JjICk7CisgICAgICAgIHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgg
e30sIHVkYXRhT2xkICk7CisKKyAgICAgICAgZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciAp
OworICAgIH0KK30KKworLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzCitmdW5jdGlv
biBmaXhJbnB1dCggc3JjLCBkZXN0ICkgeworICAgIHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5h
bWUudG9Mb3dlckNhc2UoKTsKKworICAgIC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQg
c3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLgorICAgIGlmICggbm9k
ZU5hbWUgPT09ICJpbnB1dCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHsK
KyAgICAgICAgZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7CisKKyAgICAvLyBGYWlscyB0byBy
ZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3
aGVuIGNsb25pbmcgb3B0aW9ucworICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQi
IHx8IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgeworICAgICAgICBkZXN0LmRlZmF1bHRWYWx1
ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CisgICAgfQorfQorCitmdW5jdGlvbiBkb21NYW5pcCggY29s
bGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7CisKKyAgICAvLyBGbGF0dGVuIGFu
eSBuZXN0ZWQgYXJyYXlzCisgICAgYXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTsKKwor
ICAgIHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYywK
KyAgICAgICAgaSA9IDAsCisgICAgICAgIGwgPSBjb2xsZWN0aW9uLmxlbmd0aCwKKyAgICAgICAg
aU5vQ2xvbmUgPSBsIC0gMSwKKyAgICAgICAgdmFsdWUgPSBhcmdzWyAwIF0sCisgICAgICAgIGlz
RnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKworICAgIC8vIFdlIGNhbid0
IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdAorICAg
IGlmICggaXNGdW5jdGlvbiB8fAorICAgICAgICAgICAgKCBsID4gMSAmJiB0eXBlb2YgdmFsdWUg
PT09ICJzdHJpbmciICYmCisgICAgICAgICAgICAgICAgIXN1cHBvcnQuY2hlY2tDbG9uZSAmJiBy
Y2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7CisgICAgICAgIHJldHVybiBjb2xsZWN0aW9uLmVh
Y2goIGZ1bmN0aW9uKCBpbmRleCApIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0gY29sbGVjdGlv
bi5lcSggaW5kZXggKTsKKyAgICAgICAgICAgIGlmICggaXNGdW5jdGlvbiApIHsKKyAgICAgICAg
ICAgICAgICBhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkg
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxs
YmFjaywgaWdub3JlZCApOworICAgICAgICB9ICk7CisgICAgfQorCisgICAgaWYgKCBsICkgewor
ICAgICAgICBmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5v
d25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApOworICAgICAgICBmaXJz
dCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CisKKyAgICAgICAgaWYgKCBmcmFnbWVudC5jaGlsZE5v
ZGVzLmxlbmd0aCA9PT0gMSApIHsKKyAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3Q7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRl
cmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2sKKyAgICAgICAg
aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkgeworICAgICAgICAgICAgc2NyaXB0cyA9IGpRdWVyeS5t
YXAoIGdldEFsbCggZnJhZ21lbnQsICJzY3JpcHQiICksIGRpc2FibGVTY3JpcHQgKTsKKyAgICAg
ICAgICAgIGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDsKKworICAgICAgICAgICAgLy8gVXNl
IHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbQorICAgICAgICAgICAgLy8g
aW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwCisgICAgICAgICAgICAv
LyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzAp
LgorICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgICAgIG5v
ZGUgPSBmcmFnbWVudDsKKworICAgICAgICAgICAgICAgIGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRy
dWUgKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVk
IHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uCisgICAgICAgICAgICAgICAgICAgIGlmICgg
aGFzU2NyaXB0cyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5k
cm9pZDw0LjEsIFBoYW50b21KUzwyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwdXNoLmFw
cGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgInNjcmlwdCIg
KSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgY2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggaGFzU2NyaXB0cyApIHsKKyAgICAgICAgICAg
ICAgICBkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50Owor
CisgICAgICAgICAgICAgICAgLy8gUmVlbmFibGUgc2NyaXB0cworICAgICAgICAgICAgICAgIGpR
dWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTsKKworICAgICAgICAgICAgICAgIC8v
IEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb24K
KyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IHNjcmlwdHNbIGkgXTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgIiIgKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgIWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgImdsb2JhbEV2YWwiICkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5zcmMgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24n
dCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5Ll9ldmFsVXJsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCBy
Y2xlYW5TY3JpcHQsICIiICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBjb2xsZWN0aW9uOworfQorCitmdW5jdGlvbiByZW1vdmUo
IGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHsKKyAgICB2YXIgbm9kZSwKKyAgICAgICAgbm9k
ZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLAor
ICAgICAgICBpID0gMDsKKworICAgIGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51
bGw7IGkrKyApIHsKKyAgICAgICAgaWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0g
MSApIHsKKyAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIG5vZGUucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAg
IGlmICgga2VlcERhdGEgJiYgalF1ZXJ5LmNvbnRhaW5zKCBub2RlLm93bmVyRG9jdW1lbnQsIG5v
ZGUgKSApIHsKKyAgICAgICAgICAgICAgICBzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsICJz
Y3JpcHQiICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZCggbm9kZSApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVsZW07
Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRt
bCApIHsKKyAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSggcnhodG1sVGFnLCAiPCQxPjwvJDI+
IiApOworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMs
IGRlZXBEYXRhQW5kRXZlbnRzICkgeworICAgICAgICB2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRl
c3RFbGVtZW50cywKKyAgICAgICAgICAgIGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSwK
KyAgICAgICAgICAgIGluUGFnZSA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50
LCBlbGVtICk7CisKKyAgICAgICAgLy8gRml4IElFIGNsb25pbmcgaXNzdWVzCisgICAgICAgIGlm
ICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDExICkgJiYKKyAgICAgICAgICAgICAgICAhalF1ZXJ5LmlzWE1MRG9j
KCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgIC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3Ig
cGVyZm9ybWFuY2UgcmVhc29uczogaHR0cDovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8y
CisgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7CisgICAgICAgICAg
ICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOworCisgICAgICAgICAgICBmb3IgKCBpID0g
MCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAg
ICBmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRo
ZSBvcmlnaW5hbCB0byB0aGUgY2xvbmUKKyAgICAgICAgaWYgKCBkYXRhQW5kRXZlbnRzICkgewor
ICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICBz
cmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApOworICAgICAgICAgICAg
ICAgIGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7CisKKyAg
ICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7
IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRz
WyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUg
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFByZXNlcnZlIHNjcmlw
dCBldmFsdWF0aW9uIGhpc3RvcnkKKyAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9u
ZSwgInNjcmlwdCIgKTsKKyAgICAgICAgaWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHsK
KyAgICAgICAgICAgIHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRB
bGwoIGVsZW0sICJzY3JpcHQiICkgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVybiB0
aGUgY2xvbmVkIHNldAorICAgICAgICByZXR1cm4gY2xvbmU7CisgICAgfSwKKworICAgIGNsZWFu
RGF0YTogZnVuY3Rpb24oIGVsZW1zICkgeworICAgICAgICB2YXIgZGF0YSwgZWxlbSwgdHlwZSwK
KyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCwKKyAgICAgICAgICAg
IGkgPSAwOworCisgICAgICAgIGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRl
ZmluZWQ7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggYWNjZXB0RGF0YSggZWxlbSApICkgewor
ICAgICAgICAgICAgICAgIGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkg
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5ldmVudHMgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQg
alF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92
ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NSsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRl
bGV0ZSwgc2VlIERhdGEjcmVtb3ZlCisgICAgICAgICAgICAgICAgICAgIGVsZW1bIGRhdGFQcml2
LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9IDM1LTQ1KworICAgICAgICAgICAgICAgICAgICAvLyBB
c3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmUK
KyAgICAgICAgICAgICAgICAgICAgZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVk
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30g
KTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisgICAgLy8gS2VlcCBkb21NYW5pcCBleHBvc2Vk
IHVudGlsIDMuMCAoZ2gtMjIyNSkKKyAgICBkb21NYW5pcDogZG9tTWFuaXAsCisKKyAgICBkZXRh
Y2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuIHJlbW92ZSggdGhpcywg
c2VsZWN0b3IsIHRydWUgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0
b3IgKSB7CisgICAgICAgIHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7CisgICAgfSwK
KworICAgIHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2Vzcygg
dGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1
bmRlZmluZWQgPworICAgICAgICAgICAgICAgIGpRdWVyeS50ZXh0KCB0aGlzICkgOgorICAgICAg
ICAgICAgICAgIHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8
IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRl
eHRDb250ZW50ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9ICk7CisgICAgICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7CisgICAg
fSwKKworICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5pcCgg
dGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhp
cy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBl
ID09PSA5ICkgeworICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJn
ZXQoIHRoaXMsIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoIGVs
ZW0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBwcmVwZW5k
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMs
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAx
IHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSAp
OworICAgICAgICAgICAgICAgIHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJz
dENoaWxkICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgYmVm
b3JlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVu
dHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnBhcmVudE5vZGUg
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwg
dGhpcyApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGFmdGVy
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMs
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhp
cy5uZXh0U2libGluZyApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKwor
ICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGVsZW0sCisgICAgICAgICAgICBp
ID0gMDsKKworICAgICAgICBmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkr
KyApIHsKKyAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKworICAgICAg
ICAgICAgICAgIC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzCisgICAgICAgICAgICAgICAgalF1ZXJ5
LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7CisKKyAgICAgICAgICAgICAgICAv
LyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcworICAgICAgICAgICAgICAgIGVsZW0udGV4dENv
bnRlbnQgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBE
YXRhQW5kRXZlbnRzICkgeworICAgICAgICBkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9
PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOworICAgICAgICBkZWVwRGF0YUFuZEV2ZW50
cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFB
bmRFdmVudHM7CisKKyAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRh
QW5kRXZlbnRzICk7CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgaHRtbDogZnVuY3Rpb24o
IHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUg
KSB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSwKKyAgICAgICAgICAg
ICAgICBpID0gMCwKKyAgICAgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGg7CisKKyAgICAgICAg
ICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmlubmVySFRNTDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNl
IGlubmVySFRNTAorICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYm
ICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgorICAgICAgICAgICAgICAgICF3cmFwTWFw
WyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyAiIiwgIiIgXSApWyAxIF0udG9Mb3dlckNh
c2UoKSBdICkgeworCisgICAgICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRl
ciggdmFsdWUgKTsKKworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0
aGlzWyBpIF0gfHwge307CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVt
ZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBlbGVtID0gMDsKKworICAgICAgICAgICAgICAgIC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJv
d3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZAorICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKCBlICkge30KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBlbGVt
ICkgeworICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Cisg
ICAgfSwKKworICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlnbm9y
ZWQgPSBbXTsKKworICAgICAgICAvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBu
b24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnQKKyAgICAgICAg
cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKKworICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHsKKyAgICAgICAgICAgICAg
ICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApOworICAgICAgICAgICAgICAgIGlm
ICggcGFyZW50ICkgeworICAgICAgICAgICAgICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKCBl
bGVtLCB0aGlzICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
IC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb24KKyAgICAgICAgfSwgaWdub3JlZCApOworICAg
IH0KK30gKTsKKworalF1ZXJ5LmVhY2goIHsKKyAgICBhcHBlbmRUbzogImFwcGVuZCIsCisgICAg
cHJlcGVuZFRvOiAicHJlcGVuZCIsCisgICAgaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwKKyAgICBp
bnNlcnRBZnRlcjogImFmdGVyIiwKKyAgICByZXBsYWNlQWxsOiAicmVwbGFjZVdpdGgiCit9LCBm
dW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5j
dGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBlbGVtcywKKyAgICAgICAgICAgIHJldCA9
IFtdLAorICAgICAgICAgICAgaW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLAorICAgICAgICAg
ICAgbGFzdCA9IGluc2VydC5sZW5ndGggLSAxLAorICAgICAgICAgICAgaSA9IDA7CisKKyAgICAg
ICAgZm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHsKKyAgICAgICAgICAgIGVsZW1zID0gaSA9PT0g
bGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7CisgICAgICAgICAgICBqUXVlcnkoIGlu
c2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7CisKKyAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IFF0V2ViS2l0CisgICAgICAgICAgICAvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8s
IGFycmF5bGlrZSkgdGhyb3dzCisgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdl
dCgpICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCAp
OworICAgIH07Cit9ICk7CisKKwordmFyIGlmcmFtZSwKKyAgICBlbGVtZGlzcGxheSA9IHsKKwor
ICAgICAgICAvLyBTdXBwb3J0OiBGaXJlZm94CisgICAgICAgIC8vIFdlIGhhdmUgdG8gcHJlLWRl
ZmluZSB0aGVzZSB2YWx1ZXMgZm9yIEZGICgjMTAyMjcpCisgICAgICAgIEhUTUw6ICJibG9jayIs
CisgICAgICAgIEJPRFk6ICJibG9jayIKKyAgICB9OworCisvKioKKyAqIFJldHJpZXZlIHRoZSBh
Y3R1YWwgZGlzcGxheSBvZiBhIGVsZW1lbnQKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG5vZGVO
YW1lIG9mIHRoZSBlbGVtZW50CisgKiBAcGFyYW0ge09iamVjdH0gZG9jIERvY3VtZW50IG9iamVj
dAorICovCisKKy8vIENhbGxlZCBvbmx5IGZyb20gd2l0aGluIGRlZmF1bHREaXNwbGF5CitmdW5j
dGlvbiBhY3R1YWxEaXNwbGF5KCBuYW1lLCBkb2MgKSB7CisgICAgdmFyIGVsZW0gPSBqUXVlcnko
IGRvYy5jcmVhdGVFbGVtZW50KCBuYW1lICkgKS5hcHBlbmRUbyggZG9jLmJvZHkgKSwKKworICAg
ICAgICBkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbVsgMCBdLCAiZGlzcGxheSIgKTsKKworICAg
IC8vIFdlIGRvbid0IGhhdmUgYW55IGRhdGEgc3RvcmVkIG9uIHRoZSBlbGVtZW50LAorICAgIC8v
IHNvIHVzZSAiZGV0YWNoIiBtZXRob2QgYXMgZmFzdCB3YXkgdG8gZ2V0IHJpZCBvZiB0aGUgZWxl
bWVudAorICAgIGVsZW0uZGV0YWNoKCk7CisKKyAgICByZXR1cm4gZGlzcGxheTsKK30KKworLyoq
CisgKiBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGRpc3BsYXkgdmFsdWUgb2YgYW4gZWxl
bWVudAorICogQHBhcmFtIHtTdHJpbmd9IG5vZGVOYW1lCisgKi8KK2Z1bmN0aW9uIGRlZmF1bHRE
aXNwbGF5KCBub2RlTmFtZSApIHsKKyAgICB2YXIgZG9jID0gZG9jdW1lbnQsCisgICAgICAgIGRp
c3BsYXkgPSBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXTsKKworICAgIGlmICggIWRpc3BsYXkgKSB7
CisgICAgICAgIGRpc3BsYXkgPSBhY3R1YWxEaXNwbGF5KCBub2RlTmFtZSwgZG9jICk7CisKKyAg
ICAgICAgLy8gSWYgdGhlIHNpbXBsZSB3YXkgZmFpbHMsIHJlYWQgZnJvbSBpbnNpZGUgYW4gaWZy
YW1lCisgICAgICAgIGlmICggZGlzcGxheSA9PT0gIm5vbmUiIHx8ICFkaXNwbGF5ICkgeworCisg
ICAgICAgICAgICAvLyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBpZnJhbWUgaWYgcG9zc2libGUK
KyAgICAgICAgICAgIGlmcmFtZSA9ICggaWZyYW1lIHx8IGpRdWVyeSggIjxpZnJhbWUgZnJhbWVi
b3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iICkgKQorICAgICAgICAgICAgICAgIC5h
cHBlbmRUbyggZG9jLmRvY3VtZW50RWxlbWVudCApOworCisgICAgICAgICAgICAvLyBBbHdheXMg
d3JpdGUgYSBuZXcgSFRNTCBza2VsZXRvbiBzbyBXZWJraXQgYW5kIEZpcmVmb3ggZG9uJ3QgY2hv
a2Ugb24gcmV1c2UKKyAgICAgICAgICAgIGRvYyA9IGlmcmFtZVsgMCBdLmNvbnRlbnREb2N1bWVu
dDsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUKKyAgICAgICAgICAgIGRvYy53cml0ZSgp
OworICAgICAgICAgICAgZG9jLmNsb3NlKCk7CisKKyAgICAgICAgICAgIGRpc3BsYXkgPSBhY3R1
YWxEaXNwbGF5KCBub2RlTmFtZSwgZG9jICk7CisgICAgICAgICAgICBpZnJhbWUuZGV0YWNoKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3Bs
YXkKKyAgICAgICAgZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBkaXNwbGF5OworICAgIH0KKwor
ICAgIHJldHVybiBkaXNwbGF5OworfQordmFyIHJtYXJnaW4gPSAoIC9ebWFyZ2luLyApOworCit2
YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggIl4oIiArIHBudW0gKyAiKSg/IXB4KVthLXolXSsk
IiwgImkiICk7CisKK3ZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAg
ICAvLyBTdXBwb3J0OiBJRTw9MTErLCBGaXJlZm94PD0zMCsgKCMxNTA5OCwgIzE0MTUwKQorICAg
ICAgICAvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHMKKyAgICAgICAg
Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoICJkZWZhdWx0
Vmlldy5nZXRDb21wdXRlZFN0eWxlIgorICAgICAgICB2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1
bWVudC5kZWZhdWx0VmlldzsKKworICAgICAgICBpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciAp
IHsKKyAgICAgICAgICAgIHZpZXcgPSB3aW5kb3c7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7CisgICAgfTsKKwordmFyIHN3YXAgPSBm
dW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MgKSB7CisgICAgdmFyIHJldCwg
bmFtZSwKKyAgICAgICAgb2xkID0ge307CisKKyAgICAvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVl
cywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKKyAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7
CisgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOworICAgICAgICBlbGVt
LnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CisgICAgfQorCisgICAgcmV0ID0gY2Fs
bGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTsKKworICAgIC8vIFJldmVydCB0aGUgb2xk
IHZhbHVlcworICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKKyAgICAgICAgZWxlbS5zdHls
ZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK307CisK
KwordmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKworCisK
KyggZnVuY3Rpb24oKSB7CisgICAgdmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlh
YmxlVmFsLCBwaXhlbE1hcmdpblJpZ2h0VmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsCisgICAg
ICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICksCisgICAgICAg
IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICk7CisKKyAgICAvLyBGaW5pc2gg
ZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50cworICAgIGlmICggIWRp
di5zdHlsZSApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN1cHBvcnQ6IElF
OS0xMSsKKyAgICAvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVt
ZW50IGNsb25lZCAoIzg5MDgpCisgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gImNvbnRl
bnQtYm94IjsKKyAgICBkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAg
PSAiIjsKKyAgICBzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5k
Q2xpcCA9PT0gImNvbnRlbnQtYm94IjsKKworICAgIGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0g
ImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7IiArCisgICAg
ICAgICJwYWRkaW5nOjA7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGUiOworICAgIGNv
bnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7CisKKyAgICAvLyBFeGVjdXRpbmcgYm90aCBwaXhl
bFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlv
dXQKKyAgICAvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0
aGUgc2Vjb25kIGNvbXB1dGF0aW9uLgorICAgIGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkg
eworICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IEZpcmVmb3g8MjksIEFuZHJvaWQgMi4zCisgICAgICAgICAgICAvLyBWZW5kb3ItcHJlZml4IGJv
eC1zaXppbmcKKyAgICAgICAgICAgICItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96
LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7IiArCisgICAgICAg
ICAgICAicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazsiICsKKyAgICAgICAgICAgICJt
YXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4OyIgKworICAgICAgICAgICAgInRvcDox
JTt3aWR0aDo1MCUiOworICAgICAgICBkaXYuaW5uZXJIVE1MID0gIiI7CisgICAgICAgIGRvY3Vt
ZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7CisKKyAgICAgICAgdmFyIGRpdlN0
eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApOworICAgICAgICBwaXhlbFBvc2l0
aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSAiMSUiOworICAgICAgICByZWxpYWJsZU1hcmdpbkxl
ZnRWYWwgPSBkaXZTdHlsZS5tYXJnaW5MZWZ0ID09PSAiMnB4IjsKKyAgICAgICAgYm94U2l6aW5n
UmVsaWFibGVWYWwgPSBkaXZTdHlsZS53aWR0aCA9PT0gIjRweCI7CisKKyAgICAgICAgLy8gU3Vw
cG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seQorICAgICAgICAvLyBTb21lIHN0eWxlcyBjb21l
IGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3QK
KyAgICAgICAgZGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjUwJSI7CisgICAgICAgIHBpeGVsTWFy
Z2luUmlnaHRWYWwgPSBkaXZTdHlsZS5tYXJnaW5SaWdodCA9PT0gIjRweCI7CisKKyAgICAgICAg
ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKKyAgICB9CisKKyAgICBq
UXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7CisgICAgICAgIHBpeGVsUG9zaXRpb246IGZ1bmN0aW9u
KCkgeworCisgICAgICAgICAgICAvLyBUaGlzIHRlc3QgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGJ1
dCB3ZSBzdGlsbCBkbyBtZW1vaXppbmcKKyAgICAgICAgICAgIC8vIHNpbmNlIHdlIGNhbiB1c2Ug
dGhlIGJveFNpemluZ1JlbGlhYmxlIHByZS1jb21wdXRpbmcuCisgICAgICAgICAgICAvLyBObyBu
ZWVkIHRvIGNoZWNrIGlmIHRoZSB0ZXN0IHdhcyBhbHJlYWR5IHBlcmZvcm1lZCwgdGhvdWdoLgor
ICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIHJldHVybiBwaXhl
bFBvc2l0aW9uVmFsOworICAgICAgICB9LAorICAgICAgICBib3hTaXppbmdSZWxpYWJsZTogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwg
KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDsKKyAgICAgICAgfSwKKyAg
ICAgICAgcGl4ZWxNYXJnaW5SaWdodDogZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIFN1
cHBvcnQ6IEFuZHJvaWQgNC4wLTQuMworICAgICAgICAgICAgLy8gV2UncmUgY2hlY2tpbmcgZm9y
IGJveFNpemluZ1JlbGlhYmxlVmFsIGhlcmUgaW5zdGVhZCBvZiBwaXhlbE1hcmdpblJpZ2h0VmFs
CisgICAgICAgICAgICAvLyBzaW5jZSB0aGF0IGNvbXByZXNzZXMgYmV0dGVyIGFuZCB0aGV5J3Jl
IGNvbXB1dGVkIHRvZ2V0aGVyIGFueXdheS4KKyAgICAgICAgICAgIGlmICggYm94U2l6aW5nUmVs
aWFibGVWYWwgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlU3R5bGVUZXN0cygp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBpeGVsTWFyZ2luUmlnaHRWYWw7
CisgICAgICAgIH0sCisgICAgICAgIHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7CisK
KyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OCBvbmx5LCBBbmRyb2lkIDQuMCAtIDQuMyBv
bmx5LCBGaXJlZm94IDw9MyAtIDM3CisgICAgICAgICAgICBpZiAoIGJveFNpemluZ1JlbGlhYmxl
VmFsID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7Cisg
ICAgICAgIH0sCisgICAgICAgIHJlbGlhYmxlTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkgeworCisg
ICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMworICAgICAgICAgICAgLy8gQ2hlY2sg
aWYgZGl2IHdpdGggZXhwbGljaXQgd2lkdGggYW5kIG5vIG1hcmdpbi1yaWdodCBpbmNvcnJlY3Rs
eQorICAgICAgICAgICAgLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lk
dGggb2YgY29udGFpbmVyLiAoIzMzMzMpCisgICAgICAgICAgICAvLyBXZWJLaXQgQnVnIDEzMzQz
IC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQK
KyAgICAgICAgICAgIC8vIFRoaXMgc3VwcG9ydCBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIG9u
Y2Ugc28gbm8gbWVtb2l6aW5nIGlzIG5lZWRlZC4KKyAgICAgICAgICAgIHZhciByZXQsCisgICAg
ICAgICAgICAgICAgbWFyZ2luRGl2ID0gZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCAiZGl2IiApICk7CisKKyAgICAgICAgICAgIC8vIFJlc2V0IENTUzogYm94LXNpemlu
ZzsgZGlzcGxheTsgbWFyZ2luOyBib3JkZXI7IHBhZGRpbmcKKyAgICAgICAgICAgIG1hcmdpbkRp
di5zdHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPQorCisgICAgICAgICAgICAgICAg
Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKyAgICAgICAgICAgICAgICAvLyBWZW5kb3ItcHJlZml4
IGJveC1zaXppbmcKKyAgICAgICAgICAgICAgICAiLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQt
Ym94O2JveC1zaXppbmc6Y29udGVudC1ib3g7IiArCisgICAgICAgICAgICAgICAgImRpc3BsYXk6
YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIjsKKyAgICAgICAgICAgIG1hcmdpbkRp
di5zdHlsZS5tYXJnaW5SaWdodCA9IG1hcmdpbkRpdi5zdHlsZS53aWR0aCA9ICIwIjsKKyAgICAg
ICAgICAgIGRpdi5zdHlsZS53aWR0aCA9ICIxcHgiOworICAgICAgICAgICAgZG9jdW1lbnRFbGVt
ZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTsKKworICAgICAgICAgICAgcmV0ID0gIXBhcnNl
RmxvYXQoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBtYXJnaW5EaXYgKS5tYXJnaW5SaWdodCAp
OworCisgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciAp
OworICAgICAgICAgICAgZGl2LnJlbW92ZUNoaWxkKCBtYXJnaW5EaXYgKTsKKworICAgICAgICAg
ICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0gKTsKK30gKSgpOworCisKK2Z1bmN0aW9u
IGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7CisgICAgdmFyIHdpZHRoLCBtaW5XaWR0
aCwgbWF4V2lkdGgsIHJldCwKKyAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgY29t
cHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTsKKyAgICByZXQgPSBjb21wdXRl
ZCA/IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBd
IDogdW5kZWZpbmVkOworCisgICAgLy8gU3VwcG9ydDogT3BlcmEgMTIuMXggb25seQorICAgIC8v
IEZhbGwgYmFjayB0byBzdHlsZSBldmVuIHdpdGhvdXQgY29tcHV0ZWQKKyAgICAvLyBjb21wdXRl
ZCBpcyB1bmRlZmluZWQgZm9yIGVsZW1zIG9uIGRvY3VtZW50IGZyYWdtZW50cworICAgIGlmICgg
KCByZXQgPT09ICIiIHx8IHJldCA9PT0gdW5kZWZpbmVkICkgJiYgIWpRdWVyeS5jb250YWlucygg
ZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7CisgICAgICAgIHJldCA9IGpRdWVyeS5zdHls
ZSggZWxlbSwgbmFtZSApOworICAgIH0KKworICAgIC8vIFN1cHBvcnQ6IElFOQorICAgIC8vIGdl
dFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3MoJ2ZpbHRlcicpICgjMTI1Mzcp
CisgICAgaWYgKCBjb21wdXRlZCApIHsKKworICAgICAgICAvLyBBIHRyaWJ1dGUgdG8gdGhlICJh
d2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzIgorICAgICAgICAvLyBBbmRyb2lkIEJyb3dzZXIg
cmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcywKKyAgICAgICAgLy8gYnV0IHdpZHRo
IHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy4KKyAgICAgICAgLy8gVGhpcyBpcyBhZ2FpbnN0
IHRoZSBDU1NPTSBkcmFmdCBzcGVjOgorICAgICAgICAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3
Zy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzCisgICAgICAgIGlmICggIXN1cHBvcnQucGl4ZWxNYXJn
aW5SaWdodCgpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUg
KSApIHsKKworICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcworICAg
ICAgICAgICAgd2lkdGggPSBzdHlsZS53aWR0aDsKKyAgICAgICAgICAgIG1pbldpZHRoID0gc3R5
bGUubWluV2lkdGg7CisgICAgICAgICAgICBtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoOworCisg
ICAgICAgICAgICAvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFs
dWUgb3V0CisgICAgICAgICAgICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5
bGUud2lkdGggPSByZXQ7CisgICAgICAgICAgICByZXQgPSBjb21wdXRlZC53aWR0aDsKKworICAg
ICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcworICAgICAgICAgICAgc3R5bGUu
d2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7Cisg
ICAgICAgICAgICBzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID8KKworICAgICAgICAvLyBTdXBwb3J0OiBJ
RTktMTErCisgICAgICAgIC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIu
CisgICAgICAgIHJldCArICIiIDoKKyAgICAgICAgcmV0OworfQorCisKK2Z1bmN0aW9uIGFkZEdl
dEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHsKKworICAgIC8vIERlZmluZSB0aGUgaG9v
aywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICgg
Y29uZGl0aW9uRm4oKSApIHsKKworICAgICAgICAgICAgICAgIC8vIEhvb2sgbm90IG5lZWRlZCAo
b3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZQorICAgICAgICAgICAgICAgIC8vIHRv
IG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC4KKyAgICAgICAgICAgICAgICBkZWxldGUg
dGhpcy5nZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0
ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi4KKyAgICAgICAgICAgIHJldHVybiAoIHRoaXMuZ2V0
ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICB9CisgICAgfTsK
K30KKworCit2YXIKKworICAgIC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3Rh
cnRzIHdpdGggdGFibGUKKyAgICAvLyBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBvciAi
dGFibGUtY2FwdGlvbiIKKyAgICAvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKKyAgICByZGlz
cGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCisKKyAgICBjc3NTaG93ID0g
eyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJi
bG9jayIgfSwKKyAgICBjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7CisgICAgICAgIGxldHRlclNwYWNp
bmc6ICIwIiwKKyAgICAgICAgZm9udFdlaWdodDogIjQwMCIKKyAgICB9LAorCisgICAgY3NzUHJl
Zml4ZXMgPSBbICJXZWJraXQiLCAiTyIsICJNb3oiLCAibXMiIF0sCisgICAgZW1wdHlTdHlsZSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkuc3R5bGU7CisKKy8vIFJldHVybiBhIGNz
cyBwcm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3RlbnRpYWxseSB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVy
dHkKK2Z1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkgeworCisgICAgLy8gU2hvcnRjdXQg
Zm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4ZWQKKyAgICBpZiAoIG5hbWUgaW4g
ZW1wdHlTdHlsZSApIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgLy8gQ2hl
Y2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lcworICAgIHZhciBjYXBOYW1lID0gbmFtZVsgMCBd
LnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksCisgICAgICAgIGkgPSBjc3NQcmVmaXhl
cy5sZW5ndGg7CisKKyAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgbmFtZSA9IGNzc1ByZWZp
eGVzWyBpIF0gKyBjYXBOYW1lOworICAgICAgICBpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHsK
KyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlv
biBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkgeworCisgICAgLy8g
QW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbgorICAgIC8vIG5vcm1h
bGl6ZWQgYXQgdGhpcyBwb2ludAorICAgIHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1
ZSApOworICAgIHJldHVybiBtYXRjaGVzID8KKworICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IHVu
ZGVmaW5lZCAic3VidHJhY3QiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3MKKyAgICAg
ICAgTWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1h
dGNoZXNbIDMgXSB8fCAicHgiICkgOgorICAgICAgICB2YWx1ZTsKK30KKworZnVuY3Rpb24gYXVn
bWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRlckJveCwgc3R5bGVz
ICkgeworICAgIHZhciBpID0gZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJj
b250ZW50IiApID8KKworICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJpZ2h0IG1l
YXN1cmVtZW50LCBhdm9pZCBhdWdtZW50YXRpb24KKyAgICAgICAgNCA6CisKKyAgICAgICAgLy8g
T3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhvcml6b250YWwgb3IgdmVydGljYWwgcHJvcGVydGll
cworICAgICAgICBuYW1lID09PSAid2lkdGgiID8gMSA6IDAsCisKKyAgICAgICAgdmFsID0gMDsK
KworICAgIGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHsKKworICAgICAgICAvLyBCb3RoIGJveCBt
b2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0CisgICAgICAgIGlm
ICggZXh0cmEgPT09ICJtYXJnaW4iICkgeworICAgICAgICAgICAgdmFsICs9IGpRdWVyeS5jc3Mo
IGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCBpc0JvcmRlckJveCApIHsKKworICAgICAgICAgICAgLy8gYm9yZGVy
LWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1vdmUgaXQgaWYgd2Ugd2FudCBjb250ZW50Cisg
ICAgICAgICAgICBpZiAoIGV4dHJhID09PSAiY29udGVudCIgKSB7CisgICAgICAgICAgICAgICAg
dmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVl
LCBzdHlsZXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5vciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXIKKyAgICAg
ICAgICAgIGlmICggZXh0cmEgIT09ICJtYXJnaW4iICkgeworICAgICAgICAgICAgICAgIHZhbCAt
PSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwg
dHJ1ZSwgc3R5bGVzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisKKyAgICAg
ICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQsIHNvIGFkZCBwYWRk
aW5nCisgICAgICAgICAgICB2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgY3Nz
RXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApOworCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBv
aW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyCisgICAg
ICAgICAgICBpZiAoIGV4dHJhICE9PSAicGFkZGluZyIgKSB7CisgICAgICAgICAgICAgICAgdmFs
ICs9IGpRdWVyeS5jc3MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgi
LCB0cnVlLCBzdHlsZXMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiB2YWw7Cit9CisKK2Z1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUs
IGV4dHJhICkgeworCisgICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHksIHdoaWNoIGlz
IGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKKyAgICB2YXIgdmFsdWVJc0JvcmRl
ckJveCA9IHRydWUsCisgICAgICAgIHZhbCA9IG5hbWUgPT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNl
dFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsCisgICAgICAgIHN0eWxlcyA9IGdldFN0eWxlcygg
ZWxlbSApLAorICAgICAgICBpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXpp
bmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IjsKKworICAgIC8vIFNvbWUgbm9u
LWh0bWwgZWxlbWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNr
IGZvciBudWxsL3VuZGVmaW5lZAorICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxs
YS5vcmcvc2hvd19idWcuY2dpP2lkPTY0OTI4NQorICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVn
emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAorICAgIGlmICggdmFsIDw9
IDAgfHwgdmFsID09IG51bGwgKSB7CisKKyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGNvbXB1dGVk
IHRoZW4gdW5jb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5CisgICAgICAgIHZhbCA9IGN1ckNTUygg
ZWxlbSwgbmFtZSwgc3R5bGVzICk7CisgICAgICAgIGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVs
bCApIHsKKyAgICAgICAgICAgIHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCBy
ZXR1cm4uCisgICAgICAgIGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkgeworICAgICAgICAg
ICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIGZvciBzdHlsZSBp
biBjYXNlIGEgYnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzCisgICAgICAg
IC8vIGZvciBnZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlh
YmxlIGVsZW0uc3R5bGUKKyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYm
CisgICAgICAgICAgICAoIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVs
ZW0uc3R5bGVbIG5hbWUgXSApOworCisgICAgICAgIC8vIE5vcm1hbGl6ZSAiIiwgYXV0bywgYW5k
IHByZXBhcmUgZm9yIGV4dHJhCisgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7
CisgICAgfQorCisgICAgLy8gVXNlIHRoZSBhY3RpdmUgYm94LXNpemluZyBtb2RlbCB0byBhZGQv
c3VidHJhY3QgaXJyZWxldmFudCBzdHlsZXMKKyAgICByZXR1cm4gKCB2YWwgKworICAgICAgICBh
dWdtZW50V2lkdGhPckhlaWdodCgKKyAgICAgICAgICAgIGVsZW0sCisgICAgICAgICAgICBuYW1l
LAorICAgICAgICAgICAgZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRl
bnQiICksCisgICAgICAgICAgICB2YWx1ZUlzQm9yZGVyQm94LAorICAgICAgICAgICAgc3R5bGVz
CisgICAgICAgICkKKyAgICApICsgInB4IjsKK30KKworZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1l
bnRzLCBzaG93ICkgeworICAgIHZhciBkaXNwbGF5LCBlbGVtLCBoaWRkZW4sCisgICAgICAgIHZh
bHVlcyA9IFtdLAorICAgICAgICBpbmRleCA9IDAsCisgICAgICAgIGxlbmd0aCA9IGVsZW1lbnRz
Lmxlbmd0aDsKKworICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAg
ICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCAhZWxlbS5zdHlsZSAp
IHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgdmFsdWVzWyBp
bmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCAib2xkZGlzcGxheSIgKTsKKyAgICAgICAgZGlz
cGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTsKKyAgICAgICAgaWYgKCBzaG93ICkgeworCisgICAg
ICAgICAgICAvLyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxl
YXJuIGlmIGl0IGlzCisgICAgICAgICAgICAvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVs
ZXMgb3Igbm90CisgICAgICAgICAgICBpZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSA9
PT0gIm5vbmUiICkgeworICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9ICIiOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZXQgZWxlbWVudHMgd2hpY2ggaGF2ZSBi
ZWVuIG92ZXJyaWRkZW4gd2l0aCBkaXNwbGF5OiBub25lCisgICAgICAgICAgICAvLyBpbiBhIHN0
eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpcworICAgICAg
ICAgICAgLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAorICAgICAgICAgICAgaWYgKCBlbGVtLnN0eWxl
LmRpc3BsYXkgPT09ICIiICYmIGlzSGlkZGVuKCBlbGVtICkgKSB7CisgICAgICAgICAgICAgICAg
dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuYWNjZXNzKAorICAgICAgICAgICAgICAgICAgICBl
bGVtLAorICAgICAgICAgICAgICAgICAgICAib2xkZGlzcGxheSIsCisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkKKyAgICAgICAgICAgICAgICApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGlkZGVuID0gaXNI
aWRkZW4oIGVsZW0gKTsKKworICAgICAgICAgICAgaWYgKCBkaXNwbGF5ICE9PSAibm9uZSIgfHwg
IWhpZGRlbiApIHsKKyAgICAgICAgICAgICAgICBkYXRhUHJpdi5zZXQoCisgICAgICAgICAgICAg
ICAgICAgIGVsZW0sCisgICAgICAgICAgICAgICAgICAgICJvbGRkaXNwbGF5IiwKKyAgICAgICAg
ICAgICAgICAgICAgaGlkZGVuID8gZGlzcGxheSA6IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5
IiApCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNl
Y29uZCBsb29wCisgICAgLy8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvdworICAgIGZvciAo
IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CisgICAgICAgIGVsZW0gPSBl
bGVtZW50c1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCAhZWxlbS5zdHlsZSApIHsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICggIXNob3cgfHwgZWxlbS5zdHls
ZS5kaXNwbGF5ID09PSAibm9uZSIgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiApIHsKKyAg
ICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4IF0gfHwg
IiIgOiAibm9uZSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZWxlbWVudHM7Cit9
CisKK2pRdWVyeS5leHRlbmQoIHsKKworICAgIC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29r
cyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAorICAgIC8vIGJlaGF2aW9yIG9mIGdldHRpbmcg
YW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQorICAgIGNzc0hvb2tzOiB7CisgICAgICAgIG9w
YWNpdHk6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewor
ICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09ICIiID8gIjEiIDogcmV0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBEb24n
dCBhdXRvbWF0aWNhbGx5IGFkZCAicHgiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3Bl
cnRpZXMKKyAgICBjc3NOdW1iZXI6IHsKKyAgICAgICAgImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
IjogdHJ1ZSwKKyAgICAgICAgImNvbHVtbkNvdW50IjogdHJ1ZSwKKyAgICAgICAgImZpbGxPcGFj
aXR5IjogdHJ1ZSwKKyAgICAgICAgImZsZXhHcm93IjogdHJ1ZSwKKyAgICAgICAgImZsZXhTaHJp
bmsiOiB0cnVlLAorICAgICAgICAiZm9udFdlaWdodCI6IHRydWUsCisgICAgICAgICJsaW5lSGVp
Z2h0IjogdHJ1ZSwKKyAgICAgICAgIm9wYWNpdHkiOiB0cnVlLAorICAgICAgICAib3JkZXIiOiB0
cnVlLAorICAgICAgICAib3JwaGFucyI6IHRydWUsCisgICAgICAgICJ3aWRvd3MiOiB0cnVlLAor
ICAgICAgICAiekluZGV4IjogdHJ1ZSwKKyAgICAgICAgInpvb20iOiB0cnVlCisgICAgfSwKKwor
ICAgIC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZv
cmUKKyAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlCisgICAgY3NzUHJvcHM6IHsK
KyAgICAgICAgImZsb2F0IjogImNzc0Zsb2F0IgorICAgIH0sCisKKyAgICAvLyBHZXQgYW5kIHNl
dCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZQorICAgIHN0eWxlOiBmdW5jdGlvbigg
ZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgeworCisgICAgICAgIC8vIERvbid0IHNldCBzdHls
ZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8IGVsZW0u
bm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAgICB2YXIgcmV0LCB0
eXBlLCBob29rcywKKyAgICAgICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFt
ZSApLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIG5hbWUgPSBq
UXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwKKyAgICAgICAgICAgICggalF1ZXJ5LmNzc1By
b3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1lICkgfHwgb3JpZ05hbWUg
KTsKKworICAgICAgICAvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVu
IHVucHJlZml4ZWQgdmVyc2lvbgorICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFt
ZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUKKyAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKworICAgICAgICAgICAgLy8g
Q29udmVydCAiKz0iIG9yICItPSIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpCisgICAgICAg
ICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1
ZSApICkgJiYgcmV0WyAxIF0gKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhZGp1c3RDU1Mo
IGVsZW0sIG5hbWUsIHJldCApOworCisgICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM5MjM3
CisgICAgICAgICAgICAgICAgdHlwZSA9ICJudW1iZXIiOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQg
KCM3MTE2KQorICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1
ZSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZv
ciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQorICAgICAgICAgICAgaWYgKCB0eXBlID09PSAibnVt
YmVyIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBq
UXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gIiIgOiAicHgiICk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOS0xMSsKKyAgICAgICAgICAgIC8vIGJhY2tn
cm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXMKKyAgICAgICAgICAg
IGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSAiIiAmJiBuYW1lLmlu
ZGV4T2YoICJiYWNrZ3JvdW5kIiApID09PSAwICkgeworICAgICAgICAgICAgICAgIHN0eWxlWyBu
YW1lIF0gPSAiaW5oZXJpdCI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIGEg
aG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhl
IHNwZWNpZmllZCB2YWx1ZQorICAgICAgICAgICAgaWYgKCAhaG9va3MgfHwgISggInNldCIgaW4g
aG9va3MgKSB8fAorICAgICAgICAgICAgICAgICggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZh
bHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAgICAgICAgIHN0eWxl
WyBuYW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworCisg
ICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVk
IHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9v
a3MgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4
dHJhICkgKSAhPT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2
YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3QKKyAgICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFt
ZSBdOworICAgICAgICB9CisgICAgfSwKKworICAgIGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUs
IGV4dHJhLCBzdHlsZXMgKSB7CisgICAgICAgIHZhciB2YWwsIG51bSwgaG9va3MsCisgICAgICAg
ICAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKKworICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKKyAgICAgICAg
bmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fAorICAgICAgICAgICAgKCBqUXVl
cnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggb3JpZ05hbWUgKSB8fCBv
cmlnTmFtZSApOworCisgICAgICAgIC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRo
ZSB1bnByZWZpeGVkIG5hbWUKKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUg
XSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CisKKyAgICAgICAgLy8gSWYgYSBob29r
IHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAg
aWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyApIHsKKyAgICAgICAgICAgIHZhbCA9IGhvb2tz
LmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE90aGVy
d2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0
CisgICAgICAgIGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB2YWwgPSBj
dXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29u
dmVydCAibm9ybWFsIiB0byBjb21wdXRlZCB2YWx1ZQorICAgICAgICBpZiAoIHZhbCA9PT0gIm5v
cm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7CisgICAgICAgICAgICB2YWwg
PSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1h
a2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwg
bG9va3MgbnVtZXJpYworICAgICAgICBpZiAoIGV4dHJhID09PSAiIiB8fCBleHRyYSApIHsKKyAg
ICAgICAgICAgIG51bSA9IHBhcnNlRmxvYXQoIHZhbCApOworICAgICAgICAgICAgcmV0dXJuIGV4
dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB2YWw7CisgICAgfQorfSApOworCitqUXVlcnkuZWFjaCggWyAi
aGVpZ2h0IiwgIndpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKyAgICBqUXVlcnkuY3Nz
SG9va3NbIG5hbWUgXSA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQs
IGV4dHJhICkgeworICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKworICAgICAgICAgICAg
ICAgIC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52
aXNpYmx5IHNob3cgdGhlbQorICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBj
dXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSAp
ICYmCisgICAgICAgICAgICAgICAgICAgIGVsZW0ub2Zmc2V0V2lkdGggPT09IDAgPworICAgICAg
ICAgICAgICAgICAgICAgICAgc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5h
bWUsIGV4dHJhICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9ICkgOgorICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1
ZSwgZXh0cmEgKSB7CisgICAgICAgICAgICB2YXIgbWF0Y2hlcywKKyAgICAgICAgICAgICAgICBz
dHlsZXMgPSBleHRyYSAmJiBnZXRTdHlsZXMoIGVsZW0gKSwKKyAgICAgICAgICAgICAgICBzdWJ0
cmFjdCA9IGV4dHJhICYmIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KAorICAgICAgICAgICAgICAgICAg
ICBlbGVtLAorICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICBl
eHRyYSwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIs
IGZhbHNlLCBzdHlsZXMgKSA9PT0gImJvcmRlci1ib3giLAorICAgICAgICAgICAgICAgICAgICBz
dHlsZXMKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIHBp
eGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZAorICAgICAgICAgICAgaWYgKCBzdWJ0
cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJgorICAgICAgICAg
ICAgICAgICggbWF0Y2hlc1sgMyBdIHx8ICJweCIgKSAhPT0gInB4IiApIHsKKworICAgICAgICAg
ICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHZhbHVl
ID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApOworICAg
ICAgICB9CisgICAgfTsKK30gKTsKKworalF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRH
ZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LAorICAgIGZ1bmN0aW9uKCBlbGVt
LCBjb21wdXRlZCApIHsKKyAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgIHJl
dHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgIm1hcmdpbkxlZnQiICkgKSB8fAorICAg
ICAgICAgICAgICAgIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtCisgICAgICAg
ICAgICAgICAgICAgIHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpLmxlZnQ7CisgICAgICAgICAgICAgICAgICAgIH0gKQorICAgICAgICAgICAgICAgICkgKyAi
cHgiOworICAgICAgICB9CisgICAgfQorKTsKKworLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKK2pR
dWVyeS5jc3NIb29rcy5tYXJnaW5SaWdodCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJs
ZU1hcmdpblJpZ2h0LAorICAgIGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAg
aWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgIHJldHVybiBzd2FwKCBlbGVtLCB7ICJkaXNw
bGF5IjogImlubGluZS1ibG9jayIgfSwKKyAgICAgICAgICAgICAgICBjdXJDU1MsIFsgZWxlbSwg
Im1hcmdpblJpZ2h0IiBdICk7CisgICAgICAgIH0KKyAgICB9CispOworCisvLyBUaGVzZSBob29r
cyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzCitqUXVlcnkuZWFjaCgg
eworICAgIG1hcmdpbjogIiIsCisgICAgcGFkZGluZzogIiIsCisgICAgYm9yZGVyOiAiV2lkdGgi
Cit9LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7CisgICAgalF1ZXJ5LmNzc0hvb2tzWyBw
cmVmaXggKyBzdWZmaXggXSA9IHsKKyAgICAgICAgZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7
CisgICAgICAgICAgICB2YXIgaSA9IDAsCisgICAgICAgICAgICAgICAgZXhwYW5kZWQgPSB7fSwK
KworICAgICAgICAgICAgICAgIC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0
cmluZworICAgICAgICAgICAgICAgIHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiA/
IHZhbHVlLnNwbGl0KCAiICIgKSA6IFsgdmFsdWUgXTsKKworICAgICAgICAgICAgZm9yICggOyBp
IDwgNDsgaSsrICkgeworICAgICAgICAgICAgICAgIGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBh
bmRbIGkgXSArIHN1ZmZpeCBdID0KKyAgICAgICAgICAgICAgICAgICAgcGFydHNbIGkgXSB8fCBw
YXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZXhwYW5kZWQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgaWYgKCAhcm1hcmdp
bi50ZXN0KCBwcmVmaXggKSApIHsKKyAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBz
dWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5m
bi5leHRlbmQoIHsKKyAgICBjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAg
cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworICAg
ICAgICAgICAgdmFyIHN0eWxlcywgbGVuLAorICAgICAgICAgICAgICAgIG1hcCA9IHt9LAorICAg
ICAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBu
YW1lICkgKSB7CisgICAgICAgICAgICAgICAgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7Cisg
ICAgICAgICAgICAgICAgbGVuID0gbmFtZS5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgbWFwWyBuYW1lWyBpIF0g
XSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBtYXA7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAg
ICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOgorICAgICAgICAgICAgICAg
IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgfSwgbmFtZSwgdmFsdWUsIGFyZ3Vt
ZW50cy5sZW5ndGggPiAxICk7CisgICAgfSwKKyAgICBzaG93OiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7CisgICAgfSwKKyAgICBoaWRlOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNob3dIaWRlKCB0aGlzICk7CisgICAgfSwKKyAgICB0
b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHsKKyAgICAgICAgaWYgKCB0eXBlb2Ygc3RhdGUgPT09
ICJib29sZWFuIiApIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDog
dGhpcy5oaWRlKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGlmICggaXNIaWRkZW4oIHRoaXMgKSApIHsKKyAgICAgICAg
ICAgICAgICBqUXVlcnkoIHRoaXMgKS5zaG93KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLmhpZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSApOworICAgIH0KK30gKTsKKworCitmdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywg
cHJvcCwgZW5kLCBlYXNpbmcgKSB7CisgICAgcmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5p
dCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTsKK30KK2pRdWVyeS5Ud2VlbiA9
IFR3ZWVuOworCitUd2Vlbi5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFR3ZWVuLAor
ICAgIGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5p
dCApIHsKKyAgICAgICAgdGhpcy5lbGVtID0gZWxlbTsKKyAgICAgICAgdGhpcy5wcm9wID0gcHJv
cDsKKyAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVs
dDsKKyAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgdGhpcy5zdGFydCA9
IHRoaXMubm93ID0gdGhpcy5jdXIoKTsKKyAgICAgICAgdGhpcy5lbmQgPSBlbmQ7CisgICAgICAg
IHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJw
eCIgKTsKKyAgICB9LAorICAgIGN1cjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBob29rcyA9
IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisKKyAgICAgICAgcmV0dXJuIGhvb2tzICYm
IGhvb2tzLmdldCA/CisgICAgICAgICAgICBob29rcy5nZXQoIHRoaXMgKSA6CisgICAgICAgICAg
ICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7CisgICAgfSwKKyAgICBydW46
IGZ1bmN0aW9uKCBwZXJjZW50ICkgeworICAgICAgICB2YXIgZWFzZWQsCisgICAgICAgICAgICBo
b29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07CisKKyAgICAgICAgaWYgKCB0aGlz
Lm9wdGlvbnMuZHVyYXRpb24gKSB7CisgICAgICAgICAgICB0aGlzLnBvcyA9IGVhc2VkID0galF1
ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXSgKKyAgICAgICAgICAgICAgICBwZXJjZW50LCB0aGlz
Lm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24K
KyAgICAgICAgICAgICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnBvcyA9
IGVhc2VkID0gcGVyY2VudDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm5vdyA9ICggdGhpcy5l
bmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7CisKKyAgICAgICAgaWYgKCB0
aGlzLm9wdGlvbnMuc3RlcCApIHsKKyAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwLmNhbGwo
IHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgg
aG9va3MgJiYgaG9va3Muc2V0ICkgeworICAgICAgICAgICAgaG9va3Muc2V0KCB0aGlzICk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0
KCB0aGlzICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfTsKKwor
VHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlOworCitUd2Vl
bi5wcm9wSG9va3MgPSB7CisgICAgX2RlZmF1bHQ6IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbigg
dHdlZW4gKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0OworCisgICAgICAgICAgICAvLyBVc2Ug
YSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBl
bGVtZW50LAorICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHls
ZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy4KKyAgICAgICAgICAgIGlmICggdHdlZW4uZWxlbS5ub2Rl
VHlwZSAhPT0gMSB8fAorICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAh
PSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBh
cmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseQorICAgICAgICAgICAgLy8gYXR0ZW1w
dCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWls
cy4KKyAgICAgICAgICAgIC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyAiMTBweCIgYXJlIHBhcnNl
ZCB0byBGbG9hdDsKKyAgICAgICAgICAgIC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgInJvdGF0
ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzLWlzLgorICAgICAgICAgICAgcmVzdWx0ID0galF1ZXJ5
LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgIiIgKTsKKworICAgICAgICAgICAgLy8gRW1w
dHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAw
LgorICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSAiYXV0byIgPyAwIDog
cmVzdWx0OworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKwor
ICAgICAgICAgICAgLy8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuCisgICAgICAgICAg
ICAvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuCisgICAgICAgICAgICAvLyBVc2UgLnN0eWxl
IGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLgor
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkgeworICAgICAg
ICAgICAgICAgIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmCisgICAgICAgICAg
ICAgICAgKCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBd
ICE9IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5w
cm9wIF0gKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3
ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworLy8gU3VwcG9ydDogSUU5Cisv
LyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQg
bm9kZXMKK1R3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xs
TGVmdCA9IHsKKyAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKyAgICAgICAgaWYgKCB0d2Vl
bi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAg
IHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKyAgICAgICAgfQorICAgIH0K
K307CisKK2pRdWVyeS5lYXNpbmcgPSB7CisgICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHsKKyAg
ICAgICAgcmV0dXJuIHA7CisgICAgfSwKKyAgICBzd2luZzogZnVuY3Rpb24oIHAgKSB7CisgICAg
ICAgIHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7CisgICAgfSwKKyAg
ICBfZGVmYXVsdDogInN3aW5nIgorfTsKKworalF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmlu
aXQ7CisKKy8vIEJhY2sgQ29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50CitqUXVlcnkuZnguc3Rl
cCA9IHt9OworCisKKworCit2YXIKKyAgICBmeE5vdywgdGltZXJJZCwKKyAgICByZnh0eXBlcyA9
IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLywKKyAgICBycnVuID0gL3F1ZXVlSG9va3MkLzsKKwor
Ly8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNs
eQorZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7CisgICAgd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0
aW9uKCkgeworICAgICAgICBmeE5vdyA9IHVuZGVmaW5lZDsKKyAgICB9ICk7CisgICAgcmV0dXJu
ICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKK30KKworLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0
byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KK2Z1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNs
dWRlV2lkdGggKSB7CisgICAgdmFyIHdoaWNoLAorICAgICAgICBpID0gMCwKKyAgICAgICAgYXR0
cnMgPSB7IGhlaWdodDogdHlwZSB9OworCisgICAgLy8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3Rl
cCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLAorICAgIC8vIG90aGVyd2lz
ZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0CisgICAgaW5jbHVk
ZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7CisgICAgZm9yICggOyBpIDwgNCA7IGkgKz0g
MiAtIGluY2x1ZGVXaWR0aCApIHsKKyAgICAgICAgd2hpY2ggPSBjc3NFeHBhbmRbIGkgXTsKKyAg
ICAgICAgYXR0cnNbICJtYXJnaW4iICsgd2hpY2ggXSA9IGF0dHJzWyAicGFkZGluZyIgKyB3aGlj
aCBdID0gdHlwZTsKKyAgICB9CisKKyAgICBpZiAoIGluY2x1ZGVXaWR0aCApIHsKKyAgICAgICAg
YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTsKKyAgICB9CisKKyAgICByZXR1cm4g
YXR0cnM7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9u
ICkgeworICAgIHZhciB0d2VlbiwKKyAgICAgICAgY29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3
ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgIioiIF0g
KSwKKyAgICAgICAgaW5kZXggPSAwLAorICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0
aDsKKyAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICBpZiAo
ICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFs
dWUgKSApICkgeworCisgICAgICAgICAgICAvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0
eQorICAgICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICB9CisgICAgfQorfQorCitmdW5j
dGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHsKKyAgICAvKiBqc2hp
bnQgdmFsaWR0aGlzOiB0cnVlICovCisgICAgdmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIHR3ZWVu
LCBob29rcywgb2xkZmlyZSwgZGlzcGxheSwgY2hlY2tEaXNwbGF5LAorICAgICAgICBhbmltID0g
dGhpcywKKyAgICAgICAgb3JpZyA9IHt9LAorICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGUsCisg
ICAgICAgIGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW4oIGVsZW0gKSwKKyAgICAg
ICAgZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sICJmeHNob3ciICk7CisKKyAgICAvLyBI
YW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzCisgICAgaWYgKCAhb3B0cy5xdWV1ZSApIHsKKyAg
ICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sICJmeCIgKTsKKyAgICAgICAg
aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgeworICAgICAgICAgICAgaG9va3MudW5xdWV1
ZWQgPSAwOworICAgICAgICAgICAgb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7CisgICAgICAg
ICAgICBob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYg
KCAhaG9va3MudW5xdWV1ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG9sZGZpcmUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGhvb2tz
LnVucXVldWVkKys7CisKKyAgICAgICAgYW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisgICAg
ICAgICAgICAvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0
aGlzIGNvbXBsZXRlcworICAgICAgICAgICAgYW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIGhvb2tzLnVucXVldWVkLS07CisgICAgICAgICAgICAgICAgaWYgKCAhalF1
ZXJ5LnF1ZXVlKCBlbGVtLCAiZngiICkubGVuZ3RoICkgeworICAgICAgICAgICAgICAgICAgICBo
b29rcy5lbXB0eS5maXJlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSApOwor
ICAgICAgICB9ICk7CisgICAgfQorCisgICAgLy8gSGVpZ2h0L3dpZHRoIG92ZXJmbG93IHBhc3MK
KyAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCAiaGVpZ2h0IiBpbiBwcm9wcyB8fCAi
d2lkdGgiIGluIHByb3BzICkgKSB7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGlu
ZyBzbmVha3Mgb3V0CisgICAgICAgIC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVz
IGJlY2F1c2UgSUU5LTEwIGRvIG5vdAorICAgICAgICAvLyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0
dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmQKKyAgICAgICAgLy8gb3ZlcmZsb3dZIGFyZSBzZXQg
dG8gdGhlIHNhbWUgdmFsdWUKKyAgICAgICAgb3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZs
b3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07CisKKyAgICAgICAgLy8gU2V0
IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWlnaHQvd2lkdGgKKyAgICAg
ICAgLy8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVudHMgdGhhdCBhcmUgaGF2aW5nIHdpZHRo
L2hlaWdodCBhbmltYXRlZAorICAgICAgICBkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgImRp
c3BsYXkiICk7CisKKyAgICAgICAgLy8gVGVzdCBkZWZhdWx0IGRpc3BsYXkgaWYgZGlzcGxheSBp
cyBjdXJyZW50bHkgIm5vbmUiCisgICAgICAgIGNoZWNrRGlzcGxheSA9IGRpc3BsYXkgPT09ICJu
b25lIiA/CisgICAgICAgICAgICBkYXRhUHJpdi5nZXQoIGVsZW0sICJvbGRkaXNwbGF5IiApIHx8
IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgOiBkaXNwbGF5OworCisgICAgICAgIGlm
ICggY2hlY2tEaXNwbGF5ID09PSAiaW5saW5lIiAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQi
ICkgPT09ICJub25lIiApIHsKKyAgICAgICAgICAgIHN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJs
b2NrIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggb3B0cy5vdmVyZmxvdyApIHsKKyAg
ICAgICAgc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKKyAgICAgICAgYW5pbS5hbHdheXMoIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAw
IF07CisgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07Cisg
ICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07CisgICAgICAg
IH0gKTsKKyAgICB9CisKKyAgICAvLyBzaG93L2hpZGUgcGFzcworICAgIGZvciAoIHByb3AgaW4g
cHJvcHMgKSB7CisgICAgICAgIHZhbHVlID0gcHJvcHNbIHByb3AgXTsKKyAgICAgICAgaWYgKCBy
Znh0eXBlcy5leGVjKCB2YWx1ZSApICkgeworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBwcm9w
IF07CisgICAgICAgICAgICB0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09ICJ0b2dnbGUiOwor
ICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyAiaGlkZSIgOiAic2hvdyIgKSAp
IHsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGRhdGFTaG93IGxlZnQgb3ZlciBm
cm9tIGEgc3RvcHBlZCBoaWRlIG9yIHNob3cKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2UgYXJl
IGdvaW5nIHRvIHByb2NlZWQgd2l0aCBzaG93LCB3ZSBzaG91bGQgcHJldGVuZCB0byBiZSBoaWRk
ZW4KKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSAic2hvdyIgJiYgZGF0YVNob3cgJiYg
ZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICBo
aWRkZW4gPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5
LnN0eWxlKCBlbGVtLCBwcm9wICk7CisKKyAgICAgICAgLy8gQW55IG5vbi1meCB2YWx1ZSBzdG9w
cyB1cyBmcm9tIHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZGlzcGxheSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICggIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7CisgICAgICAg
IGlmICggZGF0YVNob3cgKSB7CisgICAgICAgICAgICBpZiAoICJoaWRkZW4iIGluIGRhdGFTaG93
ICkgeworICAgICAgICAgICAgICAgIGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGFTaG93ID0gZGF0YVByaXYu
YWNjZXNzKCBlbGVtLCAiZnhzaG93Iiwge30gKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0
b3JlIHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJl
dmVyc2UiCisgICAgICAgIGlmICggdG9nZ2xlICkgeworICAgICAgICAgICAgZGF0YVNob3cuaGlk
ZGVuID0gIWhpZGRlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGhpZGRlbiApIHsKKyAgICAg
ICAgICAgIGpRdWVyeSggZWxlbSApLnNob3coKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCBlbGVt
ICkuaGlkZSgpOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisgICAgICAgIGFuaW0uZG9u
ZSggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgcHJvcDsKKworICAgICAgICAgICAgZGF0
YVByaXYucmVtb3ZlKCBlbGVtLCAiZnhzaG93IiApOworICAgICAgICAgICAgZm9yICggcHJvcCBp
biBvcmlnICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3Jp
Z1sgcHJvcCBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICAgICAgZm9yICgg
cHJvcCBpbiBvcmlnICkgeworICAgICAgICAgICAgdHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVu
ID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTsKKworICAgICAgICAgICAgaWYg
KCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7CisgICAgICAgICAgICAgICAgZGF0YVNob3dbIHBy
b3AgXSA9IHR3ZWVuLnN0YXJ0OworICAgICAgICAgICAgICAgIGlmICggaGlkZGVuICkgeworICAg
ICAgICAgICAgICAgICAgICB0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDsKKyAgICAgICAgICAgICAg
ICAgICAgdHdlZW4uc3RhcnQgPSBwcm9wID09PSAid2lkdGgiIHx8IHByb3AgPT09ICJoZWlnaHQi
ID8gMSA6IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAvLyBJZiB0aGlzIGlzIGEgbm9vcCBsaWtlIC5oaWRlKCkuaGlkZSgpLCByZXN0b3JlIGFu
IG92ZXJ3cml0dGVuIGRpc3BsYXkgdmFsdWUKKyAgICB9IGVsc2UgaWYgKCAoIGRpc3BsYXkgPT09
ICJub25lIiA/IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgOiBkaXNwbGF5ICkgPT09
ICJpbmxpbmUiICkgeworICAgICAgICBzdHlsZS5kaXNwbGF5ID0gZGlzcGxheTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgeworICAgIHZh
ciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7CisKKyAgICAvLyBjYW1lbENhc2Us
IHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3MKKyAgICBmb3IgKCBpbmRleCBp
biBwcm9wcyApIHsKKyAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIGluZGV4ICk7Cisg
ICAgICAgIGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTsKKyAgICAgICAgdmFsdWUgPSBw
cm9wc1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsK
KyAgICAgICAgICAgIGVhc2luZyA9IHZhbHVlWyAxIF07CisgICAgICAgICAgICB2YWx1ZSA9IHBy
b3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggaW5k
ZXggIT09IG5hbWUgKSB7CisgICAgICAgICAgICBwcm9wc1sgbmFtZSBdID0gdmFsdWU7CisgICAg
ICAgICAgICBkZWxldGUgcHJvcHNbIGluZGV4IF07CisgICAgICAgIH0KKworICAgICAgICBob29r
cyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdOworICAgICAgICBpZiAoIGhvb2tzICYmICJleHBh
bmQiIGluIGhvb2tzICkgeworICAgICAgICAgICAgdmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVl
ICk7CisgICAgICAgICAgICBkZWxldGUgcHJvcHNbIG5hbWUgXTsKKworICAgICAgICAgICAgLy8g
Tm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLgor
ICAgICAgICAgICAgLy8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVj
dCAibmFtZSIKKyAgICAgICAgICAgIGZvciAoIGluZGV4IGluIHZhbHVlICkgeworICAgICAgICAg
ICAgICAgIGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTsKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcGVjaWFsRWFzaW5nWyBuYW1l
IF0gPSBlYXNpbmc7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIEFuaW1hdGlvbigg
ZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKKyAgICB2YXIgcmVzdWx0LAorICAgICAgICBz
dG9wcGVkLAorICAgICAgICBpbmRleCA9IDAsCisgICAgICAgIGxlbmd0aCA9IEFuaW1hdGlvbi5w
cmVmaWx0ZXJzLmxlbmd0aCwKKyAgICAgICAgZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5h
bHdheXMoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBEb24ndCBtYXRjaCBlbGVtIGlu
IHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKKyAgICAgICAgICAgIGRlbGV0ZSB0aWNrLmVsZW07Cisg
ICAgICAgIH0gKSwKKyAgICAgICAgdGljayA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYg
KCBzdG9wcGVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCks
CisgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFy
dFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLAorCisgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKyAgICAgICAgICAgICAgICAvLyBBcmNoYWlj
IGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0
OTcpCisgICAgICAgICAgICAgICAgdGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlv
biB8fCAwLAorICAgICAgICAgICAgICAgIHBlcmNlbnQgPSAxIC0gdGVtcCwKKyAgICAgICAgICAg
ICAgICBpbmRleCA9IDAsCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVu
cy5sZW5ndGg7CisKKyAgICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsr
ICkgeworICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJj
ZW50ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgo
IGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApOworCisgICAgICAgICAg
ICBpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVtYWluaW5nOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgYW5pbWF0aW9u
ID0gZGVmZXJyZWQucHJvbWlzZSggeworICAgICAgICAgICAgZWxlbTogZWxlbSwKKyAgICAgICAg
ICAgIHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLAorICAgICAgICAgICAg
b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgeworICAgICAgICAgICAgICAgIHNwZWNpYWxFYXNp
bmc6IHt9LAorICAgICAgICAgICAgICAgIGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdAor
ICAgICAgICAgICAgfSwgb3B0aW9ucyApLAorICAgICAgICAgICAgb3JpZ2luYWxQcm9wZXJ0aWVz
OiBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgb3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLAorICAg
ICAgICAgICAgc3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAg
ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sCisgICAgICAgICAgICB0d2VlbnM6IFtdLAorICAg
ICAgICAgICAgY3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJv
cCwgZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVh
c2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApOworICAgICAgICAgICAgICAg
IGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHdlZW47CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oIGdvdG9F
bmQgKSB7CisgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMCwKKworICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRo
ZSB0d2VlbnMKKyAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBw
YXJ0CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdl
ZW5zLmxlbmd0aCA6IDA7CisgICAgICAgICAgICAgICAgaWYgKCBzdG9wcGVkICkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgc3RvcHBlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yICggOyBpbmRleCA8IGxl
bmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnNb
IGluZGV4IF0ucnVuKCAxICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWpl
Y3QKKyAgICAgICAgICAgICAgICBpZiAoIGdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBn
b3RvRW5kIF0gKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgfQorICAgICAgICB9ICksCisgICAgICAgIHByb3BzID0gYW5pbWF0aW9uLnByb3BzOworCisg
ICAgcHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTsKKwor
ICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgeworICAgICAgICByZXN1bHQg
PSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHBy
b3BzLCBhbmltYXRpb24ub3B0cyApOworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7CisgICAgICAgICAg
ICAgICAgalF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMu
cXVldWUgKS5zdG9wID0KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnByb3h5KCByZXN1bHQu
c3RvcCwgcmVzdWx0ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisgICAgfQorCisgICAgalF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVu
LCBhbmltYXRpb24gKTsKKworICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5v
cHRzLnN0YXJ0ICkgKSB7CisgICAgICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0s
IGFuaW1hdGlvbiApOworICAgIH0KKworICAgIGpRdWVyeS5meC50aW1lcigKKyAgICAgICAgalF1
ZXJ5LmV4dGVuZCggdGljaywgeworICAgICAgICAgICAgZWxlbTogZWxlbSwKKyAgICAgICAgICAg
IGFuaW06IGFuaW1hdGlvbiwKKyAgICAgICAgICAgIHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1
ZQorICAgICAgICB9ICkKKyAgICApOworCisgICAgLy8gYXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9w
dGlvbnMKKyAgICByZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9n
cmVzcyApCisgICAgICAgIC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0
cy5jb21wbGV0ZSApCisgICAgICAgIC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsICkKKyAgICAg
ICAgLmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7Cit9CisKK2pRdWVyeS5BbmltYXRp
b24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHsKKyAgICB0d2VlbmVyczogeworICAgICAg
ICAiKiI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIHR3ZWVu
ID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTsKKyAgICAgICAgICAgIGFkanVzdENT
UyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApOworICAg
ICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICB9IF0KKyAgICB9LAorCisgICAgdHdlZW5l
cjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggcHJvcHMgKSApIHsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvcHM7CisgICAg
ICAgICAgICBwcm9wcyA9IFsgIioiIF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBw
cm9wcyA9IHByb3BzLm1hdGNoKCBybm90d2hpdGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBwcm9wLAorICAgICAgICAgICAgaW5kZXggPSAwLAorICAgICAgICAgICAgbGVuZ3RoID0gcHJv
cHMubGVuZ3RoOworCisgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkg
eworICAgICAgICAgICAgcHJvcCA9IHByb3BzWyBpbmRleCBdOworICAgICAgICAgICAgQW5pbWF0
aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTsK
KyAgICAgICAgICAgIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNr
ICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmls
dGVyIF0sCisKKyAgICBwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHsK
KyAgICAgICAgaWYgKCBwcmVwZW5kICkgeworICAgICAgICAgICAgQW5pbWF0aW9uLnByZWZpbHRl
cnMudW5zaGlmdCggY2FsbGJhY2sgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFu
aW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7CisgICAgICAgIH0KKyAgICB9Cit9
ICk7CisKK2pRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHsKKyAg
ICB2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5l
eHRlbmQoIHt9LCBzcGVlZCApIDogeworICAgICAgICBjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVh
c2luZyB8fAorICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQs
CisgICAgICAgIGR1cmF0aW9uOiBzcGVlZCwKKyAgICAgICAgZWFzaW5nOiBmbiAmJiBlYXNpbmcg
fHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nCisgICAg
fTsKKworICAgIG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5k
dXJhdGlvbiA9PT0gIm51bWJlciIgPworICAgICAgICBvcHQuZHVyYXRpb24gOiBvcHQuZHVyYXRp
b24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/CisgICAgICAgICAgICBqUXVlcnkuZnguc3BlZWRzWyBv
cHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7CisKKyAgICAvLyBOb3Jt
YWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiAiZngiCisgICAgaWYgKCBv
cHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7CisgICAgICAgIG9wdC5x
dWV1ZSA9ICJmeCI7CisgICAgfQorCisgICAgLy8gUXVldWVpbmcKKyAgICBvcHQub2xkID0gb3B0
LmNvbXBsZXRlOworCisgICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKKyAgICAgICAgICAgIG9wdC5vbGQu
Y2FsbCggdGhpcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBvcHQucXVldWUgKSB7Cisg
ICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgcmV0dXJuIG9wdDsKK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAg
ICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7CisKKyAg
ICAgICAgLy8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0
byAwCisgICAgICAgIHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW4gKS5jc3MoICJvcGFjaXR5
IiwgMCApLnNob3coKQorCisgICAgICAgICAgICAvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVj
aWZpZWQKKyAgICAgICAgICAgIC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVk
LCBlYXNpbmcsIGNhbGxiYWNrICk7CisgICAgfSwKKyAgICBhbmltYXRlOiBmdW5jdGlvbiggcHJv
cCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHZhciBlbXB0eSA9IGpRdWVy
eS5pc0VtcHR5T2JqZWN0KCBwcm9wICksCisgICAgICAgICAgICBvcHRhbGwgPSBqUXVlcnkuc3Bl
ZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksCisgICAgICAgICAgICBkb0FuaW1hdGlvbiA9
IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgLy8gT3BlcmF0ZSBvbiBhIGNvcHkgb2Yg
cHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3QKKyAgICAgICAgICAgICAg
ICB2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwg
b3B0YWxsICk7CisKKyAgICAgICAgICAgICAgICAvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5p
c2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICBpZiAoIGVtcHR5IHx8
IGRhdGFQcml2LmdldCggdGhpcywgImZpbmlzaCIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
YW5pbS5zdG9wKCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uOworCisgICAgICAgIHJl
dHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID8KKyAgICAgICAgICAgIHRoaXMu
ZWFjaCggZG9BbmltYXRpb24gKSA6CisgICAgICAgICAgICB0aGlzLnF1ZXVlKCBvcHRhbGwucXVl
dWUsIGRvQW5pbWF0aW9uICk7CisgICAgfSwKKyAgICBzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xl
YXJRdWV1ZSwgZ290b0VuZCApIHsKKyAgICAgICAgdmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBo
b29rcyApIHsKKyAgICAgICAgICAgIHZhciBzdG9wID0gaG9va3Muc3RvcDsKKyAgICAgICAgICAg
IGRlbGV0ZSBob29rcy5zdG9wOworICAgICAgICAgICAgc3RvcCggZ290b0VuZCApOworICAgICAg
ICB9OworCisgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAg
ICAgICAgZ290b0VuZCA9IGNsZWFyUXVldWU7CisgICAgICAgICAgICBjbGVhclF1ZXVlID0gdHlw
ZTsKKyAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkgeworICAgICAgICAgICAgdGhpcy5xdWV1
ZSggdHlwZSB8fCAiZngiLCBbXSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVxdWV1ZSA9IHRydWUsCisgICAg
ICAgICAgICAgICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1ZUhvb2tzIiwK
KyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAgICAgICAgICAg
IGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTsKKworICAgICAgICAgICAgaWYgKCBpbmRleCAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5z
dG9wICkgeworICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGZvciAoIGluZGV4IGluIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YVsg
aW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJgorICAgICAg
ICAgICAgICAgICAgICAoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09
IHR5cGUgKSApIHsKKworICAgICAgICAgICAgICAgICAgICB0aW1lcnNbIGluZGV4IF0uYW5pbS5z
dG9wKCBnb3RvRW5kICk7CisgICAgICAgICAgICAgICAgICAgIGRlcXVldWUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IGlu
IHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuCisgICAgICAgICAgICAv
LyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdo
aWNoCisgICAgICAgICAgICAvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdv
dG9FbmQuCisgICAgICAgICAgICBpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CisgICAgICAg
ICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSApOworICAgIH0sCisgICAgZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAg
ICAgaWYgKCB0eXBlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJm
eCI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICB2YXIgaW5kZXgsCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFQcml2Lmdl
dCggdGhpcyApLAorICAgICAgICAgICAgICAgIHF1ZXVlID0gZGF0YVsgdHlwZSArICJxdWV1ZSIg
XSwKKyAgICAgICAgICAgICAgICBob29rcyA9IGRhdGFbIHR5cGUgKyAicXVldWVIb29rcyIgXSwK
KyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAgICAgICAgICAg
IGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDsKKworICAgICAgICAgICAgLy8gRW5h
YmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YQorICAgICAgICAgICAgZGF0YS5maW5p
c2ggPSB0cnVlOworCisgICAgICAgICAgICAvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3QKKyAgICAg
ICAgICAgIGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTsKKworICAgICAgICAgICAgaWYg
KCBob29rcyAmJiBob29rcy5zdG9wICkgeworICAgICAgICAgICAgICAgIGhvb2tzLnN0b3AuY2Fs
bCggdGhpcywgdHJ1ZSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBMb29rIGZv
ciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbQorICAgICAgICAgICAgZm9y
ICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1
ZSA9PT0gdHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgdGltZXJzWyBpbmRleCBdLmFuaW0u
c3RvcCggdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKCBpbmRleCwg
MSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
TG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW0K
KyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5m
aW5pc2ggKSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxs
KCB0aGlzICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZworICAgICAgICAgICAgZGVsZXRlIGRhdGEuZmlu
aXNoOworICAgICAgICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZWFjaCggWyAidG9nZ2xl
IiwgInNob3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgdmFyIGNzc0Zu
ID0galF1ZXJ5LmZuWyBuYW1lIF07CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbigg
c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBzcGVlZCA9PSBudWxs
IHx8IHR5cGVvZiBzcGVlZCA9PT0gImJvb2xlYW4iID8KKyAgICAgICAgICAgIGNzc0ZuLmFwcGx5
KCB0aGlzLCBhcmd1bWVudHMgKSA6CisgICAgICAgICAgICB0aGlzLmFuaW1hdGUoIGdlbkZ4KCBu
YW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisgICAgfTsKK30gKTsKKwor
Ly8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9ucworalF1ZXJ5LmVhY2go
IHsKKyAgICBzbGlkZURvd246IGdlbkZ4KCAic2hvdyIgKSwKKyAgICBzbGlkZVVwOiBnZW5GeCgg
ImhpZGUiICksCisgICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCAidG9nZ2xlIiApLAorICAgIGZhZGVJ
bjogeyBvcGFjaXR5OiAic2hvdyIgfSwKKyAgICBmYWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9
LAorICAgIGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfQorfSwgZnVuY3Rpb24oIG5h
bWUsIHByb3BzICkgeworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBl
YXNpbmcsIGNhbGxiYWNrICkgeworICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywg
c3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKyAgICB9OworfSApOworCitqUXVlcnkudGltZXJz
ID0gW107CitqUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB0aW1lciwKKyAg
ICAgICAgaSA9IDAsCisgICAgICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnM7CisKKyAgICBmeE5v
dyA9IGpRdWVyeS5ub3coKTsKKworICAgIGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyAp
IHsKKyAgICAgICAgdGltZXIgPSB0aW1lcnNbIGkgXTsKKworICAgICAgICAvLyBDaGVja3MgdGhl
IHRpbWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92ZWQKKyAgICAgICAgaWYgKCAhdGltZXIo
KSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7CisgICAgICAgICAgICB0aW1lcnMuc3BsaWNl
KCBpLS0sIDEgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggIXRpbWVycy5sZW5ndGgg
KSB7CisgICAgICAgIGpRdWVyeS5meC5zdG9wKCk7CisgICAgfQorICAgIGZ4Tm93ID0gdW5kZWZp
bmVkOworfTsKKworalF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkgeworICAgIGpR
dWVyeS50aW1lcnMucHVzaCggdGltZXIgKTsKKyAgICBpZiAoIHRpbWVyKCkgKSB7CisgICAgICAg
IGpRdWVyeS5meC5zdGFydCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGpRdWVyeS50aW1lcnMu
cG9wKCk7CisgICAgfQorfTsKKworalF1ZXJ5LmZ4LmludGVydmFsID0gMTM7CitqUXVlcnkuZngu
c3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoICF0aW1lcklkICkgeworICAgICAgICB0aW1l
cklkID0gd2luZG93LnNldEludGVydmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVy
dmFsICk7CisgICAgfQorfTsKKworalF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHsKKyAgICB3
aW5kb3cuY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOworCisgICAgdGltZXJJZCA9IG51bGw7Cit9
OworCitqUXVlcnkuZnguc3BlZWRzID0geworICAgIHNsb3c6IDYwMCwKKyAgICBmYXN0OiAyMDAs
CisKKyAgICAvLyBEZWZhdWx0IHNwZWVkCisgICAgX2RlZmF1bHQ6IDQwMAorfTsKKworCisvLyBC
YXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24u
CisvLyBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxp
bmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvCitqUXVlcnkuZm4u
ZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHsKKyAgICB0aW1lID0galF1ZXJ5LmZ4ID8g
alF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lOworICAgIHR5cGUgPSB0eXBl
IHx8ICJmeCI7CisKKyAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQs
IGhvb2tzICkgeworICAgICAgICB2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0
LCB0aW1lICk7CisgICAgICAgIGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTsKKyAgICAgICAgfTsKKyAgICB9ICk7Cit9
OworCisKKyggZnVuY3Rpb24oKSB7CisgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCggImlucHV0IiApLAorICAgICAgICBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCAic2VsZWN0IiApLAorICAgICAgICBvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoICJvcHRpb24iICkgKTsKKworICAgIGlucHV0LnR5cGUgPSAiY2hlY2ti
b3giOworCisgICAgLy8gU3VwcG9ydDogaU9TPD01LjEsIEFuZHJvaWQ8PTQuMisKKyAgICAvLyBE
ZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSAib24iCisgICAgc3VwcG9ydC5j
aGVja09uID0gaW5wdXQudmFsdWUgIT09ICIiOworCisgICAgLy8gU3VwcG9ydDogSUU8PTExKwor
ICAgIC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMg
c2VsZWN0CisgICAgc3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDsKKworICAgIC8v
IFN1cHBvcnQ6IEFuZHJvaWQ8PTIuMworICAgIC8vIE9wdGlvbnMgaW5zaWRlIGRpc2FibGVkIHNl
bGVjdHMgYXJlIGluY29ycmVjdGx5IG1hcmtlZCBhcyBkaXNhYmxlZAorICAgIHNlbGVjdC5kaXNh
YmxlZCA9IHRydWU7CisgICAgc3VwcG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlzYWJsZWQ7CisK
KyAgICAvLyBTdXBwb3J0OiBJRTw9MTErCisgICAgLy8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVl
IGFmdGVyIGJlY29taW5nIGEgcmFkaW8KKyAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoICJpbnB1dCIgKTsKKyAgICBpbnB1dC52YWx1ZSA9ICJ0IjsKKyAgICBpbnB1dC50eXBlID0g
InJhZGlvIjsKKyAgICBzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gInQiOwor
fSApKCk7CisKKwordmFyIGJvb2xIb29rLAorICAgIGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5h
dHRySGFuZGxlOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgYXR0cjogZnVuY3Rpb24oIG5h
bWUsIHZhbHVlICkgeworICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwg
bmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisgICAgfSwKKworICAgIHJlbW92
ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkgeworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7Cisg
ICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBhdHRyOiBm
dW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHZhciByZXQsIGhvb2tzLAor
ICAgICAgICAgICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlOworCisgICAgICAgIC8vIERvbid0IGdl
dC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKKyAg
ICAgICAgaWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhbGxiYWNrIHRv
IHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgIGlmICggdHlw
ZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAgIHJl
dHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEFsbCBhdHRyaWJ1dGVzIGFyZSBsb3dlcmNhc2UKKyAgICAgICAgLy8gR3JhYiBuZWNl
c3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZAorICAgICAgICBpZiAoIG5UeXBlICE9PSAxIHx8
ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHsKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lLnRv
TG93ZXJDYXNlKCk7CisgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUg
XSB8fAorICAgICAgICAgICAgICAgICggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1l
ICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB2
YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gbnVsbCAp
IHsKKyAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBo
b29rcyAmJiAic2V0IiBpbiBob29rcyAmJgorICAgICAgICAgICAgICAgICggcmV0ID0gaG9va3Mu
c2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbGVtLnNldEF0
dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyAiIiApOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAoIHJl
dCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0galF1ZXJ5LmZpbmQuYXR0cigg
ZWxlbSwgbmFtZSApOworCisgICAgICAgIC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVy
biBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCisgICAgICAgIHJldHVybiByZXQgPT0g
bnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKKyAgICB9LAorCisgICAgYXR0ckhvb2tzOiB7CisgICAg
ICAgIHR5cGU6IHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewor
ICAgICAgICAgICAgICAgIGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJh
ZGlvIiAmJgorICAgICAgICAgICAgICAgICAgICBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1
dCIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggdmFsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS52YWx1ZSA9IHZhbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfSwKKworICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsK
KyAgICAgICAgdmFyIG5hbWUsIHByb3BOYW1lLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAg
ICAgICBhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICk7CisKKyAg
ICAgICAgaWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAg
ICAgIHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkgeworICAgICAgICAgICAg
ICAgIHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworCisgICAgICAg
ICAgICAgICAgLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGdldCBzcGVjaWFsIHRyZWF0bWVudCAoIzEw
ODcwKQorICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBu
YW1lICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNvcnJlc3BvbmRpbmcgcHJv
cGVydHkgdG8gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0
cmlidXRlKCBuYW1lICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ICk7CisK
Ky8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKK2Jvb2xIb29rID0geworICAgIHNldDog
ZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgeworICAgICAgICBpZiAoIHZhbHVlID09PSBm
YWxzZSApIHsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVu
IHNldCB0byBmYWxzZQorICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUg
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1l
LCBuYW1lICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorfTsKK2pR
dWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1x3Ky9nICks
IGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1l
IF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjsKKworICAgIGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0
aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHsKKyAgICAgICAgdmFyIHJldCwgaGFuZGxlOworICAg
ICAgICBpZiAoICFpc1hNTCApIHsKKworICAgICAgICAgICAgLy8gQXZvaWQgYW4gaW5maW5pdGUg
bG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRl
cgorICAgICAgICAgICAgaGFuZGxlID0gYXR0ckhhbmRsZVsgbmFtZSBdOworICAgICAgICAgICAg
YXR0ckhhbmRsZVsgbmFtZSBdID0gcmV0OworICAgICAgICAgICAgcmV0ID0gZ2V0dGVyKCBlbGVt
LCBuYW1lLCBpc1hNTCApICE9IG51bGwgPworICAgICAgICAgICAgICAgIG5hbWUudG9Mb3dlckNh
c2UoKSA6CisgICAgICAgICAgICAgICAgbnVsbDsKKyAgICAgICAgICAgIGF0dHJIYW5kbGVbIG5h
bWUgXSA9IGhhbmRsZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH07Cit9
ICk7CisKKworCisKK3ZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8
YnV0dG9uKSQvaSwKKyAgICByY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pOworCitqUXVlcnku
Zm4uZXh0ZW5kKCB7CisgICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAg
ICByZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50
cy5sZW5ndGggPiAxICk7CisgICAgfSwKKworICAgIHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1l
ICkgeworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTsKKyAgICAgICAg
fSApOworICAgIH0KK30gKTsKKworalF1ZXJ5LmV4dGVuZCggeworICAgIHByb3A6IGZ1bmN0aW9u
KCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHJldCwgaG9va3MsCisgICAgICAg
ICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICAgICAgLy8gRG9uJ3QgZ2V0L3NldCBw
cm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcworICAgICAgICBp
ZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBuVHlwZSAhPT0gMSB8fCAh
alF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgIC8vIEZpeCBuYW1lIGFu
ZCBhdHRhY2ggaG9va3MKKyAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBd
IHx8IG5hbWU7CisgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYKKyAgICAgICAgICAgICAgICAo
IHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0s
IG5hbWUgKSApICE9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBlbGVtWyBuYW1lIF07CisgICAgfSwKKworICAgIHByb3BIb29r
czogeworICAgICAgICB0YWJJbmRleDogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxl
bSApIHsKKworICAgICAgICAgICAgICAgIC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMg
cmV0dXJuIHRoZQorICAgICAgICAgICAgICAgIC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNu
J3QgYmVlbiBleHBsaWNpdGx5IHNldAorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9mbHVpZHBy
b2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRh
YmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvCisgICAgICAgICAgICAgICAgLy8gVXNlIHBy
b3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3MikKKyAgICAgICAgICAgICAgICB2YXIgdGFi
aW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCAidGFiaW5kZXgiICk7CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGFiaW5kZXggPworICAgICAgICAgICAgICAgICAgICBwYXJzZUludCgg
dGFiaW5kZXgsIDEwICkgOgorICAgICAgICAgICAgICAgICAgICByZm9jdXNhYmxlLnRlc3QoIGVs
ZW0ubm9kZU5hbWUgKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgcmNsaWNrYWJsZS50ZXN0
KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0sCisKKyAgICBwcm9wRml4OiB7CisgICAgICAgICJmb3IiOiAiaHRt
bEZvciIsCisgICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUiCisgICAgfQorfSApOworCisvLyBT
dXBwb3J0OiBJRSA8PTExIG9ubHkKKy8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9w
ZXJ0eQorLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZAor
Ly8gb24gdGhlIG9wdGlvbgorLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24g
aXMgc2VsZWN0ZWQKKy8vIHdoZW4gaW4gYW4gb3B0Z3JvdXAKK2lmICggIXN1cHBvcnQub3B0U2Vs
ZWN0ZWQgKSB7CisgICAgalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHsKKyAgICAgICAgZ2V0
OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVu
dE5vZGU7CisgICAgICAgICAgICBpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHsK
KyAgICAgICAgICAgICAgICBwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0sCisgICAgICAgIHNl
dDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJl
bnROb2RlOworICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7CisgICAgICAgICAgICAgICAgcGFy
ZW50LnNlbGVjdGVkSW5kZXg7CisKKyAgICAgICAgICAgICAgICBpZiAoIHBhcmVudC5wYXJlbnRO
b2RlICkgeworICAgICAgICAgICAgICAgICAgICBwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZElu
ZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
Cit9CisKK2pRdWVyeS5lYWNoKCBbCisgICAgInRhYkluZGV4IiwKKyAgICAicmVhZE9ubHkiLAor
ICAgICJtYXhMZW5ndGgiLAorICAgICJjZWxsU3BhY2luZyIsCisgICAgImNlbGxQYWRkaW5nIiwK
KyAgICAicm93U3BhbiIsCisgICAgImNvbFNwYW4iLAorICAgICJ1c2VNYXAiLAorICAgICJmcmFt
ZUJvcmRlciIsCisgICAgImNvbnRlbnRFZGl0YWJsZSIKK10sIGZ1bmN0aW9uKCkgeworICAgIGpR
dWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7Cit9ICk7CisKKworCisK
K3ZhciByY2xhc3MgPSAvW1x0XHJcblxmXS9nOworCitmdW5jdGlvbiBnZXRDbGFzcyggZWxlbSAp
IHsKKyAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoICJj
bGFzcyIgKSB8fCAiIjsKK30KKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGFkZENsYXNzOiBm
dW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZh
bHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSwKKyAgICAgICAgICAgIGkgPSAwOworCisgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMg
KS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7Cisg
ICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9
PT0gInN0cmluZyIgJiYgdmFsdWUgKSB7CisgICAgICAgICAgICBjbGFzc2VzID0gdmFsdWUubWF0
Y2goIHJub3R3aGl0ZSApIHx8IFtdOworCisgICAgICAgICAgICB3aGlsZSAoICggZWxlbSA9IHRo
aXNbIGkrKyBdICkgKSB7CisgICAgICAgICAgICAgICAgY3VyVmFsdWUgPSBnZXRDbGFzcyggZWxl
bSApOworICAgICAgICAgICAgICAgIGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYKKyAgICAg
ICAgICAgICAgICAgICAgKCAiICIgKyBjdXJWYWx1ZSArICIgIiApLnJlcGxhY2UoIHJjbGFzcywg
IiAiICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGN1ciApIHsKKyAgICAgICAgICAgICAgICAg
ICAgaiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNb
IGorKyBdICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5pbmRleE9mKCAi
ICIgKyBjbGF6eiArICIgIiApIDwgMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dXIgKz0gY2xhenogKyAiICI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGFzc2lnbiBpZiBkaWZm
ZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLgorICAgICAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0galF1ZXJ5LnRyaW0oIGN1ciApOworICAgICAgICAgICAgICAgICAgICBpZiAo
IGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsIGZpbmFsVmFsdWUgKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICByZW1vdmVDbGFzczogZnVuY3Rpb24oIHZh
bHVlICkgeworICAgICAgICB2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenos
IGosIGZpbmFsVmFsdWUsCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBpZiAoIGpRdWVy
eS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCgg
ZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xh
c3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApOworICAgICAgICAg
ICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmF0dHIoICJjbGFzcyIsICIiICk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYgdmFsdWUgKSB7Cisg
ICAgICAgICAgICBjbGFzc2VzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdOworCisg
ICAgICAgICAgICB3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisgICAgICAgICAg
ICAgICAgY3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApOworCisgICAgICAgICAgICAgICAgLy8g
VGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBh
ZGRDbGFzcykKKyAgICAgICAgICAgICAgICBjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmCisg
ICAgICAgICAgICAgICAgICAgICggIiAiICsgY3VyVmFsdWUgKyAiICIgKS5yZXBsYWNlKCByY2xh
c3MsICIgIiApOworCisgICAgICAgICAgICAgICAgaWYgKCBjdXIgKSB7CisgICAgICAgICAgICAg
ICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICggY2xhenogPSBjbGFz
c2VzWyBqKysgXSApICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgKmFs
bCogaW5zdGFuY2VzCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGN1ci5pbmRleE9m
KCAiICIgKyBjbGF6eiArICIgIiApID4gLTEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3VyID0gY3VyLnJlcGxhY2UoICIgIiArIGNsYXp6ICsgIiAiLCAiICIgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5k
ZXJpbmcuCisgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgPSBqUXVlcnkudHJpbSggY3Vy
ICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggImNsYXNzIiwgZmlu
YWxWYWx1ZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKwor
ICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkgeworICAgICAgICB2
YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKworICAgICAgICBpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9
PT0gImJvb2xlYW4iICYmIHR5cGUgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZh
bHVlICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1
ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICks
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlVmFsCisgICAgICAgICAgICAgICAgKTsKKyAgICAg
ICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lczsK
KworICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiApIHsKKworICAgICAgICAgICAg
ICAgIC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCisgICAgICAgICAgICAgICAgaSA9
IDA7CisgICAgICAgICAgICAgICAgc2VsZiA9IGpRdWVyeSggdGhpcyApOworICAgICAgICAgICAg
ICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107CisKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHsK
KworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3Bh
Y2Ugc2VwYXJhdGVkIGxpc3QKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxmLmhhc0NsYXNz
KCBjbGFzc05hbWUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlQ2xh
c3MoIGNsYXNzTmFtZSApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRvZ2dsZSB3aG9s
ZSBjbGFzcyBuYW1lCisgICAgICAgICAgICB9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVk
IHx8IHR5cGUgPT09ICJib29sZWFuIiApIHsKKyAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBn
ZXRDbGFzcyggdGhpcyApOworICAgICAgICAgICAgICAgIGlmICggY2xhc3NOYW1lICkgeworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXQKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YVByaXYuc2V0KCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIGNsYXNzTmFtZSAp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50
IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsCisgICAgICAgICAg
ICAgICAgLy8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9u
ZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS4KKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYnJp
bmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLAorICAg
ICAgICAgICAgICAgIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhp
bmcgd2FzIHN0b3JlZC4KKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSggImNsYXNzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPworICAgICAg
ICAgICAgICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYu
Z2V0KCB0aGlzLCAiX19jbGFzc05hbWVfXyIgKSB8fCAiIgorICAgICAgICAgICAgICAgICAgICAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0s
CisKKyAgICBoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgY2xh
c3NOYW1lLCBlbGVtLAorICAgICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgY2xhc3NOYW1lID0g
IiAiICsgc2VsZWN0b3IgKyAiICI7CisgICAgICAgIHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsr
IF0gKSApIHsKKyAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorICAgICAg
ICAgICAgICAgICggIiAiICsgZ2V0Q2xhc3MoIGVsZW0gKSArICIgIiApLnJlcGxhY2UoIHJjbGFz
cywgIiAiICkKKyAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEK
KyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30gKTsKKwor
CisKKwordmFyIHJyZXR1cm4gPSAvXHIvZywKKyAgICByc3BhY2VzID0gL1tceDIwXHRcclxuXGZd
Ky9nOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7
CisgICAgICAgIHZhciBob29rcywgcmV0LCBpc0Z1bmN0aW9uLAorICAgICAgICAgICAgZWxlbSA9
IHRoaXNbIDAgXTsKKworICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgeworICAgICAg
ICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhv
b2tzWyBlbGVtLnR5cGUgXSB8fAorICAgICAgICAgICAgICAgICAgICBqUXVlcnkudmFsSG9va3Nb
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOworCisgICAgICAgICAgICAgICAgaWYgKCBo
b29rcyAmJgorICAgICAgICAgICAgICAgICAgICAiZ2V0IiBpbiBob29rcyAmJgorICAgICAgICAg
ICAgICAgICAgICAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgInZhbHVlIiApICkgIT09IHVuZGVm
aW5lZAorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldCA9IGVsZW0udmFsdWU7
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldCA9PT0gInN0cmluZyIgPworCisg
ICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKKyAg
ICAgICAgICAgICAgICAgICAgcmV0LnJlcGxhY2UoIHJyZXR1cm4sICIiICkgOgorCisgICAgICAg
ICAgICAgICAgICAgIC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9y
IG51bWJlcgorICAgICAgICAgICAgICAgICAgICByZXQgPT0gbnVsbCA/ICIiIDogcmV0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
c0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CisKKyAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICB2YXIgdmFsOworCisgICAg
ICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGlzRnVuY3Rpb24gKSB7Cisg
ICAgICAgICAgICAgICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICku
dmFsKCkgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsID0gdmFs
dWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRyZWF0IG51bGwvdW5kZWZpbmVk
IGFzICIiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nCisgICAgICAgICAgICBpZiAoIHZhbCA9
PSBudWxsICkgeworICAgICAgICAgICAgICAgIHZhbCA9ICIiOworCisgICAgICAgICAgICB9IGVs
c2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICB2YWwg
Kz0gIiI7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSAp
IHsKKyAgICAgICAgICAgICAgICB2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZh
bHVlICsgIiI7CisgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhv
b2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgLy8gSWYg
c2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKKyAgICAg
ICAgICAgIGlmICggIWhvb2tzIHx8ICEoICJzZXQiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0
aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHRo
aXMudmFsdWUgPSB2YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7
CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICB2YWxIb29rczogeworICAgICAgICBvcHRpb246IHsK
KyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgICAgICAgICB2
YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgInZhbHVlIiApOworICAgICAgICAgICAg
ICAgIHJldHVybiB2YWwgIT0gbnVsbCA/CisgICAgICAgICAgICAgICAgICAgIHZhbCA6CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUxMC0xMSsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KQorICAg
ICAgICAgICAgICAgICAgICAvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZQorICAgICAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQt
Y29sbGFwc2Utd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICAgICBqUXVlcnkudHJpbSggalF1
ZXJ5LnRleHQoIGVsZW0gKSApLnJlcGxhY2UoIHJzcGFjZXMsICIgIiApOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICBzZWxlY3Q6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBvcHRpb24sCisgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAg
IGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LAorICAgICAgICAgICAgICAgICAgICBvbmUgPSBl
bGVtLnR5cGUgPT09ICJzZWxlY3Qtb25lIiB8fCBpbmRleCA8IDAsCisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0g
b25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGkg
PSBpbmRleCA8IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgbWF4IDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9uZSA/IGluZGV4IDogMDsKKworICAgICAgICAgICAgICAgIC8vIExvb3Ag
dGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMKKyAgICAgICAgICAgICAgICBmb3IgKCA7
IGkgPCBtYXg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uc1sg
aSBdOworCisgICAgICAgICAgICAgICAgICAgIC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVj
dGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKQorICAgICAgICAgICAgICAgICAgICBpZiAoICgg
b3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiYKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGlu
IGEgZGlzYWJsZWQgb3B0Z3JvdXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN1cHBv
cnQub3B0RGlzYWJsZWQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhb3B0aW9u
LmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSggImRpc2FibGVkIiApID09PSBudWxsICkg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNh
YmxlZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhalF1ZXJ5Lm5vZGVOYW1l
KCBvcHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiApICkgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNl
bGVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb25lICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJy
YXkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24o
IGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgICAgIHZhciBvcHRpb25TZXQsIG9wdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGVsZW0ub3B0aW9ucywKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSwKKyAgICAgICAgICAg
ICAgICAgICAgaSA9IG9wdGlvbnMubGVuZ3RoOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCBp
LS0gKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBvcHRpb24uc2VsZWN0ZWQgPQorICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24g
KSwgdmFsdWVzICkgPiAtMQorICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvblNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGb3JjZSBicm93c2VycyB0byBiZWhh
dmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldAorICAgICAgICAg
ICAgICAgIGlmICggIW9wdGlvblNldCApIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbS5zZWxl
Y3RlZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ICk7CisKKy8vIFJh
ZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyCitqUXVlcnkuZWFjaCggWyAicmFkaW8i
LCAiY2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgeworICAgIGpRdWVyeS52YWxIb29rc1sgdGhpcyBd
ID0geworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2
YWx1ZSApID4gLTEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisgICAgaWYg
KCAhc3VwcG9ydC5jaGVja09uICkgeworICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5n
ZXQgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSggInZhbHVlIiApID09PSBudWxsID8gIm9uIiA6IGVsZW0udmFsdWU7CisgICAgICAgIH07
CisgICAgfQorfSApOworCisKKworCisvLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9u
bHkgaW5jbHVzaW9uCisKKwordmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9j
dXNvdXRibHVyKSQvOworCitqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHsKKworICAgIHRy
aWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgeworCisg
ICAgICAgIHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNp
YWwsCisgICAgICAgICAgICBldmVudFBhdGggPSBbIGVsZW0gfHwgZG9jdW1lbnQgXSwKKyAgICAg
ICAgICAgIHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsICJ0eXBlIiApID8gZXZlbnQudHlwZSA6
IGV2ZW50LAorICAgICAgICAgICAgbmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgIm5h
bWVzcGFjZSIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggIi4iICkgOiBbXTsKKworICAgICAg
ICBjdXIgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDsKKworICAgICAgICAvLyBEb24n
dCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAgICBpZiAoIGVsZW0u
bm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3Vz
aW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vdworICAgICAgICBp
ZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGUuaW5k
ZXhPZiggIi4iICkgPiAtMSApIHsKKworICAgICAgICAgICAgLy8gTmFtZXNwYWNlZCB0cmlnZ2Vy
OyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKQorICAgICAg
ICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoICIuIiApOworICAgICAgICAgICAgdHlwZSA9
IG5hbWVzcGFjZXMuc2hpZnQoKTsKKyAgICAgICAgICAgIG5hbWVzcGFjZXMuc29ydCgpOworICAg
ICAgICB9CisgICAgICAgIG9udHlwZSA9IHR5cGUuaW5kZXhPZiggIjoiICkgPCAwICYmICJvbiIg
KyB0eXBlOworCisgICAgICAgIC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBv
YmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZworICAgICAgICBldmVu
dCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID8KKyAgICAgICAgICAgIGV2ZW50IDoKKyAgICAg
ICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gIm9iamVjdCIg
JiYgZXZlbnQgKTsKKworICAgICAgICAvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZl
IGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpCisgICAgICAgIGV2ZW50Lmlz
VHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzOworICAgICAgICBldmVudC5uYW1lc3BhY2Ug
PSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOworICAgICAgICBldmVudC5ybmFtZXNwYWNlID0gZXZl
bnQubmFtZXNwYWNlID8KKyAgICAgICAgICAgIG5ldyBSZWdFeHAoICIoXnxcXC4pIiArIG5hbWVz
cGFjZXMuam9pbiggIlxcLig/Oi4qXFwufCkiICkgKyAiKFxcLnwkKSIgKSA6CisgICAgICAgICAg
ICBudWxsOworCisgICAgICAgIC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJl
aW5nIHJldXNlZAorICAgICAgICBldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7CisgICAgICAgIGlm
ICggIWV2ZW50LnRhcmdldCApIHsKKyAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGVsZW07Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVu
ZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0CisgICAgICAgIGRhdGEg
PSBkYXRhID09IG51bGwgPworICAgICAgICAgICAgWyBldmVudCBdIDoKKyAgICAgICAgICAgIGpR
dWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApOworCisgICAgICAgIC8vIEFsbG93IHNw
ZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXMKKyAgICAgICAgc3BlY2lhbCA9
IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisgICAgICAgIGlmICggIW9ubHlI
YW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVt
LCBkYXRhICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwg
cGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpCisgICAgICAgIC8vIEJ1YmJsZSB1cCB0byBkb2N1
bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZh
ciAoIzk3MjQpCisgICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJs
ZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgIGJ1YmJsZVR5
cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlOworICAgICAgICAgICAgaWYgKCAhcmZv
Y3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHsKKyAgICAgICAgICAgICAgICBj
dXIgPSBjdXIucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoIDsg
Y3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICBldmVudFBhdGgu
cHVzaCggY3VyICk7CisgICAgICAgICAgICAgICAgdG1wID0gY3VyOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChl
LmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSkKKyAgICAgICAgICAgIGlmICggdG1w
ID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkgeworICAgICAgICAgICAg
ICAgIGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8
fCB3aW5kb3cgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcmUg
aGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxl
ICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9w
cGVkKCkgKSB7CisKKyAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBpID4gMSA/CisgICAgICAgICAg
ICAgICAgYnViYmxlVHlwZSA6CisgICAgICAgICAgICAgICAgc3BlY2lhbC5iaW5kVHlwZSB8fCB0
eXBlOworCisgICAgICAgICAgICAvLyBqUXVlcnkgaGFuZGxlcgorICAgICAgICAgICAgaGFuZGxl
ID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0g
JiYKKyAgICAgICAgICAgICAgICBkYXRhUHJpdi5nZXQoIGN1ciwgImhhbmRsZSIgKTsKKyAgICAg
ICAgICAgIGlmICggaGFuZGxlICkgeworICAgICAgICAgICAgICAgIGhhbmRsZS5hcHBseSggY3Vy
LCBkYXRhICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5hdGl2ZSBoYW5kbGVy
CisgICAgICAgICAgICBoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTsKKyAgICAgICAg
ICAgIGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHsK
KyAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSAp
OworICAgICAgICAgICAgICAgIGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CisK
KyAgICAgICAgLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0
IG5vdworICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZl
bnRlZCgpICkgeworCisgICAgICAgICAgICBpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHwKKyAg
ICAgICAgICAgICAgICBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRh
dGEgKSA9PT0gZmFsc2UgKSAmJgorICAgICAgICAgICAgICAgIGFjY2VwdERhdGEoIGVsZW0gKSAp
IHsKKworICAgICAgICAgICAgICAgIC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUg
dGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC4KKyAgICAgICAgICAg
ICAgICAvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUg
Z2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApCisgICAgICAgICAgICAgICAgaWYgKCBvbnR5cGUg
JiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFqUXVlcnkuaXNXaW5kb3co
IGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIGFu
IG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCisgICAgICAgICAgICAg
ICAgICAgIHRtcCA9IGVsZW1bIG9udHlwZSBdOworCisgICAgICAgICAgICAgICAgICAgIGlmICgg
dG1wICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBudWxsOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCBy
ZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQg
aXQgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5
cGU7CisgICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpOworICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICggdG1wICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBl
IF0gPSB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OworICAg
IH0sCisKKyAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRp
ZmZlcmVudCBvbmUKKyAgICAvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50
cworICAgIHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7CisgICAgICAg
IHZhciBlID0galF1ZXJ5LmV4dGVuZCgKKyAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoKSwK
KyAgICAgICAgICAgIGV2ZW50LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHR5cGU6
IHR5cGUsCisgICAgICAgICAgICAgICAgaXNTaW11bGF0ZWQ6IHRydWUKKyAgICAgICAgICAgIH0K
KyAgICAgICAgKTsKKworICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxl
bSApOworICAgIH0KKworfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisKKyAgICB0cmlnZ2Vy
OiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwg
dGhpcyApOworICAgICAgICB9ICk7CisgICAgfSwKKyAgICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rp
b24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHZhciBlbGVtID0gdGhpc1sgMCBdOworICAgICAg
ICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIo
IHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTsKKyAgICAgICAgfQorICAgIH0KK30gKTsKKworCitq
UXVlcnkuZWFjaCggKCAiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNj
cm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCisgICAgIm1vdXNlZG93biBtb3VzZXVwIG1v
dXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlICIgKworICAg
ICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRl
eHRtZW51IiApLnNwbGl0KCAiICIgKSwKKyAgICBmdW5jdGlvbiggaSwgbmFtZSApIHsKKworICAg
IC8vIEhhbmRsZSBldmVudCBiaW5kaW5nCisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlv
biggZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/Cisg
ICAgICAgICAgICB0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDoKKyAgICAgICAgICAg
IHRoaXMudHJpZ2dlciggbmFtZSApOworICAgIH07Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQo
IHsKKyAgICBob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7CisgICAgICAgIHJldHVy
biB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciAp
OworICAgIH0KK30gKTsKKworCisKKworc3VwcG9ydC5mb2N1c2luID0gIm9uZm9jdXNpbiIgaW4g
d2luZG93OworCisKKy8vIFN1cHBvcnQ6IEZpcmVmb3gKKy8vIEZpcmVmb3ggZG9lc24ndCBoYXZl
IGZvY3VzKGluIHwgb3V0KSBldmVudHMKKy8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6
aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3CisvLworLy8gU3VwcG9ydDog
Q2hyb21lLCBTYWZhcmkKKy8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1
cyAmIGJsdXIgZXZlbnRzLAorLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3
LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9y
ZGVyCisvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21p
dW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTcKK2lmICggIXN1cHBvcnQuZm9jdXNpbiApIHsKKyAg
ICBqUXVlcnkuZWFjaCggeyBmb2N1czogImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1
bmN0aW9uKCBvcmlnLCBmaXggKSB7CisKKyAgICAgICAgLy8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1
cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4v
Zm9jdXNvdXQKKyAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnku
ZXZlbnQuZml4KCBldmVudCApICk7CisgICAgICAgIH07CisKKyAgICAgICAgalF1ZXJ5LmV2ZW50
LnNwZWNpYWxbIGZpeCBdID0geworICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcywKKyAgICAg
ICAgICAgICAgICAgICAgYXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7CisK
KyAgICAgICAgICAgICAgICBpZiAoICFhdHRhY2hlcyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRh
Y2hlcyB8fCAwICkgKyAxICk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdGVhcmRvd246
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1l
bnQgfHwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nl
c3MoIGRvYywgZml4ICkgLSAxOworCisgICAgICAgICAgICAgICAgaWYgKCAhYXR0YWNoZXMgKSB7
CisgICAgICAgICAgICAgICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5k
bGVyLCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZG9jLCBm
aXggKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRh
dGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gKTsKK30KK3ZhciBsb2NhdGlvbiA9IHdp
bmRvdy5sb2NhdGlvbjsKKwordmFyIG5vbmNlID0galF1ZXJ5Lm5vdygpOworCit2YXIgcnF1ZXJ5
ID0gKCAvXD8vICk7CisKKworCisvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMworLy8gV29ya2Fyb3Vu
ZCBmYWlsdXJlIHRvIHN0cmluZy1jYXN0IG51bGwgaW5wdXQKK2pRdWVyeS5wYXJzZUpTT04gPSBm
dW5jdGlvbiggZGF0YSApIHsKKyAgICByZXR1cm4gSlNPTi5wYXJzZSggZGF0YSArICIiICk7Cit9
OworCisKKy8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKK2pRdWVyeS5wYXJzZVhNTCA9IGZ1
bmN0aW9uKCBkYXRhICkgeworICAgIHZhciB4bWw7CisgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2Yg
ZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAg
IC8vIFN1cHBvcnQ6IElFOQorICAgIHRyeSB7CisgICAgICAgIHhtbCA9ICggbmV3IHdpbmRvdy5E
T01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgInRleHQveG1sIiApOworICAgIH0g
Y2F0Y2ggKCBlICkgeworICAgICAgICB4bWwgPSB1bmRlZmluZWQ7CisgICAgfQorCisgICAgaWYg
KCAheG1sIHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0
aCApIHsKKyAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBYTUw6ICIgKyBkYXRhICk7Cisg
ICAgfQorICAgIHJldHVybiB4bWw7Cit9OworCisKK3ZhcgorICAgIHJoYXNoID0gLyMuKiQvLAor
ICAgIHJ0cyA9IC8oWz8mXSlfPVteJl0qLywKKyAgICByaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0q
KFteXHJcbl0qKSQvbWcsCisKKyAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90
b2NvbCBkZXRlY3Rpb24KKyAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1z
dG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLAorICAgIHJub0NvbnRlbnQg
PSAvXig/OkdFVHxIRUFEKSQvLAorICAgIHJwcm90b2NvbCA9IC9eXC9cLy8sCisKKyAgICAvKiBQ
cmVmaWx0ZXJzCisgICAgICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20g
ZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKKyAgICAgKiAyKSBU
aGVzZSBhcmUgY2FsbGVkOgorICAgICAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3Bv
cnQKKyAgICAgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0
cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpCisgICAgICogMykga2V5IGlzIHRoZSBkYXRh
VHlwZQorICAgICAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCisgICAg
ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRI
RU4gY29udGludWUgZG93biB0byAiKiIgaWYgbmVlZGVkCisgICAgICovCisgICAgcHJlZmlsdGVy
cyA9IHt9LAorCisgICAgLyogVHJhbnNwb3J0cyBiaW5kaW5ncworICAgICAqIDEpIGtleSBpcyB0
aGUgZGF0YVR5cGUKKyAgICAgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNl
ZAorICAgICAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBl
IGFuZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKKyAgICAgKi8KKyAgICB0cmFuc3BvcnRzID0g
e30sCisKKyAgICAvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgp
OyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KKyAgICBhbGxUeXBlcyA9
ICIqLyIuY29uY2F0KCAiKiIgKSwKKworICAgIC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhl
IGRvY3VtZW50IG9yaWdpbgorICAgIG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoICJhIiApOworICAgIG9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjsKKworLy8g
QmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFq
YXhUcmFuc3BvcnQKK2Z1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0
dXJlICkgeworCisgICAgLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZh
dWx0cyB0byAiKiIKKyAgICByZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVu
YyApIHsKKworICAgICAgICBpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09ICJzdHJp
bmciICkgeworICAgICAgICAgICAgZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjsKKyAgICAgICAg
ICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBk
YXRhVHlwZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgZGF0YVR5cGVzID0gZGF0
YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdOwor
CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKKworICAgICAgICAg
ICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgorICAgICAg
ICAgICAgd2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkgeworCisgICAg
ICAgICAgICAgICAgLy8gUHJlcGVuZCBpZiByZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICBpZiAo
IGRhdGFUeXBlWyAwIF0gPT09ICIrIiApIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUg
PSBkYXRhVHlwZS5zbGljZSggMSApIHx8ICIqIjsKKyAgICAgICAgICAgICAgICAgICAgKCBzdHJ1
Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0
KCBmdW5jICk7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kCisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKCBzdHJ1Y3R1cmVbIGRhdGFU
eXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK30KKworLy8g
QmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCitm
dW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25z
LCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkgeworCisgICAgdmFyIGluc3BlY3RlZCA9IHt9LAor
ICAgICAgICBzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTsK
KworICAgIGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkgeworICAgICAgICB2YXIgc2VsZWN0
ZWQ7CisgICAgICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CisgICAgICAgIGpRdWVy
eS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0
ZXJPckZhY3RvcnkgKSB7CisgICAgICAgICAgICB2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHBy
ZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApOworICAg
ICAgICAgICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gInN0cmluZyIgJiYK
KyAgICAgICAgICAgICAgICAhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlw
ZU9yVHJhbnNwb3J0IF0gKSB7CisKKyAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFUeXBlcy51
bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7CisgICAgICAgICAgICAgICAgaW5zcGVjdCgg
ZGF0YVR5cGVPclRyYW5zcG9ydCApOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApOworICAgICAgICAg
ICAgfQorICAgICAgICB9ICk7CisgICAgICAgIHJldHVybiBzZWxlY3RlZDsKKyAgICB9CisKKyAg
ICByZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRb
ICIqIiBdICYmIGluc3BlY3QoICIqIiApOworfQorCisvLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBh
amF4IG9wdGlvbnMKKy8vIHRoYXQgdGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVw
IGV4dGVuZGVkKQorLy8gRml4ZXMgIzk4ODcKK2Z1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwg
c3JjICkgeworICAgIHZhciBrZXksIGRlZXAsCisgICAgICAgIGZsYXRPcHRpb25zID0galF1ZXJ5
LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTsKKworICAgIGZvciAoIGtleSBpbiBzcmMg
KSB7CisgICAgICAgIGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30g
KSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIGRl
ZXAgKSB7CisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApOworICAg
IH0KKworICAgIHJldHVybiB0YXJnZXQ7Cit9CisKKy8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFu
IGFqYXggcmVxdWVzdDoKKyAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBi
ZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpCisgKiAtIHJldHVybnMg
dGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAqLworZnVuY3Rpb24gYWpheEhhbmRsZVJlc3Bv
bnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKKworICAgIHZhciBjdCwgdHlwZSwgZmluYWxE
YXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKKyAgICAgICAgY29udGVudHMgPSBzLmNvbnRlbnRzLAor
ICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlczsKKworICAgIC8vIFJlbW92ZSBhdXRvIGRh
dGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCisgICAgd2hpbGUgKCBk
YXRhVHlwZXNbIDAgXSA9PT0gIioiICkgeworICAgICAgICBkYXRhVHlwZXMuc2hpZnQoKTsKKyAg
ICAgICAgaWYgKCBjdCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgY3QgPSBzLm1pbWVU
eXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiQ29udGVudC1UeXBlIiApOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24g
Y29udGVudC10eXBlCisgICAgaWYgKCBjdCApIHsKKyAgICAgICAgZm9yICggdHlwZSBpbiBjb250
ZW50cyApIHsKKyAgICAgICAgICAgIGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sg
dHlwZSBdLnRlc3QoIGN0ICkgKSB7CisgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQo
IHR5cGUgKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9y
IHRoZSBleHBlY3RlZCBkYXRhVHlwZQorICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9u
c2VzICkgeworICAgICAgICBmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07CisgICAgfSBl
bHNlIHsKKworICAgICAgICAvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCisgICAgICAgIGZv
ciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAgICAgICAgICAgaWYgKCAhZGF0YVR5cGVzWyAw
IF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWyAwIF0gXSApIHsKKyAg
ICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggIWZpcnN0RGF0YVR5cGUgKSB7Cisg
ICAgICAgICAgICAgICAgZmlyc3REYXRhVHlwZSA9IHR5cGU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKKyAgICAgICAgZmluYWxE
YXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKKyAgICB9CisKKyAgICAv
LyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlCisgICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0
aGUgbGlzdCBpZiBuZWVkZWQKKyAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJl
c3BvbnNlCisgICAgaWYgKCBmaW5hbERhdGFUeXBlICkgeworICAgICAgICBpZiAoIGZpbmFsRGF0
YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkgeworICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hp
ZnQoIGZpbmFsRGF0YVR5cGUgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzcG9uc2Vz
WyBmaW5hbERhdGFUeXBlIF07CisgICAgfQorfQorCisvKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZl
biB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCisgKiBBbHNvIHNldHMgdGhl
IHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2UKKyAqLworZnVuY3Rpb24g
YWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkgeworICAgIHZhciBj
b252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LAorICAgICAgICBjb252ZXJ0ZXJzID0ge30s
CisKKyAgICAgICAgLy8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBu
ZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvbgorICAgICAgICBkYXRhVHlwZXMgPSBzLmRh
dGFUeXBlcy5zbGljZSgpOworCisgICAgLy8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93
ZXJjYXNlZCBrZXlzCisgICAgaWYgKCBkYXRhVHlwZXNbIDEgXSApIHsKKyAgICAgICAgZm9yICgg
Y29udiBpbiBzLmNvbnZlcnRlcnMgKSB7CisgICAgICAgICAgICBjb252ZXJ0ZXJzWyBjb252LnRv
TG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdOworICAgICAgICB9CisgICAgfQor
CisgICAgY3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpOworCisgICAgLy8gQ29udmVydCB0byBl
YWNoIHNlcXVlbnRpYWwgZGF0YVR5cGUKKyAgICB3aGlsZSAoIGN1cnJlbnQgKSB7CisKKyAgICAg
ICAgaWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7CisgICAgICAgICAgICBqcVhI
Ulsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisgICAgICAgIGlm
ICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHsKKyAgICAgICAgICAgIHJl
c3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOworICAgICAgICB9
CisKKyAgICAgICAgcHJldiA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBkYXRhVHlwZXMu
c2hpZnQoKTsKKworICAgICAgICBpZiAoIGN1cnJlbnQgKSB7CisKKyAgICAgICAgLy8gVGhlcmUn
cyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0bworICAgICAg
ICAgICAgaWYgKCBjdXJyZW50ID09PSAiKiIgKSB7CisKKyAgICAgICAgICAgICAgICBjdXJyZW50
ID0gcHJldjsKKworICAgICAgICAgICAgLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFU
eXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAorICAgICAgICAgICAgfSBl
bHNlIGlmICggcHJldiAhPT0gIioiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7CisKKyAgICAgICAg
ICAgICAgICAvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlcgorICAgICAgICAgICAgICAgIGNvbnYg
PSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbICIqICIg
KyBjdXJyZW50IF07CisKKyAgICAgICAgICAgICAgICAvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEg
cGFpcgorICAgICAgICAgICAgICAgIGlmICggIWNvbnYgKSB7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgdG1w
ID0gY29udjIuc3BsaXQoICIgIiApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBb
IDEgXSA9PT0gY3VycmVudCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElm
IHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzWyAiKiAiICsgdG1w
WyAwIF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29u
dmVydGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgPT09IHRy
dWUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udmVy
dGVyc1sgY29udjIgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhl
cndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gdG1wWyAw
IF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlm
dCggdG1wWyAxIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBcHBseSBjb252ZXJ0ZXIg
KGlmIG5vdCBhbiBlcXVpdmFsZW5jZSkKKyAgICAgICAgICAgICAgICBpZiAoIGNvbnYgIT09IHRy
dWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dl
ZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbQorICAgICAgICAgICAgICAgICAgICBp
ZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZSA9IGNvbnYoIHJlc3BvbnNlICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlID0gY29udiggcmVzcG9uc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKCBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiAicGFyc2VyZXJyb3IiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogY29udiA/IGUgOiAiTm8gY29udmVyc2lvbiBm
cm9tICIgKyBwcmV2ICsgIiB0byAiICsgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3MiLCBkYXRhOiByZXNwb25zZSB9OworfQorCitqUXVl
cnkuZXh0ZW5kKCB7CisKKyAgICAvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2Yg
YWN0aXZlIHF1ZXJpZXMKKyAgICBhY3RpdmU6IDAsCisKKyAgICAvLyBMYXN0LU1vZGlmaWVkIGhl
YWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0CisgICAgbGFzdE1vZGlmaWVkOiB7fSwKKyAgICBl
dGFnOiB7fSwKKworICAgIGFqYXhTZXR0aW5nczogeworICAgICAgICB1cmw6IGxvY2F0aW9uLmhy
ZWYsCisgICAgICAgIHR5cGU6ICJHRVQiLAorICAgICAgICBpc0xvY2FsOiBybG9jYWxQcm90b2Nv
bC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLAorICAgICAgICBnbG9iYWw6IHRydWUsCisgICAg
ICAgIHByb2Nlc3NEYXRhOiB0cnVlLAorICAgICAgICBhc3luYzogdHJ1ZSwKKyAgICAgICAgY29u
dGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRG
LTgiLAorICAgICAgICAvKgorICAgICAgICB0aW1lb3V0OiAwLAorICAgICAgICBkYXRhOiBudWxs
LAorICAgICAgICBkYXRhVHlwZTogbnVsbCwKKyAgICAgICAgdXNlcm5hbWU6IG51bGwsCisgICAg
ICAgIHBhc3N3b3JkOiBudWxsLAorICAgICAgICBjYWNoZTogbnVsbCwKKyAgICAgICAgdGhyb3dz
OiBmYWxzZSwKKyAgICAgICAgdHJhZGl0aW9uYWw6IGZhbHNlLAorICAgICAgICBoZWFkZXJzOiB7
fSwKKyAgICAgICAgKi8KKworICAgICAgICBhY2NlcHRzOiB7CisgICAgICAgICAgICAiKiI6IGFs
bFR5cGVzLAorICAgICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAorICAgICAgICAgICAgaHRt
bDogInRleHQvaHRtbCIsCisgICAgICAgICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQv
eG1sIiwKKyAgICAgICAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3Jp
cHQiCisgICAgICAgIH0sCisKKyAgICAgICAgY29udGVudHM6IHsKKyAgICAgICAgICAgIHhtbDog
L1xieG1sXGIvLAorICAgICAgICAgICAgaHRtbDogL1xiaHRtbC8sCisgICAgICAgICAgICBqc29u
OiAvXGJqc29uXGIvCisgICAgICAgIH0sCisKKyAgICAgICAgcmVzcG9uc2VGaWVsZHM6IHsKKyAg
ICAgICAgICAgIHhtbDogInJlc3BvbnNlWE1MIiwKKyAgICAgICAgICAgIHRleHQ6ICJyZXNwb25z
ZVRleHQiLAorICAgICAgICAgICAganNvbjogInJlc3BvbnNlSlNPTiIKKyAgICAgICAgfSwKKwor
ICAgICAgICAvLyBEYXRhIGNvbnZlcnRlcnMKKyAgICAgICAgLy8gS2V5cyBzZXBhcmF0ZSBzb3Vy
Y2UgKG9yIGNhdGNoYWxsICIqIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUg
c3BhY2UKKyAgICAgICAgY29udmVydGVyczogeworCisgICAgICAgICAgICAvLyBDb252ZXJ0IGFu
eXRoaW5nIHRvIHRleHQKKyAgICAgICAgICAgICIqIHRleHQiOiBTdHJpbmcsCisKKyAgICAgICAg
ICAgIC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKQorICAgICAgICAg
ICAgInRleHQgaHRtbCI6IHRydWUsCisKKyAgICAgICAgICAgIC8vIEV2YWx1YXRlIHRleHQgYXMg
YSBqc29uIGV4cHJlc3Npb24KKyAgICAgICAgICAgICJ0ZXh0IGpzb24iOiBqUXVlcnkucGFyc2VK
U09OLAorCisgICAgICAgICAgICAvLyBQYXJzZSB0ZXh0IGFzIHhtbAorICAgICAgICAgICAgInRl
eHQgeG1sIjogalF1ZXJ5LnBhcnNlWE1MCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRm9yIG9w
dGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKKyAgICAgICAgLy8geW91IGNh
biBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgorICAgICAgICAvLyBhbmQgd2hl
biB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZQorICAgICAgICAvLyBkZWVwIGV4dGVu
ZGVkIChzZWUgYWpheEV4dGVuZCkKKyAgICAgICAgZmxhdE9wdGlvbnM6IHsKKyAgICAgICAgICAg
IHVybDogdHJ1ZSwKKyAgICAgICAgICAgIGNvbnRleHQ6IHRydWUKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICAvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRh
cmdldAorICAgIC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy4K
KyAgICAvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLgor
ICAgIGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7CisgICAgICAgIHJl
dHVybiBzZXR0aW5ncyA/CisKKyAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2Jq
ZWN0CisgICAgICAgICAgICBhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5h
amF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6CisKKyAgICAgICAgICAgIC8vIEV4dGVuZGluZyBh
amF4U2V0dGluZ3MKKyAgICAgICAgICAgIGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3Ms
IHRhcmdldCApOworICAgIH0sCisKKyAgICBhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNP
clRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKKyAgICBhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZp
bHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKKworICAgIC8vIE1haW4gbWV0aG9kCisg
ICAgYWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHsKKworICAgICAgICAvLyBJZiB1cmwg
aXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQorICAgICAgICBpZiAoIHR5
cGVvZiB1cmwgPT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgb3B0aW9ucyA9IHVybDsKKyAg
ICAgICAgICAgIHVybCA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZvcmNl
IG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CisgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9
OworCisgICAgICAgIHZhciB0cmFuc3BvcnQsCisKKyAgICAgICAgICAgIC8vIFVSTCB3aXRob3V0
IGFudGktY2FjaGUgcGFyYW0KKyAgICAgICAgICAgIGNhY2hlVVJMLAorCisgICAgICAgICAgICAv
LyBSZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcsCisg
ICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCisKKyAgICAgICAgICAgIC8vIHRpbWVvdXQgaGFu
ZGxlCisgICAgICAgICAgICB0aW1lb3V0VGltZXIsCisKKyAgICAgICAgICAgIC8vIFVybCBjbGVh
bnVwIHZhcgorICAgICAgICAgICAgdXJsQW5jaG9yLAorCisgICAgICAgICAgICAvLyBUbyBrbm93
IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWQKKyAgICAgICAgICAgIGZpcmVH
bG9iYWxzLAorCisgICAgICAgICAgICAvLyBMb29wIHZhcmlhYmxlCisgICAgICAgICAgICBpLAor
CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0CisgICAgICAg
ICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKKworICAgICAgICAgICAg
Ly8gQ2FsbGJhY2tzIGNvbnRleHQKKyAgICAgICAgICAgIGNhbGxiYWNrQ29udGV4dCA9IHMuY29u
dGV4dCB8fCBzLAorCisgICAgICAgICAgICAvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlz
IGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9u
CisgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiYKKyAgICAgICAg
ICAgICAgICAoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1
ZXJ5ICkgPworICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDoK
KyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LAorCisgICAgICAgICAgICAvLyBEZWZl
cnJlZHMKKyAgICAgICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksCisgICAgICAg
ICAgICBjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiAp
LAorCisgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworICAgICAgICAg
ICAgc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSwKKworICAgICAgICAgICAgLy8gSGVh
ZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSkKKyAgICAgICAgICAgIHJlcXVlc3RIZWFk
ZXJzID0ge30sCisgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sCisKKyAgICAg
ICAgICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQorICAgICAgICAgICAgc3RhdGUgPSAwLAorCisgICAg
ICAgICAgICAvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2UKKyAgICAgICAgICAgIHN0ckFib3J0ID0g
ImNhbmNlbGVkIiwKKworICAgICAgICAgICAgLy8gRmFrZSB4aHIKKyAgICAgICAgICAgIGpxWEhS
ID0geworICAgICAgICAgICAgICAgIHJlYWR5U3RhdGU6IDAsCisKKyAgICAgICAgICAgICAgICAv
LyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgZ2V0
UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNlSGVhZGVycyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB7fTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRl
cnNTdHJpbmcgKSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJD
YXNlKCkgXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9LAorCisg
ICAgICAgICAgICAgICAgLy8gUmF3IHN0cmluZworICAgICAgICAgICAgICAgIGdldEFsbFJlc3Bv
bnNlSGVhZGVyczogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0
ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7CisgICAgICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgICAgIC8vIENhY2hlcyB0aGUgaGVhZGVyCisgICAgICAgICAgICAg
ICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggIXN0YXRlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJl
cXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBd
IHx8IG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFtZSBd
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIE92ZXJy
aWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyCisgICAgICAgICAgICAgICAgb3ZlcnJp
ZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgg
IXN0YXRlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcy5taW1lVHlwZSA9IHR5cGU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQg
Y2FsbGJhY2tzCisgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7CisgICAgICAgICAgICAgICAgICAgIGlmICgg
bWFwICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggY29kZSBpbiBtYXAgKSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFjayBpbiBh
IHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lcworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2Rl
IF0gXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXhlY3V0ZSB0
aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAganFY
SFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIENhbmNlbCB0aGUg
cmVxdWVzdAorICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJv
cnQ7CisgICAgICAgICAgICAgICAgICAgIGlmICggdHJhbnNwb3J0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkb25lKCAwLCBmaW5hbFRleHQgKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfTsKKworICAgICAgICAvLyBBdHRhY2ggZGVmZXJyZWRzCisgICAgICAgIGRlZmVycmVkLnBy
b21pc2UoIGpxWEhSICkuY29tcGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmFkZDsKKyAgICAgICAg
anFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7CisgICAgICAgIGpxWEhSLmVycm9yID0ganFYSFIu
ZmFpbDsKKworICAgICAgICAvLyBSZW1vdmUgaGFzaCBjaGFyYWN0ZXIgKCM3NTMxOiBhbmQgc3Ry
aW5nIHByb21vdGlvbikKKyAgICAgICAgLy8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAo
cHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpCisgICAgICAgIC8vIEhhbmRsZSBmYWxzeSB1cmwg
aW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWdu
YXR1cmUpCisgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWls
YWJsZQorICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiAp
ICsgIiIgKS5yZXBsYWNlKCByaGFzaCwgIiIgKQorICAgICAgICAgICAgLnJlcGxhY2UoIHJwcm90
b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyAiLy8iICk7CisKKyAgICAgICAgLy8gQWxpYXMgbWV0
aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0CisgICAgICAgIHMudHlwZSA9
IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7CisK
KyAgICAgICAgLy8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdAorICAgICAgICBzLmRhdGFUeXBlcyA9
IGpRdWVyeS50cmltKCBzLmRhdGFUeXBlIHx8ICIqIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJu
b3R3aGl0ZSApIHx8IFsgIiIgXTsKKworICAgICAgICAvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0
IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9y
aWdpbi4KKyAgICAgICAgaWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7CisgICAgICAgICAg
ICB1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKKworICAgICAgICAg
ICAgLy8gU3VwcG9ydDogSUU4LTExKworICAgICAgICAgICAgLy8gSUUgdGhyb3dzIGV4Y2VwdGlv
biBpZiB1cmwgaXMgbWFsZm9ybWVkLCBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvCisgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHVybEFuY2hvci5ocmVmID0gcy51cmw7CisK
KyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTgtMTErCisgICAgICAgICAgICAgICAgLy8g
QW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMg
cmVsYXRpdmUKKyAgICAgICAgICAgICAgICB1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVm
OworICAgICAgICAgICAgICAgIHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wg
KyAiLy8iICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09CisgICAgICAgICAgICAgICAgICAgIHVybEFu
Y2hvci5wcm90b2NvbCArICIvLyIgKyB1cmxBbmNob3IuaG9zdDsKKyAgICAgICAgICAgIH0gY2F0
Y2ggKCBlICkgeworCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFy
c2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sCisgICAgICAgICAgICAgICAg
Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZAor
ICAgICAgICAgICAgICAgIHMuY3Jvc3NEb21haW4gPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5n
CisgICAgICAgIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAh
PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0
YSwgcy50cmFkaXRpb25hbCApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXBwbHkgcHJlZmls
dGVycworICAgICAgICBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywg
cywgb3B0aW9ucywganFYSFIgKTsKKworICAgICAgICAvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVk
IGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZQorICAgICAgICBpZiAoIHN0YXRlID09PSAy
ICkgeworICAgICAgICAgICAgcmV0dXJuIGpxWEhSOworICAgICAgICB9CisKKyAgICAgICAgLy8g
V2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG8KKyAgICAgICAg
Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBB
TUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOCkKKyAgICAgICAgZmlyZUdsb2JhbHMgPSBqUXVlcnku
ZXZlbnQgJiYgcy5nbG9iYWw7CisKKyAgICAgICAgLy8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiBy
ZXF1ZXN0cworICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0g
MCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0YXJ0IiApOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCisgICAgICAgIHMudHlw
ZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpOworCisgICAgICAgIC8vIERldGVybWluZSBpZiByZXF1
ZXN0IGhhcyBjb250ZW50CisgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3Qo
IHMudHlwZSApOworCisgICAgICAgIC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWlu
ZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZQorICAgICAgICAvLyBhbmQvb3IgSWYtTm9uZS1N
YXRjaCBoZWFkZXIgbGF0ZXIgb24KKyAgICAgICAgY2FjaGVVUkwgPSBzLnVybDsKKworICAgICAg
ICAvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAor
ICAgICAgICBpZiAoICFzLmhhc0NvbnRlbnQgKSB7CisKKyAgICAgICAgICAgIC8vIElmIGRhdGEg
aXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmwKKyAgICAgICAgICAgIGlmICggcy5kYXRh
ICkgeworICAgICAgICAgICAgICAgIGNhY2hlVVJMID0gKCBzLnVybCArPSAoIHJxdWVyeS50ZXN0
KCBjYWNoZVVSTCApID8gIiYiIDogIj8iICkgKyBzLmRhdGEgKTsKKworICAgICAgICAgICAgICAg
IC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1
YWwgcmV0cnkKKyAgICAgICAgICAgICAgICBkZWxldGUgcy5kYXRhOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCisgICAgICAg
ICAgICBpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgIHMudXJsID0g
cnRzLnRlc3QoIGNhY2hlVVJMICkgPworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJl
IGlzIGFscmVhZHkgYSAnXycgcGFyYW1ldGVyLCBzZXQgaXRzIHZhbHVlCisgICAgICAgICAgICAg
ICAgICAgIGNhY2hlVVJMLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsgbm9uY2UrKyApIDoKKworICAg
ICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYWRkIG9uZSB0byB0aGUgZW5kCisgICAgICAg
ICAgICAgICAgICAgIGNhY2hlVVJMICsgKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICImIiA6
ICI/IiApICsgIl89IiArIG5vbmNlKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhl
YWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCAp
IHsKKyAgICAgICAgICAgIGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHsK
KyAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2lu
Y2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkgeworICAgICAgICAgICAg
ICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJJZi1Ob25lLU1hdGNoIiwgalF1ZXJ5LmV0YWdb
IGNhY2hlVVJMIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFNl
dCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudAorICAgICAgICBpZiAo
IHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0
aW9ucy5jb250ZW50VHlwZSApIHsKKyAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIo
ICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhl
IGRhdGFUeXBlCisgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCisgICAgICAgICAgICAi
QWNjZXB0IiwKKyAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRh
dGFUeXBlc1sgMCBdIF0gPworICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNb
IDAgXSBdICsKKyAgICAgICAgICAgICAgICAgICAgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIg
PyAiLCAiICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6CisgICAgICAgICAgICAgICAg
cy5hY2NlcHRzWyAiKiIgXQorICAgICAgICApOworCisgICAgICAgIC8vIENoZWNrIGZvciBoZWFk
ZXJzIG9wdGlvbgorICAgICAgICBmb3IgKCBpIGluIHMuaGVhZGVycyApIHsKKyAgICAgICAgICAg
IGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFi
b3J0CisgICAgICAgIGlmICggcy5iZWZvcmVTZW5kICYmCisgICAgICAgICAgICAoIHMuYmVmb3Jl
U2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRl
ID09PSAyICkgKSB7CisKKyAgICAgICAgICAgIC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkg
YW5kIHJldHVybgorICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb24KKyAgICAg
ICAgc3RyQWJvcnQgPSAiYWJvcnQiOworCisgICAgICAgIC8vIEluc3RhbGwgY2FsbGJhY2tzIG9u
IGRlZmVycmVkcworICAgICAgICBmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEsIGNv
bXBsZXRlOiAxIH0gKSB7CisgICAgICAgICAgICBqcVhIUlsgaSBdKCBzWyBpIF0gKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEdldCB0cmFuc3BvcnQKKyAgICAgICAgdHJhbnNwb3J0ID0gaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhS
ICk7CisKKyAgICAgICAgLy8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CisgICAgICAg
IGlmICggIXRyYW5zcG9ydCApIHsKKyAgICAgICAgICAgIGRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0
IiApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IDE7
CisKKyAgICAgICAgICAgIC8vIFNlbmQgZ2xvYmFsIGV2ZW50CisgICAgICAgICAgICBpZiAoIGZp
cmVHbG9iYWxzICkgeworICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2Vy
KCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmUK
KyAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGpxWEhSOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaW1lb3V0CisgICAgICAg
ICAgICBpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHsKKyAgICAgICAgICAgICAgICB0
aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgIGpxWEhSLmFib3J0KCAidGltZW91dCIgKTsKKyAgICAgICAgICAgICAgICB9LCBz
LnRpbWVvdXQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICBzdGF0ZSA9IDE7CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVl
c3RIZWFkZXJzLCBkb25lICk7CisgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKKworICAgICAg
ICAgICAgICAgIC8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmUKKyAg
ICAgICAgICAgICAgICBpZiAoIHN0YXRlIDwgMiApIHsKKyAgICAgICAgICAgICAgICAgICAgZG9u
ZSggLTEsIGUgKTsKKworICAgICAgICAgICAgICAgIC8vIFNpbXBseSByZXRocm93IG90aGVyd2lz
ZQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lCisgICAgICAgIGZ1bmN0aW9u
IGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkgewor
ICAgICAgICAgICAgdmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2Rp
ZmllZCwKKyAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDsKKwor
ICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UKKyAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIg
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93CisgICAgICAgICAgICBzdGF0ZSA9IDI7CisKKyAgICAg
ICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzCisgICAgICAgICAgICBpZiAoIHRp
bWVvdXRUaW1lciApIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1l
b3V0VGltZXIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRGVyZWZlcmVuY2Ug
dHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICAgICAgIC8vIChu
byBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpCisgICAgICAg
ICAgICB0cmFuc3BvcnQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgIC8vIENhY2hlIHJlc3Bv
bnNlIGhlYWRlcnMKKyAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMg
fHwgIiI7CisKKyAgICAgICAgICAgIC8vIFNldCByZWFkeVN0YXRlCisgICAgICAgICAgICBqcVhI
Ui5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwOworCisgICAgICAgICAgICAvLyBEZXRl
cm1pbmUgaWYgc3VjY2Vzc2Z1bAorICAgICAgICAgICAgaXNTdWNjZXNzID0gc3RhdHVzID49IDIw
MCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7CisKKyAgICAgICAgICAgIC8vIEdl
dCByZXNwb25zZSBkYXRhCisgICAgICAgICAgICBpZiAoIHJlc3BvbnNlcyApIHsKKyAgICAgICAg
ICAgICAgICByZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25z
ZXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ29udmVydCBubyBtYXR0ZXIg
d2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KQorICAgICAg
ICAgICAgcmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nl
c3MgKTsKKworICAgICAgICAgICAgLy8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5p
bmcKKyAgICAgICAgICAgIGlmICggaXNTdWNjZXNzICkgeworCisgICAgICAgICAgICAgICAgLy8g
U2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlm
IGluIGlmTW9kaWZpZWQgbW9kZS4KKyAgICAgICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRl
ciggIkxhc3QtTW9kaWZpZWQiICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggbW9kaWZpZWQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVS
TCBdID0gbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggImV0YWciICk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggbW9kaWZpZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgbm8gY29udGVudAor
ICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSAiSEVBRCIg
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAibm9jb250ZW50IjsKKworICAg
ICAgICAgICAgICAgIC8vIGlmIG5vdCBtb2RpZmllZAorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIHN0YXR1cyA9PT0gMzA0ICkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0g
Im5vdG1vZGlmaWVkIjsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0
J3MgY29udmVydCBpdAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IHJlc3BvbnNlLmRhdGE7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gcmVzcG9u
c2UuZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9ICFlcnJvcjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgLy8g
RXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0
cworICAgICAgICAgICAgICAgIGVycm9yID0gc3RhdHVzVGV4dDsKKyAgICAgICAgICAgICAgICBp
ZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVz
VGV4dCA9ICJlcnJvciI7CisgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNl
dCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0CisgICAgICAgICAgICBqcVhIUi5zdGF0dXMg
PSBzdGF0dXM7CisgICAgICAgICAgICBqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNU
ZXh0IHx8IHN0YXR1c1RleHQgKSArICIiOworCisgICAgICAgICAgICAvLyBTdWNjZXNzL0Vycm9y
CisgICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpx
WEhSIF0gKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQu
cmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBd
ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2Fs
bGJhY2tzCisgICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7CisgICAg
ICAgICAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICBpZiAoIGZpcmVH
bG9iYWxzICkgeworICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBp
c1N1Y2Nlc3MgPyAiYWpheFN1Y2Nlc3MiIDogImFqYXhFcnJvciIsCisgICAgICAgICAgICAgICAg
ICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbXBsZXRlCisgICAgICAgICAgICBjb21wbGV0ZURl
ZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSAp
OworCisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAgICAgICAgIGds
b2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7
CisKKyAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKKyAg
ICAgICAgICAgICAgICBpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkgeworICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdG9wIiApOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBqcVhIUjsK
KyAgICB9LAorCisgICAgZ2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7
CisgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCAianNvbiIg
KTsKKyAgICB9LAorCisgICAgZ2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHsK
KyAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgInNj
cmlwdCIgKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5lYWNoKCBbICJnZXQiLCAicG9zdCIgXSwg
ZnVuY3Rpb24oIGksIG1ldGhvZCApIHsKKyAgICBqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24o
IHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CisKKyAgICAgICAgLy8gU2hpZnQgYXJndW1l
bnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggZGF0YSApICkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7
CisgICAgICAgICAgICBjYWxsYmFjayA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gdW5kZWZp
bmVkOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBv
YmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpCisgICAgICAgIHJldHVybiBqUXVlcnku
YWpheCggalF1ZXJ5LmV4dGVuZCggeworICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAg
ICB0eXBlOiBtZXRob2QsCisgICAgICAgICAgICBkYXRhVHlwZTogdHlwZSwKKyAgICAgICAgICAg
IGRhdGE6IGRhdGEsCisgICAgICAgICAgICBzdWNjZXNzOiBjYWxsYmFjaworICAgICAgICB9LCBq
UXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTsKKyAgICB9OworfSApOworCisK
K2pRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwgKSB7CisgICAgcmV0dXJuIGpRdWVyeS5h
amF4KCB7CisgICAgICAgIHVybDogdXJsLAorCisgICAgICAgIC8vIE1ha2UgdGhpcyBleHBsaWNp
dCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0
KQorICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgZGF0YVR5cGU6ICJzY3JpcHQiLAorICAg
ICAgICBhc3luYzogZmFsc2UsCisgICAgICAgIGdsb2JhbDogZmFsc2UsCisgICAgICAgICJ0aHJv
d3MiOiB0cnVlCisgICAgfSApOworfTsKKworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgd3Jh
cEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHZhciB3cmFwOworCisgICAgICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
LmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndy
YXBBbGwoIGh0bWwuY2FsbCggdGhpcywgaSApICk7CisgICAgICAgICAgICB9ICk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIHRoaXNbIDAgXSApIHsKKworICAgICAgICAgICAgLy8gVGhlIGVs
ZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKKyAgICAgICAgICAgIHdyYXAgPSBqUXVl
cnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSAp
OworCisgICAgICAgICAgICBpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgeworICAgICAgICAg
ICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgd3JhcC5tYXAoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBl
bGVtID0gdGhpczsKKworICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRD
aGlsZCApIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hp
bGQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07Cisg
ICAgICAgICAgICB9ICkuYXBwZW5kKCB0aGlzICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9LAorCisgICAgd3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHsKKyAg
ICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0
aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApOworICAgICAgICAgICAgfSAp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAorICAgICAgICAgICAgICAgIGNv
bnRlbnRzID0gc2VsZi5jb250ZW50cygpOworCisgICAgICAgICAgICBpZiAoIGNvbnRlbnRzLmxl
bmd0aCApIHsKKyAgICAgICAgICAgICAgICBjb250ZW50cy53cmFwQWxsKCBodG1sICk7CisKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoIGh0bWwgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICB3cmFwOiBmdW5jdGlv
biggaHRtbCApIHsKKyAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbigg
aHRtbCApOworCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAg
ICAgICAgICAgalF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaXNGdW5jdGlvbiA/IGh0bWwuY2FsbCgg
dGhpcywgaSApIDogaHRtbCApOworICAgICAgICB9ICk7CisgICAgfSwKKworICAgIHVud3JhcDog
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiYm9keSIgKSAp
IHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGls
ZE5vZGVzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKS5lbmQoKTsKKyAgICB9Cit9ICk7
CisKKworalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICByZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSggZWxlbSApOworfTsKK2pRdWVy
eS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkgeworCisgICAgLy8gU3Vw
cG9ydDogT3BlcmEgPD0gMTIuMTIKKyAgICAvLyBPcGVyYSByZXBvcnRzIG9mZnNldFdpZHRocyBh
bmQgb2Zmc2V0SGVpZ2h0cyBsZXNzIHRoYW4gemVybyBvbiBzb21lIGVsZW1lbnRzCisgICAgLy8g
VXNlIE9SIGluc3RlYWQgb2YgQU5EIGFzIHRoZSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlIGlmIGVp
dGhlciBpcyB0cnVlCisgICAgLy8gU2VlIHRpY2tldHMgIzEwNDA2IGFuZCAjMTMxMzIKKyAgICBy
ZXR1cm4gZWxlbS5vZmZzZXRXaWR0aCA+IDAgfHwgZWxlbS5vZmZzZXRIZWlnaHQgPiAwIHx8IGVs
ZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPiAwOworfTsKKworCisKKwordmFyIHIyMCA9IC8l
MjAvZywKKyAgICByYnJhY2tldCA9IC9cW1xdJC8sCisgICAgckNSTEYgPSAvXHI/XG4vZywKKyAg
ICByc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkk
L2ksCisgICAgcnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2Vu
KS9pOworCitmdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBh
ZGQgKSB7CisgICAgdmFyIG5hbWU7CisKKyAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSAp
IHsKKworICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KKyAgICAgICAgalF1ZXJ5LmVh
Y2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisgICAgICAgICAgICBpZiAoIHRyYWRpdGlvbmFs
IHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgeworCisgICAgICAgICAgICAgICAgLy8gVHJl
YXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgorICAgICAgICAgICAgICAgIGFkZCggcHJl
Zml4LCB2ICk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAvLyBJ
dGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBp
bmRleC4KKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtcygKKyAgICAgICAgICAgICAgICAgICAg
cHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgJiYgdiAhPSBudWxsID8gaSA6
ICIiICkgKyAiXSIsCisgICAgICAgICAgICAgICAgICAgIHYsCisgICAgICAgICAgICAgICAgICAg
IHRyYWRpdGlvbmFsLAorICAgICAgICAgICAgICAgICAgICBhZGQKKyAgICAgICAgICAgICAgICAp
OworICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisKKyAgICB9IGVsc2UgaWYgKCAhdHJhZGl0
aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSAib2JqZWN0IiApIHsKKworICAgICAgICAv
LyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uCisgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewor
ICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsg
bmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisK
KyAgICAgICAgLy8gU2VyaWFsaXplIHNjYWxhciBpdGVtLgorICAgICAgICBhZGQoIHByZWZpeCwg
b2JqICk7CisgICAgfQorfQorCisvLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50
cyBvciBhIHNldCBvZgorLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nCitqUXVlcnku
cGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7CisgICAgdmFyIHByZWZpeCwKKyAg
ICAgICAgcyA9IFtdLAorICAgICAgICBhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKKwor
ICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1
cm4gaXRzIHZhbHVlCisgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1
ZSApID8gdmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKTsKKyAgICAgICAg
ICAgIHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5j
b2RlVVJJQ29tcG9uZW50KCB2YWx1ZSApOworICAgICAgICB9OworCisgICAgLy8gU2V0IHRyYWRp
dGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KKyAgICBpZiAoIHRy
YWRpdGlvbmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5
LmFqYXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOworICAgIH0K
KworICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFu
IGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCisgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8
ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKKworICAgICAg
ICAvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKKyAgICAgICAgalF1ZXJ5LmVhY2goIGEs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTsK
KyAgICAgICAgfSApOworCisgICAgfSBlbHNlIHsKKworICAgICAgICAvLyBJZiB0cmFkaXRpb25h
bCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXIKKyAgICAgICAg
Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuCisgICAgICAg
IGZvciAoIHByZWZpeCBpbiBhICkgeworICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCwg
YVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb24KKyAgICByZXR1cm4gcy5qb2lu
KCAiJiIgKS5yZXBsYWNlKCByMjAsICIrIiApOworfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggewor
ICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkucGFyYW0o
IHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOworICAgIH0sCisgICAgc2VyaWFsaXplQXJyYXk6IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkgeworCisgICAg
ICAgICAgICAvLyBDYW4gYWRkIHByb3BIb29rIGZvciAiZWxlbWVudHMiIHRvIGZpbHRlciBvciBh
ZGQgZm9ybSBlbGVtZW50cworICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3Ao
IHRoaXMsICJlbGVtZW50cyIgKTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50cyA/IGpRdWVy
eS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzOworICAgICAgICB9ICkKKyAgICAgICAgLmZp
bHRlciggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTsKKwor
ICAgICAgICAgICAgLy8gVXNlIC5pcyggIjpkaXNhYmxlZCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rp
c2FibGVkXSB3b3JrcworICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0
aGlzICkuaXMoICI6ZGlzYWJsZWQiICkgJiYKKyAgICAgICAgICAgICAgICByc3VibWl0dGFibGUu
dGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYm
CisgICAgICAgICAgICAgICAgKCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3Qo
IHR5cGUgKSApOworICAgICAgICB9ICkKKyAgICAgICAgLm1hcCggZnVuY3Rpb24oIGksIGVsZW0g
KSB7CisgICAgICAgICAgICB2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7CisKKyAgICAg
ICAgICAgIHJldHVybiB2YWwgPT0gbnVsbCA/CisgICAgICAgICAgICAgICAgbnVsbCA6CisgICAg
ICAgICAgICAgICAgalF1ZXJ5LmlzQXJyYXkoIHZhbCApID8KKyAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAi
XHJcbiIgKSB9OworICAgICAgICAgICAgICAgICAgICB9ICkgOgorICAgICAgICAgICAgICAgICAg
ICB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkg
fTsKKyAgICAgICAgfSApLmdldCgpOworICAgIH0KK30gKTsKKworCitqUXVlcnkuYWpheFNldHRp
bmdzLnhociA9IGZ1bmN0aW9uKCkgeworICAgIHRyeSB7CisgICAgICAgIHJldHVybiBuZXcgd2lu
ZG93LlhNTEh0dHBSZXF1ZXN0KCk7CisgICAgfSBjYXRjaCAoIGUgKSB7fQorfTsKKwordmFyIHho
clN1Y2Nlc3NTdGF0dXMgPSB7CisKKyAgICAgICAgLy8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWll
bGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDAKKyAgICAgICAgMDogMjAwLAorCisgICAgICAg
IC8vIFN1cHBvcnQ6IElFOQorICAgICAgICAvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMg
MTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKKyAgICAgICAgMTIyMzogMjA0CisgICAgfSwKKyAg
ICB4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpOworCitzdXBwb3J0LmNv
cnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHhoclN1cHBvcnRl
ZCApOworc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7CisKK2pR
dWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHsKKyAgICB2YXIgY2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2s7CisKKyAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlm
IHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0CisgICAgaWYgKCBzdXBwb3J0LmNvcnMg
fHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkgeworICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkgewor
ICAgICAgICAgICAgICAgIHZhciBpLAorICAgICAgICAgICAgICAgICAgICB4aHIgPSBvcHRpb25z
LnhocigpOworCisgICAgICAgICAgICAgICAgeGhyLm9wZW4oCisgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwsCisgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMuYXN5bmMsCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
dXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFzc3dvcmQKKyAgICAgICAg
ICAgICAgICApOworCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBw
cm92aWRlZAorICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgaWYgKCBvcHRp
b25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkgeworICAgICAgICAgICAgICAg
ICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyCisg
ICAgICAgICAgICAgICAgLy8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNv
bmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZQorICAgICAgICAgICAgICAgIC8vIGFraW4gdG8g
YSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuCisgICAg
ICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFz
aXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCisgICAgICAgICAgICAgICAgLy8gRm9yIHNhbWUt
ZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQu
CisgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sg
IlgtUmVxdWVzdGVkLVdpdGgiIF0gKSB7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbICJY
LVJlcXVlc3RlZC1XaXRoIiBdID0gIlhNTEh0dHBSZXF1ZXN0IjsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBTZXQgaGVhZGVycworICAgICAgICAgICAgICAgIGZvciAo
IGkgaW4gaGVhZGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFk
ZXIoIGksIGhlYWRlcnNbIGkgXSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIENhbGxiYWNrCisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiggdHlw
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0eXBlID09PSAiYWJvcnQiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
aHIuYWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBl
ID09PSAiZXJyb3IiICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1
cHBvcnQ6IElFOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbiBhIG1hbnVh
bCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB4aHIuc3RhdHVz
ICE9PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBsZXRlKCAwLCAiZXJyb3IiICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbGU6IHByb3RvY29s
IGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnN0YXR1cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4aHIuc3RhdHVzVGV4dAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc3RhdHVzVGV4dCwKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU5IG9ubHkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dz
IG9uIGJpbmFyeSAodHJhYy0xMTQyNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0
OTgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHhoci5yZXNwb25zZVR5
cGUgfHwgInRleHQiICkgIT09ICJ0ZXh0IiAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSAic3RyaW5nIiA/CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBiaW5hcnk6IHhoci5yZXNwb25zZSB9
IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRleHQ6IHhoci5y
ZXNwb25zZVRleHQgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5n
ZXRBbGxSZXNwb25zZUhlYWRlcnMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgLy8gTGlzdGVuIHRvIGV2ZW50cworICAgICAgICAgICAgICAgIHhoci5vbmxvYWQg
PSBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJv
ciA9IGNhbGxiYWNrKCAiZXJyb3IiICk7CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJ
RTkKKyAgICAgICAgICAgICAgICAvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ug
b25hYm9ydAorICAgICAgICAgICAgICAgIC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHMKKyAg
ICAgICAgICAgICAgICBpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjazsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
ZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHJlYWR5U3Rh
dGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlcworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0
byBhIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgeGhyLm9uZXJy
b3IgY2Fubm90IGJlIGFjY2Vzc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93
LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3JDYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ayA9IGNhbGxiYWNrKCAiYWJvcnQiICk7CisKKyAgICAgICAgICAgICAgICB0cnkgeworCisgICAg
ICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFu
IGV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29u
dGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApOworICAgICAgICAgICAgICAgIH0gY2F0Y2gg
KCBlICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vICMxNDY4MzogT25seSByZXRocm93IGlm
IHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0CisgICAgICAgICAgICAg
ICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlm
ICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30gKTsKKworCisK
KworLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGUKK2pRdWVyeS5hamF4U2V0dXAoIHsKKyAgICBh
Y2NlcHRzOiB7CisgICAgICAgIHNjcmlwdDogInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24v
amF2YXNjcmlwdCwgIiArCisgICAgICAgICAgICAiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBw
bGljYXRpb24veC1lY21hc2NyaXB0IgorICAgIH0sCisgICAgY29udGVudHM6IHsKKyAgICAgICAg
c2NyaXB0OiAvXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvCisgICAgfSwKKyAgICBjb252ZXJ0ZXJz
OiB7CisgICAgICAgICJ0ZXh0IHNjcmlwdCI6IGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAg
ICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0Owor
ICAgICAgICB9CisgICAgfQorfSApOworCisvLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2Ug
YW5kIGNyb3NzRG9tYWluCitqUXVlcnkuYWpheFByZWZpbHRlciggInNjcmlwdCIsIGZ1bmN0aW9u
KCBzICkgeworICAgIGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICBzLmNh
Y2hlID0gZmFsc2U7CisgICAgfQorICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAg
cy50eXBlID0gIkdFVCI7CisgICAgfQorfSApOworCisvLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0
cmFuc3BvcnQKK2pRdWVyeS5hamF4VHJhbnNwb3J0KCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7
CisKKyAgICAvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIHJl
cXVlc3RzCisgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgeworICAgICAgICB2YXIgc2NyaXB0LCBj
YWxsYmFjazsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBf
LCBjb21wbGV0ZSApIHsKKyAgICAgICAgICAgICAgICBzY3JpcHQgPSBqUXVlcnkoICI8c2NyaXB0
PiIgKS5wcm9wKCB7CisgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNl
dCwKKyAgICAgICAgICAgICAgICAgICAgc3JjOiBzLnVybAorICAgICAgICAgICAgICAgIH0gKS5v
bigKKyAgICAgICAgICAgICAgICAgICAgImxvYWQgZXJyb3IiLAorICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
Y3JpcHQucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IG51bGw7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV2dCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wbGV0ZSggZXZ0LnR5cGUgPT09ICJlcnJvciIgPyA0MDQgOiAyMDAsIGV2
dC50eXBlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgLy8gVXNlIG5hdGl2ZSBE
T00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5CisgICAg
ICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfSAp
OworCisKKworCit2YXIgb2xkQ2FsbGJhY2tzID0gW10sCisgICAgcmpzb25wID0gLyg9KVw/KD89
JnwkKXxcP1w/LzsKKworLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5ncworalF1ZXJ5LmFqYXhTZXR1
cCggeworICAgIGpzb25wOiAiY2FsbGJhY2siLAorICAgIGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVl
cnkuZXhwYW5kbyArICJfIiArICggbm9uY2UrKyApICk7CisgICAgICAgIHRoaXNbIGNhbGxiYWNr
IF0gPSB0cnVlOworICAgICAgICByZXR1cm4gY2FsbGJhY2s7CisgICAgfQorfSApOworCisvLyBE
ZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAg
cmVxdWVzdHMKK2pRdWVyeS5hamF4UHJlZmlsdGVyKCAianNvbiBqc29ucCIsIGZ1bmN0aW9uKCBz
LCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHsKKworICAgIHZhciBjYWxsYmFja05hbWUsIG92
ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lciwKKyAgICAgICAganNvblByb3AgPSBzLmpzb25w
ICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID8KKyAgICAgICAgICAgICJ1cmwi
IDoKKyAgICAgICAgICAgIHR5cGVvZiBzLmRhdGEgPT09ICJzdHJpbmciICYmCisgICAgICAgICAg
ICAgICAgKCBzLmNvbnRlbnRUeXBlIHx8ICIiICkKKyAgICAgICAgICAgICAgICAgICAgLmluZGV4
T2YoICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiICkgPT09IDAgJiYKKyAgICAg
ICAgICAgICAgICByanNvbnAudGVzdCggcy5kYXRhICkgJiYgImRhdGEiCisgICAgICAgICk7CisK
KyAgICAvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgImpzb25wIiBvciB3
ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldAorICAgIGlmICgganNvblByb3AgfHwgcy5kYXRhVHlw
ZXNbIDAgXSA9PT0gImpzb25wIiApIHsKKworICAgICAgICAvLyBHZXQgY2FsbGJhY2sgbmFtZSwg
cmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0CisgICAgICAg
IGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpz
b25wQ2FsbGJhY2sgKSA/CisgICAgICAgICAgICBzLmpzb25wQ2FsbGJhY2soKSA6CisgICAgICAg
ICAgICBzLmpzb25wQ2FsbGJhY2s7CisKKyAgICAgICAgLy8gSW5zZXJ0IGNhbGxiYWNrIGludG8g
dXJsIG9yIGZvcm0gZGF0YQorICAgICAgICBpZiAoIGpzb25Qcm9wICkgeworICAgICAgICAgICAg
c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2Fs
bGJhY2tOYW1lICk7CisgICAgICAgIH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkgewor
ICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiAp
ICsgcy5qc29ucCArICI9IiArIGNhbGxiYWNrTmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRp
b24KKyAgICAgICAgcy5jb252ZXJ0ZXJzWyAic2NyaXB0IGpzb24iIF0gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkgeworICAgICAgICAgICAgICAg
IGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgIiB3YXMgbm90IGNhbGxlZCIgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdOworICAg
ICAgICB9OworCisgICAgICAgIC8vIEZvcmNlIGpzb24gZGF0YVR5cGUKKyAgICAgICAgcy5kYXRh
VHlwZXNbIDAgXSA9ICJqc29uIjsKKworICAgICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrCisgICAg
ICAgIG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTsKKyAgICAgICAgd2luZG93
WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmVzcG9uc2VDb250
YWluZXIgPSBhcmd1bWVudHM7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gQ2xlYW4tdXAgZnVu
Y3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpCisgICAgICAgIGpxWEhSLmFsd2F5cyggZnVu
Y3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlz
dCAtIHJlbW92ZSBpdAorICAgICAgICAgICAgaWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJh
Y2tOYW1lICk7CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5n
IHZhbHVlCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdpbmRvd1sgY2Fs
bGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gU2F2ZSBiYWNrIGFzIGZyZWUKKyAgICAgICAgICAgIGlmICggc1sgY2FsbGJhY2tOYW1lIF0g
KSB7CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0
aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmQKKyAgICAgICAgICAgICAgICBzLmpzb25w
Q2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7CisKKyAgICAgICAgICAg
ICAgICAvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlCisgICAgICAgICAg
ICAgICAgb2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEg
cmVzcG9uc2UKKyAgICAgICAgICAgIGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5Lmlz
RnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7CisgICAgICAgICAgICAgICAgb3ZlcndyaXR0ZW4o
IHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDsKKyAgICAgICAgfSAp
OworCisgICAgICAgIC8vIERlbGVnYXRlIHRvIHNjcmlwdAorICAgICAgICByZXR1cm4gInNjcmlw
dCI7CisgICAgfQorfSApOworCisKKworCisvLyBBcmd1bWVudCAiZGF0YSIgc2hvdWxkIGJlIHN0
cmluZyBvZiBodG1sCisvLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZy
YWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsCisvLyBkZWZhdWx0cyB0byBk
b2N1bWVudAorLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRl
IHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZworalF1ZXJ5LnBhcnNlSFRNTCA9IGZ1
bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHsKKyAgICBpZiAoICFkYXRhIHx8
IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJib29sZWFuIiApIHsKKyAgICAgICAga2Vl
cFNjcmlwdHMgPSBjb250ZXh0OworICAgICAgICBjb250ZXh0ID0gZmFsc2U7CisgICAgfQorICAg
IGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworCisgICAgdmFyIHBhcnNlZCA9IHJzaW5n
bGVUYWcuZXhlYyggZGF0YSApLAorICAgICAgICBzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtd
OworCisgICAgLy8gU2luZ2xlIHRhZworICAgIGlmICggcGFyc2VkICkgeworICAgICAgICByZXR1
cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTsKKyAgICB9CisKKyAg
ICBwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApOwor
CisgICAgaWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkgeworICAgICAgICBqUXVlcnko
IHNjcmlwdHMgKS5yZW1vdmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4galF1ZXJ5Lm1lcmdlKCBb
XSwgcGFyc2VkLmNoaWxkTm9kZXMgKTsKK307CisKKworLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9s
ZCBsb2FkIG1ldGhvZAordmFyIF9sb2FkID0galF1ZXJ5LmZuLmxvYWQ7CisKKy8qKgorICogTG9h
ZCBhIHVybCBpbnRvIGEgcGFnZQorICovCitqUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmws
IHBhcmFtcywgY2FsbGJhY2sgKSB7CisgICAgaWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAm
JiBfbG9hZCApIHsKKyAgICAgICAgcmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMg
KTsKKyAgICB9CisKKyAgICB2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAorICAgICAgICBz
ZWxmID0gdGhpcywKKyAgICAgICAgb2ZmID0gdXJsLmluZGV4T2YoICIgIiApOworCisgICAgaWYg
KCBvZmYgPiAtMSApIHsKKyAgICAgICAgc2VsZWN0b3IgPSBqUXVlcnkudHJpbSggdXJsLnNsaWNl
KCBvZmYgKSApOworICAgICAgICB1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApOworICAgIH0KKwor
ICAgIC8vIElmIGl0J3MgYSBmdW5jdGlvbgorICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBh
cmFtcyApICkgeworCisgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNr
CisgICAgICAgIGNhbGxiYWNrID0gcGFyYW1zOworICAgICAgICBwYXJhbXMgPSB1bmRlZmluZWQ7
CisKKyAgICAvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nCisgICAgfSBlbHNlIGlm
ICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICJvYmplY3QiICkgeworICAgICAgICB0eXBl
ID0gIlBPU1QiOworICAgIH0KKworICAgIC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5
LCBtYWtlIHRoZSByZXF1ZXN0CisgICAgaWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7CisgICAgICAg
IGpRdWVyeS5hamF4KCB7CisgICAgICAgICAgICB1cmw6IHVybCwKKworICAgICAgICAgICAgLy8g
SWYgInR5cGUiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiAiR0VUIiBtZXRob2Qgd2lsbCBi
ZSB1c2VkLgorICAgICAgICAgICAgLy8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0
IHNpbmNlCisgICAgICAgICAgICAvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhT
ZXR1cCBtZXRob2QKKyAgICAgICAgICAgIHR5cGU6IHR5cGUgfHwgIkdFVCIsCisgICAgICAgICAg
ICBkYXRhVHlwZTogImh0bWwiLAorICAgICAgICAgICAgZGF0YTogcGFyYW1zCisgICAgICAgIH0g
KS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkgeworCisgICAgICAgICAgICAvLyBTYXZl
IHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2sKKyAgICAgICAgICAgIHJlc3Bv
bnNlID0gYXJndW1lbnRzOworCisgICAgICAgICAgICBzZWxmLmh0bWwoIHNlbGVjdG9yID8KKwor
ICAgICAgICAgICAgICAgIC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRo
ZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdgorICAgICAgICAgICAgICAgIC8vIEV4Y2x1
ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9ycworICAgICAg
ICAgICAgICAgIGpRdWVyeSggIjxkaXY+IiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVz
cG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAgICAgIC8vIE90
aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0CisgICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0
ICk7CisKKyAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24g
Z2V0cyAiZGF0YSIsICJzdGF0dXMiLCAianFYSFIiCisgICAgICAgIC8vIGJ1dCB0aGV5IGFyZSBp
Z25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS4KKyAgICAgICAgLy8gSWYgaXQg
ZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyAianFYSFIiLCAic3RhdHVzIiwgImVycm9yIgorICAg
ICAgICB9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsK
KyAgICAgICAgICAgIHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgY2Fs
bGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0
dXMsIGpxWEhSIF0gKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfSApOworICAgIH0KKwor
ICAgIHJldHVybiB0aGlzOworfTsKKworCisKKworLy8gQXR0YWNoIGEgYnVuY2ggb2YgZnVuY3Rp
b25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHMKK2pRdWVyeS5lYWNoKCBbCisgICAg
ImFqYXhTdGFydCIsCisgICAgImFqYXhTdG9wIiwKKyAgICAiYWpheENvbXBsZXRlIiwKKyAgICAi
YWpheEVycm9yIiwKKyAgICAiYWpheFN1Y2Nlc3MiLAorICAgICJhamF4U2VuZCIKK10sIGZ1bmN0
aW9uKCBpLCB0eXBlICkgeworICAgIGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkg
eworICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTsKKyAgICB9OworfSApOworCisK
KworCitqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7Cisg
ICAgICAgIHJldHVybiBlbGVtID09PSBmbi5lbGVtOworICAgIH0gKS5sZW5ndGg7Cit9OworCisK
KworCisvKioKKyAqIEdldHMgYSB3aW5kb3cgZnJvbSBhbiBlbGVtZW50CisgKi8KK2Z1bmN0aW9u
IGdldFdpbmRvdyggZWxlbSApIHsKKyAgICByZXR1cm4galF1ZXJ5LmlzV2luZG93KCBlbGVtICkg
PyBlbGVtIDogZWxlbS5ub2RlVHlwZSA9PT0gOSAmJiBlbGVtLmRlZmF1bHRWaWV3OworfQorCitq
UXVlcnkub2Zmc2V0ID0geworICAgIHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMs
IGkgKSB7CisgICAgICAgIHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJU
b3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sCisgICAgICAgICAg
ICBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sICJwb3NpdGlvbiIgKSwKKyAgICAgICAgICAg
IGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKKyAgICAgICAgICAgIHByb3BzID0ge307CisKKyAg
ICAgICAgLy8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZl
biBvbiBzdGF0aWMgZWxlbQorICAgICAgICBpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsK
KyAgICAgICAgICAgIGVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgICB9
CisKKyAgICAgICAgY3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTsKKyAgICAgICAgY3VyQ1NT
VG9wID0galF1ZXJ5LmNzcyggZWxlbSwgInRvcCIgKTsKKyAgICAgICAgY3VyQ1NTTGVmdCA9IGpR
dWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApOworICAgICAgICBjYWxjdWxhdGVQb3NpdGlvbiA9ICgg
cG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgfHwgcG9zaXRpb24gPT09ICJmaXhlZCIgKSAmJgorICAg
ICAgICAgICAgKCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggImF1dG8iICkgPiAt
MTsKKworICAgICAgICAvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlm
IGVpdGhlcgorICAgICAgICAvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBl
aXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKKyAgICAgICAgaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiAp
IHsKKyAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpOworICAgICAg
ICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOworICAgICAgICAgICAgY3VyTGVmdCA9IGN1
clBvc2l0aW9uLmxlZnQ7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGN1clRvcCA9
IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7CisgICAgICAgICAgICBjdXJMZWZ0ID0gcGFy
c2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7CisKKyAgICAgICAgICAgIC8vIFVzZSBqUXVl
cnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3Vt
ZW50IChnaC0xODQ4KQorICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwg
aSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7CisgICAgICAgICAgICBwcm9wcy50b3AgPSAo
IG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOworICAgICAgICB9CisgICAg
ICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7CisgICAgICAgICAgICBwcm9wcy5sZWZ0
ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgeworICAgICAgICAgICAgb3B0
aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOworCisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBjdXJFbGVtLmNzcyggcHJvcHMgKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK2pR
dWVyeS5mbi5leHRlbmQoIHsKKyAgICBvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkgeworICAg
ICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICByZXR1cm4gb3B0aW9u
cyA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICB0aGlzIDoKKyAgICAgICAgICAgICAg
ICB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnku
b2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOworICAgICAgICAgICAgICAgIH0g
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBkb2NFbGVtLCB3aW4sCisgICAgICAgICAgICBl
bGVtID0gdGhpc1sgMCBdLAorICAgICAgICAgICAgYm94ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSwK
KyAgICAgICAgICAgIGRvYyA9IGVsZW0gJiYgZWxlbS5vd25lckRvY3VtZW50OworCisgICAgICAg
IGlmICggIWRvYyApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBp
dCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZQorICAgICAgICBpZiAoICFqUXVlcnkuY29u
dGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHsKKyAgICAgICAgICAgIHJldHVybiBib3g7CisgICAg
ICAgIH0KKworICAgICAgICBib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAg
ICAgICB3aW4gPSBnZXRXaW5kb3coIGRvYyApOworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgdG9wOiBib3gudG9wICsgd2luLnBhZ2VZT2Zmc2V0IC0gZG9jRWxlbS5jbGllbnRUb3AsCisg
ICAgICAgICAgICBsZWZ0OiBib3gubGVmdCArIHdpbi5wYWdlWE9mZnNldCAtIGRvY0VsZW0uY2xp
ZW50TGVmdAorICAgICAgICB9OworICAgIH0sCisKKyAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICggIXRoaXNbIDAgXSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwKKyAgICAgICAgICAgIGVs
ZW0gPSB0aGlzWyAwIF0sCisgICAgICAgICAgICBwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVm
dDogMCB9OworCisgICAgICAgIC8vIEZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB3aW5k
b3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwgbGVmdDogMH0sCisgICAgICAgIC8vIGJlY2F1c2Ug
aXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudAorICAgICAgICBpZiAoIGpRdWVyeS5jc3MoIGVs
ZW0sICJwb3NpdGlvbiIgKSA9PT0gImZpeGVkIiApIHsKKworICAgICAgICAgICAgLy8gQXNzdW1l
IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyB0aGVyZSB3aGVuIGNvbXB1dGVkIHBvc2l0aW9uIGlz
IGZpeGVkCisgICAgICAgICAgICBvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIEdldCAqcmVhbCogb2Zmc2V0
UGFyZW50CisgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpOwor
CisgICAgICAgICAgICAvLyBHZXQgY29ycmVjdCBvZmZzZXRzCisgICAgICAgICAgICBvZmZzZXQg
PSB0aGlzLm9mZnNldCgpOworICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZz
ZXRQYXJlbnRbIDAgXSwgImh0bWwiICkgKSB7CisgICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0
ID0gb2Zmc2V0UGFyZW50Lm9mZnNldCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKKyAgICAgICAgICAgIHBhcmVudE9mZnNldC50b3Ag
Kz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sICJib3JkZXJUb3BXaWR0aCIsIHRydWUg
KTsKKyAgICAgICAgICAgIHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBh
cmVudFsgMCBdLCAiYm9yZGVyTGVmdFdpZHRoIiwgdHJ1ZSApOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2lucworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgdG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRv
cCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5Ub3AiLCB0cnVlICksCisgICAgICAgICAgICBs
ZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwg
Im1hcmdpbkxlZnQiLCB0cnVlICkKKyAgICAgICAgfTsKKyAgICB9LAorCisgICAgLy8gVGhpcyBt
ZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6
CisgICAgLy8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zm
c2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybgorICAgIC8vICAgIGRvY3VtZW50RWxl
bWVudCBvZiB0aGUgcGFyZW50IHdpbmRvdworICAgIC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRl
dGFjaGVkIGVsZW1lbnQKKyAgICAvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4g
aW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmCisgICAgLy8K
KyAgICAvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJl
YWwgbGlmZSB1c2UtY2FzZXMKKyAgICAvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3Jl
IHByZWZlcmFibGUgcmVzdWx0cy4KKyAgICAvLworICAgIC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIs
IGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0
dXJlCisgICAgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
bWFwKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9m
ZnNldFBhcmVudDsKKworICAgICAgICAgICAgd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5
LmNzcyggb2Zmc2V0UGFyZW50LCAicG9zaXRpb24iICkgPT09ICJzdGF0aWMiICkgeworICAgICAg
ICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRF
bGVtZW50OworICAgICAgICB9ICk7CisgICAgfQorfSApOworCisvLyBDcmVhdGUgc2Nyb2xsTGVm
dCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHMKK2pRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6ICJwYWdl
WE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0IiB9LCBmdW5jdGlvbiggbWV0aG9kLCBw
cm9wICkgeworICAgIHZhciB0b3AgPSAicGFnZVlPZmZzZXQiID09PSBwcm9wOworCisgICAgalF1
ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7CisgICAgICAgIHJldHVybiBhY2Nl
c3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHsKKyAgICAgICAgICAgIHZh
ciB3aW4gPSBnZXRXaW5kb3coIGVsZW0gKTsKKworICAgICAgICAgICAgaWYgKCB2YWwgPT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBl
bGVtWyBtZXRob2QgXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB3aW4gKSB7
CisgICAgICAgICAgICAgICAgd2luLnNjcm9sbFRvKAorICAgICAgICAgICAgICAgICAgICAhdG9w
ID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICB0b3AgPyB2YWwg
OiB3aW4ucGFnZVlPZmZzZXQKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGVsZW1bIG1ldGhvZCBdID0gdmFsOworICAgICAgICAgICAg
fQorICAgICAgICB9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH07Cit9
ICk7CisKKy8vIFN1cHBvcnQ6IFNhZmFyaTw3LTgrLCBDaHJvbWU8MzctNDQrCisvLyBBZGQgdGhl
IHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvbgorLy8gV2Via2l0IGJ1
ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0CisvLyBCbGlu
ayBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9p
ZD0yMjkyODAKKy8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lm
aWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7CisvLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBj
c3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQg
aGVyZQoralF1ZXJ5LmVhY2goIFsgInRvcCIsICJsZWZ0IiBdLCBmdW5jdGlvbiggaSwgcHJvcCAp
IHsKKyAgICBqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5w
aXhlbFBvc2l0aW9uLAorICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAg
ICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gY3Vy
Q1NTKCBlbGVtLCBwcm9wICk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBjdXJDU1MgcmV0dXJu
cyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXQKKyAgICAgICAgICAgICAgICByZXR1cm4g
cm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgPworICAgICAgICAgICAgICAgICAgICBqUXVlcnko
IGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyAicHgiIDoKKyAgICAgICAgICAgICAgICAgICAg
Y29tcHV0ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICApOworfSApOworCisKKy8v
IENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWln
aHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcworalF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiAiaGVpZ2h0
IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7CisgICAgalF1ZXJ5
LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIiOiAib3V0
ZXIiICsgbmFtZSB9LAorICAgICAgICBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSAp
IHsKKworICAgICAgICAvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lk
dGgKKyAgICAgICAgalF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFs
dWUgKSB7CisgICAgICAgICAgICB2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAo
IGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSAiYm9vbGVhbiIgKSwKKyAgICAgICAg
ICAgICAgICBleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1
ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIgKTsKKworICAgICAgICAgICAgcmV0dXJu
IGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkgeworICAgICAgICAg
ICAgICAgIHZhciBkb2M7CisKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdygg
ZWxlbSApICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMg
d2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJl
CisgICAgICAgICAgICAgICAgICAgIC8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBkby4gU2Vl
IHB1bGwgcmVxdWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjoKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjQKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xp
ZW50IiArIG5hbWUgXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBH
ZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgICAgICBkb2MgPSBlbGVtLmRvY3VtZW50
RWxlbWVudDsKKworICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hl
aWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sCisg
ICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdAorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTWF0aC5tYXgoCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJv
ZHlbICJzY3JvbGwiICsgbmFtZSBdLCBkb2NbICJzY3JvbGwiICsgbmFtZSBdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbS5ib2R5WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0
IiArIG5hbWUgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY1sgImNsaWVudCIgKyBuYW1l
IF0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQg
bm90IGZvcmNpbmcgcGFyc2VGbG9hdAorICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBl
bGVtLCB0eXBlLCBleHRyYSApIDoKKworICAgICAgICAgICAgICAgICAgICAvLyBTZXQgd2lkdGgg
b3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHls
ZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7CisgICAgICAgICAgICB9LCB0eXBlLCBjaGFp
bmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSwgbnVsbCApOworICAgICAgICB9
OworICAgIH0gKTsKK30gKTsKKworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisKKyAgICBiaW5kOiBm
dW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlw
ZXMsIG51bGwsIGRhdGEsIGZuICk7CisgICAgfSwKKyAgICB1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBl
cywgZm4gKSB7CisgICAgICAgIHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7Cisg
ICAgfSwKKworICAgIGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBm
biApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4g
KTsKKyAgICB9LAorICAgIHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZu
ICkgeworCisgICAgICAgIC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywg
Zm5dICkKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPworICAgICAgICAg
ICAgdGhpcy5vZmYoIHNlbGVjdG9yLCAiKioiICkgOgorICAgICAgICAgICAgdGhpcy5vZmYoIHR5
cGVzLCBzZWxlY3RvciB8fCAiKioiLCBmbiApOworICAgIH0sCisgICAgc2l6ZTogZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aDsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5m
bi5hbmRTZWxmID0galF1ZXJ5LmZuLmFkZEJhY2s7CisKKworCisKKy8vIFJlZ2lzdGVyIGFzIGEg
bmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBv
dGhlcgorLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIg
Y29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdAorLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBt
b2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0CisvLyB3YXkgdG8g
cmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFt
ZXMgYXJlCisvLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxs
eSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UKKy8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBj
cmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cworLy8gdG8g
Y2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3
b3JrLgorCisvLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0
aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZAorLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255
bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhbgorLy8gQU1EIGxv
YWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9y
bWF0aW9uLCBzZWUKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtp
L1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub24KKworaWYgKCB0eXBlb2YgZGVm
aW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgKSB7CisgICAgZGVmaW5lKCAianF1ZXJ5
IiwgW10sIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4galF1ZXJ5OworICAgIH0gKTsKK30K
KworCisKK3ZhcgorCisgICAgLy8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRl
CisgICAgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCisKKyAgICAvLyBNYXAgb3ZlciB0aGUgJCBp
biBjYXNlIG9mIG92ZXJ3cml0ZQorICAgIF8kID0gd2luZG93LiQ7CisKK2pRdWVyeS5ub0NvbmZs
aWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7CisgICAgaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkg
eworICAgICAgICB3aW5kb3cuJCA9IF8kOworICAgIH0KKworICAgIGlmICggZGVlcCAmJiB3aW5k
b3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7CisgICAgICAgIHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5
OworICAgIH0KKworICAgIHJldHVybiBqUXVlcnk7Cit9OworCisvLyBFeHBvc2UgalF1ZXJ5IGFu
ZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRAorLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBz
Oi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KQorLy8gYW5kIENvbW1vbkpTIGZv
ciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KQoraWYgKCAhbm9HbG9iYWwgKSB7CisgICAgd2lu
ZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5OworfQorCityZXR1cm4galF1ZXJ5OworfSkp
OwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVy
eS9kaXN0L2pxdWVyeS5taW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5Lm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDI0YjY2MjJiODg5YmI2
NTQ3NjM0MWE0OGE0ZTViNjQ4NWIxNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5taW4uanMKQEAgLTAs
MCArMSw0IEBACisvKiEgalF1ZXJ5IHYyLjIuNCB8IChjKSBqUXVlcnkgRm91bmRhdGlvbiB8IGpx
dWVyeS5vcmcvbGljZW5zZSAqLworIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1
bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1
bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigi
alF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpi
KGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIp
e3ZhciBjPVtdLGQ9YS5kb2N1bWVudCxlPWMuc2xpY2UsZj1jLmNvbmNhdCxnPWMucHVzaCxoPWMu
aW5kZXhPZixpPXt9LGo9aS50b1N0cmluZyxrPWkuaGFzT3duUHJvcGVydHksbD17fSxtPSIyLjIu
NCIsbj1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbi5mbi5pbml0KGEsYil9LG89L15bXHNcdUZF
RkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLHA9L14tbXMtLyxxPS8tKFtcZGEtel0pL2dpLHI9
ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTtuLmZuPW4ucHJvdG90eXBlPXtq
cXVlcnk6bSxjb25zdHJ1Y3RvcjpuLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rp
b24oKXtyZXR1cm4gZS5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/
MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTplLmNhbGwodGhpcyl9LHB1c2hTdGFjazpm
dW5jdGlvbihhKXt2YXIgYj1uLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5w
cmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEp
e3JldHVybiBuLmVhY2godGhpcyxhKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hT
dGFjayhuLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LHNs
aWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUuYXBwbHkodGhpcyxhcmd1bWVu
dHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZW5ndGgsYz0r
YSsoMD5hP2I6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGM+PTAmJmI+Yz9bdGhpc1tjXV06W10p
fSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9y
KCl9LHB1c2g6Zyxzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4uZXh0ZW5kPW4uZm4uZXh0
ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1h
cmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1
bWVudHNbaF18fHt9LGgrKyksIm9iamVjdCI9PXR5cGVvZiBnfHxuLmlzRnVuY3Rpb24oZyl8fChn
PXt9KSxoPT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGE9YXJndW1lbnRzW2hd
KSlmb3IoYiBpbiBhKWM9Z1tiXSxkPWFbYl0sZyE9PWQmJihqJiZkJiYobi5pc1BsYWluT2JqZWN0
KGQpfHwoZT1uLmlzQXJyYXkoZCkpKT8oZT8oZT0hMSxmPWMmJm4uaXNBcnJheShjKT9jOltdKTpm
PWMmJm4uaXNQbGFpbk9iamVjdChjKT9jOnt9LGdbYl09bi5leHRlbmQoaixmLGQpKTp2b2lkIDAh
PT1kJiYoZ1tiXT1kKSk7cmV0dXJuIGd9LG4uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhtK01h
dGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24o
YSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0
aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1uLnR5cGUoYSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJh
eSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051
bWVyaWM6ZnVuY3Rpb24oYSl7dmFyIGI9YSYmYS50b1N0cmluZygpO3JldHVybiFuLmlzQXJyYXko
YSkmJmItcGFyc2VGbG9hdChiKSsxPj0wfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBi
O2lmKCJvYmplY3QiIT09bi50eXBlKGEpfHxhLm5vZGVUeXBlfHxuLmlzV2luZG93KGEpKXJldHVy
biExO2lmKGEuY29uc3RydWN0b3ImJiFrLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWsuY2FsbChh
LmNvbnN0cnVjdG9yLnByb3RvdHlwZXx8e30sImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMTtmb3Io
YiBpbiBhKTtyZXR1cm4gdm9pZCAwPT09Ynx8ay5jYWxsKGEsYil9LGlzRW1wdHlPYmplY3Q6ZnVu
Y3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sdHlwZTpmdW5jdGlv
bihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09
dHlwZW9mIGE/aVtqLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5j
dGlvbihhKXt2YXIgYixjPWV2YWw7YT1uLnRyaW0oYSksYSYmKDE9PT1hLmluZGV4T2YoInVzZSBz
dHJpY3QiKT8oYj1kLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGIudGV4dD1hLGQuaGVhZC5hcHBl
bmRDaGlsZChiKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpKTpjKGEpKX0sY2FtZWxDYXNlOmZ1
bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UocCwibXMtIikucmVwbGFjZShxLHIpfSxub2RlTmFt
ZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTA7aWYocyhh
KSl7Zm9yKGM9YS5sZW5ndGg7Yz5kO2QrKylpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJl
YWt9ZWxzZSBmb3IoZCBpbiBhKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlicmVhaztyZXR1
cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShv
LCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEm
JihzKE9iamVjdChhKSk/bi5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zy5jYWxs
KGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsPT1iPy0xOmguY2Fs
bChiLGEsYyl9LG1lcmdlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPStiLmxlbmd0aCxkPTAsZT1h
Lmxlbmd0aDtjPmQ7ZCsrKWFbZSsrXT1iW2RdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVu
Y3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylk
PSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEs
YixjKXt2YXIgZCxlLGc9MCxoPVtdO2lmKHMoYSkpZm9yKGQ9YS5sZW5ndGg7ZD5nO2crKyllPWIo
YVtnXSxnLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihnIGluIGEpZT1iKGFbZ10sZyxj
KSxudWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGYuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpm
dW5jdGlvbihhLGIpe3ZhciBjLGQsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihjPWFbYl0s
Yj1hLGE9Yyksbi5pc0Z1bmN0aW9uKGEpPyhkPWUuY2FsbChhcmd1bWVudHMsMiksZj1mdW5jdGlv
bigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsZC5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpKX0s
Zi5ndWlkPWEuZ3VpZD1hLmd1aWR8fG4uZ3VpZCsrLGYpOnZvaWQgMH0sbm93OkRhdGUubm93LHN1
cHBvcnQ6bH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihuLmZuW1N5bWJvbC5pdGVyYXRv
cl09Y1tTeW1ib2wuaXRlcmF0b3JdKSxuLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5j
dGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1
bmN0aW9uKGEsYil7aVsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlv
biBzKGEpe3ZhciBiPSEhYSYmImxlbmd0aCJpbiBhJiZhLmxlbmd0aCxjPW4udHlwZShhKTtyZXR1
cm4iZnVuY3Rpb24iPT09Y3x8bi5pc1dpbmRvdyhhKT8hMToiYXJyYXkiPT09Y3x8MD09PWJ8fCJu
dW1iZXIiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYX12YXIgdD1mdW5jdGlvbihhKXt2YXIgYixj
LGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1PSJzaXp6bGUiKzEqbmV3IERhdGUs
dj1hLmRvY3VtZW50LHc9MCx4PTAseT1nYSgpLHo9Z2EoKSxBPWdhKCksQj1mdW5jdGlvbihhLGIp
e3JldHVybiBhPT09YiYmKGw9ITApLDB9LEM9MTw8MzEsRD17fS5oYXNPd25Qcm9wZXJ0eSxFPVtd
LEY9RS5wb3AsRz1FLnB1c2gsSD1FLnB1c2gsST1FLnNsaWNlLEo9ZnVuY3Rpb24oYSxiKXtmb3Io
dmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspaWYoYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9
LEs9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRl
ZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVx
dWlyZWR8c2NvcGVkIixMPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixNPSIoPzpcXFxcLnxbXFx3LV18
W15cXHgwMC1cXHhhMF0pKyIsTj0iXFxbIitMKyIqKCIrTSsiKSg/OiIrTCsiKihbKl4kfCF+XT89
KSIrTCsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkq
KVwifCgiK00rIikpfCkiK0wrIipcXF0iLE89IjooIitNKyIpKD86XFwoKCgnKCg/OlxcXFwufFte
XFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgp
W1xcXV18IitOKyIpKil8LiopXFwpfCkiLFA9bmV3IFJlZ0V4cChMKyIrIiwiZyIpLFE9bmV3IFJl
Z0V4cCgiXiIrTCsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitMKyIrJCIsImciKSxSPW5l
dyBSZWdFeHAoIl4iK0wrIiosIitMKyIqIiksUz1uZXcgUmVnRXhwKCJeIitMKyIqKFs+K35dfCIr
TCsiKSIrTCsiKiIpLFQ9bmV3IFJlZ0V4cCgiPSIrTCsiKihbXlxcXSdcIl0qPykiK0wrIipcXF0i
LCJnIiksVT1uZXcgUmVnRXhwKE8pLFY9bmV3IFJlZ0V4cCgiXiIrTSsiJCIpLFc9e0lEOm5ldyBS
ZWdFeHAoIl4jKCIrTSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitNKyIpIiksVEFHOm5l
dyBSZWdFeHAoIl4oIitNKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrTiksUFNFVURPOm5l
dyBSZWdFeHAoIl4iK08pLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8
bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTCsiKihldmVufG9kZHwoKFsrLV18KShc
XGQqKW58KSIrTCsiKig/OihbKy1dfCkiK0wrIiooXFxkKyl8KSkiK0wrIipcXCl8KSIsImkiKSxi
b29sOm5ldyBSZWdFeHAoIl4oPzoiK0srIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhw
KCJeIitMKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgi
K0wrIiooKD86LVxcZCk/XFxkKikiK0wrIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFg9L14oPzpp
bnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxZPS9eaFxkJC9pLFo9L15bXntdK1x7XHMq
XFtuYXRpdmUgXHcvLCQ9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxfPS9bK35d
LyxhYT0vJ3xcXC9nLGJhPW5ldyBSZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrTCsiP3woIitM
KyIpfC4pIiwiaWciKSxjYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9IjB4IitiLTY1NTM2O3JldHVy
biBkIT09ZHx8Yz9iOjA+ZD9TdHJpbmcuZnJvbUNoYXJDb2RlKGQrNjU1MzYpOlN0cmluZy5mcm9t
Q2hhckNvZGUoZD4+MTB8NTUyOTYsMTAyMyZkfDU2MzIwKX0sZGE9ZnVuY3Rpb24oKXttKCl9O3Ry
eXtILmFwcGx5KEU9SS5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxFW3YuY2hpbGRO
b2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGVhKXtIPXthcHBseTpFLmxlbmd0aD9mdW5jdGlv
bihhLGIpe0cuYXBwbHkoYSxJLmNhbGwoYikpfTpmdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3Ro
LGQ9MDt3aGlsZShhW2MrK109YltkKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBmYShhLGIs
ZCxlKXt2YXIgZixoLGosayxsLG8scixzLHc9YiYmYi5vd25lckRvY3VtZW50LHg9Yj9iLm5vZGVU
eXBlOjk7aWYoZD1kfHxbXSwic3RyaW5nIiE9dHlwZW9mIGF8fCFhfHwxIT09eCYmOSE9PXgmJjEx
IT09eClyZXR1cm4gZDtpZighZSYmKChiP2Iub3duZXJEb2N1bWVudHx8Yjp2KSE9PW4mJm0oYiks
Yj1ifHxuLHApKXtpZigxMSE9PXgmJihvPSQuZXhlYyhhKSkpaWYoZj1vWzFdKXtpZig5PT09eCl7
aWYoIShqPWIuZ2V0RWxlbWVudEJ5SWQoZikpKXJldHVybiBkO2lmKGouaWQ9PT1mKXJldHVybiBk
LnB1c2goaiksZH1lbHNlIGlmKHcmJihqPXcuZ2V0RWxlbWVudEJ5SWQoZikpJiZ0KGIsaikmJmou
aWQ9PT1mKXJldHVybiBkLnB1c2goaiksZH1lbHNle2lmKG9bMl0pcmV0dXJuIEguYXBwbHkoZCxi
LmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSxkO2lmKChmPW9bM10pJiZjLmdldEVsZW1lbnRzQnlD
bGFzc05hbWUmJmIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gSC5hcHBseShkLGIuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZShmKSksZH1pZihjLnFzYSYmIUFbYSsiICJdJiYoIXF8fCFxLnRl
c3QoYSkpKXtpZigxIT09eCl3PWIscz1hO2Vsc2UgaWYoIm9iamVjdCIhPT1iLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkpeyhrPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9rPWsucmVwbGFjZShhYSwiXFwk
JiIpOmIuc2V0QXR0cmlidXRlKCJpZCIsaz11KSxyPWcoYSksaD1yLmxlbmd0aCxsPVYudGVzdChr
KT8iIyIrazoiW2lkPSciK2srIiddIjt3aGlsZShoLS0pcltoXT1sKyIgIitxYShyW2hdKTtzPXIu
am9pbigiLCIpLHc9Xy50ZXN0KGEpJiZvYShiLnBhcmVudE5vZGUpfHxifWlmKHMpdHJ5e3JldHVy
biBILmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHMpKSxkfWNhdGNoKHkpe31maW5hbGx5e2s9
PT11JiZiLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBpKGEucmVwbGFjZShRLCIkMSIp
LGIsZCxlKX1mdW5jdGlvbiBnYSgpe3ZhciBhPVtdO2Z1bmN0aW9uIGIoYyxlKXtyZXR1cm4gYS5w
dXNoKGMrIiAiKT5kLmNhY2hlTGVuZ3RoJiZkZWxldGUgYlthLnNoaWZ0KCldLGJbYysiICJdPWV9
cmV0dXJuIGJ9ZnVuY3Rpb24gaGEoYSl7cmV0dXJuIGFbdV09ITAsYX1mdW5jdGlvbiBpYShhKXt2
YXIgYj1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4hIWEoYil9Y2F0Y2goYyl7cmV0
dXJuITF9ZmluYWxseXtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSxi
PW51bGx9fWZ1bmN0aW9uIGphKGEsYil7dmFyIGM9YS5zcGxpdCgifCIpLGU9Yy5sZW5ndGg7d2hp
bGUoZS0tKWQuYXR0ckhhbmRsZVtjW2VdXT1ifWZ1bmN0aW9uIGthKGEsYil7dmFyIGM9YiYmYSxk
PWMmJjE9PT1hLm5vZGVUeXBlJiYxPT09Yi5ub2RlVHlwZSYmKH5iLnNvdXJjZUluZGV4fHxDKS0o
fmEuc291cmNlSW5kZXh8fEMpO2lmKGQpcmV0dXJuIGQ7aWYoYyl3aGlsZShjPWMubmV4dFNpYmxp
bmcpaWYoYz09PWIpcmV0dXJuLTE7cmV0dXJuIGE/MTotMX1mdW5jdGlvbiBsYShhKXtyZXR1cm4g
ZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9
PT1jJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBtYShhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9
Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09Y3x8ImJ1dHRvbiI9PT1j
KSYmYi50eXBlPT09YX19ZnVuY3Rpb24gbmEoYSl7cmV0dXJuIGhhKGZ1bmN0aW9uKGIpe3JldHVy
biBiPStiLGhhKGZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hKFtdLGMubGVuZ3RoLGIpLGc9Zi5sZW5n
dGg7d2hpbGUoZy0tKWNbZT1mW2ddXSYmKGNbZV09IShkW2VdPWNbZV0pKX0pfSl9ZnVuY3Rpb24g
b2EoYSl7cmV0dXJuIGEmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSYmYX1jPWZhLnN1cHBvcnQ9e30sZj1mYS5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj1hJiYoYS5v
d25lckRvY3VtZW50fHxhKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGI/IkhUTUwiIT09Yi5ub2Rl
TmFtZTohMX0sbT1mYS5zZXREb2N1bWVudD1mdW5jdGlvbihhKXt2YXIgYixlLGc9YT9hLm93bmVy
RG9jdW1lbnR8fGE6djtyZXR1cm4gZyE9PW4mJjk9PT1nLm5vZGVUeXBlJiZnLmRvY3VtZW50RWxl
bWVudD8obj1nLG89bi5kb2N1bWVudEVsZW1lbnQscD0hZihuKSwoZT1uLmRlZmF1bHRWaWV3KSYm
ZS50b3AhPT1lJiYoZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2Fk
IixkYSwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hFdmVudCgib251bmxvYWQiLGRhKSksYy5h
dHRyaWJ1dGVzPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmNsYXNzTmFtZT0iaSIsIWEuZ2V0QXR0
cmlidXRlKCJjbGFzc05hbWUiKX0pLGMuZ2V0RWxlbWVudHNCeVRhZ05hbWU9aWEoZnVuY3Rpb24o
YSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQobi5jcmVhdGVDb21tZW50KCIiKSksIWEuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxjLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9Wi50ZXN0
KG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSksYy5nZXRCeUlkPWlhKGZ1bmN0aW9uKGEpe3JldHVy
biBvLmFwcGVuZENoaWxkKGEpLmlkPXUsIW4uZ2V0RWxlbWVudHNCeU5hbWV8fCFuLmdldEVsZW1l
bnRzQnlOYW1lKHUpLmxlbmd0aH0pLGMuZ2V0QnlJZD8oZC5maW5kLklEPWZ1bmN0aW9uKGEsYil7
aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRCeUlkJiZwKXt2YXIgYz1iLmdldEVs
ZW1lbnRCeUlkKGEpO3JldHVybiBjP1tjXTpbXX19LGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3Zh
ciBiPWEucmVwbGFjZShiYSxjYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJp
YnV0ZSgiaWQiKT09PWJ9fSk6KGRlbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24o
YSl7dmFyIGI9YS5yZXBsYWNlKGJhLGNhKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9InVuZGVm
aW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQi
KTtyZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRzQnlUYWdO
YW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRz
QnlUYWdOYW1lP2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk6Yy5xc2E/Yi5xdWVyeVNlbGVjdG9y
QWxsKGEpOnZvaWQgMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9kZVR5cGUm
JmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNTPWMuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSYmcD9iLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSk6dm9pZCAw
fSxyPVtdLHE9W10sKGMucXNhPVoudGVzdChuLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGlhKGZ1bmN0
aW9uKGEpe28uYXBwZW5kQ2hpbGQoYSkuaW5uZXJIVE1MPSI8YSBpZD0nIit1KyInPjwvYT48c2Vs
ZWN0IGlkPSciK3UrIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScn
Pjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVe
PScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK0wrIiooPzonJ3xcIlwiKSIpLGEucXVlcnlT
ZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK0wrIiooPzp2YWx1
ZXwiK0srIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49Iit1KyItXSIpLmxlbmd0aHx8cS5w
dXNoKCJ+PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHEucHVzaCgi
OmNoZWNrZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIit1KyIrKiIpLmxlbmd0aHx8cS5wdXNo
KCIuIy4rWyt+XSIpfSksaWEoZnVuY3Rpb24oYSl7dmFyIGI9bi5jcmVhdGVFbGVtZW50KCJpbnB1
dCIpO2Iuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksYS5hcHBlbmRDaGlsZChiKS5zZXRB
dHRyaWJ1dGUoIm5hbWUiLCJEIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0
aCYmcS5wdXNoKCJuYW1lIitMKyIqWypeJHwhfl0/PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmVu
YWJsZWQiKS5sZW5ndGh8fHEucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxhLnF1ZXJ5U2Vs
ZWN0b3JBbGwoIiosOngiKSxxLnB1c2goIiwuKjoiKX0pKSwoYy5tYXRjaGVzU2VsZWN0b3I9Wi50
ZXN0KHM9by5tYXRjaGVzfHxvLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8by5tb3pNYXRjaGVzU2Vs
ZWN0b3J8fG8ub01hdGNoZXNTZWxlY3Rvcnx8by5tc01hdGNoZXNTZWxlY3RvcikpJiZpYShmdW5j
dGlvbihhKXtjLmRpc2Nvbm5lY3RlZE1hdGNoPXMuY2FsbChhLCJkaXYiKSxzLmNhbGwoYSwiW3Mh
PScnXTp4Iiksci5wdXNoKCIhPSIsTyl9KSxxPXEubGVuZ3RoJiZuZXcgUmVnRXhwKHEuam9pbigi
fCIpKSxyPXIubGVuZ3RoJiZuZXcgUmVnRXhwKHIuam9pbigifCIpKSxiPVoudGVzdChvLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKSx0PWJ8fFoudGVzdChvLmNvbnRhaW5zKT9mdW5jdGlvbihhLGIp
e3ZhciBjPTk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEsZD1iJiZiLnBhcmVudE5v
ZGU7cmV0dXJuIGE9PT1kfHwhKCFkfHwxIT09ZC5ub2RlVHlwZXx8IShjLmNvbnRhaW5zP2MuY29u
dGFpbnMoZCk6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmYS5jb21wYXJlRG9jdW1lbnRQ
b3NpdGlvbihkKSkpfTpmdW5jdGlvbihhLGIpe2lmKGIpd2hpbGUoYj1iLnBhcmVudE5vZGUpaWYo
Yj09PWEpcmV0dXJuITA7cmV0dXJuITF9LEI9Yj9mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVy
biBsPSEwLDA7dmFyIGQ9IWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIWIuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb247cmV0dXJuIGQ/ZDooZD0oYS5vd25lckRvY3VtZW50fHxhKT09PShiLm93bmVy
RG9jdW1lbnR8fGIpP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYik6MSwxJmR8fCFjLnNvcnRE
ZXRhY2hlZCYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKT09PWQ/YT09PW58fGEub3duZXJE
b2N1bWVudD09PXYmJnQodixhKT8tMTpiPT09bnx8Yi5vd25lckRvY3VtZW50PT09diYmdCh2LGIp
PzE6az9KKGssYSktSihrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJl
dHVybiBsPSEwLDA7dmFyIGMsZD0wLGU9YS5wYXJlbnROb2RlLGY9Yi5wYXJlbnROb2RlLGc9W2Fd
LGg9W2JdO2lmKCFlfHwhZilyZXR1cm4gYT09PW4/LTE6Yj09PW4/MTplPy0xOmY/MTprP0ooayxh
KS1KKGssYik6MDtpZihlPT09ZilyZXR1cm4ga2EoYSxiKTtjPWE7d2hpbGUoYz1jLnBhcmVudE5v
ZGUpZy51bnNoaWZ0KGMpO2M9Yjt3aGlsZShjPWMucGFyZW50Tm9kZSloLnVuc2hpZnQoYyk7d2hp
bGUoZ1tkXT09PWhbZF0pZCsrO3JldHVybiBkP2thKGdbZF0saFtkXSk6Z1tkXT09PXY/LTE6aFtk
XT09PXY/MTowfSxuKTpufSxmYS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZhKGEsbnVs
bCxudWxsLGIpfSxmYS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZigoYS5vd25lckRv
Y3VtZW50fHxhKSE9PW4mJm0oYSksYj1iLnJlcGxhY2UoVCwiPSckMSddIiksYy5tYXRjaGVzU2Vs
ZWN0b3ImJnAmJiFBW2IrIiAiXSYmKCFyfHwhci50ZXN0KGIpKSYmKCFxfHwhcS50ZXN0KGIpKSl0
cnl7dmFyIGQ9cy5jYWxsKGEsYik7aWYoZHx8Yy5kaXNjb25uZWN0ZWRNYXRjaHx8YS5kb2N1bWVu
dCYmMTEhPT1hLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBkfWNhdGNoKGUpe31yZXR1cm4gZmEo
YixuLG51bGwsW2FdKS5sZW5ndGg+MH0sZmEuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4o
YS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSksdChhLGIpfSxmYS5hdHRyPWZ1bmN0aW9uKGEs
Yil7KGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpO3ZhciBlPWQuYXR0ckhhbmRsZVtiLnRv
TG93ZXJDYXNlKCldLGY9ZSYmRC5jYWxsKGQuYXR0ckhhbmRsZSxiLnRvTG93ZXJDYXNlKCkpP2Uo
YSxiLCFwKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PWY/ZjpjLmF0dHJpYnV0ZXN8fCFwP2EuZ2V0
QXR0cmlidXRlKGIpOihmPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmYuc3BlY2lmaWVkP2YudmFs
dWU6bnVsbH0sZmEuZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJy
b3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2EpfSxmYS51bmlxdWVTb3J0PWZ1bmN0aW9u
KGEpe3ZhciBiLGQ9W10sZT0wLGY9MDtpZihsPSFjLmRldGVjdER1cGxpY2F0ZXMsaz0hYy5zb3J0
U3RhYmxlJiZhLnNsaWNlKDApLGEuc29ydChCKSxsKXt3aGlsZShiPWFbZisrXSliPT09YVtmXSYm
KGU9ZC5wdXNoKGYpKTt3aGlsZShlLS0pYS5zcGxpY2UoZFtlXSwxKX1yZXR1cm4gaz1udWxsLGF9
LGU9ZmEuZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYixjPSIiLGQ9MCxmPWEubm9kZVR5cGU7aWYo
Zil7aWYoMT09PWZ8fDk9PT1mfHwxMT09PWYpe2lmKCJzdHJpbmciPT10eXBlb2YgYS50ZXh0Q29u
dGVudClyZXR1cm4gYS50ZXh0Q29udGVudDtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNp
YmxpbmcpYys9ZShhKX1lbHNlIGlmKDM9PT1mfHw0PT09ZilyZXR1cm4gYS5ub2RlVmFsdWV9ZWxz
ZSB3aGlsZShiPWFbZCsrXSljKz1lKGIpO3JldHVybiBjfSxkPWZhLnNlbGVjdG9ycz17Y2FjaGVM
ZW5ndGg6NTAsY3JlYXRlUHNldWRvOmhhLG1hdGNoOlcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJl
bGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnRO
b2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2
aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFb
MV0ucmVwbGFjZShiYSxjYSksYVszXT0oYVszXXx8YVs0XXx8YVs1XXx8IiIpLnJlcGxhY2UoYmEs
Y2EpLCJ+PSI9PT1hWzJdJiYoYVszXT0iICIrYVszXSsiICIpLGEuc2xpY2UoMCw0KX0sQ0hJTEQ6
ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09YVsxXS5z
bGljZSgwLDMpPyhhWzNdfHxmYS5lcnJvcihhWzBdKSxhWzRdPSsoYVs0XT9hWzVdKyhhWzZdfHwx
KToyKigiZXZlbiI9PT1hWzNdfHwib2RkIj09PWFbM10pKSxhWzVdPSsoYVs3XSthWzhdfHwib2Rk
Ij09PWFbM10pKTphWzNdJiZmYS5lcnJvcihhWzBdKSxhfSxQU0VVRE86ZnVuY3Rpb24oYSl7dmFy
IGIsYz0hYVs2XSYmYVsyXTtyZXR1cm4gVy5DSElMRC50ZXN0KGFbMF0pP251bGw6KGFbM10/YVsy
XT1hWzRdfHxhWzVdfHwiIjpjJiZVLnRlc3QoYykmJihiPWcoYywhMCkpJiYoYj1jLmluZGV4T2Yo
IikiLGMubGVuZ3RoLWIpLWMubGVuZ3RoKSYmKGFbMF09YVswXS5zbGljZSgwLGIpLGFbMl09Yy5z
bGljZSgwLGIpKSxhLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oYSl7dmFyIGI9
YS5yZXBsYWNlKGJhLGNhKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWE/ZnVuY3Rpb24oKXty
ZXR1cm4hMH06ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKT09PWJ9fSxDTEFTUzpmdW5jdGlvbihhKXt2YXIgYj15W2ErIiAiXTtyZXR1cm4gYnx8
KGI9bmV3IFJlZ0V4cCgiKF58IitMKyIpIithKyIoIitMKyJ8JCkiKSkmJnkoYSxmdW5jdGlvbihh
KXtyZXR1cm4gYi50ZXN0KCJzdHJpbmciPT10eXBlb2YgYS5jbGFzc05hbWUmJmEuY2xhc3NOYW1l
fHwidW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0QXR0cmlidXRlJiZhLmdldEF0dHJpYnV0ZSgiY2xh
c3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihkKXt2YXIg
ZT1mYS5hdHRyKGQsYSk7cmV0dXJuIG51bGw9PWU/IiE9Ij09PWI6Yj8oZSs9IiIsIj0iPT09Yj9l
PT09YzoiIT0iPT09Yj9lIT09YzoiXj0iPT09Yj9jJiYwPT09ZS5pbmRleE9mKGMpOiIqPSI9PT1i
P2MmJmUuaW5kZXhPZihjKT4tMToiJD0iPT09Yj9jJiZlLnNsaWNlKC1jLmxlbmd0aCk9PT1jOiJ+
PSI9PT1iPygiICIrZS5yZXBsYWNlKFAsIiAiKSsiICIpLmluZGV4T2YoYyk+LTE6Inw9Ij09PWI/
ZT09PWN8fGUuc2xpY2UoMCxjLmxlbmd0aCsxKT09PWMrIi0iOiExKTohMH19LENISUxEOmZ1bmN0
aW9uKGEsYixjLGQsZSl7dmFyIGY9Im50aCIhPT1hLnNsaWNlKDAsMyksZz0ibGFzdCIhPT1hLnNs
aWNlKC00KSxoPSJvZi10eXBlIj09PWI7cmV0dXJuIDE9PT1kJiYwPT09ZT9mdW5jdGlvbihhKXty
ZXR1cm4hIWEucGFyZW50Tm9kZX06ZnVuY3Rpb24oYixjLGkpe3ZhciBqLGssbCxtLG4sbyxwPWYh
PT1nPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIscT1iLnBhcmVudE5vZGUscj1oJiZi
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkscz0haSYmIWgsdD0hMTtpZihxKXtpZihmKXt3aGlsZShw
KXttPWI7d2hpbGUobT1tW3BdKWlmKGg/bS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09
bS5ub2RlVHlwZSlyZXR1cm4hMTtvPXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0
dXJuITB9aWYobz1bZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe209cSxsPW1bdV18
fChtW3VdPXt9KSxrPWxbbS51bmlxdWVJRF18fChsW20udW5pcXVlSURdPXt9KSxqPWtbYV18fFtd
LG49alswXT09PXcmJmpbMV0sdD1uJiZqWzJdLG09biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKG09
KytuJiZtJiZtW3BdfHwodD1uPTApfHxvLnBvcCgpKWlmKDE9PT1tLm5vZGVUeXBlJiYrK3QmJm09
PT1iKXtrW2FdPVt3LG4sdF07YnJlYWt9fWVsc2UgaWYocyYmKG09YixsPW1bdV18fChtW3VdPXt9
KSxrPWxbbS51bmlxdWVJRF18fChsW20udW5pcXVlSURdPXt9KSxqPWtbYV18fFtdLG49alswXT09
PXcmJmpbMV0sdD1uKSx0PT09ITEpd2hpbGUobT0rK24mJm0mJm1bcF18fCh0PW49MCl8fG8ucG9w
KCkpaWYoKGg/bS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bS5ub2RlVHlwZSkmJisr
dCYmKHMmJihsPW1bdV18fChtW3VdPXt9KSxrPWxbbS51bmlxdWVJRF18fChsW20udW5pcXVlSURd
PXt9KSxrW2FdPVt3LHRdKSxtPT09YikpYnJlYWs7cmV0dXJuIHQtPWUsdD09PWR8fHQlZD09PTAm
JnQvZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNldWRvc1thXXx8ZC5z
ZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGZhLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86
ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0
ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/aGEoZnVuY3Rpb24oYSxjKXt2YXIg
ZCxmPWUoYSxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUooYSxmW2ddKSxhW2RdPSEoY1tkXT1m
W2ddKX0pOmZ1bmN0aW9uKGEpe3JldHVybiBlKGEsMCxjKX0pOmV9fSxwc2V1ZG9zOntub3Q6aGEo
ZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPWgoYS5yZXBsYWNlKFEsIiQxIikpO3JldHVybiBk
W3VdP2hhKGZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmLGc9ZChhLG51bGwsZSxbXSksaD1hLmxlbmd0
aDt3aGlsZShoLS0pKGY9Z1toXSkmJihhW2hdPSEoYltoXT1mKSl9KTpmdW5jdGlvbihhLGUsZil7
cmV0dXJuIGJbMF09YSxkKGIsbnVsbCxmLGMpLGJbMF09bnVsbCwhYy5wb3AoKX19KSxoYXM6aGEo
ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBmYShhLGIpLmxlbmd0aD4wfX0p
LGNvbnRhaW5zOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZShiYSxjYSksZnVuY3Rp
b24oYil7cmV0dXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEp
Pi0xfX0pLGxhbmc6aGEoZnVuY3Rpb24oYSl7cmV0dXJuIFYudGVzdChhfHwiIil8fGZhLmVycm9y
KCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGJhLGNhKS50b0xvd2VyQ2FzZSgp
LGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9iLmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDps
YW5nIil8fGIuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9
PT1hfHwwPT09Yy5pbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5u
b2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9jYXRpb24m
JmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIuaWR9LHJvb3Q6ZnVuY3Rp
b24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW4uYWN0aXZl
RWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxuLmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8
fmEudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9
LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVu
Y3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1i
JiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0
aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEu
c2VsZWN0ZWQ9PT0hMH0sZW1wdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1h
Lm5leHRTaWJsaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1
bmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5jdGlvbihhKXty
ZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4gWC50ZXN0
KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1i
fSx0ZXh0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRlKCJ0eXBl
IikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYShmdW5jdGlvbigpe3JldHVy
blswXX0pLGxhc3Q6bmEoZnVuY3Rpb24oYSxiKXtyZXR1cm5bYi0xXX0pLGVxOm5hKGZ1bmN0aW9u
KGEsYixjKXtyZXR1cm5bMD5jP2MrYjpjXX0pLGV2ZW46bmEoZnVuY3Rpb24oYSxiKXtmb3IodmFy
IGM9MDtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmEoZnVuY3Rpb24oYSxiKXtm
b3IodmFyIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYShmdW5jdGlvbihh
LGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0
Om5hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOysrZDxiOylhLnB1c2goZCk7
cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9ZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEw
LGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1s
YShiKTtmb3IoYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYShiKTtmdW5j
dGlvbiBwYSgpe31wYS5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNldEZpbHRlcnM9
bmV3IHBhLGc9ZmEudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXpb
YSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNlKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7
d2hpbGUoaCl7YyYmIShlPVIuZXhlYyhoKSl8fChlJiYoaD1oLnNsaWNlKGVbMF0ubGVuZ3RoKXx8
aCksaS5wdXNoKGY9W10pKSxjPSExLChlPVMuZXhlYyhoKSkmJihjPWUuc2hpZnQoKSxmLnB1c2go
e3ZhbHVlOmMsdHlwZTplWzBdLnJlcGxhY2UoUSwiICIpfSksaD1oLnNsaWNlKGMubGVuZ3RoKSk7
Zm9yKGcgaW4gZC5maWx0ZXIpIShlPVdbZ10uZXhlYyhoKSl8fGpbZ10mJiEoZT1qW2ddKGUpKXx8
KGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmcsbWF0Y2hlczplfSksaD1oLnNsaWNl
KGMubGVuZ3RoKSk7aWYoIWMpYnJlYWt9cmV0dXJuIGI/aC5sZW5ndGg6aD9mYS5lcnJvcihhKTp6
KGEsaSkuc2xpY2UoMCl9O2Z1bmN0aW9uIHFhKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGgsZD0i
IjtjPmI7YisrKWQrPWFbYl0udmFsdWU7cmV0dXJuIGR9ZnVuY3Rpb24gcmEoYSxiLGMpe3ZhciBk
PWIuZGlyLGU9YyYmInBhcmVudE5vZGUiPT09ZCxmPXgrKztyZXR1cm4gYi5maXJzdD9mdW5jdGlv
bihiLGMsZil7d2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXJldHVybiBhKGIsYyxm
KX06ZnVuY3Rpb24oYixjLGcpe3ZhciBoLGksaixrPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlp
ZigoMT09PWIubm9kZVR5cGV8fGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9Yltk
XSlpZigxPT09Yi5ub2RlVHlwZXx8ZSl7aWYoaj1iW3VdfHwoYlt1XT17fSksaT1qW2IudW5pcXVl
SURdfHwoaltiLnVuaXF1ZUlEXT17fSksKGg9aVtkXSkmJmhbMF09PT13JiZoWzFdPT09ZilyZXR1
cm4ga1syXT1oWzJdO2lmKGlbZF09ayxrWzJdPWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24g
c2EoYSl7cmV0dXJuIGEubGVuZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3do
aWxlKGUtLSlpZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24g
dGEoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylmYShhLGJbZF0sYyk7cmV0
dXJuIGN9ZnVuY3Rpb24gdWEoYSxiLGMsZCxlKXtmb3IodmFyIGYsZz1bXSxoPTAsaT1hLmxlbmd0
aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYmKGMmJiFjKGYsZCxlKXx8KGcucHVzaChmKSxq
JiZiLnB1c2goaCkpKTtyZXR1cm4gZ31mdW5jdGlvbiB2YShhLGIsYyxkLGUsZil7cmV0dXJuIGQm
JiFkW3VdJiYoZD12YShkKSksZSYmIWVbdV0mJihlPXZhKGUsZikpLGhhKGZ1bmN0aW9uKGYsZyxo
LGkpe3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHRhKGJ8fCIqIixoLm5vZGVU
eXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnVhKHAsbSxhLGgsaSkscj1jP2V8fChmP2E6b3x8
ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj11YShyLG4pLGQoaixbXSxoLGkpLGs9ai5s
ZW5ndGg7d2hpbGUoay0tKShsPWpba10pJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lm
KGV8fGEpe2lmKGUpe2o9W10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChx
W2tdPWwpO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJihq
PWU/SihmLGwpOm1ba10pPi0xJiYoZltqXT0hKGdbal09bCkpfX1lbHNlIHI9dWEocj09PWc/ci5z
cGxpY2UobyxyLmxlbmd0aCk6ciksZT9lKG51bGwsZyxyLGkpOkguYXBwbHkoZyxyKX0pfWZ1bmN0
aW9uIHdhKGEpe2Zvcih2YXIgYixjLGUsZj1hLmxlbmd0aCxnPWQucmVsYXRpdmVbYVswXS50eXBl
XSxoPWd8fGQucmVsYXRpdmVbIiAiXSxpPWc/MTowLGs9cmEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9
PT1ifSxoLCEwKSxsPXJhKGZ1bmN0aW9uKGEpe3JldHVybiBKKGIsYSk+LTF9LGgsITApLG09W2Z1
bmN0aW9uKGEsYyxkKXt2YXIgZT0hZyYmKGR8fGMhPT1qKXx8KChiPWMpLm5vZGVUeXBlP2soYSxj
LGQpOmwoYSxjLGQpKTtyZXR1cm4gYj1udWxsLGV9XTtmPmk7aSsrKWlmKGM9ZC5yZWxhdGl2ZVth
W2ldLnR5cGVdKW09W3JhKHNhKG0pLGMpXTtlbHNle2lmKGM9ZC5maWx0ZXJbYVtpXS50eXBlXS5h
cHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1XSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxh
dGl2ZVthW2VdLnR5cGVdKWJyZWFrO3JldHVybiB2YShpPjEmJnNhKG0pLGk+MSYmcWEoYS5zbGlj
ZSgwLGktMSkuY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFj
ZShRLCIkMSIpLGMsZT5pJiZ3YShhLnNsaWNlKGksZSkpLGY+ZSYmd2EoYT1hLnNsaWNlKGUpKSxm
PmUmJnFhKGEpKX1tLnB1c2goYyl9cmV0dXJuIHNhKG0pfWZ1bmN0aW9uIHhhKGEsYil7dmFyIGM9
Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5jdGlvbihmLGcsaCxpLGspe3ZhciBsLG8scSxy
PTAscz0iMCIsdD1mJiZbXSx1PVtdLHY9aix4PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHk9dys9
bnVsbD09dj8xOk1hdGgucmFuZG9tKCl8fC4xLHo9eC5sZW5ndGg7Zm9yKGsmJihqPWc9PT1ufHxn
fHxrKTtzIT09eiYmbnVsbCE9KGw9eFtzXSk7cysrKXtpZihlJiZsKXtvPTAsZ3x8bC5vd25lckRv
Y3VtZW50PT09bnx8KG0obCksaD0hcCk7d2hpbGUocT1hW28rK10paWYocShsLGd8fG4saCkpe2ku
cHVzaChsKTticmVha31rJiYodz15KX1jJiYoKGw9IXEmJmwpJiZyLS0sZiYmdC5wdXNoKGwpKX1p
ZihyKz1zLGMmJnMhPT1yKXtvPTA7d2hpbGUocT1iW28rK10pcSh0LHUsZyxoKTtpZihmKXtpZihy
PjApd2hpbGUocy0tKXRbc118fHVbc118fCh1W3NdPUYuY2FsbChpKSk7dT11YSh1KX1ILmFwcGx5
KGksdSksayYmIWYmJnUubGVuZ3RoPjAmJnIrYi5sZW5ndGg+MSYmZmEudW5pcXVlU29ydChpKX1y
ZXR1cm4gayYmKHc9eSxqPXYpLHR9O3JldHVybiBjP2hhKGYpOmZ9cmV0dXJuIGg9ZmEuY29tcGls
ZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1bXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1n
KGEpKSxjPWIubGVuZ3RoO3doaWxlKGMtLSlmPXdhKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVz
aChmKTtmPUEoYSx4YShlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9ZmEuc2VsZWN0PWZ1
bmN0aW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2YgYSYmYSxv
PSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5sZW5ndGgpe2lmKGo9b1sw
XT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9PT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5
SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZkLnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmlu
ZC5JRChrLm1hdGNoZXNbMF0ucmVwbGFjZShiYSxjYSksYil8fFtdKVswXSwhYilyZXR1cm4gZTtu
JiYoYj1iLnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPVcu
bmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lmKGs9altpXSxkLnJl
bGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRbbF0pJiYoZj1tKGsubWF0Y2hlc1sw
XS5yZXBsYWNlKGJhLGNhKSxfLnRlc3QoalswXS50eXBlKSYmb2EoYi5wYXJlbnROb2RlKXx8Yikp
KXtpZihqLnNwbGljZShpLDEpLGE9Zi5sZW5ndGgmJnFhKGopLCFhKXJldHVybiBILmFwcGx5KGUs
ZiksZTticmVha319fXJldHVybihufHxoKGEsbykpKGYsYiwhcCxlLCFifHxfLnRlc3QoYSkmJm9h
KGIucGFyZW50Tm9kZSl8fGIpLGV9LGMuc29ydFN0YWJsZT11LnNwbGl0KCIiKS5zb3J0KEIpLmpv
aW4oIiIpPT09dSxjLmRldGVjdER1cGxpY2F0ZXM9ISFsLG0oKSxjLnNvcnREZXRhY2hlZD1pYShm
dW5jdGlvbihhKXtyZXR1cm4gMSZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4uY3JlYXRlRWxl
bWVudCgiZGl2IikpfSksaWEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8YSBocmVm
PScjJz48L2E+IiwiIyI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8amEo
InR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz92b2lkIDA6
YS5nZXRBdHRyaWJ1dGUoYiwidHlwZSI9PT1iLnRvTG93ZXJDYXNlKCk/MToyKX0pLGMuYXR0cmli
dXRlcyYmaWEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8aW5wdXQvPiIsYS5maXJz
dENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRy
aWJ1dGUoInZhbHVlIil9KXx8amEoInZhbHVlIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGN8fCJp
bnB1dCIhPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dm9pZCAwOmEuZGVmYXVsdFZhbHVlfSks
aWEoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWEuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8
fGphKEssZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDphW2JdPT09ITA/Yi50
b0xvd2VyQ2FzZSgpOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmQuc3BlY2lmaWVkP2QudmFs
dWU6bnVsbH0pLGZhfShhKTtuLmZpbmQ9dCxuLmV4cHI9dC5zZWxlY3RvcnMsbi5leHByWyI6Il09
bi5leHByLnBzZXVkb3Msbi51bmlxdWVTb3J0PW4udW5pcXVlPXQudW5pcXVlU29ydCxuLnRleHQ9
dC5nZXRUZXh0LG4uaXNYTUxEb2M9dC5pc1hNTCxuLmNvbnRhaW5zPXQuY29udGFpbnM7dmFyIHU9
ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9dm9pZCAwIT09Yzt3aGlsZSgoYT1hW2JdKSYmOSE9
PWEubm9kZVR5cGUpaWYoMT09PWEubm9kZVR5cGUpe2lmKGUmJm4oYSkuaXMoYykpYnJlYWs7ZC5w
dXNoKGEpfXJldHVybiBkfSx2PWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdO2E7YT1hLm5leHRT
aWJsaW5nKTE9PT1hLm5vZGVUeXBlJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfSx3PW4uZXhw
ci5tYXRjaC5uZWVkc0NvbnRleHQseD0vXjwoW1x3LV0rKVxzKlwvPz4oPzo8XC9cMT58KSQvLHk9
L14uW146I1xbXC4sXSokLztmdW5jdGlvbiB6KGEsYixjKXtpZihuLmlzRnVuY3Rpb24oYikpcmV0
dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuISFiLmNhbGwoYSxkLGEpIT09Y30pO2lm
KGIubm9kZVR5cGUpcmV0dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09YiE9PWN9
KTtpZigic3RyaW5nIj09dHlwZW9mIGIpe2lmKHkudGVzdChiKSlyZXR1cm4gbi5maWx0ZXIoYixh
LGMpO2I9bi5maWx0ZXIoYixhKX1yZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGgu
Y2FsbChiLGEpPi0xIT09Y30pfW4uZmlsdGVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iWzBdO3Jl
dHVybiBjJiYoYT0iOm5vdCgiK2ErIikiKSwxPT09Yi5sZW5ndGgmJjE9PT1kLm5vZGVUeXBlP24u
ZmluZC5tYXRjaGVzU2VsZWN0b3IoZCxhKT9bZF06W106bi5maW5kLm1hdGNoZXMoYSxuLmdyZXAo
YixmdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5cGV9KSl9LG4uZm4uZXh0ZW5kKHtmaW5k
OmZ1bmN0aW9uKGEpe3ZhciBiLGM9dGhpcy5sZW5ndGgsZD1bXSxlPXRoaXM7aWYoInN0cmluZyIh
PXR5cGVvZiBhKXJldHVybiB0aGlzLnB1c2hTdGFjayhuKGEpLmZpbHRlcihmdW5jdGlvbigpe2Zv
cihiPTA7Yz5iO2IrKylpZihuLmNvbnRhaW5zKGVbYl0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKGI9
MDtjPmI7YisrKW4uZmluZChhLGVbYl0sZCk7cmV0dXJuIGQ9dGhpcy5wdXNoU3RhY2soYz4xP24u
dW5pcXVlKGQpOmQpLGQuc2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj90aGlzLnNlbGVjdG9yKyIgIith
OmEsZH0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayh6KHRoaXMsYXx8
W10sITEpKX0sbm90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayh6KHRoaXMsYXx8
W10sITApKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISF6KHRoaXMsInN0cmluZyI9PXR5cGVvZiBh
JiZ3LnRlc3QoYSk/bihhKTphfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBBLEI9L14oPzpccyooPFtc
d1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxDPW4uZm4uaW5pdD1mdW5jdGlvbihhLGIsYyl7dmFy
IGUsZjtpZighYSlyZXR1cm4gdGhpcztpZihjPWN8fEEsInN0cmluZyI9PXR5cGVvZiBhKXtpZihl
PSI8Ij09PWFbMF0mJiI+Ij09PWFbYS5sZW5ndGgtMV0mJmEubGVuZ3RoPj0zP1tudWxsLGEsbnVs
bF06Qi5leGVjKGEpLCFlfHwhZVsxXSYmYilyZXR1cm4hYnx8Yi5qcXVlcnk/KGJ8fGMpLmZpbmQo
YSk6dGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpO2lmKGVbMV0pe2lmKGI9YiBpbnN0YW5jZW9m
IG4/YlswXTpiLG4ubWVyZ2UodGhpcyxuLnBhcnNlSFRNTChlWzFdLGImJmIubm9kZVR5cGU/Yi5v
d25lckRvY3VtZW50fHxiOmQsITApKSx4LnRlc3QoZVsxXSkmJm4uaXNQbGFpbk9iamVjdChiKSlm
b3IoZSBpbiBiKW4uaXNGdW5jdGlvbih0aGlzW2VdKT90aGlzW2VdKGJbZV0pOnRoaXMuYXR0cihl
LGJbZV0pO3JldHVybiB0aGlzfXJldHVybiBmPWQuZ2V0RWxlbWVudEJ5SWQoZVsyXSksZiYmZi5w
YXJlbnROb2RlJiYodGhpcy5sZW5ndGg9MSx0aGlzWzBdPWYpLHRoaXMuY29udGV4dD1kLHRoaXMu
c2VsZWN0b3I9YSx0aGlzfXJldHVybiBhLm5vZGVUeXBlPyh0aGlzLmNvbnRleHQ9dGhpc1swXT1h
LHRoaXMubGVuZ3RoPTEsdGhpcyk6bi5pc0Z1bmN0aW9uKGEpP3ZvaWQgMCE9PWMucmVhZHk/Yy5y
ZWFkeShhKTphKG4pOih2b2lkIDAhPT1hLnNlbGVjdG9yJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVj
dG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpLG4ubWFrZUFycmF5KGEsdGhpcykpfTtDLnByb3Rv
dHlwZT1uLmZuLEE9bihkKTt2YXIgRD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxF
PXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O24uZm4uZXh0ZW5kKHto
YXM6ZnVuY3Rpb24oYSl7dmFyIGI9bihhLHRoaXMpLGM9Yi5sZW5ndGg7cmV0dXJuIHRoaXMuZmls
dGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7Yz5hO2ErKylpZihuLmNvbnRhaW5zKHRoaXMsYlth
XSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlz
Lmxlbmd0aCxmPVtdLGc9dy50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bihhLGJ8fHRoaXMu
Y29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUp
aWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbi5maW5k
Lm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hT
dGFjayhmLmxlbmd0aD4xP24udW5pcXVlU29ydChmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0
dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP2guY2FsbChuKGEpLHRoaXNbMF0pOmguY2FsbCh0aGlz
LGEuanF1ZXJ5P2FbMF06YSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3Qo
KS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNo
U3RhY2sobi51bmlxdWVTb3J0KG4ubWVyZ2UodGhpcy5nZXQoKSxuKGEsYikpKSl9LGFkZEJhY2s6
ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWE/dGhpcy5wcmV2T2JqZWN0OnRoaXMu
cHJldk9iamVjdC5maWx0ZXIoYSkpfX0pO2Z1bmN0aW9uIEYoYSxiKXt3aGlsZSgoYT1hW2JdKSYm
MSE9PWEubm9kZVR5cGUpO3JldHVybiBhfW4uZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBi
PWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmMTEhPT1iLm5vZGVUeXBlP2I6bnVsbH0scGFyZW50czpm
dW5jdGlvbihhKXtyZXR1cm4gdShhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlv
bihhLGIsYyl7cmV0dXJuIHUoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0
dXJuIEYoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRihhLCJwcmV2
aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJuZXh0U2libGlu
ZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiB1KGEsInByZXZpb3VzU2libGluZyIpfSxu
ZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB1KGEsIm5leHRTaWJsaW5nIixjKX0scHJl
dlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxz
aWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gdigoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGls
ZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYS5maXJzdENoaWxkKX0sY29udGVu
dHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29udGVudERvY3VtZW50fHxuLm1lcmdlKFtdLGEuY2hp
bGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1uLm1h
cCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5n
Ij09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihFW2FdfHxuLnVu
aXF1ZVNvcnQoZSksRC50ZXN0KGEpJiZlLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2soZSl9fSk7
dmFyIEc9L1xTKy9nO2Z1bmN0aW9uIEgoYSl7dmFyIGI9e307cmV0dXJuIG4uZWFjaChhLm1hdGNo
KEcpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW4uQ2FsbGJhY2tzPWZ1bmN0aW9uKGEp
e2E9InN0cmluZyI9PXR5cGVvZiBhP0goYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZj1b
XSxnPVtdLGg9LTEsaT1mdW5jdGlvbigpe2ZvcihlPWEub25jZSxkPWI9ITA7Zy5sZW5ndGg7aD0t
MSl7Yz1nLnNoaWZ0KCk7d2hpbGUoKytoPGYubGVuZ3RoKWZbaF0uYXBwbHkoY1swXSxjWzFdKT09
PSExJiZhLnN0b3BPbkZhbHNlJiYoaD1mLmxlbmd0aCxjPSExKX1hLm1lbW9yeXx8KGM9ITEpLGI9
ITEsZSYmKGY9Yz9bXToiIil9LGo9e2FkZDpmdW5jdGlvbigpe3JldHVybiBmJiYoYyYmIWImJiho
PWYubGVuZ3RoLTEsZy5wdXNoKGMpKSxmdW5jdGlvbiBkKGIpe24uZWFjaChiLGZ1bmN0aW9uKGIs
Yyl7bi5pc0Z1bmN0aW9uKGMpP2EudW5pcXVlJiZqLmhhcyhjKXx8Zi5wdXNoKGMpOmMmJmMubGVu
Z3RoJiYic3RyaW5nIiE9PW4udHlwZShjKSYmZChjKX0pfShhcmd1bWVudHMpLGMmJiFiJiZpKCkp
LHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBuLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9u
KGEsYil7dmFyIGM7d2hpbGUoKGM9bi5pbkFycmF5KGIsZixjKSk+LTEpZi5zcGxpY2UoYywxKSxo
Pj1jJiZoLS19KSx0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bi5pbkFycmF5KGEsZik+
LTE6Zi5sZW5ndGg+MH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gZiYmKGY9W10pLHRoaXN9LGRp
c2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZT1nPVtdLGY9Yz0iIix0aGlzfSxkaXNhYmxlZDpmdW5j
dGlvbigpe3JldHVybiFmfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGU9Zz1bXSxjfHwoZj1jPSIi
KSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9LGZpcmVXaXRoOmZ1bmN0aW9uKGEs
Yyl7cmV0dXJuIGV8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sZy5wdXNoKGMp
LGJ8fGkoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBqLmZpcmVXaXRoKHRoaXMsYXJn
dW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBqfSxuLmV4
dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG4uQ2Fs
bGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbi5DYWxs
YmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbi5D
YWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1
cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJn
dW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuLkRl
ZmVycmVkKGZ1bmN0aW9uKGMpe24uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bi5pc0Z1bmN0
aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMs
YXJndW1lbnRzKTthJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5wcm9ncmVz
cyhjLm5vdGlmeSkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpOmNbZlswXSsiV2l0aCJd
KHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSku
cHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP24uZXh0ZW5kKGEs
ZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbi5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2
YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxi
WzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4g
ZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJX
aXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1
bmN0aW9uKGEpe3ZhciBiPTAsYz1lLmNhbGwoYXJndW1lbnRzKSxkPWMubGVuZ3RoLGY9MSE9PWR8
fGEmJm4uaXNGdW5jdGlvbihhLnByb21pc2UpP2Q6MCxnPTE9PT1mP2E6bi5EZWZlcnJlZCgpLGg9
ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihkKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVu
dHMubGVuZ3RoPjE/ZS5jYWxsKGFyZ3VtZW50cyk6ZCxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTot
LWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGQ+MSlmb3IoaT1uZXcgQXJyYXkoZCks
aj1uZXcgQXJyYXkoZCksaz1uZXcgQXJyYXkoZCk7ZD5iO2IrKyljW2JdJiZuLmlzRnVuY3Rpb24o
Y1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5wcm9ncmVzcyhoKGIsaixpKSkuZG9uZShoKGIs
ayxjKSkuZmFpbChnLnJlamVjdCk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5w
cm9taXNlKCl9fSk7dmFyIEk7bi5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbi5yZWFkeS5w
cm9taXNlKCkuZG9uZShhKSx0aGlzfSxuLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxo
b2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9uLnJlYWR5V2FpdCsrOm4ucmVhZHkoITApfSxyZWFkeTpm
dW5jdGlvbihhKXsoYT09PSEwPy0tbi5yZWFkeVdhaXQ6bi5pc1JlYWR5KXx8KG4uaXNSZWFkeT0h
MCxhIT09ITAmJi0tbi5yZWFkeVdhaXQ+MHx8KEkucmVzb2x2ZVdpdGgoZCxbbl0pLG4uZm4udHJp
Z2dlckhhbmRsZXImJihuKGQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG4oZCkub2ZmKCJyZWFk
eSIpKSkpfX0pO2Z1bmN0aW9uIEooKXtkLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRM
b2FkZWQiLEopLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsSiksbi5yZWFkeSgpfW4ucmVh
ZHkucHJvbWlzZT1mdW5jdGlvbihiKXtyZXR1cm4gSXx8KEk9bi5EZWZlcnJlZCgpLCJjb21wbGV0
ZSI9PT1kLnJlYWR5U3RhdGV8fCJsb2FkaW5nIiE9PWQucmVhZHlTdGF0ZSYmIWQuZG9jdW1lbnRF
bGVtZW50LmRvU2Nyb2xsP2Euc2V0VGltZW91dChuLnJlYWR5KTooZC5hZGRFdmVudExpc3RlbmVy
KCJET01Db250ZW50TG9hZGVkIixKKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEopKSksSS5w
cm9taXNlKGIpfSxuLnJlYWR5LnByb21pc2UoKTt2YXIgSz1mdW5jdGlvbihhLGIsYyxkLGUsZixn
KXt2YXIgaD0wLGk9YS5sZW5ndGgsaj1udWxsPT1jO2lmKCJvYmplY3QiPT09bi50eXBlKGMpKXtl
PSEwO2ZvcihoIGluIGMpSyhhLGIsaCxjW2hdLCEwLGYsZyl9ZWxzZSBpZih2b2lkIDAhPT1kJiYo
ZT0hMCxuLmlzRnVuY3Rpb24oZCl8fChnPSEwKSxqJiYoZz8oYi5jYWxsKGEsZCksYj1udWxsKToo
aj1iLGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwobihhKSxjKX0pKSxiKSlmb3IoO2k+
aDtoKyspYihhW2hdLGMsZz9kOmQuY2FsbChhW2hdLGgsYihhW2hdLGMpKSk7cmV0dXJuIGU/YTpq
P2IuY2FsbChhKTppP2IoYVswXSxjKTpmfSxMPWZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2Rl
VHlwZXx8OT09PWEubm9kZVR5cGV8fCErYS5ub2RlVHlwZX07ZnVuY3Rpb24gTSgpe3RoaXMuZXhw
YW5kbz1uLmV4cGFuZG8rTS51aWQrK31NLnVpZD0xLE0ucHJvdG90eXBlPXtyZWdpc3RlcjpmdW5j
dGlvbihhLGIpe3ZhciBjPWJ8fHt9O3JldHVybiBhLm5vZGVUeXBlP2FbdGhpcy5leHBhbmRvXT1j
Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHRoaXMuZXhwYW5kbyx7dmFsdWU6Yyx3cml0YWJsZToh
MCxjb25maWd1cmFibGU6ITB9KSxhW3RoaXMuZXhwYW5kb119LGNhY2hlOmZ1bmN0aW9uKGEpe2lm
KCFMKGEpKXJldHVybnt9O3ZhciBiPWFbdGhpcy5leHBhbmRvXTtyZXR1cm4gYnx8KGI9e30sTChh
KSYmKGEubm9kZVR5cGU/YVt0aGlzLmV4cGFuZG9dPWI6T2JqZWN0LmRlZmluZVByb3BlcnR5KGEs
dGhpcy5leHBhbmRvLHt2YWx1ZTpiLGNvbmZpZ3VyYWJsZTohMH0pKSksYn0sc2V0OmZ1bmN0aW9u
KGEsYixjKXt2YXIgZCxlPXRoaXMuY2FjaGUoYSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKWVbYl09
YztlbHNlIGZvcihkIGluIGIpZVtkXT1iW2RdO3JldHVybiBlfSxnZXQ6ZnVuY3Rpb24oYSxiKXty
ZXR1cm4gdm9pZCAwPT09Yj90aGlzLmNhY2hlKGEpOmFbdGhpcy5leHBhbmRvXSYmYVt0aGlzLmV4
cGFuZG9dW2JdfSxhY2Nlc3M6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiB2b2lkIDA9PT1i
fHxiJiYic3RyaW5nIj09dHlwZW9mIGImJnZvaWQgMD09PWM/KGQ9dGhpcy5nZXQoYSxiKSx2b2lk
IDAhPT1kP2Q6dGhpcy5nZXQoYSxuLmNhbWVsQ2FzZShiKSkpOih0aGlzLnNldChhLGIsYyksdm9p
ZCAwIT09Yz9jOmIpfSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1hW3RoaXMuZXhw
YW5kb107aWYodm9pZCAwIT09Zil7aWYodm9pZCAwPT09Yil0aGlzLnJlZ2lzdGVyKGEpO2Vsc2V7
bi5pc0FycmF5KGIpP2Q9Yi5jb25jYXQoYi5tYXAobi5jYW1lbENhc2UpKTooZT1uLmNhbWVsQ2Fz
ZShiKSxiIGluIGY/ZD1bYixlXTooZD1lLGQ9ZCBpbiBmP1tkXTpkLm1hdGNoKEcpfHxbXSkpLGM9
ZC5sZW5ndGg7d2hpbGUoYy0tKWRlbGV0ZSBmW2RbY11dfSh2b2lkIDA9PT1ifHxuLmlzRW1wdHlP
YmplY3QoZikpJiYoYS5ub2RlVHlwZT9hW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBhW3Ro
aXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihhKXt2YXIgYj1hW3RoaXMuZXhwYW5kb107
cmV0dXJuIHZvaWQgMCE9PWImJiFuLmlzRW1wdHlPYmplY3QoYil9fTt2YXIgTj1uZXcgTSxPPW5l
dyBNLFA9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxRPS9bQS1aXS9nO2Z1bmN0aW9u
IFIoYSxiLGMpe3ZhciBkO2lmKHZvaWQgMD09PWMmJjE9PT1hLm5vZGVUeXBlKWlmKGQ9ImRhdGEt
IitiLnJlcGxhY2UoUSwiLSQmIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLCJz
dHJpbmciPT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToibnVs
bCI9PT1jP251bGw6K2MrIiI9PT1jPytjOlAudGVzdChjKT9uLnBhcnNlSlNPTihjKTpjOworfWNh
dGNoKGUpe31PLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1cm4gY31uLmV4dGVuZCh7aGFz
RGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gTy5oYXNEYXRhKGEpfHxOLmhhc0RhdGEoYSl9LGRhdGE6
ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBPLmFjY2VzcyhhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rp
b24oYSxiKXtPLnJlbW92ZShhLGIpfSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIE4uYWNj
ZXNzKGEsYixjKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtOLnJlbW92ZShhLGIpfX0pLG4u
Zm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYu
YXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9Ty5nZXQoZiksMT09
PWYubm9kZVR5cGUmJiFOLmdldChmLCJoYXNEYXRhQXR0cnMiKSkpe2M9Zy5sZW5ndGg7d2hpbGUo
Yy0tKWdbY10mJihkPWdbY10ubmFtZSwwPT09ZC5pbmRleE9mKCJkYXRhLSIpJiYoZD1uLmNhbWVs
Q2FzZShkLnNsaWNlKDUpKSxSKGYsZCxlW2RdKSkpO04uc2V0KGYsImhhc0RhdGFBdHRycyIsITAp
fXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXtP
LnNldCh0aGlzLGEpfSk6Syh0aGlzLGZ1bmN0aW9uKGIpe3ZhciBjLGQ7aWYoZiYmdm9pZCAwPT09
Yil7aWYoYz1PLmdldChmLGEpfHxPLmdldChmLGEucmVwbGFjZShRLCItJCYiKS50b0xvd2VyQ2Fz
ZSgpKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGQ9bi5jYW1lbENhc2UoYSksYz1PLmdldChmLGQp
LHZvaWQgMCE9PWMpcmV0dXJuIGM7aWYoYz1SKGYsZCx2b2lkIDApLHZvaWQgMCE9PWMpcmV0dXJu
IGN9ZWxzZSBkPW4uY2FtZWxDYXNlKGEpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPU8uZ2V0
KHRoaXMsZCk7Ty5zZXQodGhpcyxkLGIpLGEuaW5kZXhPZigiLSIpPi0xJiZ2b2lkIDAhPT1jJiZP
LnNldCh0aGlzLGEsYil9KX0sbnVsbCxiLGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVt
b3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Ty5yZW1vdmUo
dGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJu
IGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1OLmdldChhLGIpLGMmJighZHx8bi5pc0FycmF5KGMp
P2Q9Ti5hY2Nlc3MoYSxiLG4ubWFrZUFycmF5KGMpKTpkLnB1c2goYykpLGR8fFtdKTp2b2lkIDB9
LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9bi5xdWV1ZShhLGIpLGQ9Yy5s
ZW5ndGgsZT1jLnNoaWZ0KCksZj1uLl9xdWV1ZUhvb2tzKGEsYiksZz1mdW5jdGlvbigpe24uZGVx
dWV1ZShhLGIpfTsiaW5wcm9ncmVzcyI9PT1lJiYoZT1jLnNoaWZ0KCksZC0tKSxlJiYoImZ4Ij09
PWImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBmLnN0b3AsZS5jYWxsKGEsZyxmKSks
IWQmJmYmJmYuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihhLGIpe3ZhciBjPWIr
InF1ZXVlSG9va3MiO3JldHVybiBOLmdldChhLGMpfHxOLmFjY2VzcyhhLGMse2VtcHR5Om4uQ2Fs
bGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe04ucmVtb3ZlKGEsW2IrInF1ZXVl
IixjXSl9KX0pfX0pLG4uZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPTI7cmV0
dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYj1hLGE9ImZ4IixjLS0pLGFyZ3VtZW50cy5sZW5ndGg8
Yz9uLnF1ZXVlKHRoaXNbMF0sYSk6dm9pZCAwPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigp
e3ZhciBjPW4ucXVldWUodGhpcyxhLGIpO24uX3F1ZXVlSG9va3ModGhpcyxhKSwiZngiPT09YSYm
ImlucHJvZ3Jlc3MiIT09Y1swXSYmbi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlv
bihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5kZXF1ZXVlKHRoaXMsYSl9KX0sY2xl
YXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlz
ZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MSxlPW4uRGVmZXJyZWQoKSxmPXRoaXMsZz10aGlzLmxl
bmd0aCxoPWZ1bmN0aW9uKCl7LS1kfHxlLnJlc29sdmVXaXRoKGYsW2ZdKX07InN0cmluZyIhPXR5
cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxhPWF8fCJmeCI7d2hpbGUoZy0tKWM9Ti5nZXQoZltnXSxh
KyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgo
KSxlLnByb21pc2UoYil9fSk7dmFyIFM9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xk
K3wpLy5zb3VyY2UsVD1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUysiKShbYS16JV0qKSQi
LCJpIiksVT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFY9ZnVuY3Rpb24oYSxiKXty
ZXR1cm4gYT1ifHxhLCJub25lIj09PW4uY3NzKGEsImRpc3BsYXkiKXx8IW4uY29udGFpbnMoYS5v
d25lckRvY3VtZW50LGEpfTtmdW5jdGlvbiBXKGEsYixjLGQpe3ZhciBlLGY9MSxnPTIwLGg9ZD9m
dW5jdGlvbigpe3JldHVybiBkLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBuLmNzcyhhLGIsIiIp
fSxpPWgoKSxqPWMmJmNbM118fChuLmNzc051bWJlcltiXT8iIjoicHgiKSxrPShuLmNzc051bWJl
cltiXXx8InB4IiE9PWomJitpKSYmVC5leGVjKG4uY3NzKGEsYikpO2lmKGsmJmtbM10hPT1qKXtq
PWp8fGtbM10sYz1jfHxbXSxrPStpfHwxO2RvIGY9Znx8Ii41IixrLz1mLG4uc3R5bGUoYSxiLGsr
aik7d2hpbGUoZiE9PShmPWgoKS9pKSYmMSE9PWYmJi0tZyl9cmV0dXJuIGMmJihrPStrfHwraXx8
MCxlPWNbMV0/aysoY1sxXSsxKSpjWzJdOitjWzJdLGQmJihkLnVuaXQ9aixkLnN0YXJ0PWssZC5l
bmQ9ZSkpLGV9dmFyIFg9L14oPzpjaGVja2JveHxyYWRpbykkL2ksWT0vPChbXHc6LV0rKS8sWj0v
XiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksJD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxl
PSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJd
LGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIs
Ijx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5
Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19OyQub3B0
Z3JvdXA9JC5vcHRpb24sJC50Ym9keT0kLnRmb290PSQuY29sZ3JvdXA9JC5jYXB0aW9uPSQudGhl
YWQsJC50aD0kLnRkO2Z1bmN0aW9uIF8oYSxiKXt2YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIGEu
Z2V0RWxlbWVudHNCeVRhZ05hbWU/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShifHwiKiIpOiJ1bmRl
ZmluZWQiIT10eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwi
KiIpOltdO3JldHVybiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0s
Yyk6Y31mdW5jdGlvbiBhYShhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKylOLnNl
dChhW2NdLCJnbG9iYWxFdmFsIiwhYnx8Ti5nZXQoYltjXSwiZ2xvYmFsRXZhbCIpKX12YXIgYmE9
Lzx8JiM/XHcrOy87ZnVuY3Rpb24gY2EoYSxiLGMsZCxlKXtmb3IodmFyIGYsZyxoLGksaixrLGw9
Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbT1bXSxvPTAscD1hLmxlbmd0aDtwPm87bysrKWlm
KGY9YVtvXSxmfHwwPT09ZilpZigib2JqZWN0Ij09PW4udHlwZShmKSluLm1lcmdlKG0sZi5ub2Rl
VHlwZT9bZl06Zik7ZWxzZSBpZihiYS50ZXN0KGYpKXtnPWd8fGwuYXBwZW5kQ2hpbGQoYi5jcmVh
dGVFbGVtZW50KCJkaXYiKSksaD0oWS5leGVjKGYpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgp
LGk9JFtoXXx8JC5fZGVmYXVsdCxnLmlubmVySFRNTD1pWzFdK24uaHRtbFByZWZpbHRlcihmKStp
WzJdLGs9aVswXTt3aGlsZShrLS0pZz1nLmxhc3RDaGlsZDtuLm1lcmdlKG0sZy5jaGlsZE5vZGVz
KSxnPWwuZmlyc3RDaGlsZCxnLnRleHRDb250ZW50PSIifWVsc2UgbS5wdXNoKGIuY3JlYXRlVGV4
dE5vZGUoZikpO2wudGV4dENvbnRlbnQ9IiIsbz0wO3doaWxlKGY9bVtvKytdKWlmKGQmJm4uaW5B
cnJheShmLGQpPi0xKWUmJmUucHVzaChmKTtlbHNlIGlmKGo9bi5jb250YWlucyhmLm93bmVyRG9j
dW1lbnQsZiksZz1fKGwuYXBwZW5kQ2hpbGQoZiksInNjcmlwdCIpLGomJmFhKGcpLGMpe2s9MDt3
aGlsZShmPWdbaysrXSlaLnRlc3QoZi50eXBlfHwiIikmJmMucHVzaChmKX1yZXR1cm4gbH0hZnVu
Y3Rpb24oKXt2YXIgYT1kLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxiPWEuYXBwZW5kQ2hpbGQo
ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSksYz1kLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yy5zZXRB
dHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGMuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tl
ZCIpLGMuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGIuYXBwZW5kQ2hpbGQoYyksbC5jaGVja0Ns
b25lPWIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIuaW5u
ZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixsLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9u
ZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIGRhPS9ea2V5LyxlYT0vXig/
Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sZmE9L14oW14uXSop
KD86XC4oLispfCkvO2Z1bmN0aW9uIGdhKCl7cmV0dXJuITB9ZnVuY3Rpb24gaGEoKXtyZXR1cm4h
MX1mdW5jdGlvbiBpYSgpe3RyeXtyZXR1cm4gZC5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319ZnVu
Y3Rpb24gamEoYSxiLGMsZCxlLGYpe3ZhciBnLGg7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXsic3Ry
aW5nIiE9dHlwZW9mIGMmJihkPWR8fGMsYz12b2lkIDApO2ZvcihoIGluIGIpamEoYSxoLGMsZCxi
W2hdLGYpO3JldHVybiBhfWlmKG51bGw9PWQmJm51bGw9PWU/KGU9YyxkPWM9dm9pZCAwKTpudWxs
PT1lJiYoInN0cmluZyI9PXR5cGVvZiBjPyhlPWQsZD12b2lkIDApOihlPWQsZD1jLGM9dm9pZCAw
KSksZT09PSExKWU9aGE7ZWxzZSBpZighZSlyZXR1cm4gYTtyZXR1cm4gMT09PWYmJihnPWUsZT1m
dW5jdGlvbihhKXtyZXR1cm4gbigpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5n
dWlkPWcuZ3VpZHx8KGcuZ3VpZD1uLmd1aWQrKykpLGEuZWFjaChmdW5jdGlvbigpe24uZXZlbnQu
YWRkKHRoaXMsYixlLGQsYyl9KX1uLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixj
LGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPU4uZ2V0KGEpO2lmKHIpe2MuaGFuZGxl
ciYmKGY9YyxjPWYuaGFuZGxlcixlPWYuc2VsZWN0b3IpLGMuZ3VpZHx8KGMuZ3VpZD1uLmd1aWQr
KyksKGk9ci5ldmVudHMpfHwoaT1yLmV2ZW50cz17fSksKGc9ci5oYW5kbGUpfHwoZz1yLmhhbmRs
ZT1mdW5jdGlvbihiKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIG4mJm4uZXZlbnQudHJpZ2dl
cmVkIT09Yi50eXBlP24uZXZlbnQuZGlzcGF0Y2guYXBwbHkoYSxhcmd1bWVudHMpOnZvaWQgMH0p
LGI9KGJ8fCIiKS5tYXRjaChHKXx8WyIiXSxqPWIubGVuZ3RoO3doaWxlKGotLSloPWZhLmV4ZWMo
YltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvJiYobD1u
LmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGU/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8s
bD1uLmV2ZW50LnNwZWNpYWxbb118fHt9LGs9bi5leHRlbmQoe3R5cGU6byxvcmlnVHlwZTpxLGRh
dGE6ZCxoYW5kbGVyOmMsZ3VpZDpjLmd1aWQsc2VsZWN0b3I6ZSxuZWVkc0NvbnRleHQ6ZSYmbi5l
eHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGUpLG5hbWVzcGFjZTpwLmpvaW4oIi4iKX0sZiks
KG09aVtvXSl8fChtPWlbb109W10sbS5kZWxlZ2F0ZUNvdW50PTAsbC5zZXR1cCYmbC5zZXR1cC5j
YWxsKGEsZCxwLGcpIT09ITF8fGEuYWRkRXZlbnRMaXN0ZW5lciYmYS5hZGRFdmVudExpc3RlbmVy
KG8sZykpLGwuYWRkJiYobC5hZGQuY2FsbChhLGspLGsuaGFuZGxlci5ndWlkfHwoay5oYW5kbGVy
Lmd1aWQ9Yy5ndWlkKSksZT9tLnNwbGljZShtLmRlbGVnYXRlQ291bnQrKywwLGspOm0ucHVzaChr
KSxuLmV2ZW50Lmdsb2JhbFtvXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIg
ZixnLGgsaSxqLGssbCxtLG8scCxxLHI9Ti5oYXNEYXRhKGEpJiZOLmdldChhKTtpZihyJiYoaT1y
LmV2ZW50cykpe2I9KGJ8fCIiKS5tYXRjaChHKXx8WyIiXSxqPWIubGVuZ3RoO3doaWxlKGotLSlp
ZihoPWZhLmV4ZWMoYltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNv
cnQoKSxvKXtsPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJp
bmRUeXBlKXx8byxtPWlbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2lu
KCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxnPWY9bS5sZW5ndGg7d2hpbGUoZi0tKWs9bVtm
XSwhZSYmcSE9PWsub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWsuZ3VpZHx8aCYmIWgudGVzdChrLm5h
bWVzcGFjZSl8fGQmJmQhPT1rLnNlbGVjdG9yJiYoIioqIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0u
c3BsaWNlKGYsMSksay5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVt
b3ZlLmNhbGwoYSxrKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxs
KGEscCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRlbGV0ZSBp
W29dKX1lbHNlIGZvcihvIGluIGkpbi5ldmVudC5yZW1vdmUoYSxvK2Jbal0sYyxkLCEwKTtuLmlz
RW1wdHlPYmplY3QoaSkmJk4ucmVtb3ZlKGEsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1
bmN0aW9uKGEpe2E9bi5ldmVudC5maXgoYSk7dmFyIGIsYyxkLGYsZyxoPVtdLGk9ZS5jYWxsKGFy
Z3VtZW50cyksaj0oTi5nZXQodGhpcywiZXZlbnRzIil8fHt9KVthLnR5cGVdfHxbXSxrPW4uZXZl
bnQuc3BlY2lhbFthLnR5cGVdfHx7fTtpZihpWzBdPWEsYS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFr
LnByZURpc3BhdGNofHxrLnByZURpc3BhdGNoLmNhbGwodGhpcyxhKSE9PSExKXtoPW4uZXZlbnQu
aGFuZGxlcnMuY2FsbCh0aGlzLGEsaiksYj0wO3doaWxlKChmPWhbYisrXSkmJiFhLmlzUHJvcGFn
YXRpb25TdG9wcGVkKCkpe2EuY3VycmVudFRhcmdldD1mLmVsZW0sYz0wO3doaWxlKChnPWYuaGFu
ZGxlcnNbYysrXSkmJiFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYS5ybmFtZXNw
YWNlJiYhYS5ybmFtZXNwYWNlLnRlc3QoZy5uYW1lc3BhY2UpfHwoYS5oYW5kbGVPYmo9ZyxhLmRh
dGE9Zy5kYXRhLGQ9KChuLmV2ZW50LnNwZWNpYWxbZy5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGcu
aGFuZGxlcikuYXBwbHkoZi5lbGVtLGkpLHZvaWQgMCE9PWQmJihhLnJlc3VsdD1kKT09PSExJiYo
YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gay5wb3N0RGlz
cGF0Y2gmJmsucG9zdERpc3BhdGNoLmNhbGwodGhpcyxhKSxhLnJlc3VsdH19LGhhbmRsZXJzOmZ1
bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz1bXSxoPWIuZGVsZWdhdGVDb3VudCxpPWEudGFyZ2V0
O2lmKGgmJmkubm9kZVR5cGUmJigiY2xpY2siIT09YS50eXBlfHxpc05hTihhLmJ1dHRvbil8fGEu
YnV0dG9uPDEpKWZvcig7aSE9PXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9k
ZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZD1bXSxjPTA7
aD5jO2MrKylmPWJbY10sZT1mLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1kW2VdJiYoZFtlXT1mLm5l
ZWRzQ29udGV4dD9uKGUsdGhpcykuaW5kZXgoaSk+LTE6bi5maW5kKGUsdGhpcyxudWxsLFtpXSku
bGVuZ3RoKSxkW2VdJiZkLnB1c2goZik7ZC5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJz
OmR9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGlj
ZShoKX0pLGd9LHByb3BzOiJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVu
dFRhcmdldCBkZXRhaWwgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkg
dGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhv
b2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6
ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFy
Q29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24g
YnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVl
blggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFy
IGMsZSxmLGc9Yi5idXR0b247cmV0dXJuIG51bGw9PWEucGFnZVgmJm51bGwhPWIuY2xpZW50WCYm
KGM9YS50YXJnZXQub3duZXJEb2N1bWVudHx8ZCxlPWMuZG9jdW1lbnRFbGVtZW50LGY9Yy5ib2R5
LGEucGFnZVg9Yi5jbGllbnRYKyhlJiZlLnNjcm9sbExlZnR8fGYmJmYuc2Nyb2xsTGVmdHx8MCkt
KGUmJmUuY2xpZW50TGVmdHx8ZiYmZi5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWIuY2xpZW50WSso
ZSYmZS5zY3JvbGxUb3B8fGYmJmYuc2Nyb2xsVG9wfHwwKS0oZSYmZS5jbGllbnRUb3B8fGYmJmYu
Y2xpZW50VG9wfHwwKSksYS53aGljaHx8dm9pZCAwPT09Z3x8KGEud2hpY2g9MSZnPzE6MiZnPzM6
NCZnPzI6MCksYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW24uZXhwYW5kb10pcmV0dXJuIGE7dmFy
IGIsYyxlLGY9YS50eXBlLGc9YSxoPXRoaXMuZml4SG9va3NbZl07aHx8KHRoaXMuZml4SG9va3Nb
Zl09aD1lYS50ZXN0KGYpP3RoaXMubW91c2VIb29rczpkYS50ZXN0KGYpP3RoaXMua2V5SG9va3M6
e30pLGU9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzLGE9bmV3
IG4uRXZlbnQoZyksYj1lLmxlbmd0aDt3aGlsZShiLS0pYz1lW2JdLGFbY109Z1tjXTtyZXR1cm4g
YS50YXJnZXR8fChhLnRhcmdldD1kKSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1h
LnRhcmdldC5wYXJlbnROb2RlKSxoLmZpbHRlcj9oLmZpbHRlcihhLGcpOmF9LHNwZWNpYWw6e2xv
YWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzIT09
aWEoKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToi
Zm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PWlhKCkmJnRo
aXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9
LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNrYm94Ij09PXRoaXMudHlwZSYm
dGhpcy5jbGljayYmbi5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnZv
aWQgMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsImEi
KX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVz
dWx0JiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9YS5yZXN1
bHQpfX19fSxuLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVu
ZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMpfSxuLkV2ZW50PWZ1bmN0aW9uKGEsYil7cmV0
dXJuIHRoaXMgaW5zdGFuY2VvZiBuLkV2ZW50PyhhJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVu
dD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJl
dmVudGVkfHx2b2lkIDA9PT1hLmRlZmF1bHRQcmV2ZW50ZWQmJmEucmV0dXJuVmFsdWU9PT0hMT9n
YTpoYSk6dGhpcy50eXBlPWEsYiYmbi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZh
LnRpbWVTdGFtcHx8bi5ub3coKSx2b2lkKHRoaXNbbi5leHBhbmRvXT0hMCkpOm5ldyBuLkV2ZW50
KGEsYil9LG4uRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLkV2ZW50LGlzRGVmYXVsdFBy
ZXZlbnRlZDpoYSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpoYSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9u
U3RvcHBlZDpoYSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBh
PXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1nYSxhJiYhdGhpcy5p
c1NpbXVsYXRlZCYmYS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24o
KXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1nYSxh
JiYhdGhpcy5pc1NpbXVsYXRlZCYmYS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVBy
b3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1l
ZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Z2EsYSYmIXRoaXMuaXNTaW11bGF0ZWQmJmEuc3RvcElt
bWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91
c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJw
b2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXtuLmV2
ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9u
KGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybiBl
JiYoZT09PWR8fG4uY29udGFpbnMoZCxlKSl8fChhLnR5cGU9Zi5vcmlnVHlwZSxjPWYuaGFuZGxl
ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWIpLGN9fX0pLG4uZm4uZXh0ZW5kKHtvbjpm
dW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gamEodGhpcyxhLGIsYyxkKX0sb25lOmZ1bmN0aW9uKGEs
YixjLGQpe3JldHVybiBqYSh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFy
IGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRs
ZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitk
Lm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmpl
Y3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9
cmV0dXJuIGIhPT0hMSYmImZ1bmN0aW9uIiE9dHlwZW9mIGJ8fChjPWIsYj12b2lkIDApLGM9PT0h
MSYmKGM9aGEpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIp
fSl9fSk7dmFyIGthPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0
YXxwYXJhbSkoKFtcdzotXSspW14+XSopXC8+L2dpLGxhPS88c2NyaXB0fDxzdHlsZXw8bGluay9p
LG1hPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLG5hPS9edHJ1ZVwvKC4qKS8s
b2E9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nO2Z1bmN0aW9uIHBh
KGEsYil7cmV0dXJuIG4ubm9kZU5hbWUoYSwidGFibGUiKSYmbi5ub2RlTmFtZSgxMSE9PWIubm9k
ZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHki
KVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHki
KSk6YX1mdW5jdGlvbiBxYShhKXtyZXR1cm4gYS50eXBlPShudWxsIT09YS5nZXRBdHRyaWJ1dGUo
InR5cGUiKSkrIi8iK2EudHlwZSxhfWZ1bmN0aW9uIHJhKGEpe3ZhciBiPW5hLmV4ZWMoYS50eXBl
KTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGF9ZnVuY3Rp
b24gc2EoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2lmKDE9PT1iLm5vZGVUeXBlKXtpZihOLmhh
c0RhdGEoYSkmJihmPU4uYWNjZXNzKGEpLGc9Ti5zZXQoYixmKSxqPWYuZXZlbnRzKSl7ZGVsZXRl
IGcuaGFuZGxlLGcuZXZlbnRzPXt9O2ZvcihlIGluIGopZm9yKGM9MCxkPWpbZV0ubGVuZ3RoO2Q+
YztjKyspbi5ldmVudC5hZGQoYixlLGpbZV1bY10pfU8uaGFzRGF0YShhKSYmKGg9Ty5hY2Nlc3Mo
YSksaT1uLmV4dGVuZCh7fSxoKSxPLnNldChiLGkpKX19ZnVuY3Rpb24gdGEoYSxiKXt2YXIgYz1i
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7ImlucHV0Ij09PWMmJlgudGVzdChhLnR5cGUpP2IuY2hl
Y2tlZD1hLmNoZWNrZWQ6ImlucHV0IiE9PWMmJiJ0ZXh0YXJlYSIhPT1jfHwoYi5kZWZhdWx0VmFs
dWU9YS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIHVhKGEsYixjLGQpe2I9Zi5hcHBseShbXSxiKTt2
YXIgZSxnLGgsaSxqLGssbT0wLG89YS5sZW5ndGgscD1vLTEscT1iWzBdLHI9bi5pc0Z1bmN0aW9u
KHEpO2lmKHJ8fG8+MSYmInN0cmluZyI9PXR5cGVvZiBxJiYhbC5jaGVja0Nsb25lJiZtYS50ZXN0
KHEpKXJldHVybiBhLmVhY2goZnVuY3Rpb24oZSl7dmFyIGY9YS5lcShlKTtyJiYoYlswXT1xLmNh
bGwodGhpcyxlLGYuaHRtbCgpKSksdWEoZixiLGMsZCl9KTtpZihvJiYoZT1jYShiLGFbMF0ub3du
ZXJEb2N1bWVudCwhMSxhLGQpLGc9ZS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3Ro
JiYoZT1nKSxnfHxkKSl7Zm9yKGg9bi5tYXAoXyhlLCJzY3JpcHQiKSxxYSksaT1oLmxlbmd0aDtv
Pm07bSsrKWo9ZSxtIT09cCYmKGo9bi5jbG9uZShqLCEwLCEwKSxpJiZuLm1lcmdlKGgsXyhqLCJz
Y3JpcHQiKSkpLGMuY2FsbChhW21dLGosbSk7aWYoaSlmb3Ioaz1oW2gubGVuZ3RoLTFdLm93bmVy
RG9jdW1lbnQsbi5tYXAoaCxyYSksbT0wO2k+bTttKyspaj1oW21dLFoudGVzdChqLnR5cGV8fCIi
KSYmIU4uYWNjZXNzKGosImdsb2JhbEV2YWwiKSYmbi5jb250YWlucyhrLGopJiYoai5zcmM/bi5f
ZXZhbFVybCYmbi5fZXZhbFVybChqLnNyYyk6bi5nbG9iYWxFdmFsKGoudGV4dENvbnRlbnQucmVw
bGFjZShvYSwiIikpKX1yZXR1cm4gYX1mdW5jdGlvbiB2YShhLGIsYyl7Zm9yKHZhciBkLGU9Yj9u
LmZpbHRlcihiLGEpOmEsZj0wO251bGwhPShkPWVbZl0pO2YrKyljfHwxIT09ZC5ub2RlVHlwZXx8
bi5jbGVhbkRhdGEoXyhkKSksZC5wYXJlbnROb2RlJiYoYyYmbi5jb250YWlucyhkLm93bmVyRG9j
dW1lbnQsZCkmJmFhKF8oZCwic2NyaXB0IikpLGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKSk7
cmV0dXJuIGF9bi5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVw
bGFjZShrYSwiPCQxPjwvJDI+Iil9LGNsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxo
PWEuY2xvbmVOb2RlKCEwKSxpPW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpO2lmKCEobC5u
b0Nsb25lQ2hlY2tlZHx8MSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZXx8bi5pc1hNTERv
YyhhKSkpZm9yKGc9XyhoKSxmPV8oYSksZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKyl0YShmW2RdLGdb
ZF0pO2lmKGIpaWYoYylmb3IoZj1mfHxfKGEpLGc9Z3x8XyhoKSxkPTAsZT1mLmxlbmd0aDtlPmQ7
ZCsrKXNhKGZbZF0sZ1tkXSk7ZWxzZSBzYShhLGgpO3JldHVybiBnPV8oaCwic2NyaXB0IiksZy5s
ZW5ndGg+MCYmYWEoZywhaSYmXyhhLCJzY3JpcHQiKSksaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEp
e2Zvcih2YXIgYixjLGQsZT1uLmV2ZW50LnNwZWNpYWwsZj0wO3ZvaWQgMCE9PShjPWFbZl0pO2Yr
KylpZihMKGMpKXtpZihiPWNbTi5leHBhbmRvXSl7aWYoYi5ldmVudHMpZm9yKGQgaW4gYi5ldmVu
dHMpZVtkXT9uLmV2ZW50LnJlbW92ZShjLGQpOm4ucmVtb3ZlRXZlbnQoYyxkLGIuaGFuZGxlKTtj
W04uZXhwYW5kb109dm9pZCAwfWNbTy5leHBhbmRvXSYmKGNbTy5leHBhbmRvXT12b2lkIDApfX19
KSxuLmZuLmV4dGVuZCh7ZG9tTWFuaXA6dWEsZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB2YSh0
aGlzLGEsITApfSxyZW1vdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIHZhKHRoaXMsYSl9LHRleHQ6ZnVu
Y3Rpb24oYSl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9uLnRl
eHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYm
MTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9
YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09
dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXBhKHRoaXMsYSk7Yi5hcHBl
bmRDaGlsZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB1YSh0aGlzLGFyZ3VtZW50
cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5
PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9cGEodGhpcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmly
c3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB1YSh0aGlzLGFyZ3VtZW50cyxm
dW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo
YSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB1YSh0aGlzLGFyZ3VtZW50cyxmdW5j
dGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0
aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9
KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEoXyhhLCExKSksYS50
ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9
bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbi5j
bG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9u
KGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEmJjE9
PT1iLm5vZGVUeXBlKXJldHVybiBiLmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGEmJiFs
YS50ZXN0KGEpJiYhJFsoWS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1u
Lmh0bWxQcmVmaWx0ZXIoYSk7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5v
ZGVUeXBlJiYobi5jbGVhbkRhdGEoXyhiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUp
e319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxy
ZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB1YSh0aGlzLGFyZ3VtZW50cyxm
dW5jdGlvbihiKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7bi5pbkFycmF5KHRoaXMsYSk8MCYmKG4u
Y2xlYW5EYXRhKF8odGhpcykpLGMmJmMucmVwbGFjZUNoaWxkKGIsdGhpcykpfSxhKX19KSxuLmVh
Y2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJi
ZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5j
dGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9W10sZT1uKGEpLGY9ZS5s
ZW5ndGgtMSxoPTA7Zj49aDtoKyspYz1oPT09Zj90aGlzOnRoaXMuY2xvbmUoITApLG4oZVtoXSlb
Yl0oYyksZy5hcHBseShkLGMuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhkKX19KTt2YXIg
d2EseGE9e0hUTUw6ImJsb2NrIixCT0RZOiJibG9jayJ9O2Z1bmN0aW9uIHlhKGEsYil7dmFyIGM9
bihiLmNyZWF0ZUVsZW1lbnQoYSkpLmFwcGVuZFRvKGIuYm9keSksZD1uLmNzcyhjWzBdLCJkaXNw
bGF5Iik7cmV0dXJuIGMuZGV0YWNoKCksZH1mdW5jdGlvbiB6YShhKXt2YXIgYj1kLGM9eGFbYV07
cmV0dXJuIGN8fChjPXlhKGEsYiksIm5vbmUiIT09YyYmY3x8KHdhPSh3YXx8bigiPGlmcmFtZSBm
cmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3Vt
ZW50RWxlbWVudCksYj13YVswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xvc2UoKSxj
PXlhKGEsYiksd2EuZGV0YWNoKCkpLHhhW2FdPWMpLGN9dmFyIEFhPS9ebWFyZ2luLyxCYT1uZXcg
UmVnRXhwKCJeKCIrUysiKSg/IXB4KVthLXolXSskIiwiaSIpLENhPWZ1bmN0aW9uKGIpe3ZhciBj
PWIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gYyYmYy5vcGVuZXJ8fChjPWEpLGMu
Z2V0Q29tcHV0ZWRTdHlsZShiKX0sRGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPXt9O2Zv
cihmIGluIGIpZ1tmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuYXBwbHkoYSxkfHxb
XSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWdbZl07cmV0dXJuIGV9LEVhPWQuZG9jdW1lbnRFbGVt
ZW50OyFmdW5jdGlvbigpe3ZhciBiLGMsZSxmLGc9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxoPWQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoaC5zdHlsZSl7aC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0i
Y29udGVudC1ib3giLGguY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixsLmNs
ZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09aC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxnLnN0
eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5
cHg7cGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlIixnLmFwcGVuZENo
aWxkKGgpO2Z1bmN0aW9uIGkoKXtoLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpi
b3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJv
eDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7
cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUwJSIsaC5pbm5lckhUTUw9IiIsRWEuYXBwZW5kQ2hp
bGQoZyk7dmFyIGQ9YS5nZXRDb21wdXRlZFN0eWxlKGgpO2I9IjElIiE9PWQudG9wLGY9IjJweCI9
PT1kLm1hcmdpbkxlZnQsYz0iNHB4Ij09PWQud2lkdGgsaC5zdHlsZS5tYXJnaW5SaWdodD0iNTAl
IixlPSI0cHgiPT09ZC5tYXJnaW5SaWdodCxFYS5yZW1vdmVDaGlsZChnKX1uLmV4dGVuZChsLHtw
aXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGkoKSxifSxib3hTaXppbmdSZWxpYWJsZTpm
dW5jdGlvbigpe3JldHVybiBudWxsPT1jJiZpKCksY30scGl4ZWxNYXJnaW5SaWdodDpmdW5jdGlv
bigpe3JldHVybiBudWxsPT1jJiZpKCksZX0scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7
cmV0dXJuIG51bGw9PWMmJmkoKSxmfSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7dmFy
IGIsYz1oLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpO3JldHVybiBjLnN0eWxl
LmNzc1RleHQ9aC5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7
Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3Bh
ZGRpbmc6MCIsYy5zdHlsZS5tYXJnaW5SaWdodD1jLnN0eWxlLndpZHRoPSIwIixoLnN0eWxlLndp
ZHRoPSIxcHgiLEVhLmFwcGVuZENoaWxkKGcpLGI9IXBhcnNlRmxvYXQoYS5nZXRDb21wdXRlZFN0
eWxlKGMpLm1hcmdpblJpZ2h0KSxFYS5yZW1vdmVDaGlsZChnKSxoLnJlbW92ZUNoaWxkKGMpLGJ9
fSl9fSgpO2Z1bmN0aW9uIEZhKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9
Y3x8Q2EoYSksZz1jP2MuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXTp2b2lkIDAsIiIhPT1nJiZ2
b2lkIDAhPT1nfHxuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bi5zdHlsZShhLGIp
KSxjJiYhbC5waXhlbE1hcmdpblJpZ2h0KCkmJkJhLnRlc3QoZykmJkFhLnRlc3QoYikmJihkPWgu
d2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53
aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9Ziksdm9p
ZCAwIT09Zz9nKyIiOmd9ZnVuY3Rpb24gR2EoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1
bWVudHMpfX19dmFyIEhhPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxJYT17cG9zaXRpb246
ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sSmE9e2xldHRl
clNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LEthPVsiV2Via2l0IiwiTyIsIk1veiIsIm1z
Il0sTGE9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZTtmdW5jdGlvbiBNYShhKXtpZihhIGlu
IExhKXJldHVybiBhO3ZhciBiPWFbMF0udG9VcHBlckNhc2UoKSthLnNsaWNlKDEpLGM9S2EubGVu
Z3RoO3doaWxlKGMtLSlpZihhPUthW2NdK2IsYSBpbiBMYSlyZXR1cm4gYX1mdW5jdGlvbiBOYShh
LGIsYyl7dmFyIGQ9VC5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsyXS0oY3x8MCkpKyhk
WzNdfHwicHgiKTpifWZ1bmN0aW9uIE9hKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9y
ZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09
PWMmJihnKz1uLmNzcyhhLGMrVVtmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3Nz
KGEsInBhZGRpbmciK1VbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRl
ciIrVVtmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1VbZl0sITAsZSks
InBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrVVtmXSsiV2lkdGgiLCEwLGUpKSk7
cmV0dXJuIGd9ZnVuY3Rpb24gUGEoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZz
ZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPUNhKGEpLGc9ImJvcmRlci1ib3giPT09bi5jc3MoYSwi
Ym94U2l6aW5nIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPUZhKGEsYixmKSwoMD5lfHxu
dWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksQmEudGVzdChlKSlyZXR1cm4gZTtkPWcmJihsLmJveFNp
emluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJu
IGUrT2EoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxmKSsicHgifWZ1bmN0aW9uIFFh
KGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxoPWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQu
c3R5bGUmJihmW2ddPU4uZ2V0KGQsIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhm
W2ddfHwibm9uZSIhPT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxh
eSYmVihkKSYmKGZbZ109Ti5hY2Nlc3MoZCwib2xkZGlzcGxheSIsemEoZC5ub2RlTmFtZSkpKSk6
KGU9VihkKSwibm9uZSI9PT1jJiZlfHxOLnNldChkLCJvbGRkaXNwbGF5IixlP2M6bi5jc3MoZCwi
ZGlzcGxheSIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGImJiJub25lIiE9
PWQuc3R5bGUuZGlzcGxheSYmIiIhPT1kLnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9
Yj9mW2ddfHwiIjoibm9uZSIpKTtyZXR1cm4gYX1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6
e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPUZhKGEsIm9wYWNpdHkiKTtyZXR1cm4iIj09
PWM/IjEiOmN9fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1u
Q291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2Vp
Z2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93
czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNzc0Zsb2F0In0sc3R5
bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBl
JiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7cmV0dXJuIGI9
bi5jc3NQcm9wc1toXXx8KG4uY3NzUHJvcHNbaF09TWEoaCl8fGgpLGc9bi5jc3NIb29rc1tiXXx8
bi5jc3NIb29rc1toXSx2b2lkIDA9PT1jP2cmJiJnZXQiaW4gZyYmdm9pZCAwIT09KGU9Zy5nZXQo
YSwhMSxkKSk/ZTppW2JdOihmPXR5cGVvZiBjLCJzdHJpbmciPT09ZiYmKGU9VC5leGVjKGMpKSYm
ZVsxXSYmKGM9VyhhLGIsZSksZj0ibnVtYmVyIiksbnVsbCE9YyYmYz09PWMmJigibnVtYmVyIj09
PWYmJihjKz1lJiZlWzNdfHwobi5jc3NOdW1iZXJbaF0/IiI6InB4IikpLGwuY2xlYXJDbG9uZVN0
eWxlfHwiIiE9PWN8fDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGlbYl09ImluaGVyaXQi
KSxnJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSl8fChpW2JdPWMpKSx2b2lk
IDApfX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4uY2FtZWxDYXNlKGIpO3Jl
dHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPU1hKGgpfHxoKSxnPW4uY3NzSG9v
a3NbYl18fG4uY3NzSG9va3NbaF0sZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGMpKSx2b2lk
IDA9PT1lJiYoZT1GYShhLGIsZCkpLCJub3JtYWwiPT09ZSYmYiBpbiBKYSYmKGU9SmFbYl0pLCIi
PT09Y3x8Yz8oZj1wYXJzZUZsb2F0KGUpLGM9PT0hMHx8aXNGaW5pdGUoZik/Znx8MDplKTplfX0p
LG4uZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXtn
ZXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBjP0hhLnRlc3Qobi5jc3MoYSwiZGlzcGxheSIpKSYm
MD09PWEub2Zmc2V0V2lkdGg/RGEoYSxJYSxmdW5jdGlvbigpe3JldHVybiBQYShhLGIsZCl9KTpQ
YShhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGY9ZCYmQ2EoYSksZz1k
JiZPYShhLGIsZCwiYm9yZGVyLWJveCI9PT1uLmNzcyhhLCJib3hTaXppbmciLCExLGYpLGYpO3Jl
dHVybiBnJiYoZT1ULmV4ZWMoYykpJiYicHgiIT09KGVbM118fCJweCIpJiYoYS5zdHlsZVtiXT1j
LGM9bi5jc3MoYSxiKSksTmEoYSxjLGcpfX19KSxuLmNzc0hvb2tzLm1hcmdpbkxlZnQ9R2EobC5y
ZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj8ocGFyc2VGbG9hdChGYShh
LCJtYXJnaW5MZWZ0IikpfHxhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtRGEoYSx7bWFy
Z2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxl
ZnR9KSkrInB4Ijp2b2lkIDB9KSxuLmNzc0hvb2tzLm1hcmdpblJpZ2h0PUdhKGwucmVsaWFibGVN
YXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBiP0RhKGEse2Rpc3BsYXk6ImlubGluZS1i
bG9jayJ9LEZhLFthLCJtYXJnaW5SaWdodCJdKTp2b2lkIDB9KSxuLmVhY2goe21hcmdpbjoiIixw
YWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYStiXT17
ZXhwYW5kOmZ1bmN0aW9uKGMpe2Zvcih2YXIgZD0wLGU9e30sZj0ic3RyaW5nIj09dHlwZW9mIGM/
Yy5zcGxpdCgiICIpOltjXTs0PmQ7ZCsrKWVbYStVW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTty
ZXR1cm4gZX19LEFhLnRlc3QoYSl8fChuLmNzc0hvb2tzW2ErYl0uc2V0PU5hKX0pLG4uZm4uZXh0
ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIg
ZCxlLGY9e30sZz0wO2lmKG4uaXNBcnJheShiKSl7Zm9yKGQ9Q2EoYSksZT1iLmxlbmd0aDtlPmc7
ZysrKWZbYltnXV09bi5jc3MoYSxiW2ddLCExLGQpO3JldHVybiBmfXJldHVybiB2b2lkIDAhPT1j
P24uc3R5bGUoYSxiLGMpOm4uY3NzKGEsYil9LGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93
OmZ1bmN0aW9uKCl7cmV0dXJuIFFhKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIFFh
KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYT9hP3Ro
aXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe1YodGhpcyk/bih0aGlz
KS5zaG93KCk6bih0aGlzKS5oaWRlKCl9KX19KTtmdW5jdGlvbiBSYShhLGIsYyxkLGUpe3JldHVy
biBuZXcgUmEucHJvdG90eXBlLmluaXQoYSxiLGMsZCxlKX1uLlR3ZWVuPVJhLFJhLnByb3RvdHlw
ZT17Y29uc3RydWN0b3I6UmEsaW5pdDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5lbGVtPWEs
dGhpcy5wcm9wPWMsdGhpcy5lYXNpbmc9ZXx8bi5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25z
PWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8
fChuLmNzc051bWJlcltjXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9UmEucHJvcEhv
b2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOlJhLnByb3BIb29rcy5f
ZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPVJhLnByb3BIb29rc1t0
aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9Yj1uLmVhc2lu
Z1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25z
LmR1cmF0aW9uKTp0aGlzLnBvcz1iPWEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIr
dGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlz
LmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6UmEucHJvcEhvb2tzLl9k
ZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sUmEucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVJhLnBy
b3RvdHlwZSxSYS5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0
dXJuIDEhPT1hLmVsZW0ubm9kZVR5cGV8fG51bGwhPWEuZWxlbVthLnByb3BdJiZudWxsPT1hLmVs
ZW0uc3R5bGVbYS5wcm9wXT9hLmVsZW1bYS5wcm9wXTooYj1uLmNzcyhhLmVsZW0sYS5wcm9wLCIi
KSxiJiYiYXV0byIhPT1iP2I6MCl9LHNldDpmdW5jdGlvbihhKXtuLmZ4LnN0ZXBbYS5wcm9wXT9u
LmZ4LnN0ZXBbYS5wcm9wXShhKToxIT09YS5lbGVtLm5vZGVUeXBlfHxudWxsPT1hLmVsZW0uc3R5
bGVbbi5jc3NQcm9wc1thLnByb3BdXSYmIW4uY3NzSG9va3NbYS5wcm9wXT9hLmVsZW1bYS5wcm9w
XT1hLm5vdzpuLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KX19fSxSYS5wcm9wSG9v
a3Muc2Nyb2xsVG9wPVJhLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5l
bGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19
LG4uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEp
e3JldHVybi41LU1hdGguY29zKGEqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sbi5meD1S
YS5wcm90b3R5cGUuaW5pdCxuLmZ4LnN0ZXA9e307dmFyIFNhLFRhLFVhPS9eKD86dG9nZ2xlfHNo
b3d8aGlkZSkkLyxWYT0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIFdhKCl7cmV0dXJuIGEuc2V0VGlt
ZW91dChmdW5jdGlvbigpe1NhPXZvaWQgMH0pLFNhPW4ubm93KCl9ZnVuY3Rpb24gWGEoYSxiKXt2
YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIpYz1VW2RdLGVbIm1h
cmdpbiIrY109ZVsicGFkZGluZyIrY109YTtyZXR1cm4gYiYmKGUub3BhY2l0eT1lLndpZHRoPWEp
LGV9ZnVuY3Rpb24gWWEoYSxiLGMpe2Zvcih2YXIgZCxlPShfYS50d2VlbmVyc1tiXXx8W10pLmNv
bmNhdChfYS50d2VlbmVyc1siKiJdKSxmPTAsZz1lLmxlbmd0aDtnPmY7ZisrKWlmKGQ9ZVtmXS5j
YWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlvbiBaYShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGos
ayxsPXRoaXMsbT17fSxvPWEuc3R5bGUscD1hLm5vZGVUeXBlJiZWKGEpLHE9Ti5nZXQoYSwiZnhz
aG93Iik7Yy5xdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQm
JihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51
bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1bmN0aW9uKCl7bC5hbHdheXMo
ZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5m
aXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYo
Yy5vdmVyZmxvdz1bby5vdmVyZmxvdyxvLm92ZXJmbG93WCxvLm92ZXJmbG93WV0saj1uLmNzcyhh
LCJkaXNwbGF5Iiksaz0ibm9uZSI9PT1qP04uZ2V0KGEsIm9sZGRpc3BsYXkiKXx8emEoYS5ub2Rl
TmFtZSk6aiwiaW5saW5lIj09PWsmJiJub25lIj09PW4uY3NzKGEsImZsb2F0IikmJihvLmRpc3Bs
YXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYoby5vdmVyZmxvdz0iaGlkZGVuIixsLmFs
d2F5cyhmdW5jdGlvbigpe28ub3ZlcmZsb3c9Yy5vdmVyZmxvd1swXSxvLm92ZXJmbG93WD1jLm92
ZXJmbG93WzFdLG8ub3ZlcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJb
ZF0sVWEuZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShwPyJo
aWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcXx8dm9pZCAwPT09cVtkXSljb250aW51ZTtw
PSEwfW1bZF09cSYmcVtkXXx8bi5zdHlsZShhLGQpfWVsc2Ugaj12b2lkIDA7aWYobi5pc0VtcHR5
T2JqZWN0KG0pKSJpbmxpbmUiPT09KCJub25lIj09PWo/emEoYS5ub2RlTmFtZSk6aikmJihvLmRp
c3BsYXk9aik7ZWxzZXtxPyJoaWRkZW4iaW4gcSYmKHA9cS5oaWRkZW4pOnE9Ti5hY2Nlc3MoYSwi
ZnhzaG93Iix7fSksZiYmKHEuaGlkZGVuPSFwKSxwP24oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlv
bigpe24oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7Ti5yZW1vdmUoYSwiZnhz
aG93Iik7Zm9yKGIgaW4gbSluLnN0eWxlKGEsYixtW2JdKX0pO2ZvcihkIGluIG0pZz1ZYShwP3Fb
ZF06MCxkLGwpLGQgaW4gcXx8KHFbZF09Zy5zdGFydCxwJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0
PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uICRhKGEsYil7dmFyIGMs
ZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bi5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxuLmlz
QXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2Nd
KSxnPW4uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBh
W2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVu
Y3Rpb24gX2EoYSxiLGMpe3ZhciBkLGUsZj0wLGc9X2EucHJlZmlsdGVycy5sZW5ndGgsaD1uLkRl
ZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGkuZWxlbX0pLGk9ZnVuY3Rpb24oKXtp
ZihlKXJldHVybiExO2Zvcih2YXIgYj1TYXx8V2EoKSxjPU1hdGgubWF4KDAsai5zdGFydFRpbWUr
ai5kdXJhdGlvbi1iKSxkPWMvai5kdXJhdGlvbnx8MCxmPTEtZCxnPTAsaT1qLnR3ZWVucy5sZW5n
dGg7aT5nO2crKylqLnR3ZWVuc1tnXS5ydW4oZik7cmV0dXJuIGgubm90aWZ5V2l0aChhLFtqLGYs
Y10pLDE+ZiYmaT9jOihoLnJlc29sdmVXaXRoKGEsW2pdKSwhMSl9LGo9aC5wcm9taXNlKHtlbGVt
OmEscHJvcHM6bi5leHRlbmQoe30sYiksb3B0czpuLmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7
fSxlYXNpbmc6bi5lYXNpbmcuX2RlZmF1bHR9LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdp
bmFsT3B0aW9uczpjLHN0YXJ0VGltZTpTYXx8V2EoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVu
czpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW4uVHdlZW4oYSxqLm9wdHMsYixj
LGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMu
cHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDow
O2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0
dXJuIGI/KGgubm90aWZ5V2l0aChhLFtqLDEsMF0pLGgucmVzb2x2ZVdpdGgoYSxbaixiXSkpOmgu
cmVqZWN0V2l0aChhLFtqLGJdKSx0aGlzfX0pLGs9ai5wcm9wcztmb3IoJGEoayxqLm9wdHMuc3Bl
Y2lhbEVhc2luZyk7Zz5mO2YrKylpZihkPV9hLnByZWZpbHRlcnNbZl0uY2FsbChqLGEsayxqLm9w
dHMpKXJldHVybiBuLmlzRnVuY3Rpb24oZC5zdG9wKSYmKG4uX3F1ZXVlSG9va3Moai5lbGVtLGou
b3B0cy5xdWV1ZSkuc3RvcD1uLnByb3h5KGQuc3RvcCxkKSksZDtyZXR1cm4gbi5tYXAoayxZYSxq
KSxuLmlzRnVuY3Rpb24oai5vcHRzLnN0YXJ0KSYmai5vcHRzLnN0YXJ0LmNhbGwoYSxqKSxuLmZ4
LnRpbWVyKG4uZXh0ZW5kKGkse2VsZW06YSxhbmltOmoscXVldWU6ai5vcHRzLnF1ZXVlfSkpLGou
cHJvZ3Jlc3Moai5vcHRzLnByb2dyZXNzKS5kb25lKGoub3B0cy5kb25lLGoub3B0cy5jb21wbGV0
ZSkuZmFpbChqLm9wdHMuZmFpbCkuYWx3YXlzKGoub3B0cy5hbHdheXMpfW4uQW5pbWF0aW9uPW4u
ZXh0ZW5kKF9hLHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY3JlYXRl
VHdlZW4oYSxiKTtyZXR1cm4gVyhjLmVsZW0sYSxULmV4ZWMoYiksYyksY31dfSx0d2VlbmVyOmZ1
bmN0aW9uKGEsYil7bi5pc0Z1bmN0aW9uKGEpPyhiPWEsYT1bIioiXSk6YT1hLm1hdGNoKEcpO2Zv
cih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxfYS50d2VlbmVyc1tjXT1fYS50
d2VlbmVyc1tjXXx8W10sX2EudHdlZW5lcnNbY10udW5zaGlmdChiKX0scHJlZmlsdGVyczpbWmFd
LHByZWZpbHRlcjpmdW5jdGlvbihhLGIpe2I/X2EucHJlZmlsdGVycy51bnNoaWZ0KGEpOl9hLnBy
ZWZpbHRlcnMucHVzaChhKX19KSxuLnNwZWVkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiYib2Jq
ZWN0Ij09dHlwZW9mIGE/bi5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxuLmlzRnVu
Y3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIW4uaXNGdW5jdGlvbihiKSYm
Yn07cmV0dXJuIGQuZHVyYXRpb249bi5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIGQuZHVyYXRp
b24/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIG4uZnguc3BlZWRzP24uZnguc3BlZWRzW2QuZHVy
YXRpb25dOm4uZnguc3BlZWRzLl9kZWZhdWx0LG51bGwhPWQucXVldWUmJmQucXVldWUhPT0hMHx8
KGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bi5p
c0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZuLmRlcXVldWUodGhp
cyxkLnF1ZXVlKX0sZH0sbi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1
cm4gdGhpcy5maWx0ZXIoVikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7
b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bi5pc0Vt
cHR5T2JqZWN0KGEpLGY9bi5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPV9hKHRoaXMs
bi5leHRlbmQoe30sYSksZik7KGV8fE4uZ2V0KHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07
cmV0dXJuIGcuZmluaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVl
KGYucXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe3ZhciBi
PWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGM9
YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVh
Y2goZnVuY3Rpb24oKXt2YXIgYj0hMCxlPW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1l
cnMsZz1OLmdldCh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihl
IGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZWYS50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3Ro
O2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFu
aW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyFiJiZjfHxuLmRlcXVldWUodGhpcyxhKX0p
fSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNo
KGZ1bmN0aW9uKCl7dmFyIGIsYz1OLmdldCh0aGlzKSxkPWNbYSsicXVldWUiXSxlPWNbYSsicXVl
dWVIb29rcyJdLGY9bi50aW1lcnMsZz1kP2QubGVuZ3RoOjA7Zm9yKGMuZmluaXNoPSEwLG4ucXVl
dWUodGhpcyxhLFtdKSxlJiZlLnN0b3AmJmUuc3RvcC5jYWxsKHRoaXMsITApLGI9Zi5sZW5ndGg7
Yi0tOylmW2JdLmVsZW09PT10aGlzJiZmW2JdLnF1ZXVlPT09YSYmKGZbYl0uYW5pbS5zdG9wKCEw
KSxmLnNwbGljZShiLDEpKTtmb3IoYj0wO2c+YjtiKyspZFtiXSYmZFtiXS5maW5pc2gmJmRbYl0u
ZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIGMuZmluaXNofSl9fSksbi5lYWNoKFsidG9nZ2xlIiwi
c2hvdyIsImhpZGUiXSxmdW5jdGlvbihhLGIpe3ZhciBjPW4uZm5bYl07bi5mbltiXT1mdW5jdGlv
bihhLGQsZSl7cmV0dXJuIG51bGw9PWF8fCJib29sZWFuIj09dHlwZW9mIGE/Yy5hcHBseSh0aGlz
LGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKFhhKGIsITApLGEsZCxlKX19KSxuLmVhY2goe3NsaWRl
RG93bjpYYSgic2hvdyIpLHNsaWRlVXA6WGEoImhpZGUiKSxzbGlkZVRvZ2dsZTpYYSgidG9nZ2xl
IiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVU
b2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24o
YSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksbi50aW1lcnM9W10sbi5meC50
aWNrPWZ1bmN0aW9uKCl7dmFyIGEsYj0wLGM9bi50aW1lcnM7Zm9yKFNhPW4ubm93KCk7YjxjLmxl
bmd0aDtiKyspYT1jW2JdLGEoKXx8Y1tiXSE9PWF8fGMuc3BsaWNlKGItLSwxKTtjLmxlbmd0aHx8
bi5meC5zdG9wKCksU2E9dm9pZCAwfSxuLmZ4LnRpbWVyPWZ1bmN0aW9uKGEpe24udGltZXJzLnB1
c2goYSksYSgpP24uZnguc3RhcnQoKTpuLnRpbWVycy5wb3AoKX0sbi5meC5pbnRlcnZhbD0xMyxu
LmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7VGF8fChUYT1hLnNldEludGVydmFsKG4uZngudGljayxuLmZ4
LmludGVydmFsKSl9LG4uZnguc3RvcD1mdW5jdGlvbigpe2EuY2xlYXJJbnRlcnZhbChUYSksVGE9
bnVsbH0sbi5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sbi5mbi5k
ZWxheT1mdW5jdGlvbihiLGMpe3JldHVybiBiPW4uZng/bi5meC5zcGVlZHNbYl18fGI6YixjPWN8
fCJmeCIsdGhpcy5xdWV1ZShjLGZ1bmN0aW9uKGMsZCl7dmFyIGU9YS5zZXRUaW1lb3V0KGMsYik7
ZC5zdG9wPWZ1bmN0aW9uKCl7YS5jbGVhclRpbWVvdXQoZSl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9
ZC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGI9ZC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxjPWIu
YXBwZW5kQ2hpbGQoZC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7YS50eXBlPSJjaGVja2JveCIs
bC5jaGVja09uPSIiIT09YS52YWx1ZSxsLm9wdFNlbGVjdGVkPWMuc2VsZWN0ZWQsYi5kaXNhYmxl
ZD0hMCxsLm9wdERpc2FibGVkPSFjLmRpc2FibGVkLGE9ZC5jcmVhdGVFbGVtZW50KCJpbnB1dCIp
LGEudmFsdWU9InQiLGEudHlwZT0icmFkaW8iLGwucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgp
O3ZhciBhYixiYj1uLmV4cHIuYXR0ckhhbmRsZTtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihh
LGIpe3JldHVybiBLKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVB
dHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZUF0dHIo
dGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5u
b2RlVHlwZTtpZigzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2Yg
YS5nZXRBdHRyaWJ1dGU/bi5wcm9wKGEsYixjKTooMT09PWYmJm4uaXNYTUxEb2MoYSl8fChiPWIu
dG9Mb3dlckNhc2UoKSxlPW4uYXR0ckhvb2tzW2JdfHwobi5leHByLm1hdGNoLmJvb2wudGVzdChi
KT9hYjp2b2lkIDApKSx2b2lkIDAhPT1jP251bGw9PT1jP3ZvaWQgbi5yZW1vdmVBdHRyKGEsYik6
ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6KGEuc2V0QXR0cmlidXRl
KGIsYysiIiksYyk6ZSYmImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDooZD1uLmZp
bmQuYXR0cihhLGIpLG51bGw9PWQ/dm9pZCAwOmQpKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVu
Y3Rpb24oYSxiKXtpZighbC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09YiYmbi5ub2RlTmFtZShhLCJp
bnB1dCIpKXt2YXIgYz1hLnZhbHVlO3JldHVybiBhLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYm
KGEudmFsdWU9YyksYn19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT0wLGY9
YiYmYi5tYXRjaChHKTtpZihmJiYxPT09YS5ub2RlVHlwZSl3aGlsZShjPWZbZSsrXSlkPW4ucHJv
cEZpeFtjXXx8YyxuLmV4cHIubWF0Y2guYm9vbC50ZXN0KGMpJiYoYVtkXT0hMSksYS5yZW1vdmVB
dHRyaWJ1dGUoYyl9fSksYWI9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9uLnJl
bW92ZUF0dHIoYSxjKTphLnNldEF0dHJpYnV0ZShjLGMpLGN9fSxuLmVhY2gobi5leHByLm1hdGNo
LmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oYSxiKXt2YXIgYz1iYltiXXx8bi5m
aW5kLmF0dHI7YmJbYl09ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPWJiW2Jd
LGJiW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxiYltiXT1mKSxl
fX0pO3ZhciBjYj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGRiPS9eKD86
YXxhcmVhKSQvaTtuLmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBLKHRoaXMs
bi5wcm9wLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3Jl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLnByb3BGaXhbYV18fGFdfSl9
fSksbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lm
KDMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1uLnBy
b3BGaXhbYl18fGIsZT1uLnByb3BIb29rc1tiXSksCit2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYm
dm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0o
ZD1lLmdldChhLGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihh
KXt2YXIgYj1uLmZpbmQuYXR0cihhLCJ0YWJpbmRleCIpO3JldHVybiBiP3BhcnNlSW50KGIsMTAp
OmNiLnRlc3QoYS5ub2RlTmFtZSl8fGRiLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOi0xfX19
LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifX0pLGwub3B0U2Vs
ZWN0ZWR8fChuLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFy
ZW50Tm9kZTtyZXR1cm4gYiYmYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRl
eCxudWxsfSxzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2ImJihiLnNlbGVjdGVk
SW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksbi5lYWNo
KFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBh
ZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVu
dEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlz
fSk7dmFyIGViPS9bXHRcclxuXGZdL2c7ZnVuY3Rpb24gZmIoYSl7cmV0dXJuIGEuZ2V0QXR0cmli
dXRlJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9bi5mbi5leHRlbmQoe2FkZENsYXNzOmZ1
bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk9MDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsZmIo
dGhpcykpKX0pO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGls
ZShjPXRoaXNbaSsrXSlpZihlPWZiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJl
cGxhY2UoZWIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKWQuaW5kZXhPZigiICIrZisiICIpPDAm
JihkKz1mKyIgIik7aD1uLnRyaW0oZCksZSE9PWgmJmMuc2V0QXR0cmlidXRlKCJjbGFzcyIsaCl9
fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxp
PTA7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlz
KS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLGZiKHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxl
bmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpO2lmKCJzdHJpbmciPT10eXBlb2YgYSYm
YSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPWZiKGMpLGQ9MT09PWMu
bm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoZWIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytd
KXdoaWxlKGQuaW5kZXhPZigiICIrZisiICIpPi0xKWQ9ZC5yZXBsYWNlKCIgIitmKyIgIiwiICIp
O2g9bi50cmltKGQpLGUhPT1oJiZjLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGgpfX1yZXR1cm4gdGhp
c30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVh
biI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3Zl
Q2xhc3MoYSk6bi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLnRv
Z2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsZmIodGhpcyksYiksYil9KTp0aGlzLmVhY2goZnVuY3Rp
b24oKXt2YXIgYixkLGUsZjtpZigic3RyaW5nIj09PWMpe2Q9MCxlPW4odGhpcyksZj1hLm1hdGNo
KEcpfHxbXTt3aGlsZShiPWZbZCsrXSllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5h
ZGRDbGFzcyhiKX1lbHNlIHZvaWQgMCE9PWEmJiJib29sZWFuIiE9PWN8fChiPWZiKHRoaXMpLGIm
Jk4uc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLGIpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNl
dEF0dHJpYnV0ZSgiY2xhc3MiLGJ8fGE9PT0hMT8iIjpOLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9f
Iil8fCIiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPTA7Yj0iICIrYSsiICI7
d2hpbGUoYz10aGlzW2QrK10paWYoMT09PWMubm9kZVR5cGUmJigiICIrZmIoYykrIiAiKS5yZXBs
YWNlKGViLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgZ2I9L1xy
L2csaGI9L1tceDIwXHRcclxuXGZdKy9nO24uZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oYSl7dmFy
IGIsYyxkLGU9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZD1uLmlzRnVuY3Rp
b24oYSksdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBlOzE9PT10aGlzLm5vZGVUeXBlJiYoZT1k
P2EuY2FsbCh0aGlzLGMsbih0aGlzKS52YWwoKSk6YSxudWxsPT1lP2U9IiI6Im51bWJlciI9PXR5
cGVvZiBlP2UrPSIiOm4uaXNBcnJheShlKSYmKGU9bi5tYXAoZSxmdW5jdGlvbihhKXtyZXR1cm4g
bnVsbD09YT8iIjphKyIifSkpLGI9bi52YWxIb29rc1t0aGlzLnR5cGVdfHxuLnZhbEhvb2tzW3Ro
aXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmInNldCJpbiBiJiZ2b2lkIDAhPT1iLnNldCh0
aGlzLGUsInZhbHVlIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9bi52YWxIb29r
c1tlLnR5cGVdfHxuLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmImdldCJp
biBiJiZ2b2lkIDAhPT0oYz1iLmdldChlLCJ2YWx1ZSIpKT9jOihjPWUudmFsdWUsInN0cmluZyI9
PXR5cGVvZiBjP2MucmVwbGFjZShnYiwiIik6bnVsbD09Yz8iIjpjKX19fSksbi5leHRlbmQoe3Zh
bEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1uLmZpbmQuYXR0cihhLCJ2YWx1
ZSIpO3JldHVybiBudWxsIT1iP2I6bi50cmltKG4udGV4dChhKSkucmVwbGFjZShoYiwiICIpfX0s
c2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVj
dGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsx
OmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sKGMuc2VsZWN0ZWR8fGk9
PT1lKSYmKGwub3B0RGlzYWJsZWQ/IWMuZGlzYWJsZWQ6bnVsbD09PWMuZ2V0QXR0cmlidXRlKCJk
aXNhYmxlZCIpKSYmKCFjLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFuLm5vZGVOYW1lKGMucGFyZW50
Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bihjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1y
ZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW4ubWFrZUFy
cmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWQ9ZVtnXSwoZC5zZWxlY3RlZD1uLmluQXJyYXko
bi52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPi0xKSYmKGM9ITApO3JldHVybiBjfHwoYS5zZWxl
Y3RlZEluZGV4PS0xKSxmfX19fSksbi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9u
KCl7bi52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uaXNBcnJheShi
KT9hLmNoZWNrZWQ9bi5pbkFycmF5KG4oYSkudmFsKCksYik+LTE6dm9pZCAwfX0sbC5jaGVja09u
fHwobi52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0
dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pO3ZhciBpYj0vXig/OmZvY3VzaW5mb2N1
c3xmb2N1c291dGJsdXIpJC87bi5leHRlbmQobi5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihiLGMs
ZSxmKXt2YXIgZyxoLGksaixsLG0sbyxwPVtlfHxkXSxxPWsuY2FsbChiLCJ0eXBlIik/Yi50eXBl
OmIscj1rLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZiho
PWk9ZT1lfHxkLDMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmIWliLnRlc3QocStuLmV2
ZW50LnRyaWdnZXJlZCkmJihxLmluZGV4T2YoIi4iKT4tMSYmKHI9cS5zcGxpdCgiLiIpLHE9ci5z
aGlmdCgpLHIuc29ydCgpKSxsPXEuaW5kZXhPZigiOiIpPDAmJiJvbiIrcSxiPWJbbi5leHBhbmRv
XT9iOm5ldyBuLkV2ZW50KHEsIm9iamVjdCI9PXR5cGVvZiBiJiZiKSxiLmlzVHJpZ2dlcj1mPzI6
MyxiLm5hbWVzcGFjZT1yLmpvaW4oIi4iKSxiLnJuYW1lc3BhY2U9Yi5uYW1lc3BhY2U/bmV3IFJl
Z0V4cCgiKF58XFwuKSIrci5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLGIu
cmVzdWx0PXZvaWQgMCxiLnRhcmdldHx8KGIudGFyZ2V0PWUpLGM9bnVsbD09Yz9bYl06bi5tYWtl
QXJyYXkoYyxbYl0pLG89bi5ldmVudC5zcGVjaWFsW3FdfHx7fSxmfHwhby50cmlnZ2VyfHxvLnRy
aWdnZXIuYXBwbHkoZSxjKSE9PSExKSl7aWYoIWYmJiFvLm5vQnViYmxlJiYhbi5pc1dpbmRvdyhl
KSl7Zm9yKGo9by5kZWxlZ2F0ZVR5cGV8fHEsaWIudGVzdChqK3EpfHwoaD1oLnBhcmVudE5vZGUp
O2g7aD1oLnBhcmVudE5vZGUpcC5wdXNoKGgpLGk9aDtpPT09KGUub3duZXJEb2N1bWVudHx8ZCkm
JnAucHVzaChpLmRlZmF1bHRWaWV3fHxpLnBhcmVudFdpbmRvd3x8YSl9Zz0wO3doaWxlKChoPXBb
ZysrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPWc+MT9qOm8uYmluZFR5cGV8
fHEsbT0oTi5nZXQoaCwiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZOLmdldChoLCJoYW5kbGUiKSxt
JiZtLmFwcGx5KGgsYyksbT1sJiZoW2xdLG0mJm0uYXBwbHkmJkwoaCkmJihiLnJlc3VsdD1tLmFw
cGx5KGgsYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gYi50eXBl
PXEsZnx8Yi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8by5fZGVmYXVsdCYmby5fZGVmYXVsdC5hcHBs
eShwLnBvcCgpLGMpIT09ITF8fCFMKGUpfHxsJiZuLmlzRnVuY3Rpb24oZVtxXSkmJiFuLmlzV2lu
ZG93KGUpJiYoaT1lW2xdLGkmJihlW2xdPW51bGwpLG4uZXZlbnQudHJpZ2dlcmVkPXEsZVtxXSgp
LG4uZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxpJiYoZVtsXT1pKSksYi5yZXN1bHR9fSxzaW11bGF0
ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9bi5leHRlbmQobmV3IG4uRXZlbnQsYyx7dHlwZTphLGlz
U2ltdWxhdGVkOiEwfSk7bi5ldmVudC50cmlnZ2VyKGQsbnVsbCxiKX19KSxuLmZuLmV4dGVuZCh7
dHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50
LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9
dGhpc1swXTtyZXR1cm4gYz9uLmV2ZW50LnRyaWdnZXIoYSxiLGMsITApOnZvaWQgMH19KSxuLmVh
Y2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2Fk
IGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91
c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24g
a2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxi
KXtuLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9u
KGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rp
b24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSksbC5m
b2N1c2luPSJvbmZvY3VzaW4iaW4gYSxsLmZvY3VzaW58fG4uZWFjaCh7Zm9jdXM6ImZvY3VzaW4i
LGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbihhKXtuLmV2ZW50
LnNpbXVsYXRlKGIsYS50YXJnZXQsbi5ldmVudC5maXgoYSkpfTtuLmV2ZW50LnNwZWNpYWxbYl09
e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9Ti5hY2Nl
c3MoZCxiKTtlfHxkLmFkZEV2ZW50TGlzdGVuZXIoYSxjLCEwKSxOLmFjY2VzcyhkLGIsKGV8fDAp
KzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxl
PU4uYWNjZXNzKGQsYiktMTtlP04uYWNjZXNzKGQsYixlKTooZC5yZW1vdmVFdmVudExpc3RlbmVy
KGEsYywhMCksTi5yZW1vdmUoZCxiKSl9fX0pO3ZhciBqYj1hLmxvY2F0aW9uLGtiPW4ubm93KCks
bGI9L1w/LztuLnBhcnNlSlNPTj1mdW5jdGlvbihhKXtyZXR1cm4gSlNPTi5wYXJzZShhKyIiKX0s
bi5wYXJzZVhNTD1mdW5jdGlvbihiKXt2YXIgYztpZighYnx8InN0cmluZyIhPXR5cGVvZiBiKXJl
dHVybiBudWxsO3RyeXtjPShuZXcgYS5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhiLCJ0ZXh0
L3htbCIpfWNhdGNoKGQpe2M9dm9pZCAwfXJldHVybiBjJiYhYy5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgicGFyc2VyZXJyb3IiKS5sZW5ndGh8fG4uZXJyb3IoIkludmFsaWQgWE1MOiAiK2IpLGN9O3Zh
ciBtYj0vIy4qJC8sbmI9LyhbPyZdKV89W14mXSovLG9iPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0q
KSQvZ20scGI9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVz
fHdpZGdldCk6JC8scWI9L14oPzpHRVR8SEVBRCkkLyxyYj0vXlwvXC8vLHNiPXt9LHRiPXt9LHVi
PSIqLyIuY29uY2F0KCIqIiksdmI9ZC5jcmVhdGVFbGVtZW50KCJhIik7dmIuaHJlZj1qYi5ocmVm
O2Z1bmN0aW9uIHdiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYm
KGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEcpfHxbXTtpZihu
LmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZFswXT8oZD1kLnNsaWNlKDEpfHwi
KiIsKGFbZF09YVtkXXx8W10pLnVuc2hpZnQoYykpOihhW2RdPWFbZF18fFtdKS5wdXNoKGMpfX1m
dW5jdGlvbiB4YihhLGIsYyxkKXt2YXIgZT17fSxmPWE9PT10YjtmdW5jdGlvbiBnKGgpe3ZhciBp
O3JldHVybiBlW2hdPSEwLG4uZWFjaChhW2hdfHxbXSxmdW5jdGlvbihhLGgpe3ZhciBqPWgoYixj
LGQpO3JldHVybiJzdHJpbmciIT10eXBlb2Yganx8Znx8ZVtqXT9mPyEoaT1qKTp2b2lkIDA6KGIu
ZGF0YVR5cGVzLnVuc2hpZnQoaiksZyhqKSwhMSl9KSxpfXJldHVybiBnKGIuZGF0YVR5cGVzWzBd
KXx8IWVbIioiXSYmZygiKiIpfWZ1bmN0aW9uIHliKGEsYil7dmFyIGMsZCxlPW4uYWpheFNldHRp
bmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoYyBpbiBiKXZvaWQgMCE9PWJbY10mJigoZVtjXT9hOmR8
fChkPXt9KSlbY109YltjXSk7cmV0dXJuIGQmJm4uZXh0ZW5kKCEwLGEsZCksYX1mdW5jdGlvbiB6
YihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNvbnRlbnRzLGk9YS5kYXRhVHlwZXM7d2hpbGUoIioi
PT09aVswXSlpLnNoaWZ0KCksdm9pZCAwPT09ZCYmKGQ9YS5taW1lVHlwZXx8Yi5nZXRSZXNwb25z
ZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKGQpZm9yKGUgaW4gaClpZihoW2VdJiZoW2VdLnRl
c3QoZCkpe2kudW5zaGlmdChlKTticmVha31pZihpWzBdaW4gYylmPWlbMF07ZWxzZXtmb3IoZSBp
biBjKXtpZighaVswXXx8YS5jb252ZXJ0ZXJzW2UrIiAiK2lbMF1dKXtmPWU7YnJlYWt9Z3x8KGc9
ZSl9Zj1mfHxnfXJldHVybiBmPyhmIT09aVswXSYmaS51bnNoaWZ0KGYpLGNbZl0pOnZvaWQgMH1m
dW5jdGlvbiBBYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo9e30saz1hLmRhdGFUeXBlcy5zbGlj
ZSgpO2lmKGtbMV0pZm9yKGcgaW4gYS5jb252ZXJ0ZXJzKWpbZy50b0xvd2VyQ2FzZSgpXT1hLmNv
bnZlcnRlcnNbZ107Zj1rLnNoaWZ0KCk7d2hpbGUoZilpZihhLnJlc3BvbnNlRmllbGRzW2ZdJiYo
Y1thLnJlc3BvbnNlRmllbGRzW2ZdXT1iKSwhaSYmZCYmYS5kYXRhRmlsdGVyJiYoYj1hLmRhdGFG
aWx0ZXIoYixhLmRhdGFUeXBlKSksaT1mLGY9ay5zaGlmdCgpKWlmKCIqIj09PWYpZj1pO2Vsc2Ug
aWYoIioiIT09aSYmaSE9PWYpe2lmKGc9altpKyIgIitmXXx8alsiKiAiK2ZdLCFnKWZvcihlIGlu
IGopaWYoaD1lLnNwbGl0KCIgIiksaFsxXT09PWYmJihnPWpbaSsiICIraFswXV18fGpbIiogIito
WzBdXSkpe2c9PT0hMD9nPWpbZV06altlXSE9PSEwJiYoZj1oWzBdLGsudW5zaGlmdChoWzFdKSk7
YnJlYWt9aWYoZyE9PSEwKWlmKGcmJmFbInRocm93cyJdKWI9ZyhiKTtlbHNlIHRyeXtiPWcoYil9
Y2F0Y2gobCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6Zz9sOiJObyBjb252ZXJz
aW9uIGZyb20gIitpKyIgdG8gIitmfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOmJ9fW4u
ZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3Vy
bDpqYi5ocmVmLHR5cGU6IkdFVCIsaXNMb2NhbDpwYi50ZXN0KGpiLnByb3RvY29sKSxnbG9iYWw6
ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7IioiOnViLHRleHQ6InRl
eHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1s
Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1s
Oi9cYnhtbFxiLyxodG1sOi9cYmh0bWwvLGpzb246L1xianNvblxiL30scmVzcG9uc2VGaWVsZHM6
e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09O
In0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24i
Om4ucGFyc2VKU09OLCJ0ZXh0IHhtbCI6bi5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxj
b250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/eWIoeWIoYSxuLmFq
YXhTZXR0aW5ncyksYik6eWIobi5hamF4U2V0dGluZ3MsYSl9LGFqYXhQcmVmaWx0ZXI6d2Ioc2Ip
LGFqYXhUcmFuc3BvcnQ6d2IodGIpLGFqYXg6ZnVuY3Rpb24oYixjKXsib2JqZWN0Ij09dHlwZW9m
IGImJihjPWIsYj12b2lkIDApLGM9Y3x8e307dmFyIGUsZixnLGgsaSxqLGssbCxtPW4uYWpheFNl
dHVwKHt9LGMpLG89bS5jb250ZXh0fHxtLHA9bS5jb250ZXh0JiYoby5ub2RlVHlwZXx8by5qcXVl
cnkpP24obyk6bi5ldmVudCxxPW4uRGVmZXJyZWQoKSxyPW4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9y
eSIpLHM9bS5zdGF0dXNDb2RlfHx7fSx0PXt9LHU9e30sdj0wLHc9ImNhbmNlbGVkIix4PXtyZWFk
eVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoMj09PXYpe2lm
KCFoKXtoPXt9O3doaWxlKGI9b2IuZXhlYyhnKSloW2JbMV0udG9Mb3dlckNhc2UoKV09YlsyXX1i
PWhbYS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbnVsbD09Yj9udWxsOmJ9LGdldEFsbFJlc3BvbnNl
SGVhZGVyczpmdW5jdGlvbigpe3JldHVybiAyPT09dj9nOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6
ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHZ8fChhPXVbY109dVtj
XXx8YSx0W2FdPWIpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHZ8
fChtLm1pbWVUeXBlPWEpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYSlp
ZigyPnYpZm9yKGIgaW4gYSlzW2JdPVtzW2JdLGFbYl1dO2Vsc2UgeC5hbHdheXMoYVt4LnN0YXR1
c10pO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihhKXt2YXIgYj1hfHx3O3JldHVybiBlJiZl
LmFib3J0KGIpLHooMCxiKSx0aGlzfX07aWYocS5wcm9taXNlKHgpLmNvbXBsZXRlPXIuYWRkLHgu
c3VjY2Vzcz14LmRvbmUseC5lcnJvcj14LmZhaWwsbS51cmw9KChifHxtLnVybHx8amIuaHJlZikr
IiIpLnJlcGxhY2UobWIsIiIpLnJlcGxhY2UocmIsamIucHJvdG9jb2wrIi8vIiksbS50eXBlPWMu
bWV0aG9kfHxjLnR5cGV8fG0ubWV0aG9kfHxtLnR5cGUsbS5kYXRhVHlwZXM9bi50cmltKG0uZGF0
YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChHKXx8WyIiXSxudWxsPT1tLmNyb3NzRG9t
YWluKXtqPWQuY3JlYXRlRWxlbWVudCgiYSIpO3RyeXtqLmhyZWY9bS51cmwsai5ocmVmPWouaHJl
ZixtLmNyb3NzRG9tYWluPXZiLnByb3RvY29sKyIvLyIrdmIuaG9zdCE9ai5wcm90b2NvbCsiLy8i
K2ouaG9zdH1jYXRjaCh5KXttLmNyb3NzRG9tYWluPSEwfX1pZihtLmRhdGEmJm0ucHJvY2Vzc0Rh
dGEmJiJzdHJpbmciIT10eXBlb2YgbS5kYXRhJiYobS5kYXRhPW4ucGFyYW0obS5kYXRhLG0udHJh
ZGl0aW9uYWwpKSx4YihzYixtLGMseCksMj09PXYpcmV0dXJuIHg7az1uLmV2ZW50JiZtLmdsb2Jh
bCxrJiYwPT09bi5hY3RpdmUrKyYmbi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxtLnR5cGU9
bS50eXBlLnRvVXBwZXJDYXNlKCksbS5oYXNDb250ZW50PSFxYi50ZXN0KG0udHlwZSksZj1tLnVy
bCxtLmhhc0NvbnRlbnR8fChtLmRhdGEmJihmPW0udXJsKz0obGIudGVzdChmKT8iJiI6Ij8iKStt
LmRhdGEsZGVsZXRlIG0uZGF0YSksbS5jYWNoZT09PSExJiYobS51cmw9bmIudGVzdChmKT9mLnJl
cGxhY2UobmIsIiQxXz0iK2tiKyspOmYrKGxiLnRlc3QoZik/IiYiOiI/IikrIl89IitrYisrKSks
bS5pZk1vZGlmaWVkJiYobi5sYXN0TW9kaWZpZWRbZl0mJnguc2V0UmVxdWVzdEhlYWRlcigiSWYt
TW9kaWZpZWQtU2luY2UiLG4ubGFzdE1vZGlmaWVkW2ZdKSxuLmV0YWdbZl0mJnguc2V0UmVxdWVz
dEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsbi5ldGFnW2ZdKSksKG0uZGF0YSYmbS5oYXNDb250ZW50
JiZtLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ4LnNldFJlcXVlc3RIZWFkZXIo
IkNvbnRlbnQtVHlwZSIsbS5jb250ZW50VHlwZSkseC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQi
LG0uZGF0YVR5cGVzWzBdJiZtLmFjY2VwdHNbbS5kYXRhVHlwZXNbMF1dP20uYWNjZXB0c1ttLmRh
dGFUeXBlc1swXV0rKCIqIiE9PW0uZGF0YVR5cGVzWzBdPyIsICIrdWIrIjsgcT0wLjAxIjoiIik6
bS5hY2NlcHRzWyIqIl0pO2ZvcihsIGluIG0uaGVhZGVycyl4LnNldFJlcXVlc3RIZWFkZXIobCxt
LmhlYWRlcnNbbF0pO2lmKG0uYmVmb3JlU2VuZCYmKG0uYmVmb3JlU2VuZC5jYWxsKG8seCxtKT09
PSExfHwyPT09dikpcmV0dXJuIHguYWJvcnQoKTt3PSJhYm9ydCI7Zm9yKGwgaW57c3VjY2Vzczox
LGVycm9yOjEsY29tcGxldGU6MX0peFtsXShtW2xdKTtpZihlPXhiKHRiLG0sYyx4KSl7aWYoeC5y
ZWFkeVN0YXRlPTEsayYmcC50cmlnZ2VyKCJhamF4U2VuZCIsW3gsbV0pLDI9PT12KXJldHVybiB4
O20uYXN5bmMmJm0udGltZW91dD4wJiYoaT1hLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LmFib3J0
KCJ0aW1lb3V0Iil9LG0udGltZW91dCkpO3RyeXt2PTEsZS5zZW5kKHQseil9Y2F0Y2goeSl7aWYo
ISgyPnYpKXRocm93IHk7eigtMSx5KX19ZWxzZSB6KC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlv
biB6KGIsYyxkLGgpe3ZhciBqLGwsdCx1LHcseT1jOzIhPT12JiYodj0yLGkmJmEuY2xlYXJUaW1l
b3V0KGkpLGU9dm9pZCAwLGc9aHx8IiIseC5yZWFkeVN0YXRlPWI+MD80OjAsaj1iPj0yMDAmJjMw
MD5ifHwzMDQ9PT1iLGQmJih1PXpiKG0seCxkKSksdT1BYihtLHUseCxqKSxqPyhtLmlmTW9kaWZp
ZWQmJih3PXguZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobi5sYXN0TW9k
aWZpZWRbZl09dyksdz14LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG4uZXRhZ1tmXT13
KSksMjA0PT09Ynx8IkhFQUQiPT09bS50eXBlP3k9Im5vY29udGVudCI6MzA0PT09Yj95PSJub3Rt
b2RpZmllZCI6KHk9dS5zdGF0ZSxsPXUuZGF0YSx0PXUuZXJyb3Isaj0hdCkpOih0PXksIWImJnl8
fCh5PSJlcnJvciIsMD5iJiYoYj0wKSkpLHguc3RhdHVzPWIseC5zdGF0dXNUZXh0PShjfHx5KSsi
IixqP3EucmVzb2x2ZVdpdGgobyxbbCx5LHhdKTpxLnJlamVjdFdpdGgobyxbeCx5LHRdKSx4LnN0
YXR1c0NvZGUocykscz12b2lkIDAsayYmcC50cmlnZ2VyKGo/ImFqYXhTdWNjZXNzIjoiYWpheEVy
cm9yIixbeCxtLGo/bDp0XSksci5maXJlV2l0aChvLFt4LHldKSxrJiYocC50cmlnZ2VyKCJhamF4
Q29tcGxldGUiLFt4LG1dKSwtLW4uYWN0aXZlfHxuLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikp
KX1yZXR1cm4geH0sZ2V0SlNPTjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZ2V0KGEsYixjLCJq
c29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmdldChhLHZvaWQgMCxiLCJz
Y3JpcHQiKX19KSxuLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxiKXtuW2JdPWZ1bmN0
aW9uKGEsYyxkLGUpe3JldHVybiBuLmlzRnVuY3Rpb24oYykmJihlPWV8fGQsZD1jLGM9dm9pZCAw
KSxuLmFqYXgobi5leHRlbmQoe3VybDphLHR5cGU6YixkYXRhVHlwZTplLGRhdGE6YyxzdWNjZXNz
OmR9LG4uaXNQbGFpbk9iamVjdChhKSYmYSkpfX0pLG4uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0
dXJuIG4uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxn
bG9iYWw6ITEsInRocm93cyI6ITB9KX0sbi5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7
dmFyIGI7cmV0dXJuIG4uaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlz
KS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pOih0aGlzWzBdJiYoYj1uKGEsdGhpc1swXS5vd25l
ckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJl
Zm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdEVs
ZW1lbnRDaGlsZClhPWEuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcykp
LHRoaXMpfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uaXNGdW5jdGlvbihhKT90aGlz
LmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk6dGhp
cy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9bih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9j
LndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1uLmlzRnVu
Y3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLndyYXBBbGwoYj9h
LmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQo
KS5lYWNoKGZ1bmN0aW9uKCl7bi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG4odGhpcykucmVwbGFj
ZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG4uZXhwci5maWx0ZXJzLmhpZGRlbj1m
dW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMudmlzaWJsZShhKX0sbi5leHByLmZpbHRl
cnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aD4wfHxhLm9mZnNldEhl
aWdodD4wfHxhLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPjB9O3ZhciBCYj0vJTIwL2csQ2I9L1xb
XF0kLyxEYj0vXHI/XG4vZyxFYj0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkk
L2ksRmI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIEdiKGEs
YixjLGQpe3ZhciBlO2lmKG4uaXNBcnJheShiKSluLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fENi
LnRlc3QoYSk/ZChhLGUpOkdiKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWU/Yjoi
IikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1uLnR5cGUoYikpZChhLGIpO2Vs
c2UgZm9yKGUgaW4gYilHYihhKyJbIitlKyJdIixiW2VdLGMsZCl9bi5wYXJhbT1mdW5jdGlvbihh
LGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bi5pc0Z1bmN0aW9uKGIpP2IoKTpudWxs
PT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklD
b21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW4uYWpheFNldHRpbmdzJiZuLmFqYXhTZXR0
aW5ncy50cmFkaXRpb25hbCksbi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW4uaXNQbGFpbk9iamVj
dChhKSluLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBm
b3IoYyBpbiBhKUdiKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKEJiLCIr
Iil9LG4uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5wYXJhbSh0aGlz
LnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlz
Lm1hcChmdW5jdGlvbigpe3ZhciBhPW4ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP24u
bWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0
dXJuIHRoaXMubmFtZSYmIW4odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZGYi50ZXN0KHRoaXMubm9k
ZU5hbWUpJiYhRWIudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVgudGVzdChhKSl9KS5tYXAoZnVu
Y3Rpb24oYSxiKXt2YXIgYz1uKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bi5pc0Fy
cmF5KGMpP24ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVw
bGFjZShEYiwiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoRGIsIlxyXG4i
KX19KS5nZXQoKX19KSxuLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5l
dyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319O3ZhciBIYj17MDoyMDAsMTIyMzoyMDR9LEli
PW4uYWpheFNldHRpbmdzLnhocigpO2wuY29ycz0hIUliJiYid2l0aENyZWRlbnRpYWxzImluIEli
LGwuYWpheD1JYj0hIUliLG4uYWpheFRyYW5zcG9ydChmdW5jdGlvbihiKXt2YXIgYyxkO3JldHVy
biBsLmNvcnN8fEliJiYhYi5jcm9zc0RvbWFpbj97c2VuZDpmdW5jdGlvbihlLGYpe3ZhciBnLGg9
Yi54aHIoKTtpZihoLm9wZW4oYi50eXBlLGIudXJsLGIuYXN5bmMsYi51c2VybmFtZSxiLnBhc3N3
b3JkKSxiLnhockZpZWxkcylmb3IoZyBpbiBiLnhockZpZWxkcyloW2ddPWIueGhyRmllbGRzW2dd
O2IubWltZVR5cGUmJmgub3ZlcnJpZGVNaW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlKGIubWlt
ZVR5cGUpLGIuY3Jvc3NEb21haW58fGVbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGVbIlgtUmVxdWVz
dGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZyBpbiBlKWguc2V0UmVxdWVzdEhlYWRl
cihnLGVbZ10pO2M9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7YyYmKGM9ZD1oLm9ubG9h
ZD1oLm9uZXJyb3I9aC5vbmFib3J0PWgub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsImFib3J0Ij09
PWE/aC5hYm9ydCgpOiJlcnJvciI9PT1hPyJudW1iZXIiIT10eXBlb2YgaC5zdGF0dXM/ZigwLCJl
cnJvciIpOmYoaC5zdGF0dXMsaC5zdGF0dXNUZXh0KTpmKEhiW2guc3RhdHVzXXx8aC5zdGF0dXMs
aC5zdGF0dXNUZXh0LCJ0ZXh0IiE9PShoLnJlc3BvbnNlVHlwZXx8InRleHQiKXx8InN0cmluZyIh
PXR5cGVvZiBoLnJlc3BvbnNlVGV4dD97YmluYXJ5OmgucmVzcG9uc2V9Ont0ZXh0OmgucmVzcG9u
c2VUZXh0fSxoLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxoLm9ubG9hZD1jKCksZD1oLm9u
ZXJyb3I9YygiZXJyb3IiKSx2b2lkIDAhPT1oLm9uYWJvcnQ/aC5vbmFib3J0PWQ6aC5vbnJlYWR5
c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09aC5yZWFkeVN0YXRlJiZhLnNldFRpbWVvdXQoZnVu
Y3Rpb24oKXtjJiZkKCl9KX0sYz1jKCJhYm9ydCIpO3RyeXtoLnNlbmQoYi5oYXNDb250ZW50JiZi
LmRhdGF8fG51bGwpfWNhdGNoKGkpe2lmKGMpdGhyb3cgaX19LGFib3J0OmZ1bmN0aW9uKCl7YyYm
YygpfX06dm9pZCAwfSksbi5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2Ny
aXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBs
aWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9cYig/OmphdmF8ZWNtYSlz
Y3JpcHRcYi99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oYSl7cmV0dXJuIG4u
Z2xvYmFsRXZhbChhKSxhfX19KSxuLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oYSl7
dm9pZCAwPT09YS5jYWNoZSYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdF
VCIpfSksbi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21h
aW4pe3ZhciBiLGM7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxmKXtiPW4oIjxzY3JpcHQ+IikucHJv
cCh7Y2hhcnNldDphLnNjcmlwdENoYXJzZXQsc3JjOmEudXJsfSkub24oImxvYWQgZXJyb3IiLGM9
ZnVuY3Rpb24oYSl7Yi5yZW1vdmUoKSxjPW51bGwsYSYmZigiZXJyb3IiPT09YS50eXBlPzQwNDoy
MDAsYS50eXBlKX0pLGQuaGVhZC5hcHBlbmRDaGlsZChiWzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtj
JiZjKCl9fX19KTt2YXIgSmI9W10sS2I9Lyg9KVw/KD89JnwkKXxcP1w/LztuLmFqYXhTZXR1cCh7
anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9SmIucG9wKCl8
fG4uZXhwYW5kbysiXyIra2IrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG4uYWpheFByZWZpbHRl
cigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYm
KEtiLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYwPT09KGIuY29u
dGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQi
KSYmS2IudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlw
ZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW4uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2Iu
anNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKEtiLCIk
MSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPShsYi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpz
b25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4g
Z3x8bi5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNv
biIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24o
KXt2b2lkIDA9PT1mP24oYSkucmVtb3ZlUHJvcChlKTphW2VdPWYsYltlXSYmKGIuanNvbnBDYWxs
YmFjaz1jLmpzb25wQ2FsbGJhY2ssSmIucHVzaChlKSksZyYmbi5pc0Z1bmN0aW9uKGYpJiZmKGdb
MF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbi5wYXJzZUhUTUw9ZnVuY3Rpb24o
YSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10
eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fGQ7dmFyIGU9eC5leGVjKGEpLGY9IWMmJltdO3JldHVy
biBlP1tiLmNyZWF0ZUVsZW1lbnQoZVsxXSldOihlPWNhKFthXSxiLGYpLGYmJmYubGVuZ3RoJiZu
KGYpLnJlbW92ZSgpLG4ubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9O3ZhciBMYj1uLmZuLmxvYWQ7
bi5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJkxiKXJldHVy
biBMYi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEuaW5kZXhPZigi
ICIpO3JldHVybiBoPi0xJiYoZD1uLnRyaW0oYS5zbGljZShoKSksYT1hLnNsaWNlKDAsaCkpLG4u
aXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpiJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQ
T1NUIiksZy5sZW5ndGg+MCYmbi5hamF4KHt1cmw6YSx0eXBlOmV8fCJHRVQiLGRhdGFUeXBlOiJo
dG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzLGcuaHRtbChkP24oIjxk
aXY+IikuYXBwZW5kKG4ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuYWx3YXlzKGMmJmZ1bmN0
aW9uKGEsYil7Zy5lYWNoKGZ1bmN0aW9uKCl7Yy5hcHBseSh0aGlzLGZ8fFthLnJlc3BvbnNlVGV4
dCxiLGFdKX0pfSksdGhpc30sbi5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29t
cGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oYSxi
KXtuLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbi5leHByLmZpbHRl
cnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihi
KXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07ZnVuY3Rpb24gTWIoYSl7cmV0dXJuIG4uaXNX
aW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZSYmYS5kZWZhdWx0Vmlld31uLm9mZnNldD17c2V0T2Zm
c2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW4uY3NzKGEsInBvc2l0aW9u
IiksbD1uKGEpLG09e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUi
KSxoPWwub2Zmc2V0KCksZj1uLmNzcyhhLCJ0b3AiKSxpPW4uY3NzKGEsImxlZnQiKSxqPSgiYWJz
b2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiYoZitpKS5pbmRleE9mKCJhdXRvIik+LTEsaj8oZD1s
LnBvc2l0aW9uKCksZz1kLnRvcCxlPWQubGVmdCk6KGc9cGFyc2VGbG9hdChmKXx8MCxlPXBhcnNl
RmxvYXQoaSl8fDApLG4uaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxuLmV4dGVuZCh7fSxo
KSkpLG51bGwhPWIudG9wJiYobS50b3A9Yi50b3AtaC50b3ArZyksbnVsbCE9Yi5sZWZ0JiYobS5s
ZWZ0PWIubGVmdC1oLmxlZnQrZSksInVzaW5nImluIGI/Yi51c2luZy5jYWxsKGEsbSk6bC5jc3Mo
bSl9fSxuLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgp
cmV0dXJuIHZvaWQgMD09PWE/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oYil7bi5vZmZzZXQuc2V0
T2Zmc2V0KHRoaXMsYSxiKX0pO3ZhciBiLGMsZD10aGlzWzBdLGU9e3RvcDowLGxlZnQ6MH0sZj1k
JiZkLm93bmVyRG9jdW1lbnQ7aWYoZilyZXR1cm4gYj1mLmRvY3VtZW50RWxlbWVudCxuLmNvbnRh
aW5zKGIsZCk/KGU9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPU1iKGYpLHt0b3A6ZS50b3Ar
Yy5wYWdlWU9mZnNldC1iLmNsaWVudFRvcCxsZWZ0OmUubGVmdCtjLnBhZ2VYT2Zmc2V0LWIuY2xp
ZW50TGVmdH0pOmV9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXRo
aXNbMF0sZD17dG9wOjAsbGVmdDowfTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoYywicG9zaXRpb24i
KT9iPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRo
aXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1sIil8fChkPWEub2Zmc2V0KCkpLGQudG9w
Kz1uLmNzcyhhWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLGQubGVmdCs9bi5jc3MoYVswXSwiYm9y
ZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6Yi50b3AtZC50b3Atbi5jc3MoYywibWFyZ2luVG9wIiwh
MCksbGVmdDpiLmxlZnQtZC5sZWZ0LW4uY3NzKGMsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQ
YXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9m
ZnNldFBhcmVudDt3aGlsZShhJiYic3RhdGljIj09PW4uY3NzKGEsInBvc2l0aW9uIikpYT1hLm9m
ZnNldFBhcmVudDtyZXR1cm4gYXx8RWF9KX19KSxuLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zm
c2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oYSxiKXt2YXIgYz0icGFnZVlP
ZmZzZXQiPT09YjtuLmZuW2FdPWZ1bmN0aW9uKGQpe3JldHVybiBLKHRoaXMsZnVuY3Rpb24oYSxk
LGUpe3ZhciBmPU1iKGEpO3JldHVybiB2b2lkIDA9PT1lP2Y/ZltiXTphW2RdOnZvaWQoZj9mLnNj
cm9sbFRvKGM/Zi5wYWdlWE9mZnNldDplLGM/ZTpmLnBhZ2VZT2Zmc2V0KTphW2RdPWUpfSxhLGQs
YXJndW1lbnRzLmxlbmd0aCl9fSksbi5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7
bi5jc3NIb29rc1tiXT1HYShsLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8o
Yz1GYShhLGIpLEJhLnRlc3QoYyk/bihhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9
KSxuLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe24u
ZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24o
YyxkKXtuLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJi
b29sZWFuIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwPyJtYXJnaW4iOiJib3JkZXIi
KTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gbi5pc1dpbmRvdyhi
KT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8o
ZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZVsic2Nyb2xs
IithXSxiLmJvZHlbIm9mZnNldCIrYV0sZVsib2Zmc2V0IithXSxlWyJjbGllbnQiK2FdKSk6dm9p
ZCAwPT09ZD9uLmNzcyhiLGMsZyk6bi5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVs
bCl9fSl9KSxuLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24o
YSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGws
Yil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1
bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhp
cy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9LHNpemU6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5sZW5ndGh9fSksbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rpb24iPT10
eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXty
ZXR1cm4gbn0pO3ZhciBOYj1hLmpRdWVyeSxPYj1hLiQ7cmV0dXJuIG4ubm9Db25mbGljdD1mdW5j
dGlvbihiKXtyZXR1cm4gYS4kPT09biYmKGEuJD1PYiksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVl
cnk9TmIpLG59LGJ8fChhLmpRdWVyeT1hLiQ9biksbn0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9wYWNrYWdlLmpzb24gYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvanF1ZXJ5L3BhY2thZ2UuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNjRkNzBhOWE3YzFmYjJiZmMxZjljN2M5Mjk0ZTc1Njk1NGViZTk0Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9wYWNr
YWdlLmpzb24KQEAgLTAsMCArMSwxNTYgQEAKK3sKKyAgIl9hcmdzIjogWworICAgIFsKKyAgICAg
IHsKKyAgICAgICAgInJhdyI6ICJqcXVlcnlAXjIuMS4wIiwKKyAgICAgICAgInNjb3BlIjogbnVs
bCwKKyAgICAgICAgImVzY2FwZWROYW1lIjogImpxdWVyeSIsCisgICAgICAgICJuYW1lIjogImpx
dWVyeSIsCisgICAgICAgICJyYXdTcGVjIjogIl4yLjEuMCIsCisgICAgICAgICJzcGVjIjogIj49
Mi4xLjAgPDMuMC4wIiwKKyAgICAgICAgInR5cGUiOiAicmFuZ2UiCisgICAgICB9LAorICAgICAg
Ii9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiCisgICAgXQorICBdLAorICAiX2Zyb20iOiAianF1ZXJ5
QD49Mi4xLjAgPDMuMC4wIiwKKyAgIl9pZCI6ICJqcXVlcnlAMi4yLjQiLAorICAiX2luQ2FjaGUi
OiB0cnVlLAorICAiX2xvY2F0aW9uIjogIi9qcXVlcnkiLAorICAiX25vZGVWZXJzaW9uIjogIjAu
MTAuNDUiLAorICAiX25wbU9wZXJhdGlvbmFsSW50ZXJuYWwiOiB7CisgICAgImhvc3QiOiAicGFj
a2FnZXMtMTYtZWFzdC5pbnRlcm5hbC5ucG1qcy5jb20iLAorICAgICJ0bXAiOiAidG1wL2pxdWVy
eS0yLjIuNC50Z3pfMTQ2Mzc2NTE2NjgzNl8wLjU4MzQzODk2NzU4NzQyNjMiCisgIH0sCisgICJf
bnBtVXNlciI6IHsKKyAgICAibmFtZSI6ICJ0aW1teXdpbCIsCisgICAgImVtYWlsIjogInRpbW15
d2lsbGlzbkBnbWFpbC5jb20iCisgIH0sCisgICJfbnBtVmVyc2lvbiI6ICIyLjE1LjEiLAorICAi
X3BoYW50b21DaGlsZHJlbiI6IHt9LAorICAiX3JlcXVlc3RlZCI6IHsKKyAgICAicmF3IjogImpx
dWVyeUBeMi4xLjAiLAorICAgICJzY29wZSI6IG51bGwsCisgICAgImVzY2FwZWROYW1lIjogImpx
dWVyeSIsCisgICAgIm5hbWUiOiAianF1ZXJ5IiwKKyAgICAicmF3U3BlYyI6ICJeMi4xLjAiLAor
ICAgICJzcGVjIjogIj49Mi4xLjAgPDMuMC4wIiwKKyAgICAidHlwZSI6ICJyYW5nZSIKKyAgfSwK
KyAgIl9yZXF1aXJlZEJ5IjogWworICAgICIvIgorICBdLAorICAiX3Jlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2pxdWVyeS8tL2pxdWVyeS0yLjIuNC50Z3oiLAorICAiX3No
YXN1bSI6ICIyYzg5ZDY4ODliNWVhYzUyMmE3ZWVhMzJjMTQ1MjE1NTljNmNiZjAyIiwKKyAgIl9z
aHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogImpxdWVyeUBeMi4xLjAiLAorICAiX3doZXJl
IjogIi9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiLAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjog
ImpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMiLAorICAgICJ1cmwiOiAi
aHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi8yLjIuNC9BVVRIT1JTLnR4dCIK
KyAgfSwKKyAgImJ1Z3MiOiB7CisgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5
L2pxdWVyeS9pc3N1ZXMiCisgIH0sCisgICJjb21taXRwbGVhc2UiOiB7CisgICAgImNvbXBvbmVu
dHMiOiBbCisgICAgICAiRG9jcyIsCisgICAgICAiVGVzdHMiLAorICAgICAgIkJ1aWxkIiwKKyAg
ICAgICJSZWxlYXNlIiwKKyAgICAgICJDb3JlIiwKKyAgICAgICJBamF4IiwKKyAgICAgICJBdHRy
aWJ1dGVzIiwKKyAgICAgICJDYWxsYmFja3MiLAorICAgICAgIkNTUyIsCisgICAgICAiRGF0YSIs
CisgICAgICAiRGVmZXJyZWQiLAorICAgICAgIkRlcHJlY2F0ZWQiLAorICAgICAgIkRpbWVuc2lv
bnMiLAorICAgICAgIkVmZmVjdHMiLAorICAgICAgIkV2ZW50IiwKKyAgICAgICJNYW5pcHVsYXRp
b24iLAorICAgICAgIk9mZnNldCIsCisgICAgICAiUXVldWUiLAorICAgICAgIlNlbGVjdG9yIiwK
KyAgICAgICJTZXJpYWxpemUiLAorICAgICAgIlRyYXZlcnNpbmciLAorICAgICAgIldyYXAiCisg
ICAgXQorICB9LAorICAiZGVwZW5kZW5jaWVzIjoge30sCisgICJkZXNjcmlwdGlvbiI6ICJKYXZh
U2NyaXB0IGxpYnJhcnkgZm9yIERPTSBvcGVyYXRpb25zIiwKKyAgImRldkRlcGVuZGVuY2llcyI6
IHsKKyAgICAiY29tbWl0cGxlYXNlIjogIjIuMC4wIiwKKyAgICAiY29yZS1qcyI6ICIwLjkuMTci
LAorICAgICJncnVudCI6ICIwLjQuNSIsCisgICAgImdydW50LWJhYmVsIjogIjUuMC4xIiwKKyAg
ICAiZ3J1bnQtY2xpIjogIjAuMS4xMyIsCisgICAgImdydW50LWNvbXBhcmUtc2l6ZSI6ICIwLjQu
MCIsCisgICAgImdydW50LWNvbnRyaWItanNoaW50IjogIjAuMTEuMiIsCisgICAgImdydW50LWNv
bnRyaWItdWdsaWZ5IjogIjAuOS4yIiwKKyAgICAiZ3J1bnQtY29udHJpYi13YXRjaCI6ICIwLjYu
MSIsCisgICAgImdydW50LWdpdC1hdXRob3JzIjogIjIuMC4xIiwKKyAgICAiZ3J1bnQtanNjcyI6
ICIyLjEuMCIsCisgICAgImdydW50LWpzb25saW50IjogIjEuMC40IiwKKyAgICAiZ3J1bnQtbnBt
Y29weSI6ICIwLjEuMCIsCisgICAgImd6aXAtanMiOiAiMC4zLjIiLAorICAgICJqc2RvbSI6ICI1
LjYuMSIsCisgICAgImxvYWQtZ3J1bnQtdGFza3MiOiAiMS4wLjAiLAorICAgICJxdW5pdC1hc3Nl
cnQtc3RlcCI6ICIxLjAuMyIsCisgICAgInF1bml0anMiOiAiMS4xNy4xIiwKKyAgICAicmVxdWly
ZWpzIjogIjIuMS4xNyIsCisgICAgInNpbm9uIjogIjEuMTAuMyIsCisgICAgInNpenpsZSI6ICIy
LjIuMSIsCisgICAgInN0cmlwLWpzb24tY29tbWVudHMiOiAiMS4wLjMiLAorICAgICJ0ZXN0c3dh
cm0iOiAiMS4xLjAiLAorICAgICJ3aW4tc3Bhd24iOiAiMi4wLjAiCisgIH0sCisgICJkaXJlY3Rv
cmllcyI6IHt9LAorICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjogIjJjODlkNjg4OWI1ZWFjNTIy
YTdlZWEzMmMxNDUyMTU1OWM2Y2JmMDIiLAorICAgICJ0YXJiYWxsIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2pxdWVyeS8tL2pxdWVyeS0yLjIuNC50Z3oiCisgIH0sCisgICJnaXRIZWFk
IjogImMwMTg1YWI3Yzc1YWFiODg3NjJjNWFhZTc4MGI5ZDgzYjgwZWRhNzIiLAorICAiaG9tZXBh
Z2UiOiAiaHR0cDovL2pxdWVyeS5jb20iLAorICAia2V5d29yZHMiOiBbCisgICAgImpxdWVyeSIs
CisgICAgImphdmFzY3JpcHQiLAorICAgICJicm93c2VyIiwKKyAgICAibGlicmFyeSIKKyAgXSwK
KyAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgIm1haW4iOiAiZGlzdC9qcXVlcnkuanMiLAorICAibWFp
bnRhaW5lcnMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiZG1ldGh2aW4iLAorICAgICAgImVt
YWlsIjogImRhdmUubWV0aHZpbkBnbWFpbC5jb20iCisgICAgfSwKKyAgICB7CisgICAgICAibmFt
ZSI6ICJzY290dC5nb256YWxleiIsCisgICAgICAiZW1haWwiOiAic2NvdHQuZ29uemFsZXpAZ21h
aWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAibV9nb2wiLAorICAgICAgImVt
YWlsIjogIm0uZ29sZWJAZ21haWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAi
dGltbXl3aWwiLAorICAgICAgImVtYWlsIjogInRpbW15d2lsbGlzbkBnbWFpbC5jb20iCisgICAg
fQorICBdLAorICAibmFtZSI6ICJqcXVlcnkiLAorICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7
fSwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIiwKKyAgInJlcG9z
aXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImdpdCtodHRwczovL2dp
dGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS5naXQiCisgIH0sCisgICJzY3JpcHRzIjogeworICAgICJi
dWlsZCI6ICJucG0gaW5zdGFsbCAmJiBncnVudCIsCisgICAgInN0YXJ0IjogImdydW50IHdhdGNo
IiwKKyAgICAidGVzdCI6ICJncnVudCAmJiBncnVudCB0ZXN0IgorICB9LAorICAidGl0bGUiOiAi
alF1ZXJ5IiwKKyAgInZlcnNpb24iOiAiMi4yLjQiCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvbWVtb3J5c3RvcmFnZS9tZW1vcnlzdG9yYWdlLmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL21lbW9yeXN0b3JhZ2UvbWVt
b3J5c3RvcmFnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjgzZTU2OTZjODBmYmJjMGE3ZGQ1OWE3Zjc0MDc3
ZjVkY2M3MTVlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9k
ZV9tb2R1bGVzL21lbW9yeXN0b3JhZ2UvbWVtb3J5c3RvcmFnZS5qcwpAQCAtMCwwICsxLDMgQEAK
Ky8qISBtZW1vcnlzdG9yYWdlIDAuMTEuMCDCqTIwMTYgYnkgU3Rpam4gZGUgV2l0dCBhbmQgY29u
dHJpYnV0b3JzLiBTb21lIHJpZ2h0cyByZXNlcnZlZC4gTGljZW5zZTogQ0MtQlktNC4wICovCish
ZnVuY3Rpb24odSxtLGQpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVm
aW5lKCJtZW1vcnlzdG9yYWdlIixbXSxmdW5jdGlvbigpe3JldHVybiBkKCl9KToib2JqZWN0Ij09
dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZCgpOnVbbV09ZCgpfSh0aGlzLCJNZW1vcnlT
dG9yYWdlIixmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBNZW1vcnlTdG9yYWdlKGMp
e2Z1bmN0aW9uIGUoKXtyZXR1cm4gT2JqZWN0LmtleXMoaCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3Jl
dHVybiEoYiBpbiBhKX0pfWZ1bmN0aW9uIGYoKXtyZXR1cm4gT2JqZWN0LmtleXMoaSl9ZnVuY3Rp
b24gZygpe3JldHVybiBlKCkuY29uY2F0KGYoKSl9Yz1jfHwiZ2xvYmFsIjt2YXIgaD1iW2NdO2lm
KGgpcmV0dXJuIGg7aWYoISh0aGlzIGluc3RhbmNlb2YgTWVtb3J5U3RvcmFnZSkpcmV0dXJuIG5l
dyBNZW1vcnlTdG9yYWdlKGMpO2g9YltjXT10aGlzO3ZhciBpPXt9O3JldHVybiBPYmplY3QuZGVm
aW5lUHJvcGVydHkoaCwiaWQiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpj
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImxlbmd0aCIse2VudW1lcmFibGU6ITAsY29uZmln
dXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnKCkubGVuZ3RofX0pLGguZ2V0SXRlbT1m
dW5jdGlvbihiKXtyZXR1cm4oYiBpbiBhP2lbYl06dGhpc1tiXSl8fG51bGx9LGguc2V0SXRlbT1m
dW5jdGlvbihiLGMpe2IgaW4gYT9pW2JdPWM6dGhpc1tiXT1jfSxoLnJlbW92ZUl0ZW09ZnVuY3Rp
b24oYil7YiBpbiBhP2RlbGV0ZSBpW2JdOmRlbGV0ZSB0aGlzW2JdfSxoLmtleT1mdW5jdGlvbihh
KXt2YXIgYj1nKCk7cmV0dXJuIGE+PTAmJmE8Yi5sZW5ndGg/YlthXTpudWxsfSxoLmNsZWFyPWZ1
bmN0aW9uKCl7Zm9yKHZhciBhLGI9ZSgpLGM9MDthPWJbY107YysrKWRlbGV0ZSB0aGlzW2FdO2I9
ZigpO2Zvcih2YXIgYSxjPTA7YT1iW2NdO2MrKylkZWxldGUgaVthXX0sInVuZGVmaW5lZCI9PXR5
cGVvZiBQcm94eT9oOm5ldyBQcm94eShoLHtvd25LZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGcoKX19
KX12YXIgYT17Y2xlYXI6MSxnZXRJdGVtOjEsaWQ6MSxrZXk6MSxsZW5ndGg6MSxyZW1vdmVJdGVt
OjEsc2V0SXRlbToxfSxiPXt9O3JldHVybiBNZW1vcnlTdG9yYWdlfSk7CisvLyMgc291cmNlTWFw
cGluZ1VSTD1tZW1vcnlzdG9yYWdlLm1pbi5qcy5tYXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVx
dWlyZWpzLXRleHQvTElDRU5TRSBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9yZXF1aXJlanMtdGV4dC9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2MmViMGYyOGYxMTg3OWZmMWUz
ZWM1NGNkODdlM2RmMThmNTBlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvTElDRU5TRQpAQCAtMCwwICsxLDQ1
IEBACitDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycywg
aHR0cHM6Ly9qcXVlcnkub3JnLworCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFy
eSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQoraW5kaXZpZHVhbHMuIEZvciBleGFjdCBjb250
cmlidXRpb24gaGlzdG9yeSwgc2VlIHRoZSByZXZpc2lvbiBoaXN0b3J5CithdmFpbGFibGUgYXQg
aHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy90ZXh0CisKK1RoZSBmb2xsb3dpbmcgbGljZW5z
ZSBhcHBsaWVzIHRvIGFsbCBwYXJ0cyBvZiB0aGlzIHNvZnR3YXJlIGV4Y2VwdCBhcworZG9jdW1l
bnRlZCBiZWxvdzoKKworPT09PQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl
IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiks
IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwor
d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl
LCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9m
IHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy
ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0
aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y
dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT
IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5D
TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklM
SVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVO
VC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUK
K0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBBTiBBQ1RJT04KK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBG
Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT
RSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKz09PT0KKworQ29weXJpZ2h0
IGFuZCByZWxhdGVkIHJpZ2h0cyBmb3Igc2FtcGxlIGNvZGUgYXJlIHdhaXZlZCB2aWEgQ0MwLiBT
YW1wbGUKK2NvZGUgaXMgZGVmaW5lZCBhcyBhbGwgc291cmNlIGNvZGUgZGlzcGxheWVkIHdpdGhp
biB0aGUgcHJvc2Ugb2YgdGhlCitkb2N1bWVudGF0aW9uLgorCitDQzA6IGh0dHA6Ly9jcmVhdGl2
ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKworPT09PQorCitGaWxlcyBsb2Nh
dGVkIGluIHRoZSBub2RlX21vZHVsZXMgZGlyZWN0b3J5LCBhbmQgY2VydGFpbiB1dGlsaXRpZXMg
dXNlZAordG8gYnVpbGQgb3IgdGVzdCB0aGUgc29mdHdhcmUgaW4gdGhlIHRlc3QgYW5kIGRpc3Qg
ZGlyZWN0b3JpZXMsIGFyZQorZXh0ZXJuYWxseSBtYWludGFpbmVkIGxpYnJhcmllcyB1c2VkIGJ5
IHRoaXMgc29mdHdhcmUgd2hpY2ggaGF2ZSB0aGVpciBvd24KK2xpY2Vuc2VzOyB3ZSByZWNvbW1l
bmQgeW91IHJlYWQgdGhlbSwgYXMgdGhlaXIgdGVybXMgbWF5IGRpZmZlciBmcm9tIHRoZQordGVy
bXMgYWJvdmUuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvcmVxdWlyZWpzLXRleHQvUkVBRE1FLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9k
ZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWQyM2IyMzcy
ZTgwNmRlZDUzNjYzYmJkMTRjNzI4YzI4OWQ4MDhmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L1JFQURNRS5tZApA
QCAtMCwwICsxLDIwNiBAQAorIyB0ZXh0CisKK0EgW1JlcXVpcmVKU10oaHR0cDovL3JlcXVpcmVq
cy5vcmcpL0FNRCBsb2FkZXIgcGx1Z2luIGZvciBsb2FkaW5nIHRleHQKK3Jlc291cmNlcy4KKwor
S25vd24gdG8gd29yayBpbiBSZXF1aXJlSlMsIGJ1dCBzaG91bGQgd29yayBpbiBvdGhlciBBTUQg
bG9hZGVycyB0aGF0IHN1cHBvcnQKK3RoZSBzYW1lIGxvYWRlciBwbHVnaW4gQVBJLgorCisjIyBE
b2NzCisKK1NlZSB0aGUgW1JlcXVpcmVKUyBBUEkgdGV4dCBzZWN0aW9uXShodHRwOi8vcmVxdWly
ZWpzLm9yZy9kb2NzL2FwaS5odG1sI3RleHQpLgorCisjIyBMYXRlc3QgcmVsZWFzZQorCitUaGUg
bGF0ZXN0IHJlbGVhc2UgaXMgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIFt0aGUgImxhdGVzdCIgdGFn
XShodHRwczovL3Jhdy5naXRodWIuY29tL3JlcXVpcmVqcy90ZXh0L2xhdGVzdC90ZXh0LmpzKS4K
KworSXQgY2FuIGFsc28gYmUgaW5zdGFsbGVkIHVzaW5nIFt2b2xvXShodHRwczovL2dpdGh1Yi5j
b20vdm9sb2pzL3ZvbG8pOgorCisgICAgdm9sbyBhZGQgcmVxdWlyZWpzL3RleHQKKworSWYgdXNp
bmcgbnBtOgorCisgICAgbnBtIGluc3RhbGwgcmVxdWlyZWpzL3RleHQKKworIyMgVXNhZ2UKKwor
SXQgaXMgbmljZSB0byBidWlsZCBIVE1MIHVzaW5nIHJlZ3VsYXIgSFRNTCB0YWdzLCBpbnN0ZWFk
IG9mIGJ1aWxkaW5nIHVwIERPTQorc3RydWN0dXJlcyBpbiBzY3JpcHQuIEhvd2V2ZXIsIHRoZXJl
IGlzIG5vIGdvb2Qgd2F5IHRvIGVtYmVkIEhUTUwgaW4gYQorSmF2YVNjcmlwdCBmaWxlLiBUaGUg
YmVzdCB0aGF0IGNhbiBiZSBkb25lIGlzIHVzaW5nIGEgc3RyaW5nIG9mIEhUTUwsIGJ1dCB0aGF0
CitjYW4gYmUgaGFyZCB0byBtYW5hZ2UsIHBhcnRpY3VsYXJseSBmb3IgbXVsdGktbGluZSBIVE1M
LgorCitUaGUgdGV4dC5qcyBBTUQgbG9hZGVyIHBsdWdpbiBjYW4gaGVscCB3aXRoIHRoaXMgaXNz
dWUuIEl0IHdpbGwgYXV0b21hdGljYWxseSBiZQorbG9hZGVkIGlmIHRoZSB0ZXh0ISBwcmVmaXgg
aXMgdXNlZCBmb3IgYSBkZXBlbmRlbmN5LiBEb3dubG9hZCB0aGUgcGx1Z2luIGFuZCBwdXQKK2l0
IGluIHRoZSBhcHAncyBbYmFzZVVybF0oaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9hcGkuaHRt
bCNjb25maWctYmFzZVVybCkKK2RpcmVjdG9yeSAob3IgdXNlIHRoZSBbcGF0aHMgY29uZmlnXSho
dHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2FwaS5odG1sI2NvbmZpZy1wYXRocykgdG8gcGxhY2Ug
aXQgaW4gb3RoZXIgYXJlYXMpLgorCitZb3UgY2FuIHNwZWNpZnkgYSB0ZXh0IGZpbGUgcmVzb3Vy
Y2UgYXMgYSBkZXBlbmRlbmN5IGxpa2Ugc286CisKK2BgYGphdmFzY3JpcHQKK3JlcXVpcmUoWyJz
b21lL21vZHVsZSIsICJ0ZXh0IXNvbWUvbW9kdWxlLmh0bWwiLCAidGV4dCFzb21lL21vZHVsZS5j
c3MiXSwKKyAgICBmdW5jdGlvbihtb2R1bGUsIGh0bWwsIGNzcykgeworICAgICAgICAvL3RoZSBo
dG1sIHZhcmlhYmxlIHdpbGwgYmUgdGhlIHRleHQKKyAgICAgICAgLy9vZiB0aGUgc29tZS9tb2R1
bGUuaHRtbCBmaWxlCisgICAgICAgIC8vdGhlIGNzcyB2YXJpYWJsZSB3aWxsIGJlIHRoZSB0ZXh0
CisgICAgICAgIC8vb2YgdGhlIHNvbWUvbW9kdWxlLmNzcyBmaWxlLgorICAgIH0KKyk7CitgYGAK
KworTm90aWNlIHRoZSAuaHRtbCBhbmQgLmNzcyBzdWZmaXhlcyB0byBzcGVjaWZ5IHRoZSBleHRl
bnNpb24gb2YgdGhlIGZpbGUuIFRoZQorInNvbWUvbW9kdWxlIiBwYXJ0IG9mIHRoZSBwYXRoIHdp
bGwgYmUgcmVzb2x2ZWQgYWNjb3JkaW5nIHRvIG5vcm1hbCBtb2R1bGUgbmFtZQorcmVzb2x1dGlv
bjogaXQgd2lsbCB1c2UgdGhlICoqYmFzZVVybCoqIGFuZCAqKnBhdGhzKiogW2NvbmZpZ3VyYXRp
b24KK29wdGlvbnNdKGh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3MvYXBpLmh0bWwjY29uZmlnKSB0
byBtYXAgdGhhdCBuYW1lIHRvIGEgcGF0aC4KKworRm9yIEhUTUwvWE1ML1NWRyBmaWxlcywgdGhl
cmUgaXMgYW5vdGhlciBvcHRpb24uIFlvdSBjYW4gcGFzcyAhc3RyaXAsIHdoaWNoCitzdHJpcHMg
WE1MIGRlY2xhcmF0aW9ucyBzbyB0aGF0IGV4dGVybmFsIFNWRyBhbmQgWE1MIGRvY3VtZW50cyBj
YW4gYmUgYWRkZWQgdG8gYQorZG9jdW1lbnQgd2l0aG91dCB3b3JyeS4gQWxzbywgaWYgdGhlIHN0
cmluZyBpcyBhbiBIVE1MIGRvY3VtZW50LCBvbmx5IHRoZSBwYXJ0CitpbnNpZGUgdGhlIGJvZHkg
dGFnIGlzIHJldHVybmVkLiBFeGFtcGxlOgorCitgYGBqYXZhc2NyaXB0CityZXF1aXJlKFsidGV4
dCFzb21lL21vZHVsZS5odG1sIXN0cmlwIl0sCisgICAgZnVuY3Rpb24oaHRtbCkgeworICAgICAg
ICAvL3RoZSBodG1sIHZhcmlhYmxlIHdpbGwgYmUgdGhlIHRleHQgb2YgdGhlCisgICAgICAgIC8v
c29tZS9tb2R1bGUuaHRtbCBmaWxlLCBidXQgb25seSB0aGUgcGFydAorICAgICAgICAvL2luc2lk
ZSB0aGUgYm9keSB0YWcuCisgICAgfQorKTsKK2BgYAorCitUaGUgdGV4dCBmaWxlcyBhcmUgbG9h
ZGVkIHZpYSBhc3luY2hyb25vdXMgWE1MSHR0cFJlcXVlc3QgKFhIUikgY2FsbHMsIHNvIHlvdQor
Y2FuIG9ubHkgZmV0Y2ggZmlsZXMgZnJvbSB0aGUgc2FtZSBkb21haW4gYXMgdGhlIHdlYiBwYWdl
IChzZWUgKipYSFIKK3Jlc3RyaWN0aW9ucyoqIGJlbG93KS4KKworSG93ZXZlciwgW3RoZSBSZXF1
aXJlSlMgb3B0aW1pemVyXShodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL29wdGltaXphdGlvbi5o
dG1sKQord2lsbCBpbmxpbmUgYW55IHRleHQhIHJlZmVyZW5jZXMgd2l0aCB0aGUgYWN0dWFsIHRl
eHQgZmlsZSBjb250ZW50cyBpbnRvIHRoZQorbW9kdWxlcywgc28gYWZ0ZXIgYSBidWlsZCwgdGhl
IG1vZHVsZXMgdGhhdCBoYXZlIHRleHQhIGRlcGVuZGVuY2llcyBjYW4gYmUgdXNlZAorZnJvbSBv
dGhlciBkb21haW5zLgorCisjIyBDb25maWd1cmF0aW9uCisKKyMjIyBYSFIgcmVzdHJpY3Rpb25z
CisKK1RoZSB0ZXh0IHBsdWdpbiB3b3JrcyBieSB1c2luZyBYTUxIdHRwUmVxdWVzdCAoWEhSKSB0
byBmZXRjaCB0aGUgdGV4dCBmb3IgdGhlCityZXNvdXJjZXMgaXQgaGFuZGxlcy4KKworSG93ZXZl
ciwgWEhSIGNhbGxzIGhhdmUgc29tZSByZXN0cmljdGlvbnMsIGR1ZSB0byBicm93c2VyL3dlYiBz
ZWN1cml0eSBwb2xpY2llczoKKworMSkgTWFueSBicm93c2VycyBkbyBub3QgYWxsb3cgZmlsZTov
LyBhY2Nlc3MgdG8ganVzdCBhbnkgZmlsZS4gWW91IGFyZSBiZXR0ZXIKK29mZiBzZXJ2aW5nIHRo
ZSBhcHBsaWNhdGlvbiBmcm9tIGEgbG9jYWwgd2ViIHNlcnZlciB0aGFuIHVzaW5nIGxvY2FsIGZp
bGU6Ly8KK1VSTHMuIFlvdSB3aWxsIGxpa2VseSBydW4gaW50byB0cm91YmxlIG90aGVyd2lzZS4K
KworMikgVGhlcmUgYXJlIHJlc3RyaWN0aW9ucyBmb3IgdXNpbmcgWEhSIHRvIGFjY2VzcyBmaWxl
cyBvbiBhbm90aGVyIHdlYiBkb21haW4uCitXaGlsZSBDT1JTIGNhbiBoZWxwIGVuYWJsZSB0aGUg
c2VydmVyIGZvciBjcm9zcy1kb21haW4gYWNjZXNzLCBkb2luZyBzbyBtdXN0CitiZSBkb25lIHdp
dGggY2FyZSAoaW4gcGFydGljdWxhciBpZiB5b3UgYWxzbyBob3N0IGFuIEFQSSBmcm9tIHRoYXQg
ZG9tYWluKSwKK2FuZCBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgQ09SUy4KKworU28gaWYgdGhl
IHRleHQgcGx1Z2luIGRldGVybWluZXMgdGhhdCB0aGUgcmVxdWVzdCBmb3IgdGhlIHJlc291cmNl
IGlzIG9uIGFub3RoZXIKK2RvbWFpbiwgaXQgd2lsbCB0cnkgdG8gYWNjZXNzIGEgIi5qcyIgdmVy
c2lvbiBvZiB0aGUgcmVzb3VyY2UgYnkgdXNpbmcgYQorc2NyaXB0IHRhZy4gU2NyaXB0IHRhZyBH
RVQgcmVxdWVzdHMgYXJlIGFsbG93ZWQgYWNyb3NzIGRvbWFpbnMuIFRoZSAuanMgdmVyc2lvbgor
b2YgdGhlIHJlc291cmNlIHNob3VsZCBqdXN0IGJlIGEgc2NyaXB0IHdpdGggYSBkZWZpbmUoKSBj
YWxsIGluIGl0IHRoYXQgcmV0dXJucworYSBzdHJpbmcgZm9yIHRoZSBtb2R1bGUgdmFsdWUuCisK
K0V4YW1wbGU6IGlmIHRoZSByZXNvdXJjZSBpcyAndGV4dCFleGFtcGxlLmh0bWwnIGFuZCB0aGF0
IHJlc29sdmVzIHRvIGEgcGF0aAorb24gYW5vdGhlciB3ZWIgZG9tYWluLCB0aGUgdGV4dCBwbHVn
aW4gd2lsbCBkbyBhIHNjcmlwdCB0YWcgbG9hZCBmb3IKKydleGFtcGxlLmh0bWwuanMnLgorCitU
aGUgW3JlcXVpcmVqcyBvcHRpbWl6ZXJdKGh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3Mvb3B0aW1p
emF0aW9uLmh0bWwpIHdpbGwKK2dlbmVyYXRlIHRoZXNlICcuanMnIHZlcnNpb25zIG9mIHRoZSB0
ZXh0IHJlc291cmNlcyBpZiB5b3Ugc2V0IHRoaXMgaW4gdGhlCitidWlsZCBwcm9maWxlOgorCisg
ICAgb3B0aW1pemVBbGxQbHVnaW5SZXNvdXJjZXM6IHRydWUKKworSW4gc29tZSBjYXNlcywgeW91
IG1heSB3YW50IHRoZSB0ZXh0IHBsdWdpbiB0byBub3QgdHJ5IHRoZSAuanMgcmVzb3VyY2UsIG1h
eWJlCitiZWNhdXNlIHlvdSBoYXZlIGNvbmZpZ3VyZWQgQ09SUyBvbiB0aGUgb3RoZXIgc2VydmVy
LCBhbmQgeW91IGtub3cgdGhhdCBvbmx5Citicm93c2VycyB0aGF0IHN1cHBvcnQgQ09SUyB3aWxs
IGJlIHVzZWQuIEluIHRoYXQgY2FzZSB5b3UgY2FuIHVzZSB0aGUKK1ttb2R1bGUgY29uZmlnXSho
dHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2FwaS5odG1sI2NvbmZpZy1tb2R1bGVjb25maWcpCiso
cmVxdWlyZXMgUmVxdWlyZUpTIDIrKSB0byBvdmVycmlkZSBzb21lIG9mIHRoZSBiYXNpYyBsb2dp
YyB0aGUgcGx1Z2luIHVzZXMgdG8KK2RldGVybWluZSBpZiB0aGUgLmpzIGZpbGUgc2hvdWxkIGJl
IHJlcXVlc3RlZDoKKworYGBgamF2YXNjcmlwdAorcmVxdWlyZWpzLmNvbmZpZyh7CisgICAgY29u
ZmlnOiB7CisgICAgICAgIHRleHQ6IHsKKyAgICAgICAgICAgIHVzZVhocjogZnVuY3Rpb24gKHVy
bCwgcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0KSB7CisgICAgICAgICAgICAgICAgLy9PdmVycmlk
ZSBmdW5jdGlvbiBmb3IgZGV0ZXJtaW5pbmcgaWYgWEhSIHNob3VsZCBiZSB1c2VkLgorICAgICAg
ICAgICAgICAgIC8vdXJsOiB0aGUgVVJMIGJlaW5nIHJlcXVlc3RlZAorICAgICAgICAgICAgICAg
IC8vcHJvdG9jb2w6IHByb3RvY29sIG9mIHBhZ2UgdGV4dC5qcyBpcyBydW5uaW5nIG9uCisgICAg
ICAgICAgICAgICAgLy9ob3N0bmFtZTogaG9zdG5hbWUgb2YgcGFnZSB0ZXh0LmpzIGlzIHJ1bm5p
bmcgb24KKyAgICAgICAgICAgICAgICAvL3BvcnQ6IHBvcnQgb2YgcGFnZSB0ZXh0LmpzIGlzIHJ1
bm5pbmcgb24KKyAgICAgICAgICAgICAgICAvL1VzZSBwcm90b2NvbCwgaG9zdG5hbWUsIGFuZCBw
b3J0IHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgdXJsCisgICAgICAgICAgICAgICAgLy9iZWluZyBy
ZXF1ZXN0ZWQuCisgICAgICAgICAgICAgICAgLy9SZXR1cm4gdHJ1ZSBvciBmYWxzZS4gdHJ1ZSBt
ZWFucyAidXNlIHhociIsIGZhbHNlIG1lYW5zCisgICAgICAgICAgICAgICAgLy8iZmV0Y2ggdGhl
IC5qcyB2ZXJzaW9uIG9mIHRoaXMgcmVzb3VyY2UiLgorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfSk7CitgYGAKKworIyMjIEN1c3RvbSBYSFIgaG9va3MKKworVGhlcmUgbWF5IGJl
IGNhc2VzIHdoZXJlIHlvdSBtaWdodCB3YW50IHRvIHByb3ZpZGUgdGhlIFhIUiBvYmplY3QgdG8g
dXNlCitpbiB0aGUgcmVxdWVzdCwgb3IgeW91IG1heSBqdXN0IHdhbnQgdG8gYWRkIHNvbWUgY3Vz
dG9tIGhlYWRlcnMgdG8gdGhlCitYSFIgb2JqZWN0IHVzZWQgdG8gbWFrZSB0aGUgcmVxdWVzdC4g
WW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBob29rczoKKworYGBgamF2YXNjcmlwdAorcmVxdWly
ZWpzLmNvbmZpZyh7CisgICAgY29uZmlnOiB7CisgICAgICAgIHRleHQ6IHsKKyAgICAgICAgICAg
IG9uWGhyOiBmdW5jdGlvbiAoeGhyLCB1cmwpIHsKKyAgICAgICAgICAgICAgICAvL0NhbGxlZCBh
ZnRlciB0aGUgWEhSIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIGFmdGVyIHRoZQorICAgICAgICAgICAg
ICAgIC8veGhyLm9wZW4oKSBjYWxsLCBidXQgYmVmb3JlIHRoZSB4aHIuc2VuZCgpIGNhbGwuCisg
ICAgICAgICAgICAgICAgLy9Vc2VmdWwgdGltZSB0byBzZXQgaGVhZGVycy4KKyAgICAgICAgICAg
ICAgICAvL3hocjogdGhlIHhociBvYmplY3QKKyAgICAgICAgICAgICAgICAvL3VybDogdGhlIHVy
bCB0aGF0IGlzIGJlaW5nIHVzZWQgd2l0aCB0aGUgeGhyIG9iamVjdC4KKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICBjcmVhdGVYaHI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAv
L092ZXJyaWRlcyB0aGUgY3JlYXRpb24gb2YgdGhlIFhIUiBvYmplY3QuIFJldHVybiBhbiBYSFIK
KyAgICAgICAgICAgICAgICAvL29iamVjdCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgICAgICAgICAg
ICAgICAgLy9BdmFpbGFibGUgaW4gdGV4dC5qcyAyLjAuMSBvciBsYXRlci4KKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICBvblhockNvbXBsZXRlOiBmdW5jdGlvbiAoeGhyLCB1cmwpIHsKKyAg
ICAgICAgICAgICAgICAvL0NhbGxlZCB3aGVuZXZlciBhbiBYSFIgaGFzIGNvbXBsZXRlZCBpdHMg
d29yay4gVXNlZnVsCisgICAgICAgICAgICAgICAgLy9pZiBicm93c2VyLXNwZWNpZmljIHhociBj
bGVhbnVwIG5lZWRzIHRvIGJlIGRvbmUuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9KTsKK2BgYAorCisjIyMgRm9yY2luZyB0aGUgZW52aXJvbm1lbnQgaW1wbGVtZW50YXRpb24K
KworVGhlIHRleHQgcGx1Z2luIHRyaWVzIHRvIGRldGVjdCB3aGF0IGVudmlyb25tZW50IGl0IGlz
IGF2YWlsYWJsZSBmb3IgbG9hZGluZwordGV4dCByZXNvdXJjZXMsIE5vZGUsIFhNTEh0dHBSZXF1
ZXN0IChYSFIpIG9yIFJoaW5vLCBidXQgc29tZXRpbWVzIHRoZQorTm9kZSBvciBSaGlubyBlbnZp
cm9ubWVudCBtYXkgaGF2ZSBsb2FkZWQgYSBsaWJyYXJ5IHRoYXQgaW50cm9kdWNlcyBhbiBYSFIK
K2ltcGxlbWVudGF0aW9uLiBZb3UgY2FuIGZvcmNlIHRoZSBlbnZpcm9ubWVudCBpbXBsZW1lbnRh
dGlvbiB0byB1c2UgYnkgcGFzc2luZworYW4gImVudiIgbW9kdWxlIGNvbmZpZyB0byB0aGUgcGx1
Z2luOgorCitgYGBqYXZhc2NyaXB0CityZXF1aXJlanMuY29uZmlnKHsKKyAgICBjb25maWc6IHsK
KyAgICAgICAgdGV4dDogeworICAgICAgICAgICAgLy9WYWxpZCB2YWx1ZXMgYXJlICdub2RlJywg
J3hocicsIG9yICdyaGlubycKKyAgICAgICAgICAgIGVudjogJ3JoaW5vJworICAgICAgICB9Cisg
ICAgfQorfSk7CitgYGAKKworIyMgTGljZW5zZQorCitNSVQKKworIyMgQ29kZSBvZiBDb25kdWN0
CisKK1tqUXVlcnkgRm91bmRhdGlvbiBDb2RlIG9mIENvbmR1Y3RdKGh0dHBzOi8vanF1ZXJ5Lm9y
Zy9jb25kdWN0LykuCisKKyMjIFdoZXJlIGFyZSB0aGUgdGVzdHM/CisKK1RoZXkgYXJlIGluIHRo
ZSBbcmVxdWlyZWpzXShodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcykgYW5k
Citbci5qc10oaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yLmpzKSByZXBvcy4KKworIyMg
SGlzdG9yeQorCitUaGlzIHBsdWdpbiB3YXMgaW4gdGhlIFtyZXF1aXJlanMgcmVwb10oaHR0cHM6
Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMpCit1cCB1bnRpbCB0aGUgcmVxdWlyZWpz
IDIuMCByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9t
b2R1bGVzL3JlcXVpcmVqcy10ZXh0L2Jvd2VyLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvYm93ZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2Jk
YTkwYjVmYjI3ZjE0ZTJhNTM2YTYwNWJiODhlNDlkYjFlN2Q0Ci0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L2Jvd2Vy
Lmpzb24KQEAgLTAsMCArMSw2IEBACit7CisgICJuYW1lIjogInRleHQiLAorICAidmVyc2lvbiI6
ICIyLjAuMTUiLAorICAibWFpbiI6ICJ0ZXh0LmpzIiwKKyAgImxpY2Vuc2UiOiAiTUlUIgorfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC9wYWNrYWdlLmpzb24gYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvcGFja2FnZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRjZjEwODZmOGNjMTkyOWYwMGY2NTg5OTc1NTNhZDQ4YzVmNDQ0YmUKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVx
dWlyZWpzLXRleHQvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsODUgQEAKK3sKKyAgIl9hcmdzIjog
WworICAgIFsKKyAgICAgIHsKKyAgICAgICAgInJhdyI6ICJyZXF1aXJlanMtdGV4dEBeMi4wLjEy
IiwKKyAgICAgICAgInNjb3BlIjogbnVsbCwKKyAgICAgICAgImVzY2FwZWROYW1lIjogInJlcXVp
cmVqcy10ZXh0IiwKKyAgICAgICAgIm5hbWUiOiAicmVxdWlyZWpzLXRleHQiLAorICAgICAgICAi
cmF3U3BlYyI6ICJeMi4wLjEyIiwKKyAgICAgICAgInNwZWMiOiAiPj0yLjAuMTIgPDMuMC4wIiwK
KyAgICAgICAgInR5cGUiOiAicmFuZ2UiCisgICAgICB9LAorICAgICAgIi9Vc2Vycy9hZGR5by9E
ZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQiCisgICAgXQorICBdLAorICAiX2Zyb20iOiAicmVxdWlyZWpzLXRleHRAPj0yLjAu
MTIgPDMuMC4wIiwKKyAgIl9pZCI6ICJyZXF1aXJlanMtdGV4dEAyLjAuMTUiLAorICAiX2luQ2Fj
aGUiOiB0cnVlLAorICAiX2xvY2F0aW9uIjogIi9yZXF1aXJlanMtdGV4dCIsCisgICJfbm9kZVZl
cnNpb24iOiAiNy4yLjEiLAorICAiX25wbU9wZXJhdGlvbmFsSW50ZXJuYWwiOiB7CisgICAgImhv
c3QiOiAicGFja2FnZXMtMTItd2VzdC5pbnRlcm5hbC5ucG1qcy5jb20iLAorICAgICJ0bXAiOiAi
dG1wL3JlcXVpcmVqcy10ZXh0LTIuMC4xNS50Z3pfMTQ4MjA3NDEwOTMwMl8wLjk4NjA1OTgwODYz
Nzk0NjgiCisgIH0sCisgICJfbnBtVXNlciI6IHsKKyAgICAibmFtZSI6ICJjaGVzdG9uIiwKKyAg
ICAiZW1haWwiOiAiY2hlc3Rvbmxsb3lkQGdtYWlsLmNvbSIKKyAgfSwKKyAgIl9ucG1WZXJzaW9u
IjogIjMuMTAuMTAiLAorICAiX3BoYW50b21DaGlsZHJlbiI6IHt9LAorICAiX3JlcXVlc3RlZCI6
IHsKKyAgICAicmF3IjogInJlcXVpcmVqcy10ZXh0QF4yLjAuMTIiLAorICAgICJzY29wZSI6IG51
bGwsCisgICAgImVzY2FwZWROYW1lIjogInJlcXVpcmVqcy10ZXh0IiwKKyAgICAibmFtZSI6ICJy
ZXF1aXJlanMtdGV4dCIsCisgICAgInJhd1NwZWMiOiAiXjIuMC4xMiIsCisgICAgInNwZWMiOiAi
Pj0yLjAuMTIgPDMuMC4wIiwKKyAgICAidHlwZSI6ICJyYW5nZSIKKyAgfSwKKyAgIl9yZXF1aXJl
ZEJ5IjogWworICAgICIvIgorICBdLAorICAiX3Jlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3JlcXVpcmVqcy10ZXh0Ly0vcmVxdWlyZWpzLXRleHQtMi4wLjE1LnRneiIsCisg
ICJfc2hhc3VtIjogIjEzMTM4NzMzNjEzZmM0NDU3YjdlMTI0N2U4Y2I3NTFkZjdhYTU0MjkiLAor
ICAiX3Nocmlua3dyYXAiOiBudWxsLAorICAiX3NwZWMiOiAicmVxdWlyZWpzLXRleHRAXjIuMC4x
MiIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL0Rlc2t0b3AvU3BlZWRvbWV0ZXItYS9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodCIsCisgICJidWdzIjogewor
ICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy90ZXh0L2lzc3VlcyIKKyAg
fSwKKyAgImNhdGVnb3JpZXMiOiBbCisgICAgIkxvYWRlciBwbHVnaW5zIgorICBdLAorICAiZGVw
ZW5kZW5jaWVzIjoge30sCisgICJkZXNjcmlwdGlvbiI6ICJBbiBBTUQgbG9hZGVyIHBsdWdpbiBm
b3IgbG9hZGluZyB0ZXh0IHJlc291cmNlcy4iLAorICAiZGV2RGVwZW5kZW5jaWVzIjoge30sCisg
ICJkaXJlY3RvcmllcyI6IHt9LAorICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjogIjEzMTM4NzMz
NjEzZmM0NDU3YjdlMTI0N2U4Y2I3NTFkZjdhYTU0MjkiLAorICAgICJ0YXJiYWxsIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmVqcy10ZXh0Ly0vcmVxdWlyZWpzLXRleHQtMi4w
LjE1LnRneiIKKyAgfSwKKyAgImdpdEhlYWQiOiAiY2E0YjA5ZTc3OWI3MzAwYmViZWZkMmI3NDg2
NDNhNmRjZGU5NzFlZiIsCisgICJnaXRodWIiOiAiaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVq
cy90ZXh0IiwKKyAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvdGV4
dCNyZWFkbWUiLAorICAibGljZW5zZSI6ICJNSVQiLAorICAibWFpbiI6ICJ0ZXh0LmpzIiwKKyAg
Im1haW50YWluZXJzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogImNoZXN0b24iLAorICAgICAg
ImVtYWlsIjogImNoZXN0b25sbG95ZEBnbWFpbC5jb20iCisgICAgfQorICBdLAorICAibmFtZSI6
ICJyZXF1aXJlanMtdGV4dCIsCisgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHt9LAorICAicmVh
ZG1lIjogIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEiLAorICAicmVwb3NpdG9yeSI6IHsK
KyAgICAidHlwZSI6ICJnaXQiLAorICAgICJ1cmwiOiAiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9y
ZXF1aXJlanMvdGV4dC5naXQiCisgIH0sCisgICJzY3JpcHRzIjoge30sCisgICJ2ZXJzaW9uIjog
IjIuMC4xNSIsCisgICJ2b2xvIjogeworICAgICJ1cmwiOiAiaHR0cHM6Ly9yYXcuZ2l0aHViLmNv
bS9yZXF1aXJlanMvdGV4dC97dmVyc2lvbn0vdGV4dC5qcyIKKyAgfQorfQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3RleHQu
anMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQv
dGV4dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iODM3MGQ2MmZhYzZkNTg5MGU4YTQzYzkyM2NjNWI2MTIzYjRi
OTNiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL3JlcXVpcmVqcy10ZXh0L3RleHQuanMKQEAgLTAsMCArMSw0MDggQEAKKy8qKgorICogQGxp
Y2Vuc2UgdGV4dCAyLjAuMTUgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBj
b250cmlidXRvcnMuCisgKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSwgaHR0cDovL2dpdGh1
Yi5jb20vcmVxdWlyZWpzL3RleHQvTElDRU5TRQorICovCisvKmpzbGludCByZWdleHA6IHRydWUg
Ki8KKy8qZ2xvYmFsIHJlcXVpcmUsIFhNTEh0dHBSZXF1ZXN0LCBBY3RpdmVYT2JqZWN0LAorICBk
ZWZpbmUsIHdpbmRvdywgcHJvY2VzcywgUGFja2FnZXMsCisgIGphdmEsIGxvY2F0aW9uLCBDb21w
b25lbnRzLCBGaWxlVXRpbHMgKi8KKworZGVmaW5lKFsnbW9kdWxlJ10sIGZ1bmN0aW9uIChtb2R1
bGUpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgdGV4dCwgZnMsIENjLCBDaSwgeHBj
SXNXaW5kb3dzLAorICAgICAgICBwcm9nSWRzID0gWydNc3htbDIuWE1MSFRUUCcsICdNaWNyb3Nv
ZnQuWE1MSFRUUCcsICdNc3htbDIuWE1MSFRUUC40LjAnXSwKKyAgICAgICAgeG1sUmVnRXhwID0g
L15ccyo8XD94bWwoXHMpK3ZlcnNpb249W1wnXCJdKFxkKSouKFxkKSpbXCdcIl0oXHMpKlw/Pi9p
bSwKKyAgICAgICAgYm9keVJlZ0V4cCA9IC88Ym9keVtePl0qPlxzKihbXHNcU10rKVxzKjxcL2Jv
ZHk+L2ltLAorICAgICAgICBoYXNMb2NhdGlvbiA9IHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVm
aW5lZCcgJiYgbG9jYXRpb24uaHJlZiwKKyAgICAgICAgZGVmYXVsdFByb3RvY29sID0gaGFzTG9j
YXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgJiYgbG9jYXRpb24ucHJvdG9jb2wucmVwbGFjZSgv
XDovLCAnJyksCisgICAgICAgIGRlZmF1bHRIb3N0TmFtZSA9IGhhc0xvY2F0aW9uICYmIGxvY2F0
aW9uLmhvc3RuYW1lLAorICAgICAgICBkZWZhdWx0UG9ydCA9IGhhc0xvY2F0aW9uICYmIChsb2Nh
dGlvbi5wb3J0IHx8IHVuZGVmaW5lZCksCisgICAgICAgIGJ1aWxkTWFwID0ge30sCisgICAgICAg
IG1hc3RlckNvbmZpZyA9IChtb2R1bGUuY29uZmlnICYmIG1vZHVsZS5jb25maWcoKSkgfHwge307
CisKKyAgICBmdW5jdGlvbiB1c2VEZWZhdWx0KHZhbHVlLCBkZWZhdWx0VmFsdWUpIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnID8gZGVmYXVsdFZh
bHVlIDogdmFsdWU7CisgICAgfQorCisgICAgLy9BbGxvdyBmb3IgZGVmYXVsdCBwb3J0cyBmb3Ig
aHR0cCBhbmQgaHR0cHMuCisgICAgZnVuY3Rpb24gaXNTYW1lUG9ydChwcm90b2NvbDEsIHBvcnQx
LCBwcm90b2NvbDIsIHBvcnQyKSB7CisgICAgICAgIGlmIChwb3J0MSA9PT0gcG9ydDIpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHByb3RvY29sMSA9PT0g
cHJvdG9jb2wyKSB7CisgICAgICAgICAgICBpZiAocHJvdG9jb2wxID09PSAnaHR0cCcpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdXNlRGVmYXVsdChwb3J0MSwgJzgwJykgPT09IHVzZURlZmF1
bHQocG9ydDIsICc4MCcpOworICAgICAgICAgICAgfSBlbHNlIGlmIChwcm90b2NvbDEgPT09ICdo
dHRwcycpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdXNlRGVmYXVsdChwb3J0MSwgJzQ0Mycp
ID09PSB1c2VEZWZhdWx0KHBvcnQyLCAnNDQzJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRleHQgPSB7CisgICAgICAgIHZl
cnNpb246ICcyLjAuMTUnLAorCisgICAgICAgIHN0cmlwOiBmdW5jdGlvbiAoY29udGVudCkgewor
ICAgICAgICAgICAgLy9TdHJpcHMgPD94bWwgLi4uPz4gZGVjbGFyYXRpb25zIHNvIHRoYXQgZXh0
ZXJuYWwgU1ZHIGFuZCBYTUwKKyAgICAgICAgICAgIC8vZG9jdW1lbnRzIGNhbiBiZSBhZGRlZCB0
byBhIGRvY3VtZW50IHdpdGhvdXQgd29ycnkuIEFsc28sIGlmIHRoZSBzdHJpbmcKKyAgICAgICAg
ICAgIC8vaXMgYW4gSFRNTCBkb2N1bWVudCwgb25seSB0aGUgcGFydCBpbnNpZGUgdGhlIGJvZHkg
dGFnIGlzIHJldHVybmVkLgorICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHsKKyAgICAgICAgICAg
ICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKHhtbFJlZ0V4cCwgIiIpOworICAgICAgICAg
ICAgICAgIHZhciBtYXRjaGVzID0gY29udGVudC5tYXRjaChib2R5UmVnRXhwKTsKKyAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hlcykgeworICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gbWF0
Y2hlc1sxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGNvbnRlbnQgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBjb250ZW50OworICAgICAgICB9LAorCisgICAgICAgIGpzRXNjYXBlOiBmdW5jdGlvbiAoY29u
dGVudCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvKFsnXFxdKS9nLCAn
XFwkMScpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcZl0vZywgIlxcZiIpCisgICAgICAg
ICAgICAgICAgLnJlcGxhY2UoL1tcYl0vZywgIlxcYiIpCisgICAgICAgICAgICAgICAgLnJlcGxh
Y2UoL1tcbl0vZywgIlxcbiIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcdF0vZywgIlxc
dCIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tccl0vZywgIlxcciIpCisgICAgICAgICAg
ICAgICAgLnJlcGxhY2UoL1tcdTIwMjhdL2csICJcXHUyMDI4IikKKyAgICAgICAgICAgICAgICAu
cmVwbGFjZSgvW1x1MjAyOV0vZywgIlxcdTIwMjkiKTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVYaHI6IG1hc3RlckNvbmZpZy5jcmVhdGVYaHIgfHwgZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgLy9Xb3VsZCBsb3ZlIHRvIGR1bXAgdGhlIEFjdGl2ZVggY3JhcCBpbiBoZXJlLiBOZWVk
IElFIDYgdG8gZGllIGZpcnN0LgorICAgICAgICAgICAgdmFyIHhociwgaSwgcHJvZ0lkOworICAg
ICAgICAgICAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gInVuZGVmaW5lZCIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGVvZiBBY3RpdmVYT2JqZWN0ICE9PSAidW5kZWZpbmVkIikgeworICAgICAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvZ0lkID0gcHJvZ0lkc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KHByb2dJZCk7CisgICAg
ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHhocikgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ0lkcyA9IFtwcm9nSWRdOyAgLy8g
c28gZmFzdGVyIG5leHQgdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB4aHI7CisgICAgICAgIH0sCisKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFBhcnNlcyBhIHJlc291cmNlIG5hbWUgaW50byBpdHMgY29tcG9uZW50IHBhcnRzLiBSZXNv
dXJjZSBuYW1lcworICAgICAgICAgKiBsb29rIGxpa2U6IG1vZHVsZS9uYW1lLmV4dCFzdHJpcCwg
d2hlcmUgdGhlICFzdHJpcCBwYXJ0IGlzCisgICAgICAgICAqIG9wdGlvbmFsLgorICAgICAgICAg
KiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgcmVzb3VyY2UgbmFtZQorICAgICAgICAgKiBAcmV0
dXJucyB7T2JqZWN0fSB3aXRoIHByb3BlcnRpZXMgIm1vZHVsZU5hbWUiLCAiZXh0IiBhbmQgInN0
cmlwIgorICAgICAgICAgKiB3aGVyZSBzdHJpcCBpcyBhIGJvb2xlYW4uCisgICAgICAgICAqLwor
ICAgICAgICBwYXJzZU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICB2YXIgbW9k
TmFtZSwgZXh0LCB0ZW1wLAorICAgICAgICAgICAgICAgIHN0cmlwID0gZmFsc2UsCisgICAgICAg
ICAgICAgICAgaW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIiksCisgICAgICAgICAgICAgICAg
aXNSZWxhdGl2ZSA9IG5hbWUuaW5kZXhPZignLi8nKSA9PT0gMCB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lLmluZGV4T2YoJy4uLycpID09PSAwOworCisgICAgICAgICAgICBp
ZiAoaW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRleCA+IDEpKSB7CisgICAgICAg
ICAgICAgICAgbW9kTmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKKyAgICAgICAgICAg
ICAgICBleHQgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBtb2ROYW1lID0gbmFtZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdGVtcCA9IGV4dCB8fCBtb2ROYW1lOworICAgICAgICAgICAgaW5kZXggPSB0ZW1w
LmluZGV4T2YoIiEiKTsKKyAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAvL1B1bGwgb2ZmIHRoZSBzdHJpcCBhcmcuCisgICAgICAgICAgICAgICAgc3RyaXAg
PSB0ZW1wLnN1YnN0cmluZyhpbmRleCArIDEpID09PSAic3RyaXAiOworICAgICAgICAgICAgICAg
IHRlbXAgPSB0ZW1wLnN1YnN0cmluZygwLCBpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGV4
dCkgeworICAgICAgICAgICAgICAgICAgICBleHQgPSB0ZW1wOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1vZE5hbWUgPSB0ZW1wOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICBtb2R1bGVOYW1lOiBtb2ROYW1lLAorICAgICAgICAgICAgICAgIGV4dDogZXh0LAorICAg
ICAgICAgICAgICAgIHN0cmlwOiBzdHJpcAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICB4ZFJlZ0V4cDogL14oKFx3KylcOik/XC9cLyhbXlwvXFxdKykvLAorCisgICAgICAg
IC8qKgorICAgICAgICAgKiBJcyBhbiBVUkwgb24gYW5vdGhlciBkb21haW4uIE9ubHkgd29ya3Mg
Zm9yIGJyb3dzZXIgdXNlLCByZXR1cm5zCisgICAgICAgICAqIGZhbHNlIGluIG5vbi1icm93c2Vy
IGVudmlyb25tZW50cy4gT25seSB1c2VkIHRvIGtub3cgaWYgYW4KKyAgICAgICAgICogb3B0aW1p
emVkIC5qcyB2ZXJzaW9uIG9mIGEgdGV4dCByZXNvdXJjZSBzaG91bGQgYmUgbG9hZGVkCisgICAg
ICAgICAqIGluc3RlYWQuCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwKKyAgICAgICAg
ICogQHJldHVybnMgQm9vbGVhbgorICAgICAgICAgKi8KKyAgICAgICAgdXNlWGhyOiBmdW5jdGlv
biAodXJsLCBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQpIHsKKyAgICAgICAgICAgIHZhciB1UHJv
dG9jb2wsIHVIb3N0TmFtZSwgdVBvcnQsCisgICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZXh0Lnhk
UmVnRXhwLmV4ZWModXJsKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2gpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVQcm90b2NvbCA9
IG1hdGNoWzJdOworICAgICAgICAgICAgdUhvc3ROYW1lID0gbWF0Y2hbM107CisKKyAgICAgICAg
ICAgIHVIb3N0TmFtZSA9IHVIb3N0TmFtZS5zcGxpdCgnOicpOworICAgICAgICAgICAgdVBvcnQg
PSB1SG9zdE5hbWVbMV07CisgICAgICAgICAgICB1SG9zdE5hbWUgPSB1SG9zdE5hbWVbMF07CisK
KyAgICAgICAgICAgIHJldHVybiAoIXVQcm90b2NvbCB8fCB1UHJvdG9jb2wgPT09IHByb3RvY29s
KSAmJgorICAgICAgICAgICAgICAgICAgICghdUhvc3ROYW1lIHx8IHVIb3N0TmFtZS50b0xvd2Vy
Q2FzZSgpID09PSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpKSAmJgorICAgICAgICAgICAgICAgICAg
ICgoIXVQb3J0ICYmICF1SG9zdE5hbWUpIHx8IGlzU2FtZVBvcnQodVByb3RvY29sLCB1UG9ydCwg
cHJvdG9jb2wsIHBvcnQpKTsKKyAgICAgICAgfSwKKworICAgICAgICBmaW5pc2hMb2FkOiBmdW5j
dGlvbiAobmFtZSwgc3RyaXAsIGNvbnRlbnQsIG9uTG9hZCkgeworICAgICAgICAgICAgY29udGVu
dCA9IHN0cmlwID8gdGV4dC5zdHJpcChjb250ZW50KSA6IGNvbnRlbnQ7CisgICAgICAgICAgICBp
ZiAobWFzdGVyQ29uZmlnLmlzQnVpbGQpIHsKKyAgICAgICAgICAgICAgICBidWlsZE1hcFtuYW1l
XSA9IGNvbnRlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvbkxvYWQoY29udGVudCk7
CisgICAgICAgIH0sCisKKyAgICAgICAgbG9hZDogZnVuY3Rpb24gKG5hbWUsIHJlcSwgb25Mb2Fk
LCBjb25maWcpIHsKKyAgICAgICAgICAgIC8vTmFtZSBoYXMgZm9ybWF0OiBzb21lLm1vZHVsZS5m
aWxleHQhc3RyaXAKKyAgICAgICAgICAgIC8vVGhlIHN0cmlwIHBhcnQgaXMgb3B0aW9uYWwuCisg
ICAgICAgICAgICAvL2lmIHN0cmlwIGlzIHByZXNlbnQsIHRoZW4gdGhhdCBtZWFucyBvbmx5IGdl
dCB0aGUgc3RyaW5nIGNvbnRlbnRzCisgICAgICAgICAgICAvL2luc2lkZSBhIGJvZHkgdGFnIGlu
IGFuIEhUTUwgc3RyaW5nLiBGb3IgWE1ML1NWRyBjb250ZW50IGl0IG1lYW5zCisgICAgICAgICAg
ICAvL3JlbW92aW5nIHRoZSA8P3htbCAuLi4/PiBkZWNsYXJhdGlvbnMgc28gdGhlIGNvbnRlbnQg
Y2FuIGJlIGluc2VydGVkCisgICAgICAgICAgICAvL2ludG8gdGhlIGN1cnJlbnQgZG9jIHdpdGhv
dXQgcHJvYmxlbXMuCisKKyAgICAgICAgICAgIC8vIERvIG5vdCBib3RoZXIgd2l0aCB0aGUgd29y
ayBpZiBhIGJ1aWxkIGFuZCB0ZXh0IHdpbGwKKyAgICAgICAgICAgIC8vIG5vdCBiZSBpbmxpbmVk
LgorICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuaXNCdWlsZCAmJiAhY29uZmlnLmlu
bGluZVRleHQpIHsKKyAgICAgICAgICAgICAgICBvbkxvYWQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1hc3RlckNvbmZpZy5pc0J1aWxk
ID0gY29uZmlnICYmIGNvbmZpZy5pc0J1aWxkOworCisgICAgICAgICAgICB2YXIgcGFyc2VkID0g
dGV4dC5wYXJzZU5hbWUobmFtZSksCisgICAgICAgICAgICAgICAgbm9uU3RyaXBOYW1lID0gcGFy
c2VkLm1vZHVsZU5hbWUgKworICAgICAgICAgICAgICAgICAgICAocGFyc2VkLmV4dCA/ICcuJyAr
IHBhcnNlZC5leHQgOiAnJyksCisgICAgICAgICAgICAgICAgdXJsID0gcmVxLnRvVXJsKG5vblN0
cmlwTmFtZSksCisgICAgICAgICAgICAgICAgdXNlWGhyID0gKG1hc3RlckNvbmZpZy51c2VYaHIp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC51c2VYaHI7CisKKyAgICAgICAgICAg
IC8vIERvIG5vdCBsb2FkIGlmIGl0IGlzIGFuIGVtcHR5OiB1cmwKKyAgICAgICAgICAgIGlmICh1
cmwuaW5kZXhPZignZW1wdHk6JykgPT09IDApIHsKKyAgICAgICAgICAgICAgICBvbkxvYWQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
TG9hZCB0aGUgdGV4dC4gVXNlIFhIUiBpZiBwb3NzaWJsZSBhbmQgaW4gYSBicm93c2VyLgorICAg
ICAgICAgICAgaWYgKCFoYXNMb2NhdGlvbiB8fCB1c2VYaHIodXJsLCBkZWZhdWx0UHJvdG9jb2ws
IGRlZmF1bHRIb3N0TmFtZSwgZGVmYXVsdFBvcnQpKSB7CisgICAgICAgICAgICAgICAgdGV4dC5n
ZXQodXJsLCBmdW5jdGlvbiAoY29udGVudCkgeworICAgICAgICAgICAgICAgICAgICB0ZXh0LmZp
bmlzaExvYWQobmFtZSwgcGFyc2VkLnN0cmlwLCBjb250ZW50LCBvbkxvYWQpOworICAgICAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9uTG9h
ZC5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgb25Mb2FkLmVycm9yKGVycik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgLy9OZWVkIHRvIGZldGNoIHRoZSByZXNvdXJjZSBhY3Jv
c3MgZG9tYWlucy4gQXNzdW1lCisgICAgICAgICAgICAgICAgLy90aGUgcmVzb3VyY2UgaGFzIGJl
ZW4gb3B0aW1pemVkIGludG8gYSBKUyBtb2R1bGUuIEZldGNoCisgICAgICAgICAgICAgICAgLy9i
eSB0aGUgbW9kdWxlIG5hbWUgKyBleHRlbnNpb24sIGJ1dCBkbyBub3QgaW5jbHVkZSB0aGUKKyAg
ICAgICAgICAgICAgICAvLyFzdHJpcCBwYXJ0IHRvIGF2b2lkIGZpbGUgc3lzdGVtIGlzc3Vlcy4K
KyAgICAgICAgICAgICAgICByZXEoW25vblN0cmlwTmFtZV0sIGZ1bmN0aW9uIChjb250ZW50KSB7
CisgICAgICAgICAgICAgICAgICAgIHRleHQuZmluaXNoTG9hZChwYXJzZWQubW9kdWxlTmFtZSAr
ICcuJyArIHBhcnNlZC5leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZWQuc3RyaXAsIGNvbnRlbnQsIG9uTG9hZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIChwbHVnaW5O
YW1lLCBtb2R1bGVOYW1lLCB3cml0ZSwgY29uZmlnKSB7CisgICAgICAgICAgICBpZiAoYnVpbGRN
YXAuaGFzT3duUHJvcGVydHkobW9kdWxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29u
dGVudCA9IHRleHQuanNFc2NhcGUoYnVpbGRNYXBbbW9kdWxlTmFtZV0pOworICAgICAgICAgICAg
ICAgIHdyaXRlLmFzTW9kdWxlKHBsdWdpbk5hbWUgKyAiISIgKyBtb2R1bGVOYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZpbmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gJyIg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiJzt9KTtcbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorCisgICAgICAgIHdyaXRlRmlsZTogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIG1vZHVsZU5h
bWUsIHJlcSwgd3JpdGUsIGNvbmZpZykgeworICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHRleHQu
cGFyc2VOYW1lKG1vZHVsZU5hbWUpLAorICAgICAgICAgICAgICAgIGV4dFBhcnQgPSBwYXJzZWQu
ZXh0ID8gJy4nICsgcGFyc2VkLmV4dCA6ICcnLAorICAgICAgICAgICAgICAgIG5vblN0cmlwTmFt
ZSA9IHBhcnNlZC5tb2R1bGVOYW1lICsgZXh0UGFydCwKKyAgICAgICAgICAgICAgICAvL1VzZSBh
ICcuanMnIGZpbGUgbmFtZSBzbyB0aGF0IGl0IGluZGljYXRlcyBpdCBpcyBhCisgICAgICAgICAg
ICAgICAgLy9zY3JpcHQgdGhhdCBjYW4gYmUgbG9hZGVkIGFjcm9zcyBkb21haW5zLgorICAgICAg
ICAgICAgICAgIGZpbGVOYW1lID0gcmVxLnRvVXJsKHBhcnNlZC5tb2R1bGVOYW1lICsgZXh0UGFy
dCkgKyAnLmpzJzsKKworICAgICAgICAgICAgLy9MZXZlcmFnZSBvd24gbG9hZCgpIG1ldGhvZCB0
byBsb2FkIHBsdWdpbiB2YWx1ZSwgYnV0IG9ubHkKKyAgICAgICAgICAgIC8vd3JpdGUgb3V0IHZh
bHVlcyB0aGF0IGRvIG5vdCBoYXZlIHRoZSBzdHJpcCBhcmd1bWVudCwKKyAgICAgICAgICAgIC8v
dG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCAhIGluIGZpbGUgbmFtZXMuCisgICAg
ICAgICAgICB0ZXh0LmxvYWQobm9uU3RyaXBOYW1lLCByZXEsIGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIC8vVXNlIG93biB3cml0ZSgpIG1ldGhvZCB0byBjb25zdHJ1Y3QgZnVs
bCBtb2R1bGUgdmFsdWUuCisgICAgICAgICAgICAgICAgLy9CdXQgbmVlZCB0byBjcmVhdGUgc2hl
bGwgdGhhdCB0cmFuc2xhdGVzIHdyaXRlRmlsZSdzCisgICAgICAgICAgICAgICAgLy93cml0ZSgp
IHRvIHRoZSByaWdodCBpbnRlcmZhY2UuCisgICAgICAgICAgICAgICAgdmFyIHRleHRXcml0ZSA9
IGZ1bmN0aW9uIChjb250ZW50cykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGUo
ZmlsZU5hbWUsIGNvbnRlbnRzKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
IHRleHRXcml0ZS5hc01vZHVsZSA9IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBjb250ZW50cykgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGUuYXNNb2R1bGUobW9kdWxlTmFtZSwgZmls
ZU5hbWUsIGNvbnRlbnRzKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAg
dGV4dC53cml0ZShwbHVnaW5OYW1lLCBub25TdHJpcE5hbWUsIHRleHRXcml0ZSwgY29uZmlnKTsK
KyAgICAgICAgICAgIH0sIGNvbmZpZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgaWYgKG1h
c3RlckNvbmZpZy5lbnYgPT09ICdub2RlJyB8fCAoIW1hc3RlckNvbmZpZy5lbnYgJiYKKyAgICAg
ICAgICAgIHR5cGVvZiBwcm9jZXNzICE9PSAidW5kZWZpbmVkIiAmJgorICAgICAgICAgICAgcHJv
Y2Vzcy52ZXJzaW9ucyAmJgorICAgICAgICAgICAgISFwcm9jZXNzLnZlcnNpb25zLm5vZGUgJiYK
KyAgICAgICAgICAgICFwcm9jZXNzLnZlcnNpb25zWydub2RlLXdlYmtpdCddICYmCisgICAgICAg
ICAgICAhcHJvY2Vzcy52ZXJzaW9uc1snYXRvbS1zaGVsbCddKSkgeworICAgICAgICAvL1VzaW5n
IHNwZWNpYWwgcmVxdWlyZS5ub2RlUmVxdWlyZSwgc29tZXRoaW5nIGFkZGVkIGJ5IHIuanMuCisg
ICAgICAgIGZzID0gcmVxdWlyZS5ub2RlUmVxdWlyZSgnZnMnKTsKKworICAgICAgICB0ZXh0Lmdl
dCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrLCBlcnJiYWNrKSB7CisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgIHZhciBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHVybCwgJ3V0Zjgn
KTsKKyAgICAgICAgICAgICAgICAvL1JlbW92ZSBCT00gKEJ5dGUgTWFyayBPcmRlcikgZnJvbSB1
dGY4IGZpbGVzIGlmIGl0IGlzIHRoZXJlLgorICAgICAgICAgICAgICAgIGlmIChmaWxlWzBdID09
PSAnXHVGRUZGJykgeworICAgICAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5zdWJzdHJpbmco
MSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZpbGUpOwor
ICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7
CisgICAgICAgICAgICAgICAgICAgIGVycmJhY2soZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgIH0gZWxzZSBpZiAobWFzdGVyQ29uZmlnLmVudiA9
PT0gJ3hocicgfHwgKCFtYXN0ZXJDb25maWcuZW52ICYmCisgICAgICAgICAgICB0ZXh0LmNyZWF0
ZVhocigpKSkgeworICAgICAgICB0ZXh0LmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrLCBl
cnJiYWNrLCBoZWFkZXJzKSB7CisgICAgICAgICAgICB2YXIgeGhyID0gdGV4dC5jcmVhdGVYaHIo
KSwgaGVhZGVyOworICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CisKKyAg
ICAgICAgICAgIC8vQWxsb3cgcGx1Z2lucyBkaXJlY3QgYWNjZXNzIHRvIHhociBoZWFkZXJzCisg
ICAgICAgICAgICBpZiAoaGVhZGVycykgeworICAgICAgICAgICAgICAgIGZvciAoaGVhZGVyIGlu
IGhlYWRlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVy
dHkoaGVhZGVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFk
ZXIoaGVhZGVyLnRvTG93ZXJDYXNlKCksIGhlYWRlcnNbaGVhZGVyXSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vQWxsb3cgb3ZlcnJpZGVzIHNwZWNpZmllZCBpbiBjb25maWcKKyAgICAgICAgICAgIGlmICht
YXN0ZXJDb25maWcub25YaHIpIHsKKyAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcub25YaHIo
eGhyLCB1cmwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhciBzdGF0dXMsIGVy
cjsKKyAgICAgICAgICAgICAgICAvL0RvIG5vdCBleHBsaWNpdGx5IGhhbmRsZSBlcnJvcnMsIHRo
b3NlIHNob3VsZCBiZQorICAgICAgICAgICAgICAgIC8vdmlzaWJsZSB2aWEgY29uc29sZSBvdXRw
dXQgaW4gdGhlIGJyb3dzZXIuCisgICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09
PSA0KSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXMgfHwgMDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA+IDM5OSAmJiBzdGF0dXMgPCA2MDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vQW4gaHR0cCA0eHggb3IgNXh4IGVycm9yLiBTaWduYWwg
YW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IodXJsICsg
JyBIVFRQIHN0YXR1czogJyArIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIu
eGhyID0geGhyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJiYWNrKGVycik7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayh4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXN0ZXJDb25maWcub25YaHJDb21wbGV0ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLm9uWGhyQ29tcGxldGUoeGhyLCB1
cmwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIHhoci5zZW5kKG51bGwpOworICAgICAgICB9OworICAgIH0gZWxz
ZSBpZiAobWFzdGVyQ29uZmlnLmVudiA9PT0gJ3JoaW5vJyB8fCAoIW1hc3RlckNvbmZpZy5lbnYg
JiYKKyAgICAgICAgICAgIHR5cGVvZiBQYWNrYWdlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9m
IGphdmEgIT09ICd1bmRlZmluZWQnKSkgeworICAgICAgICAvL1doeSBKYXZhLCB3aHkgaXMgdGhp
cyBzbyBhd2t3YXJkPworICAgICAgICB0ZXh0LmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNr
KSB7CisgICAgICAgICAgICB2YXIgc3RyaW5nQnVmZmVyLCBsaW5lLAorICAgICAgICAgICAgICAg
IGVuY29kaW5nID0gInV0Zi04IiwKKyAgICAgICAgICAgICAgICBmaWxlID0gbmV3IGphdmEuaW8u
RmlsZSh1cmwpLAorICAgICAgICAgICAgICAgIGxpbmVTZXBhcmF0b3IgPSBqYXZhLmxhbmcuU3lz
dGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpLAorICAgICAgICAgICAgICAgIGlucHV0
ID0gbmV3IGphdmEuaW8uQnVmZmVyZWRSZWFkZXIobmV3IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFk
ZXIobmV3IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtKGZpbGUpLCBlbmNvZGluZykpLAorICAgICAg
ICAgICAgICAgIGNvbnRlbnQgPSAnJzsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgc3RyaW5nQnVmZmVyID0gbmV3IGphdmEubGFuZy5TdHJpbmdCdWZmZXIoKTsKKyAgICAgICAg
ICAgICAgICBsaW5lID0gaW5wdXQucmVhZExpbmUoKTsKKworICAgICAgICAgICAgICAgIC8vIEJ5
dGUgT3JkZXIgTWFyayAoQk9NKSAtIFRoZSBVbmljb2RlIFN0YW5kYXJkLCB2ZXJzaW9uIDMuMCwg
cGFnZSAzMjQKKyAgICAgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2ZhcS91
dGZfYm9tLmh0bWwKKworICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3aGVuIHdlIHVzZSB1
dGYtOCwgdGhlIEJPTSBzaG91bGQgYXBwZWFyIGFzICJFRiBCQiBCRiIsIGJ1dCBpdCBkb2Vzbid0
IGR1ZSB0byB0aGlzIGJ1ZyBpbiB0aGUgSkRLOgorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9i
dWdzLnN1bi5jb20vYnVnZGF0YWJhc2Uvdmlld19idWcuZG8/YnVnX2lkPTQ1MDgwNTgKKyAgICAg
ICAgICAgICAgICBpZiAobGluZSAmJiBsaW5lLmxlbmd0aCgpICYmIGxpbmUuY2hhckF0KDApID09
PSAweGZlZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRWF0IHRoZSBCT00sIHNpbmNlIHdl
J3ZlIGFscmVhZHkgZm91bmQgdGhlIGVuY29kaW5nIG9uIHRoaXMgZmlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYW5kIHdlIHBsYW4gdG8gY29uY2F0ZW5hdGluZyB0aGlzIGJ1ZmZlciB3aXRo
IG90aGVyczsgdGhlIEJPTSBzaG91bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gb25seSBhcHBl
YXIgYXQgdGhlIHRvcCBvZiBhIGZpbGUuCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5l
LnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
bGluZSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWZmZXIuYXBwZW5k
KGxpbmUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdoaWxlICgobGlu
ZSA9IGlucHV0LnJlYWRMaW5lKCkpICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHN0
cmluZ0J1ZmZlci5hcHBlbmQobGluZVNlcGFyYXRvcik7CisgICAgICAgICAgICAgICAgICAgIHN0
cmluZ0J1ZmZlci5hcHBlbmQobGluZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vTWFrZSBzdXJlIHdlIHJldHVybiBhIEphdmFTY3JpcHQgc3RyaW5nIGFuZCBub3QgYSBK
YXZhIHN0cmluZy4KKyAgICAgICAgICAgICAgICBjb250ZW50ID0gU3RyaW5nKHN0cmluZ0J1ZmZl
ci50b1N0cmluZygpKTsgLy9TdHJpbmcKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAg
ICAgICAgICAgaW5wdXQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbGxi
YWNrKGNvbnRlbnQpOworICAgICAgICB9OworICAgIH0gZWxzZSBpZiAobWFzdGVyQ29uZmlnLmVu
diA9PT0gJ3hwY29ubmVjdCcgfHwgKCFtYXN0ZXJDb25maWcuZW52ICYmCisgICAgICAgICAgICB0
eXBlb2YgQ29tcG9uZW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgQ29tcG9uZW50cy5jbGFzc2VzICYm
CisgICAgICAgICAgICBDb21wb25lbnRzLmludGVyZmFjZXMpKSB7CisgICAgICAgIC8vQXZlcnQg
eW91ciBnYXplIQorICAgICAgICBDYyA9IENvbXBvbmVudHMuY2xhc3NlczsKKyAgICAgICAgQ2kg
PSBDb21wb25lbnRzLmludGVyZmFjZXM7CisgICAgICAgIENvbXBvbmVudHMudXRpbHNbJ2ltcG9y
dCddKCdyZXNvdXJjZTovL2dyZS9tb2R1bGVzL0ZpbGVVdGlscy5qc20nKTsKKyAgICAgICAgeHBj
SXNXaW5kb3dzID0gKCdAbW96aWxsYS5vcmcvd2luZG93cy1yZWdpc3RyeS1rZXk7MScgaW4gQ2Mp
OworCisgICAgICAgIHRleHQuZ2V0ID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHsKKyAgICAg
ICAgICAgIHZhciBpblN0cmVhbSwgY29udmVydFN0cmVhbSwgZmlsZU9iaiwKKyAgICAgICAgICAg
ICAgICByZWFkRGF0YSA9IHt9OworCisgICAgICAgICAgICBpZiAoeHBjSXNXaW5kb3dzKSB7Cisg
ICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoL1wvL2csICdcXCcpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmaWxlT2JqID0gbmV3IEZpbGVVdGlscy5GaWxlKHVybCk7CisK
KyAgICAgICAgICAgIC8vWFBDT00sIHlvdSBzbyBjcmF6eQorICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICBpblN0cmVhbSA9IENjWydAbW96aWxsYS5vcmcvbmV0d29yay9maWxlLWlu
cHV0LXN0cmVhbTsxJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVJbnN0YW5j
ZShDaS5uc0lGaWxlSW5wdXRTdHJlYW0pOworICAgICAgICAgICAgICAgIGluU3RyZWFtLmluaXQo
ZmlsZU9iaiwgMSwgMCwgZmFsc2UpOworCisgICAgICAgICAgICAgICAgY29udmVydFN0cmVhbSA9
IENjWydAbW96aWxsYS5vcmcvaW50bC9jb252ZXJ0ZXItaW5wdXQtc3RyZWFtOzEnXQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlSW5zdGFuY2UoQ2kubnNJQ29udmVydGVy
SW5wdXRTdHJlYW0pOworICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0uaW5pdChpblN0cmVh
bSwgInV0Zi04IiwgaW5TdHJlYW0uYXZhaWxhYmxlKCksCisgICAgICAgICAgICAgICAgQ2kubnNJ
Q29udmVydGVySW5wdXRTdHJlYW0uREVGQVVMVF9SRVBMQUNFTUVOVF9DSEFSQUNURVIpOworCisg
ICAgICAgICAgICAgICAgY29udmVydFN0cmVhbS5yZWFkU3RyaW5nKGluU3RyZWFtLmF2YWlsYWJs
ZSgpLCByZWFkRGF0YSk7CisgICAgICAgICAgICAgICAgY29udmVydFN0cmVhbS5jbG9zZSgpOwor
ICAgICAgICAgICAgICAgIGluU3RyZWFtLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2socmVhZERhdGEudmFsdWUpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigoZmlsZU9iaiAmJiBmaWxlT2JqLnBhdGggfHwgJycpICsg
JzogJyArIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKyAgICByZXR1cm4g
dGV4dDsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL3JlcXVpcmVqcy9SRUFETUUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21v
ZHVsZXMvcmVxdWlyZWpzL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDViMzFkN2U2NTVmODI3NDQz
MDMxM2U2MjFmM2JlZTk0ZjVjYmVjCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy9SRUFETUUubWQKQEAgLTAsMCArMSw5IEBA
CisjIHJlcXVpcmVqcworCitSZXF1aXJlSlMgZm9yIHVzZSBpbiBOb2RlLiBpbmNsdWRlczoKKwor
KiByLmpzOiB0aGUgUmVxdWlyZUpTIG9wdGltaXplciwgYW5kIEFNRCBydW50aW1lIGZvciB1c2Ug
aW4gTm9kZS4KKyogcmVxdWlyZS5qczogVGhlIGJyb3dzZXItYmFzZWQgQU1EIGxvYWRlci4KKwor
TW9yZSBpbmZvcm1hdGlvbiBhdCBodHRwOi8vcmVxdWlyZWpzLm9yZworCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzL3BhY2thZ2UuanNv
biBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMvcGFja2Fn
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjFmY2ZiNDQ2MjNiN2VhMDk3YWZlMzY3Yjc3YmJhNGI0YTZhYjJm
ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvcmVxdWlyZWpzL3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDg5IEBACit7CisgICJfYXJncyI6
IFsKKyAgICBbCisgICAgICB7CisgICAgICAgICJyYXciOiAicmVxdWlyZWpzQF4yLjEuMTUiLAor
ICAgICAgICAic2NvcGUiOiBudWxsLAorICAgICAgICAiZXNjYXBlZE5hbWUiOiAicmVxdWlyZWpz
IiwKKyAgICAgICAgIm5hbWUiOiAicmVxdWlyZWpzIiwKKyAgICAgICAgInJhd1NwZWMiOiAiXjIu
MS4xNSIsCisgICAgICAgICJzcGVjIjogIj49Mi4xLjE1IDwzLjAuMCIsCisgICAgICAgICJ0eXBl
IjogInJhbmdlIgorICAgICAgfSwKKyAgICAgICIvVXNlcnMvYWRkeW8vRGVza3RvcC9TcGVlZG9t
ZXRlci1hL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0IgorICAg
IF0KKyAgXSwKKyAgIl9mcm9tIjogInJlcXVpcmVqc0A+PTIuMS4xNSA8My4wLjAiLAorICAiX2lk
IjogInJlcXVpcmVqc0AyLjMuMyIsCisgICJfaW5DYWNoZSI6IHRydWUsCisgICJfbG9jYXRpb24i
OiAiL3JlcXVpcmVqcyIsCisgICJfbm9kZVZlcnNpb24iOiAiNi43LjAiLAorICAiX25wbU9wZXJh
dGlvbmFsSW50ZXJuYWwiOiB7CisgICAgImhvc3QiOiAicGFja2FnZXMtMTItd2VzdC5pbnRlcm5h
bC5ucG1qcy5jb20iLAorICAgICJ0bXAiOiAidG1wL3JlcXVpcmVqcy0yLjMuMy50Z3pfMTQ4NzUy
NDA4MzI3NV8wLjMyMzcyODQzMDMxNzcxNDgiCisgIH0sCisgICJfbnBtVXNlciI6IHsKKyAgICAi
bmFtZSI6ICJqcmJ1cmtlIiwKKyAgICAiZW1haWwiOiAianJidXJrZUBnbWFpbC5jb20iCisgIH0s
CisgICJfbnBtVmVyc2lvbiI6ICIzLjEwLjMiLAorICAiX3BoYW50b21DaGlsZHJlbiI6IHt9LAor
ICAiX3JlcXVlc3RlZCI6IHsKKyAgICAicmF3IjogInJlcXVpcmVqc0BeMi4xLjE1IiwKKyAgICAi
c2NvcGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJyZXF1aXJlanMiLAorICAgICJuYW1l
IjogInJlcXVpcmVqcyIsCisgICAgInJhd1NwZWMiOiAiXjIuMS4xNSIsCisgICAgInNwZWMiOiAi
Pj0yLjEuMTUgPDMuMC4wIiwKKyAgICAidHlwZSI6ICJyYW5nZSIKKyAgfSwKKyAgIl9yZXF1aXJl
ZEJ5IjogWworICAgICIvIgorICBdLAorICAiX3Jlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3JlcXVpcmVqcy8tL3JlcXVpcmVqcy0yLjMuMy50Z3oiLAorICAiX3NoYXN1bSI6
ICJhYTU5ZmQzYTAyODdlYWY0MDc5NTlhMTM4MjI4MDQ0YjVkZDZhNmEzIiwKKyAgIl9zaHJpbmt3
cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogInJlcXVpcmVqc0BeMi4xLjE1IiwKKyAgIl93aGVyZSI6
ICIvVXNlcnMvYWRkeW8vRGVza3RvcC9TcGVlZG9tZXRlci1hL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0IiwKKyAgImF1dGhvciI6IHsKKyAgICAibmFtZSI6ICJK
YW1lcyBCdXJrZSIsCisgICAgImVtYWlsIjogImpyYnVya2VAZ21haWwuY29tIiwKKyAgICAidXJs
IjogImh0dHA6Ly9naXRodWIuY29tL2pyYnVya2UiCisgIH0sCisgICJiaW4iOiB7CisgICAgInIu
anMiOiAiLi9iaW4vci5qcyIsCisgICAgInJfanMiOiAiLi9iaW4vci5qcyIKKyAgfSwKKyAgImJ1
Z3MiOiB7CisgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yLmpzL2lzc3Vl
cyIKKyAgfSwKKyAgImRlcGVuZGVuY2llcyI6IHt9LAorICAiZGVzY3JpcHRpb24iOiAiTm9kZSBh
ZGFwdGVyIGZvciBSZXF1aXJlSlMsIGZvciBsb2FkaW5nIEFNRCBtb2R1bGVzLiBJbmNsdWRlcyBS
ZXF1aXJlSlMgb3B0aW1pemVyIiwKKyAgImRldkRlcGVuZGVuY2llcyI6IHt9LAorICAiZGlyZWN0
b3JpZXMiOiB7fSwKKyAgImRpc3QiOiB7CisgICAgInNoYXN1bSI6ICJhYTU5ZmQzYTAyODdlYWY0
MDc5NTlhMTM4MjI4MDQ0YjVkZDZhNmEzIiwKKyAgICAidGFyYmFsbCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9yZXF1aXJlanMvLS9yZXF1aXJlanMtMi4zLjMudGd6IgorICB9LAorICAi
ZW5naW5lcyI6IHsKKyAgICAibm9kZSI6ICI+PTAuNC4wIgorICB9LAorICAiaG9tZXBhZ2UiOiAi
aHR0cDovL2dpdGh1Yi5jb20vanJidXJrZS9yLmpzIiwKKyAgImxpY2Vuc2UiOiAiTUlUIiwKKyAg
Im1haW4iOiAiLi9iaW4vci5qcyIsCisgICJtYWludGFpbmVycyI6IFsKKyAgICB7CisgICAgICAi
bmFtZSI6ICJqcmJ1cmtlIiwKKyAgICAgICJlbWFpbCI6ICJqcmJ1cmtlQGdtYWlsLmNvbSIKKyAg
ICB9CisgIF0sCisgICJuYW1lIjogInJlcXVpcmVqcyIsCisgICJvcHRpb25hbERlcGVuZGVuY2ll
cyI6IHt9LAorICAicmVhZG1lIjogIkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEiLAorICAi
cmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJnaXQiLAorICAgICJ1cmwiOiAiZ2l0K2h0dHBz
Oi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3IuanMuZ2l0IgorICB9LAorICAic2NyaXB0cyI6IHt9LAor
ICAidmVyc2lvbiI6ICIyLjMuMyIKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMvcmVxdWlyZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMvcmVxdWlyZS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZmMx
MDgyZDU5ZjdiYWMyMzllZjgwOGY1ZTU2YzdlNjZjYWQ4YjY5Ci0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy9yZXF1aXJlLmpz
CkBAIC0wLDAgKzEsMjE0NSBAQAorLyoqIHZpbTogZXQ6dHM9NDpzdz00OnN0cz00CisgKiBAbGlj
ZW5zZSBSZXF1aXJlSlMgMi4zLjMgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhl
ciBjb250cmlidXRvcnMuCisgKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSwgaHR0cHM6Ly9n
aXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvYmxvYi9tYXN0ZXIvTElDRU5TRQorICovCisv
L05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJpY3Qgc3VwcG9ydCBpbiBicm93c2VycywgIzM5
MiwgYW5kIGNhdXNlcworLy9wcm9ibGVtcyB3aXRoIHJlcXVpcmVqcy5leGVjKCkvdHJhbnNwaWxl
ciBwbHVnaW5zIHRoYXQgbWF5IG5vdCBiZSBzdHJpY3QuCisvKmpzbGludCByZWdleHA6IHRydWUs
IG5vbWVuOiB0cnVlLCBzbG9wcHk6IHRydWUgKi8KKy8qZ2xvYmFsIHdpbmRvdywgbmF2aWdhdG9y
LCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEgKi8KKwordmFyIHJl
cXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOworKGZ1bmN0aW9uIChnbG9iYWwsIHNldFRpbWVvdXQp
IHsKKyAgICB2YXIgcmVxLCBzLCBoZWFkLCBiYXNlRWxlbWVudCwgZGF0YU1haW4sIHNyYywKKyAg
ICAgICAgaW50ZXJhY3RpdmVTY3JpcHQsIGN1cnJlbnRseUFkZGluZ1NjcmlwdCwgbWFpblNjcmlw
dCwgc3ViUGF0aCwKKyAgICAgICAgdmVyc2lvbiA9ICcyLjMuMycsCisgICAgICAgIGNvbW1lbnRS
ZWdFeHAgPSAvXC9cKltcc1xTXSo/XCpcL3woW146Iic9XXxeKVwvXC8uKiQvbWcsCisgICAgICAg
IGNqc1JlcXVpcmVSZWdFeHAgPSAvW14uXVxzKnJlcXVpcmVccypcKFxzKlsiJ10oW14nIlxzXSsp
WyInXVxzKlwpL2csCisgICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLywKKyAgICAgICAg
Y3VyckRpclJlZ0V4cCA9IC9eXC5cLy8sCisgICAgICAgIG9wID0gT2JqZWN0LnByb3RvdHlwZSwK
KyAgICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAorICAgICAgICBoYXNPd24gPSBvcC5oYXNP
d25Qcm9wZXJ0eSwKKyAgICAgICAgaXNCcm93c2VyID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3Vu
ZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRv
Y3VtZW50KSwKKyAgICAgICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBpbXBv
cnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJywKKyAgICAgICAgLy9QUzMgaW5kaWNhdGVzIGxvYWRl
ZCBhbmQgY29tcGxldGUsIGJ1dCBuZWVkIHRvIHdhaXQgZm9yIGNvbXBsZXRlCisgICAgICAgIC8v
c3BlY2lmaWNhbGx5LiBTZXF1ZW5jZSBpcyAnbG9hZGluZycsICdsb2FkZWQnLCBleGVjdXRpb24s
CisgICAgICAgIC8vIHRoZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVuYXRl
LCBidXQgbm90IHN1cmUgaG93CisgICAgICAgIC8vdG8gZmVhdHVyZSB0ZXN0IHcvbyBjYXVzaW5n
IHBlcmYgaXNzdWVzLgorICAgICAgICByZWFkeVJlZ0V4cCA9IGlzQnJvd3NlciAmJiBuYXZpZ2F0
b3IucGxhdGZvcm0gPT09ICdQTEFZU1RBVElPTiAzJyA/CisgICAgICAgICAgICAgICAgICAgICAg
L15jb21wbGV0ZSQvIDogL14oY29tcGxldGV8bG9hZGVkKSQvLAorICAgICAgICBkZWZDb250ZXh0
TmFtZSA9ICdfJywKKyAgICAgICAgLy9PaCB0aGUgdHJhZ2VkeSwgZGV0ZWN0aW5nIG9wZXJhLiBT
ZWUgdGhlIHVzYWdlIG9mIGlzT3BlcmEgZm9yIHJlYXNvbi4KKyAgICAgICAgaXNPcGVyYSA9IHR5
cGVvZiBvcGVyYSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tvYmpl
Y3QgT3BlcmFdJywKKyAgICAgICAgY29udGV4dHMgPSB7fSwKKyAgICAgICAgY2ZnID0ge30sCisg
ICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW10sCisgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFs
c2U7CisKKyAgICAvL0NvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlICcpLy9jb21tZW50JywgZG8g
bm90IGxvc2UgdGhlIHByZWZpeCB0byBjb21tZW50LgorICAgIGZ1bmN0aW9uIGNvbW1lbnRSZXBs
YWNlKG1hdGNoLCBzaW5nbGVQcmVmaXgpIHsKKyAgICAgICAgcmV0dXJuIHNpbmdsZVByZWZpeCB8
fCAnJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGl0KSB7CisgICAgICAgIHJl
dHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGlzQXJyYXkoaXQpIHsKKyAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChp
dCkgPT09ICdbb2JqZWN0IEFycmF5XSc7CisgICAgfQorCisgICAgLyoqCisgICAgICogSGVscGVy
IGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheS4gSWYgdGhlIGZ1bmMgcmV0dXJu
cworICAgICAqIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCisg
ICAgICovCisgICAgZnVuY3Rpb24gZWFjaChhcnksIGZ1bmMpIHsKKyAgICAgICAgaWYgKGFyeSkg
eworICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxl
bmd0aDsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtp
XSwgaSwgYXJ5KSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBI
ZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IGJhY2t3YXJkcy4gSWYg
dGhlIGZ1bmMKKyAgICAgKiByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQg
b2YgdGhlIGxvb3AuCisgICAgICovCisgICAgZnVuY3Rpb24gZWFjaFJldmVyc2UoYXJ5LCBmdW5j
KSB7CisgICAgICAgIGlmIChhcnkpIHsKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAg
Zm9yIChpID0gYXJ5Lmxlbmd0aCAtIDE7IGkgPiAtMTsgaSAtPSAxKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgeworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBoYXNQcm9wKG9iaiwgcHJvcCkgeworICAgICAgICByZXR1
cm4gaGFzT3duLmNhbGwob2JqLCBwcm9wKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRPd24o
b2JqLCBwcm9wKSB7CisgICAgICAgIHJldHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3By
b3BdOworICAgIH0KKworICAgIC8qKgorICAgICAqIEN5Y2xlcyBvdmVyIHByb3BlcnRpZXMgaW4g
YW4gb2JqZWN0IGFuZCBjYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoCisgICAgICogcHJvcGVydHkg
dmFsdWUuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCB0aGVuIHRoZQor
ICAgICAqIGl0ZXJhdGlvbiBpcyBzdG9wcGVkLgorICAgICAqLworICAgIGZ1bmN0aW9uIGVhY2hQ
cm9wKG9iaiwgZnVuYykgeworICAgICAgICB2YXIgcHJvcDsKKyAgICAgICAgZm9yIChwcm9wIGlu
IG9iaikgeworICAgICAgICAgICAgaWYgKGhhc1Byb3Aob2JqLCBwcm9wKSkgeworICAgICAgICAg
ICAgICAgIGlmIChmdW5jKG9ialtwcm9wXSwgcHJvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLyoqCisgICAgICogU2ltcGxlIGZ1bmN0aW9uIHRvIG1peCBpbiBwcm9wZXJ0aWVz
IGZyb20gc291cmNlIGludG8gdGFyZ2V0LAorICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2Vz
IG5vdCBhbHJlYWR5IGhhdmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlLCBmb3JjZSwgZGVlcFN0cmluZ01peGlu
KSB7CisgICAgICAgIGlmIChzb3VyY2UpIHsKKyAgICAgICAgICAgIGVhY2hQcm9wKHNvdXJjZSwg
ZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CisgICAgICAgICAgICAgICAgaWYgKGZvcmNlIHx8ICFo
YXNQcm9wKHRhcmdldCwgcHJvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJp
bmdNaXhpbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAhaXNBcnJheSh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUpICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmdldFtwcm9wXSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHt9OworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4odGFyZ2V0W3Byb3BdLCB2YWx1
ZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorCisgICAgLy9TaW1pbGFyIHRvIEZ1
bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBidXQgdGhlICd0aGlzJyBvYmplY3QgaXMgc3BlY2lmaWVk
CisgICAgLy9maXJzdCwgc2luY2UgaXQgaXMgZWFzaWVyIHRvIHJlYWQvZmlndXJlIG91dCB3aGF0
ICd0aGlzJyB3aWxsIGJlLgorICAgIGZ1bmN0aW9uIGJpbmQob2JqLCBmbikgeworICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJn
dW1lbnRzKTsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY3JpcHRzKCkgewor
ICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGVycikgeworICAgICAgICB0aHJv
dyBlcnI7CisgICAgfQorCisgICAgLy9BbGxvdyBnZXR0aW5nIGEgZ2xvYmFsIHRoYXQgaXMgZXhw
cmVzc2VkIGluCisgICAgLy9kb3Qgbm90YXRpb24sIGxpa2UgJ2EuYi5jJy4KKyAgICBmdW5jdGlv
biBnZXRHbG9iYWwodmFsdWUpIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgICAgICB9CisgICAgICAgIHZhciBnID0gZ2xvYmFsOworICAgICAg
ICBlYWNoKHZhbHVlLnNwbGl0KCcuJyksIGZ1bmN0aW9uIChwYXJ0KSB7CisgICAgICAgICAgICBn
ID0gZ1twYXJ0XTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBnOworICAgIH0KKworICAg
IC8qKgorICAgICAqIENvbnN0cnVjdHMgYW4gZXJyb3Igd2l0aCBhIHBvaW50ZXIgdG8gYW4gVVJM
IHdpdGggbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGVy
cm9yIElEIHRoYXQgbWFwcyB0byBhbiBJRCBvbiBhIHdlYiBwYWdlLgorICAgICAqIEBwYXJhbSB7
U3RyaW5nfSBtZXNzYWdlIGh1bWFuIHJlYWRhYmxlIGVycm9yLgorICAgICAqIEBwYXJhbSB7RXJy
b3J9IFtlcnJdIHRoZSBvcmlnaW5hbCBlcnJvciwgaWYgdGhlcmUgaXMgb25lLgorICAgICAqCisg
ICAgICogQHJldHVybnMge0Vycm9yfQorICAgICAqLworICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihp
ZCwgbXNnLCBlcnIsIHJlcXVpcmVNb2R1bGVzKSB7CisgICAgICAgIHZhciBlID0gbmV3IEVycm9y
KG1zZyArICdcbmh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjJyArIGlkKTsK
KyAgICAgICAgZS5yZXF1aXJlVHlwZSA9IGlkOworICAgICAgICBlLnJlcXVpcmVNb2R1bGVzID0g
cmVxdWlyZU1vZHVsZXM7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGUub3JpZ2lu
YWxFcnJvciA9IGVycjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZTsKKyAgICB9CisKKyAg
ICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgLy9JZiBhIGRl
ZmluZSBpcyBhbHJlYWR5IGluIHBsYXkgdmlhIGFub3RoZXIgQU1EIGxvYWRlciwKKyAgICAgICAg
Ly9kbyBub3Qgb3ZlcndyaXRlLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHR5
cGVvZiByZXF1aXJlanMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGlmIChpc0Z1bmN0aW9u
KHJlcXVpcmVqcykpIHsKKyAgICAgICAgICAgIC8vRG8gbm90IG92ZXJ3cml0ZSBhbiBleGlzdGlu
ZyByZXF1aXJlanMgaW5zdGFuY2UuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgY2ZnID0gcmVxdWlyZWpzOworICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7Cisg
ICAgfQorCisgICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKKyAgICBpZiAo
dHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmICFpc0Z1bmN0aW9uKHJlcXVpcmUpKSB7
CisgICAgICAgIC8vYXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KKyAgICAgICAgY2ZnID0g
cmVxdWlyZTsKKyAgICAgICAgcmVxdWlyZSA9IHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBuZXdDb250ZXh0KGNvbnRleHROYW1lKSB7CisgICAgICAgIHZhciBpbkNoZWNrTG9hZGVk
LCBNb2R1bGUsIGNvbnRleHQsIGhhbmRsZXJzLAorICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1l
b3V0SWQsCisgICAgICAgICAgICBjb25maWcgPSB7CisgICAgICAgICAgICAgICAgLy9EZWZhdWx0
cy4gRG8gbm90IHNldCBhIGRlZmF1bHQgZm9yIG1hcAorICAgICAgICAgICAgICAgIC8vY29uZmln
IHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAorICAgICAgICAgICAgICAgIC8vd2lsbCBy
dW4gZmFzdGVyIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgd2FpdFNl
Y29uZHM6IDcsCisgICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKKyAgICAgICAgICAgICAg
ICBwYXRoczoge30sCisgICAgICAgICAgICAgICAgYnVuZGxlczoge30sCisgICAgICAgICAgICAg
ICAgcGtnczoge30sCisgICAgICAgICAgICAgICAgc2hpbToge30sCisgICAgICAgICAgICAgICAg
Y29uZmlnOiB7fQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30sCisg
ICAgICAgICAgICAvL3JlZ2lzdHJ5IG9mIGp1c3QgZW5hYmxlZCBtb2R1bGVzLCB0byBzcGVlZAor
ICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBjb2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCisg
ICAgICAgICAgICAvL2FyZSByZWdpc3RlcmVkLCBidXQgbm90IGFjdGl2YXRlZC4KKyAgICAgICAg
ICAgIGVuYWJsZWRSZWdpc3RyeSA9IHt9LAorICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwK
KyAgICAgICAgICAgIGRlZlF1ZXVlID0gW10sCisgICAgICAgICAgICBkZWZpbmVkID0ge30sCisg
ICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCisgICAgICAgICAgICBidW5kbGVzTWFwID0ge30s
CisgICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCisgICAgICAgICAgICB1bm5vcm1hbGl6
ZWRDb3VudGVyID0gMTsKKworICAgICAgICAvKioKKyAgICAgICAgICogVHJpbXMgdGhlIC4gYW5k
IC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KKyAgICAgICAgICogSXQgd2lsbCBr
ZWVwIGEgbGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQorICAgICAgICAg
KiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3Vw
cywKKyAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQu
IEJ1dCB0aGUgZW5kIHJlc3VsdCwKKyAgICAgICAgICogYWxsIHBhdGhzIHRoYXQgdXNlIHRoaXMg
ZnVuY3Rpb24gc2hvdWxkIGxvb2sgbm9ybWFsaXplZC4KKyAgICAgICAgICogTk9URTogdGhpcyBt
ZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgorICAgICAgICAgKiBAcGFyYW0ge0FycmF5
fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCisgICAgICAgICAqLworICAgICAgICBm
dW5jdGlvbiB0cmltRG90cyhhcnkpIHsKKyAgICAgICAgICAgIHZhciBpLCBwYXJ0OworICAgICAg
ICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
IHBhcnQgPSBhcnlbaV07CisgICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykgeworICAg
ICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgICAgICAgICBp
IC09IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIElmIGF0IHRoZSBzdGFydCwgb3IgcHJldmlvdXMgdmFsdWUgaXMg
c3RpbGwgLi4sCisgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlbSBzbyB0aGF0IHdoZW4g
Y29udmVydGVkIHRvIGEgcGF0aCBpdCBtYXkKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwg
d29yayB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGgsIGV2ZW4gdGhvdWdoCisgICAgICAgICAgICAg
ICAgICAgIC8vIGFzIGFuIElEIGl0IGlzIGxlc3MgdGhhbiBpZGVhbC4gSW4gbGFyZ2VyIHBvaW50
CisgICAgICAgICAgICAgICAgICAgIC8vIHJlbGVhc2VzLCBtYXkgYmUgYmV0dGVyIHRvIGp1c3Qg
a2ljayBvdXQgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IChp
ID09PSAxICYmIGFyeVsyXSA9PT0gJy4uJykgfHwgYXJ5W2kgLSAxXSA9PT0gJy4uJykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEs
IDIpOworICAgICAgICAgICAgICAgICAgICAgICAgaSAtPSAyOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdpdmVuIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUsIGxpa2UgLi9z
b21ldGhpbmcsIG5vcm1hbGl6ZSBpdCB0bworICAgICAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNh
biBiZSBtYXBwZWQgdG8gYSBwYXRoLgorICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0
aGUgcmVsYXRpdmUgbmFtZQorICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgYSBy
ZWFsIG5hbWUgdGhhdCB0aGUgbmFtZSBhcmcgaXMgcmVsYXRpdmUKKyAgICAgICAgICogdG8uCisg
ICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXAgYXBwbHkgdGhlIG1hcCBjb25maWcg
dG8gdGhlIHZhbHVlLiBTaG91bGQKKyAgICAgICAgICogb25seSBiZSBkb25lIGlmIHRoaXMgbm9y
bWFsaXphdGlvbiBpcyBmb3IgYSBkZXBlbmRlbmN5IElELgorICAgICAgICAgKiBAcmV0dXJucyB7
U3RyaW5nfSBub3JtYWxpemVkIG5hbWUKKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIG5v
cm1hbGl6ZShuYW1lLCBiYXNlTmFtZSwgYXBwbHlNYXApIHsKKyAgICAgICAgICAgIHZhciBwa2dN
YWluLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVudCwgbGFzdEluZGV4LAor
ICAgICAgICAgICAgICAgIGZvdW5kTWFwLCBmb3VuZEksIGZvdW5kU3Rhck1hcCwgc3RhckksIG5v
cm1hbGl6ZWRCYXNlUGFydHMsCisgICAgICAgICAgICAgICAgYmFzZVBhcnRzID0gKGJhc2VOYW1l
ICYmIGJhc2VOYW1lLnNwbGl0KCcvJykpLAorICAgICAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5t
YXAsCisgICAgICAgICAgICAgICAgc3Rhck1hcCA9IG1hcCAmJiBtYXBbJyonXTsKKworICAgICAg
ICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgorICAgICAgICAgICAgaWYgKG5hbWUp
IHsKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgnLycpOworICAgICAgICAgICAg
ICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTsKKworICAgICAgICAgICAgICAgIC8vIElm
IHdhbnRpbmcgbm9kZSBJRCBjb21wYXRpYmlsaXR5LCBzdHJpcCAuanMgZnJvbSBlbmQKKyAgICAg
ICAgICAgICAgICAvLyBvZiBJRHMuIEhhdmUgdG8gZG8gdGhpcyBoZXJlLCBhbmQgbm90IGluIG5h
bWVUb1VybAorICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugbm9kZSBhbGxvd3MgZWl0aGVyIC5q
cyBvciBub24gLmpzIHRvIG1hcAorICAgICAgICAgICAgICAgIC8vIHRvIHNhbWUgZmlsZS4KKyAg
ICAgICAgICAgICAgICBpZiAoY29uZmlnLm5vZGVJZENvbXBhdCAmJiBqc1N1ZmZpeFJlZ0V4cC50
ZXN0KG5hbWVbbGFzdEluZGV4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZVtsYXN0SW5k
ZXhdID0gbmFtZVtsYXN0SW5kZXhdLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBTdGFydHMgd2l0aCBhICcuJyBzbyBu
ZWVkIHRoZSBiYXNlTmFtZQorICAgICAgICAgICAgICAgIGlmIChuYW1lWzBdLmNoYXJBdCgwKSA9
PT0gJy4nICYmIGJhc2VQYXJ0cykgeworICAgICAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFz
ZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCisgICAgICAgICAgICAg
ICAgICAgIC8vc28gdGhhdCAuIG1hdGNoZXMgdGhhdCAnZGlyZWN0b3J5JyBhbmQgbm90IG5hbWUg
b2YgdGhlIGJhc2VOYW1lJ3MKKyAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0
YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCisgICAgICAgICAgICAg
ICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAn
b25lL3R3bycgZm9yCisgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBub3JtYWxpemF0aW9uLgor
ICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNl
KDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5v
cm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHRyaW1Eb3RzKG5hbWUpOworICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1l
LmpvaW4oJy8nKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9BcHBseSBtYXAgY29u
ZmlnIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAgJiYgKGJh
c2VQYXJ0cyB8fCBzdGFyTWFwKSkgeworICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUu
c3BsaXQoJy8nKTsKKworICAgICAgICAgICAgICAgIG91dGVyTG9vcDogZm9yIChpID0gbmFtZVBh
cnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgeworICAgICAgICAgICAgICAgICAgICBuYW1lU2Vn
bWVudCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJhc2VQYXJ0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRo
ZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZpZy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vU28sIGRvIGpvaW5zIG9uIHRoZSBiaWdnZXN0IHRvIHNtYWxsZXN0
IGxlbmd0aHMgb2YgYmFzZVBhcnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0g
YmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcCwgYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4o
Jy8nKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jhc2VOYW1lIHNlZ21lbnQg
aGFzIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvcgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vdGhpcyBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBW
YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93
bihtYXBWYWx1ZSwgbmFtZVNlZ21lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobWFwVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
TWF0Y2gsIHVwZGF0ZSBuYW1lIHRvIHRoZSBuZXcgdmFsdWUuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IG1hcFZhbHVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIG91dGVyTG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vQ2hl
Y2sgZm9yIGEgc3RhciBtYXAgbWF0Y2gsIGJ1dCBqdXN0IGhvbGQgb24gdG8gaXQsCisgICAgICAg
ICAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYSBzaG9ydGVyIHNlZ21lbnQgbWF0Y2ggbGF0ZXIg
aW4gYSBtYXRjaGluZworICAgICAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBv
dmVyIHRoaXMgc3RhciBtYXAuCisgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTdGFyTWFw
ICYmIHN0YXJNYXAgJiYgZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZm91bmRTdGFyTWFwID0gZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghZm91bmRNYXAg
JiYgZm91bmRTdGFyTWFwKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gZm91bmRT
dGFyTWFwOworICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBzdGFySTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXApIHsKKyAgICAgICAgICAgICAg
ICAgICAgbmFtZVBhcnRzLnNwbGljZSgwLCBmb3VuZEksIGZvdW5kTWFwKTsKKyAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0cy5qb2luKCcvJyk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB0aGUgbmFtZSBwb2ludHMgdG8gYSBw
YWNrYWdlJ3MgbmFtZSwgdXNlCisgICAgICAgICAgICAvLyB0aGUgcGFja2FnZSBtYWluIGluc3Rl
YWQuCisgICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBuYW1lKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIHBrZ01haW4gPyBwa2dNYWluIDogbmFtZTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIHJlbW92ZVNjcmlwdChuYW1lKSB7CisgICAgICAgICAgICBpZiAo
aXNCcm93c2VyKSB7CisgICAgICAgICAgICAgICAgZWFjaChzY3JpcHRzKCksIGZ1bmN0aW9uIChz
Y3JpcHROb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHROb2RlLmdldEF0dHJp
YnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykgPT09IG5hbWUgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcp
ID09PSBjb250ZXh0LmNvbnRleHROYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY3Jp
cHROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0Tm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
aGFzUGF0aEZhbGxiYWNrKGlkKSB7CisgICAgICAgICAgICB2YXIgcGF0aENvbmZpZyA9IGdldE93
bihjb25maWcucGF0aHMsIGlkKTsKKyAgICAgICAgICAgIGlmIChwYXRoQ29uZmlnICYmIGlzQXJy
YXkocGF0aENvbmZpZykgJiYgcGF0aENvbmZpZy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAg
ICAgLy9Qb3Agb2ZmIHRoZSBmaXJzdCBhcnJheSB2YWx1ZSwgc2luY2UgaXQgZmFpbGVkLCBhbmQK
KyAgICAgICAgICAgICAgICAvL3JldHJ5CisgICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlm
dCgpOworICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZS51bmRlZihpZCk7CisKKyAgICAg
ICAgICAgICAgICAvL0N1c3RvbSByZXF1aXJlIHRoYXQgZG9lcyBub3QgZG8gbWFwIHRyYW5zbGF0
aW9uLCBzaW5jZQorICAgICAgICAgICAgICAgIC8vSUQgaXMgImFic29sdXRlIiwgYWxyZWFkeSBt
YXBwZWQvcmVzb2x2ZWQuCisgICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZShudWxs
LCB7CisgICAgICAgICAgICAgICAgICAgIHNraXBNYXA6IHRydWUKKyAgICAgICAgICAgICAgICB9
KShbaWRdKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy9UdXJucyBhIHBsdWdpbiFyZXNvdXJjZSB0byBbcGx1Z2lu
LCByZXNvdXJjZV0KKyAgICAgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlm
IHRoZSBuYW1lCisgICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KKyAgICAg
ICAgZnVuY3Rpb24gc3BsaXRQcmVmaXgobmFtZSkgeworICAgICAgICAgICAgdmFyIHByZWZpeCwK
KyAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOwor
ICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBu
YW1lLnN1YnN0cmluZygwLCBpbmRleCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vi
c3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVm
aXgsIG1vZHVsZQorICAgICAgICAgKiBuYW1lLCBhbmQgcGF0aC4gSWYgcGFyZW50TW9kdWxlTWFw
IGlzIHByb3ZpZGVkIGl0IHdpbGwKKyAgICAgICAgICogYWxzbyBub3JtYWxpemUgdGhlIG5hbWUg
dmlhIHJlcXVpcmUubm9ybWFsaXplKCkKKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHtT
dHJpbmd9IG5hbWUgdGhlIG1vZHVsZSBuYW1lCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBb
cGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxlIG1hcAorICAgICAgICAgKiBmb3IgdGhlIG1v
ZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCisgICAgICAgICAqIEBw
YXJhbSB7Qm9vbGVhbn0gaXNOb3JtYWxpemVkOiBpcyB0aGUgSUQgYWxyZWFkeSBub3JtYWxpemVk
LgorICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYgdGhpcyBjYWxsIGlzIGRvbmUgZm9yIGEgZGVm
aW5lKCkgbW9kdWxlIElELgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBh
cHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCisgICAgICAgICAqIFNob3VsZCBvbmx5IGJl
IHRydWUgaWYgdGhpcyBtYXAgaXMgZm9yIGEgZGVwZW5kZW5jeS4KKyAgICAgICAgICoKKyAgICAg
ICAgICogQHJldHVybnMge09iamVjdH0KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIG1h
a2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxlTWFwLCBpc05vcm1hbGl6ZWQsIGFwcGx5TWFw
KSB7CisgICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRz
LAorICAgICAgICAgICAgICAgIHByZWZpeCA9IG51bGwsCisgICAgICAgICAgICAgICAgcGFyZW50
TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVudE1vZHVsZU1hcC5uYW1lIDogbnVsbCwKKyAg
ICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAorICAgICAgICAgICAgICAgIGlzRGVm
aW5lID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9ICcnOworCisgICAg
ICAgICAgICAvL0lmIG5vIG5hbWUsIHRoZW4gaXQgbWVhbnMgaXQgaXMgYSByZXF1aXJlIGNhbGws
IGdlbmVyYXRlIGFuCisgICAgICAgICAgICAvL2ludGVybmFsIG5hbWUuCisgICAgICAgICAgICBp
ZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBpc0RlZmluZSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJlQ291bnRlciArPSAxKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7CisgICAgICAg
ICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CisgICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRz
WzFdOworCisgICAgICAgICAgICBpZiAocHJlZml4KSB7CisgICAgICAgICAgICAgICAgcHJlZml4
ID0gbm9ybWFsaXplKHByZWZpeCwgcGFyZW50TmFtZSwgYXBwbHlNYXApOworICAgICAgICAgICAg
ICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZpbmVkLCBwcmVmaXgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlz
IGEgYmFzZSBuYW1lLgorICAgICAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc05vcm1hbGl6ZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChwbHVnaW5Nb2R1bGUgJiYgcGx1Z2luTW9kdWxlLm5vcm1hbGl6
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9QbHVnaW4gaXMgbG9hZGVkLCB1c2UgaXRz
IG5vcm1hbGl6ZSBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFt
ZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUs
IGFwcGx5TWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmVzdGVkIHBsdWdp
biByZWZlcmVuY2VzLCB0aGVuIGRvIG5vdCB0cnkgdG8KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5vcm1hbGl6ZSwgYXMgaXQgd2lsbCBub3Qgbm9ybWFsaXplIGNvcnJlY3RseS4gVGhpcwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGxhY2VzIGEgcmVzdHJpY3Rpb24gb24gcmVzb3Vy
Y2VJZHMsIGFuZCB0aGUgbG9uZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXJtIHNv
bHV0aW9uIGlzIG5vdCB0byBub3JtYWxpemUgdW50aWwgcGx1Z2lucyBhcmUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGxvYWRlZCBhbmQgYWxsIG5vcm1hbGl6YXRpb25zIHRvIGFsbG93IGZv
ciBhc3luYworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGluZyBvZiBhIGxvYWRlciBw
bHVnaW4uIEJ1dCBmb3Igbm93LCBmaXhlcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNvbW1vbiB1c2VzLiBEZXRhaWxzIGluICMxMTMxCisgICAgICAgICAgICAgICAgICAgICAgICBu
b3JtYWxpemVkTmFtZSA9IG5hbWUuaW5kZXhPZignIScpID09PSAtMSA/CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBh
cHBseU1hcCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy9BIHJlZ3VsYXIgbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICBu
b3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CisK
KyAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemVkIG5hbWUgbWF5IGJlIGEgcGx1Z2luIElE
IGR1ZSB0byBtYXAgY29uZmlnCisgICAgICAgICAgICAgICAgICAgIC8vYXBwbGljYXRpb24gaW4g
bm9ybWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMgbXVzdAorICAgICAgICAgICAgICAgICAg
ICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0aGF0IHBh
cnQuCisgICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5vcm1hbGl6
ZWROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOworICAg
ICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKKyAgICAgICAg
ICAgICAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICB1
cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL0lmIHRoZSBpZCBpcyBhIHBsdWdpbiBp
ZCB0aGF0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGlmIGl0IG5lZWRzCisgICAgICAgICAgICAvL25v
cm1hbGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlxdWUgSUQgc28gdHdvIG1hdGNoaW5nIHJl
bGF0aXZlCisgICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUgc2VwYXJh
dGUuCisgICAgICAgICAgICBzdWZmaXggPSBwcmVmaXggJiYgIXBsdWdpbk1vZHVsZSAmJiAhaXNO
b3JtYWxpemVkID8KKyAgICAgICAgICAgICAgICAgICAgICdfdW5ub3JtYWxpemVkJyArICh1bm5v
cm1hbGl6ZWRDb3VudGVyICs9IDEpIDoKKyAgICAgICAgICAgICAgICAgICAgICcnOworCisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAorICAgICAg
ICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLAorICAgICAgICAgICAgICAgIHBhcmVudE1h
cDogcGFyZW50TW9kdWxlTWFwLAorICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDogISFzdWZm
aXgsCisgICAgICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICAgICAgb3JpZ2luYWxO
YW1lOiBvcmlnaW5hbE5hbWUsCisgICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVmaW5lLAor
ICAgICAgICAgICAgICAgIGlkOiAocHJlZml4ID8KKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZWZpeCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
cm1hbGl6ZWROYW1lKSArIHN1ZmZpeAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIGdldE1vZHVsZShkZXBNYXApIHsKKyAgICAgICAgICAgIHZhciBpZCA9IGRl
cE1hcC5pZCwKKyAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKKwor
ICAgICAgICAgICAgaWYgKCFtb2QpIHsKKyAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtp
ZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIG1vZDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1h
cCwgbmFtZSwgZm4pIHsKKyAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKKyAgICAgICAg
ICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKKworICAgICAgICAgICAgaWYgKGhh
c1Byb3AoZGVmaW5lZCwgaWQpICYmCisgICAgICAgICAgICAgICAgICAgICghbW9kIHx8IG1vZC5k
ZWZpbmVFbWl0Q29tcGxldGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZp
bmVkJykgeworICAgICAgICAgICAgICAgICAgICBmbihkZWZpbmVkW2lkXSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb2QgPSBnZXRN
b2R1bGUoZGVwTWFwKTsKKyAgICAgICAgICAgICAgICBpZiAobW9kLmVycm9yICYmIG5hbWUgPT09
ICdlcnJvcicpIHsKKyAgICAgICAgICAgICAgICAgICAgZm4obW9kLmVycm9yKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtb2Qub24obmFtZSwgZm4pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIG9uRXJyb3IoZXJyLCBlcnJiYWNrKSB7CisgICAgICAgICAgICB2YXIgaWRzID0gZXJy
LnJlcXVpcmVNb2R1bGVzLAorICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gZmFsc2U7CisKKyAg
ICAgICAgICAgIGlmIChlcnJiYWNrKSB7CisgICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlYWNoKGlkcywgZnVuY3Rpb24g
KGlkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlk
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy9TZXQgZXJyb3Igb24gbW9kdWxlLCBzbyBpdCBza2lwcyB0aW1lb3V0IGNoZWNrcy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1vZC5lcnJvciA9IGVycjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtb2QuZXZlbnRzLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm90aWZpZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lbWl0
KCdlcnJvcicsIGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGlmICghbm90
aWZpZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IoZXJyKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAg
ICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIHRyYW5zZmVyIGdsb2JhbFF1ZXVlIGl0ZW1zIHRvIHRo
aXMgY29udGV4dCdzCisgICAgICAgICAqIGRlZlF1ZXVlLgorICAgICAgICAgKi8KKyAgICAgICAg
ZnVuY3Rpb24gdGFrZUdsb2JhbFF1ZXVlKCkgeworICAgICAgICAgICAgLy9QdXNoIGFsbCB0aGUg
Z2xvYmFsRGVmUXVldWUgaXRlbXMgaW50byB0aGUgY29udGV4dCdzIGRlZlF1ZXVlCisgICAgICAg
ICAgICBpZiAoZ2xvYmFsRGVmUXVldWUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgZWFjaChn
bG9iYWxEZWZRdWV1ZSwgZnVuY3Rpb24ocXVldWVJdGVtKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBpZCA9IHF1ZXVlSXRlbVswXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBp
ZCA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVl
dWVNYXBbaWRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBkZWZRdWV1ZS5wdXNoKHF1ZXVlSXRlbSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGhhbmRsZXJzID0geworICAgICAgICAgICAgJ3JlcXVpcmUnOiBmdW5jdGlv
biAobW9kKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZC5yZXF1aXJlKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtb2QucmVxdWlyZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVx
dWlyZShtb2QubWFwKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICdleHBvcnRzJzogZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgIG1vZC51
c2luZ0V4cG9ydHMgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlzRGVmaW5l
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXhwb3J0cykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChkZWZpbmVkW21vZC5tYXAuaWRdID0gbW9kLmV4cG9ydHMpOwor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChtb2QuZXhwb3J0cyA9IGRlZmluZWRbbW9kLm1hcC5pZF0gPSB7fSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgJ21vZHVsZSc6IGZ1bmN0aW9uIChtb2QpIHsKKyAgICAgICAgICAgICAgICBpZiAobW9kLm1v
ZHVsZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLm1vZHVsZTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5tb2R1bGUg
PSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZDogbW9kLm1hcC5pZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVyaTogbW9kLm1hcC51cmwsCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25maWc6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2V0T3duKGNvbmZpZy5jb25maWcsIG1vZC5tYXAuaWQpIHx8IHt9OworICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IG1vZC5leHBvcnRz
IHx8IChtb2QuZXhwb3J0cyA9IHt9KQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24g
Y2xlYW5SZWdpc3RyeShpZCkgeworICAgICAgICAgICAgLy9DbGVhbiB1cCBtYWNoaW5lcnkgdXNl
ZCBmb3Igd2FpdGluZyBtb2R1bGVzLgorICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W2lkXTsK
KyAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJvY2Vzc2VkKSB7CisgICAg
ICAgICAgICB2YXIgaWQgPSBtb2QubWFwLmlkOworCisgICAgICAgICAgICBpZiAobW9kLmVycm9y
KSB7CisgICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgbW9kLmVycm9yKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHJhY2VkW2lkXSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgZWFjaChtb2QuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBNYXAuaWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKKworICAgICAgICAgICAgICAg
ICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2ZSBub3QgY29tcGxldGVkCisgICAgICAg
ICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5LAor
ICAgICAgICAgICAgICAgICAgICAvL2FuZCBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBtYXRjaGVk
IHVwCisgICAgICAgICAgICAgICAgICAgIC8vaW4gdGhlIG1vZHVsZSBhbHJlYWR5LgorICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtpXSAmJiAhcHJvY2Vzc2Vk
W2RlcElkXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldE93bih0cmFjZWQsIGRl
cElkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5kZWZpbmVEZXAoaSwgZGVm
aW5lZFtkZXBJZF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5jaGVjaygpOyAv
L3Bhc3MgZmFsc2U/CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVwLCB0cmFjZWQsIHByb2Nlc3NlZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRdID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKCkgewor
ICAgICAgICAgICAgdmFyIGVyciwgdXNpbmdQYXRoRmFsbGJhY2ssCisgICAgICAgICAgICAgICAg
d2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNvbmRzICogMTAwMCwKKyAgICAgICAgICAgICAg
ICAvL0l0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdGhlIHdhaXQgaW50ZXJ2YWwgYnkgdXNpbmcg
d2FpdFNlY29uZHMgb2YgMC4KKyAgICAgICAgICAgICAgICBleHBpcmVkID0gd2FpdEludGVydmFs
ICYmIChjb250ZXh0LnN0YXJ0VGltZSArIHdhaXRJbnRlcnZhbCkgPCBuZXcgRGF0ZSgpLmdldFRp
bWUoKSwKKyAgICAgICAgICAgICAgICBub0xvYWRzID0gW10sCisgICAgICAgICAgICAgICAgcmVx
Q2FsbHMgPSBbXSwKKyAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSBmYWxzZSwKKyAgICAg
ICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRydWU7CisKKyAgICAgICAgICAgIC8vRG8gbm90
IGJvdGhlciBpZiB0aGlzIGNhbGwgd2FzIGEgcmVzdWx0IG9mIGEgY3ljbGUgYnJlYWsuCisgICAg
ICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IHRydWU7CisKKyAgICAg
ICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBtb2R1bGVzLgorICAgICAg
ICAgICAgZWFjaFByb3AoZW5hYmxlZFJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CisgICAgICAg
ICAgICAgICAgdmFyIG1hcCA9IG1vZC5tYXAsCisgICAgICAgICAgICAgICAgICAgIG1vZElkID0g
bWFwLmlkOworCisgICAgICAgICAgICAgICAgLy9Ta2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgZW5h
YmxlZCBvciBpbiBlcnJvciBzdGF0ZS4KKyAgICAgICAgICAgICAgICBpZiAoIW1vZC5lbmFibGVk
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoIW1hcC5pc0RlZmluZSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXFDYWxscy5wdXNoKG1vZCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKCFtb2QuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgbW9kdWxlIHNo
b3VsZCBiZSBleGVjdXRlZCwgYW5kIGl0IGhhcyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy9i
ZWVuIGluaXRlZCBhbmQgdGltZSBpcyB1cCwgcmVtZW1iZXIgaXQuCisgICAgICAgICAgICAgICAg
ICAgIGlmICghbW9kLmluaXRlZCAmJiBleHBpcmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZElkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzaW5nUGF0aEZhbGxiYWNrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGlsbExvYWRpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0xvYWRzLnB1c2gobW9kSWQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChtb2RJZCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1vZC5pbml0ZWQg
JiYgbW9kLmZldGNoZWQgJiYgbWFwLmlzRGVmaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGlsbExvYWRpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXAu
cHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ObyByZWFzb24gdG8ga2Vl
cCBsb29raW5nIGZvciB1bmZpbmlzaGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9s
b2FkaW5nLiBJZiB0aGUgb25seSBzdGlsbExvYWRpbmcgaXMgYQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vcGx1Z2luIHJlc291cmNlIHRob3VnaCwga2VlcCBnb2luZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL2JlY2F1c2UgaXQgbWF5IGJlIHRoYXQgYSBwbHVnaW4gcmVz
b3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lzIHdhaXRpbmcgb24gYSBub24t
cGx1Z2luIGN5Y2xlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmVlZEN5
Y2xlQ2hlY2sgPSBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgaWYgKGV4cGlyZWQgJiYgbm9Mb2Fkcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAv
L0lmIHdhaXQgdGltZSBleHBpcmVkLCB0aHJvdyBlcnJvciBvZiB1bmxvYWRlZCBtb2R1bGVzLgor
ICAgICAgICAgICAgICAgIGVyciA9IG1ha2VFcnJvcigndGltZW91dCcsICdMb2FkIHRpbWVvdXQg
Zm9yIG1vZHVsZXM6ICcgKyBub0xvYWRzLCBudWxsLCBub0xvYWRzKTsKKyAgICAgICAgICAgICAg
ICBlcnIuY29udGV4dE5hbWUgPSBjb250ZXh0LmNvbnRleHROYW1lOworICAgICAgICAgICAgICAg
IHJldHVybiBvbkVycm9yKGVycik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vTm90
IGV4cGlyZWQsIGNoZWNrIGZvciBhIGN5Y2xlLgorICAgICAgICAgICAgaWYgKG5lZWRDeWNsZUNo
ZWNrKSB7CisgICAgICAgICAgICAgICAgZWFjaChyZXFDYWxscywgZnVuY3Rpb24gKG1vZCkgewor
ICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKG1vZCwge30sIHt9KTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9JZiBzdGlsbCB3YWl0aW5n
IG9uIGxvYWRzLCBhbmQgdGhlIHdhaXRpbmcgbG9hZCBpcyBzb21ldGhpbmcKKyAgICAgICAgICAg
IC8vb3RoZXIgdGhhbiBhIHBsdWdpbiByZXNvdXJjZSwgb3IgdGhlcmUgYXJlIHN0aWxsIG91dHN0
YW5kaW5nCisgICAgICAgICAgICAvL3NjcmlwdHMsIHRoZW4ganVzdCB0cnkgYmFjayBsYXRlci4K
KyAgICAgICAgICAgIGlmICgoIWV4cGlyZWQgfHwgdXNpbmdQYXRoRmFsbGJhY2spICYmIHN0aWxs
TG9hZGluZykgeworICAgICAgICAgICAgICAgIC8vU29tZXRoaW5nIGlzIHN0aWxsIHdhaXRpbmcg
dG8gbG9hZC4gV2FpdCBmb3IgaXQsIGJ1dCBvbmx5CisgICAgICAgICAgICAgICAgLy9pZiBhIHRp
bWVvdXQgaXMgbm90IGFscmVhZHkgaW4gZWZmZWN0LgorICAgICAgICAgICAgICAgIGlmICgoaXNC
cm93c2VyIHx8IGlzV2ViV29ya2VyKSAmJiAhY2hlY2tMb2FkZWRUaW1lb3V0SWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0sIDUwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGluQ2hlY2tMb2FkZWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIE1vZHVsZSA9
IGZ1bmN0aW9uIChtYXApIHsKKyAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gZ2V0T3duKHVuZGVm
RXZlbnRzLCBtYXAuaWQpIHx8IHt9OworICAgICAgICAgICAgdGhpcy5tYXAgPSBtYXA7CisgICAg
ICAgICAgICB0aGlzLnNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1hcC5pZCk7CisgICAgICAg
ICAgICB0aGlzLmRlcEV4cG9ydHMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtd
OworICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkID0gW107CisgICAgICAgICAgICB0aGlzLnBs
dWdpbk1hcHMgPSB7fTsKKyAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgPSAwOworCisgICAgICAg
ICAgICAvKiB0aGlzLmV4cG9ydHMgdGhpcy5mYWN0b3J5CisgICAgICAgICAgICAgICB0aGlzLmRl
cE1hcHMgPSBbXSwKKyAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCwgdGhpcy5mZXRjaGVkCisg
ICAgICAgICAgICAqLworICAgICAgICB9OworCisgICAgICAgIE1vZHVsZS5wcm90b3R5cGUgPSB7
CisgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoZGVwTWFwcywgZmFjdG9yeSwgZXJyYmFjaywg
b3B0aW9ucykgeworICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisg
ICAgICAgICAgICAgICAgLy9EbyBub3QgZG8gbW9yZSBpbml0cyBpZiBhbHJlYWR5IGRvbmUuIENh
biBoYXBwZW4gaWYgdGhlcmUKKyAgICAgICAgICAgICAgICAvL2FyZSBtdWx0aXBsZSBkZWZpbmUg
Y2FsbHMgZm9yIHRoZSBzYW1lIG1vZHVsZS4gVGhhdCBpcyBub3QKKyAgICAgICAgICAgICAgICAv
L2Egbm9ybWFsLCBjb21tb24gY2FzZSwgYnV0IGl0IGlzIGFsc28gbm90IHVuZXhwZWN0ZWQuCisg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0aGlzLmZhY3Rvcnkg
PSBmYWN0b3J5OworCisgICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy9SZWdpc3RlciBmb3IgZXJyb3JzIG9uIHRoaXMgbW9kdWxlLgorICAgICAgICAg
ICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVycmJhY2spOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9JZiBu
byBlcnJiYWNrIGFscmVhZHksIGJ1dCB0aGVyZSBhcmUgZXJyb3IgbGlzdGVuZXJzCisgICAgICAg
ICAgICAgICAgICAgIC8vb24gdGhpcyBtb2R1bGUsIHNldCB1cCBhbiBlcnJiYWNrIHRvIHBhc3Mg
dG8gdGhlIGRlcHMuCisgICAgICAgICAgICAgICAgICAgIGVycmJhY2sgPSBiaW5kKHRoaXMsIGZ1
bmN0aW9uIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3In
LCBlcnIpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvL0RvIGEgY29weSBvZiB0aGUgZGVwZW5kZW5jeSBhcnJheSwgc28gdGhh
dAorICAgICAgICAgICAgICAgIC8vc291cmNlIGlucHV0cyBhcmUgbm90IG1vZGlmaWVkLiBGb3Ig
ZXhhbXBsZQorICAgICAgICAgICAgICAgIC8vInNoaW0iIGRlcHMgYXJlIHBhc3NlZCBpbiBoZXJl
IGRpcmVjdGx5LCBhbmQKKyAgICAgICAgICAgICAgICAvL2RvaW5nIGEgZGlyZWN0IG1vZGlmaWNh
dGlvbiBvZiB0aGUgZGVwTWFwcyBhcnJheQorICAgICAgICAgICAgICAgIC8vd291bGQgYWZmZWN0
IHRoYXQgY29uZmlnLgorICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IGRlcE1hcHMgJiYg
ZGVwTWFwcy5zbGljZSgwKTsKKworICAgICAgICAgICAgICAgIHRoaXMuZXJyYmFjayA9IGVycmJh
Y2s7CisKKyAgICAgICAgICAgICAgICAvL0luZGljYXRlIHRoaXMgbW9kdWxlIGhhcyBiZSBpbml0
aWFsaXplZAorICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKKworICAgICAgICAg
ICAgICAgIHRoaXMuaWdub3JlID0gb3B0aW9ucy5pZ25vcmU7CisKKyAgICAgICAgICAgICAgICAv
L0NvdWxkIGhhdmUgb3B0aW9uIHRvIGluaXQgdGhpcyBtb2R1bGUgaW4gZW5hYmxlZCBtb2RlLAor
ICAgICAgICAgICAgICAgIC8vb3IgY291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgbWFya2VkIGFz
IGVuYWJsZWQuIEhvd2V2ZXIsCisgICAgICAgICAgICAgICAgLy90aGUgZGVwZW5kZW5jaWVzIGFy
ZSBub3Qga25vd24gdW50aWwgaW5pdCBpcyBjYWxsZWQuIFNvCisgICAgICAgICAgICAgICAgLy9p
ZiBlbmFibGVkIHByZXZpb3VzbHksIG5vdyB0cmlnZ2VyIGRlcGVuZGVuY2llcyBhcyBlbmFibGVk
LgorICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5lbmFibGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vRW5hYmxlIHRoaXMgbW9kdWxlIGFuZCBkZXBlbmRlbmNp
ZXMuCisgICAgICAgICAgICAgICAgICAgIC8vV2lsbCBjYWxsIHRoaXMuY2hlY2soKQorICAgICAg
ICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICBkZWZpbmVEZXA6IGZ1bmN0aW9uIChpLCBkZXBFeHBv
cnRzKSB7CisgICAgICAgICAgICAgICAgLy9CZWNhdXNlIG9mIGN5Y2xlcywgZGVmaW5lZCBjYWxs
YmFjayBmb3IgYSBnaXZlbgorICAgICAgICAgICAgICAgIC8vZXhwb3J0IGNhbiBiZSBjYWxsZWQg
bW9yZSB0aGFuIG9uY2UuCisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlcE1hdGNoZWRbaV0p
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkW2ldID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCAtPSAxOworICAgICAgICAgICAgICAgICAgICB0
aGlzLmRlcEV4cG9ydHNbaV0gPSBkZXBFeHBvcnRzOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sCisKKyAgICAgICAgICAgIGZldGNoOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuZmV0Y2hlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7CisK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1l
KCk7CisKKyAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXA7CisKKyAgICAgICAgICAg
ICAgICAvL0lmIHRoZSBtYW5hZ2VyIGlzIGZvciBhIHBsdWdpbiBtYW5hZ2VkIHJlc291cmNlLAor
ICAgICAgICAgICAgICAgIC8vYXNrIHRoZSBwbHVnaW4gdG8gbG9hZCBpdCBub3cuCisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuc2hpbSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1h
a2VSZXF1aXJlKHRoaXMubWFwLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWls
ZENhbGxiYWNrOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuc2hpbS5kZXBzIHx8
IFtdLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtYXAucHJlZml4ID8gdGhpcy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLm1hcC51cmw7CisKKyAgICAgICAg
ICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICBpZiAoIXVybEZl
dGNoZWRbdXJsXSkgeworICAgICAgICAgICAgICAgICAgICB1cmxGZXRjaGVkW3VybF0gPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWQodGhpcy5tYXAuaWQsIHVybCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAg
ICAgICAgICAgKiBDaGVja3MgaWYgdGhlIG1vZHVsZSBpcyByZWFkeSB0byBkZWZpbmUgaXRzZWxm
LCBhbmQgaWYgc28sCisgICAgICAgICAgICAgKiBkZWZpbmUgaXQuCisgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmVuYWJsZWQgfHwgdGhpcy5lbmFibGluZykgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIGVyciwgY2pzTW9k
dWxlLAorICAgICAgICAgICAgICAgICAgICBpZCA9IHRoaXMubWFwLmlkLAorICAgICAgICAgICAg
ICAgICAgICBkZXBFeHBvcnRzID0gdGhpcy5kZXBFeHBvcnRzLAorICAgICAgICAgICAgICAgICAg
ICBleHBvcnRzID0gdGhpcy5leHBvcnRzLAorICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0g
dGhpcy5mYWN0b3J5OworCisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRlZCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBPbmx5IGZldGNoIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBkZWZR
dWV1ZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGNvbnRleHQuZGVmUXVldWVN
YXAsIGlkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVycm9yKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzLmVycm9yKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmluaW5nKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vVGhlIGZhY3RvcnkgY291bGQgdHJpZ2dlciBhbm90aGVyIHJlcXVpcmUgY2FsbAor
ICAgICAgICAgICAgICAgICAgICAvL3RoYXQgd291bGQgcmVzdWx0IGluIGNoZWNraW5nIHRoaXMg
bW9kdWxlIHRvCisgICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lIGl0c2VsZiBhZ2Fpbi4gSWYg
YWxyZWFkeSBpbiB0aGUgcHJvY2VzcworICAgICAgICAgICAgICAgICAgICAvL29mIGRvaW5nIHRo
YXQsIHNraXAgdGhpcyB3b3JrLgorICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0g
dHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXBDb3VudCA8IDEgJiYgIXRo
aXMuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZmFj
dG9yeSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGlzIGFuIGVy
cm9yIGxpc3RlbmVyLCBmYXZvciBwYXNzaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly90byB0aGF0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIEhvd2V2ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9vbmx5IGRvIGl0IGZvciBkZWZpbmUoKSdkICBtb2R1bGVz
LiByZXF1aXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcnJiYWNrcyBzaG91bGQg
bm90IGJlIGNhbGxlZCBmb3IgZmFpbHVyZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvL3RoZWlyIGNhbGxiYWNrcyAoIzY5OSkuIEhvd2V2ZXIgaWYgYSBnbG9iYWwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL29uRXJyb3IgaXMgc2V0LCB1c2UgdGhhdC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZXZlbnRzLmVycm9yICYmIHRoaXMubWFwLmlz
RGVmaW5lKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvciAh
PT0gZGVmYXVsdE9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0
LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVyciA9IGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4
cG9ydHMsIGV4cG9ydHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZhdm9yIHJldHVybiB2YWx1ZSBvdmVyIGV4cG9ydHMu
IElmIG5vZGUvY2pzIGluIHBsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
biB3aWxsIG5vdCBoYXZlIGEgcmV0dXJuIHZhbHVlIGFueXdheS4gRmF2b3IKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBtb2R1bGUuZXhwb3J0cyBhc3NpZ25tZW50IG92ZXIgZXhwb3J0
cyBvYmplY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVm
aW5lICYmIGV4cG9ydHMgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjanNNb2R1bGUgPSB0aGlzLm1vZHVsZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNqc01vZHVsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwb3J0cyA9IGNqc01vZHVsZS5leHBvcnRzOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNpbmdFeHBvcnRzKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvL2V4cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQg
dmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhp
cy5leHBvcnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVy
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRo
aXMubWFwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVs
ZXMgPSB0aGlzLm1hcC5pc0RlZmluZSA/IFt0aGlzLm1hcC5pZF0gOiBudWxsOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZVR5cGUgPSB0aGlzLm1hcC5pc0RlZmlu
ZSA/ICdkZWZpbmUnIDogJ3JlcXVpcmUnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBsaXRlcmFsIHZhbHVlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZhY3Rvcnk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0cyA9IGV4cG9ydHM7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiAhdGhpcy5p
Z25vcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW2lkXSA9IGV4cG9y
dHM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLm9uUmVzb3VyY2VMb2Fk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNMb2FkTWFwcyA9IFtd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgZnVu
Y3Rpb24gKGRlcE1hcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
TG9hZE1hcHMucHVzaChkZXBNYXAubm9ybWFsaXplZE1hcCB8fCBkZXBNYXApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxLm9uUmVzb3VyY2VMb2FkKGNvbnRleHQsIHRoaXMubWFwLCByZXNMb2FkTWFwcyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHVwCisgICAgICAgICAgICAgICAgICAg
ICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
ZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIC8vRmluaXNoZWQgdGhlIGRlZmluZSBzdGFnZS4gQWxsb3cgY2FsbGluZyBjaGVjayBhZ2Fp
bgorICAgICAgICAgICAgICAgICAgICAvL3RvIGFsbG93IGRlZmluZSBub3RpZmljYXRpb25zIGJl
bG93IGluIHRoZSBjYXNlIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IGZhbHNlOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmRlZmluZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuZW1pdCgnZGVmaW5lZCcsIHRoaXMuZXhwb3J0cyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgbWFw
ID0gdGhpcy5tYXAsCisgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkLAorICAgICAgICAg
ICAgICAgICAgICAvL01hcCBhbHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KKyAgICAgICAg
ICAgICAgICAgICAgcGx1Z2luTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4KTsKKworICAg
ICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4s
IHNvIGl0CisgICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCisgICAg
ICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gocGx1Z2luTWFwKTsKKworICAgICAgICAgICAg
ICAgIG9uKHBsdWdpbk1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW4p
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6
ZWRNb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVz
TWFwLCB0aGlzLm1hcC5pZCksCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5t
YXAubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSB0aGlzLm1hcC5w
YXJlbnRNYXAgPyB0aGlzLm1hcC5wYXJlbnRNYXAubmFtZSA6IG51bGwsCisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRN
YXAsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0
cnVlCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAv
L0lmIGN1cnJlbnQgbWFwIGlzIG5vdCBub3JtYWxpemVkLCB3YWl0IGZvciB0aGF0CisgICAgICAg
ICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1lIHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51
aW5nLgorICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQgaWYgdGhlIHBsdWdpbiBh
bGxvd3MgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5h
bWUsIGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSkgfHwgJyc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFuZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5v
cm1hbGl6ZWQsIG5vIG5lZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5n
IG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFs
aXplZE1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCArICchJyArIG5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5w
YXJlbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uKG5vcm1hbGl6ZWRNYXAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0
aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5u
b3JtYWxpemVkTWFwID0gbm9ybWFsaXplZE1hcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogdHJ1ZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QgPSBnZXRPd24ocmVn
aXN0cnksIG5vcm1hbGl6ZWRNYXAuaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5v
cm1hbGl6ZWRNb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBh
cyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG5vcm1hbGl6ZWRNYXApOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2Qub24oJ2Vycm9yJywgYmluZCh0aGlzLCBm
dW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmVtaXQoJ2Vycm9yJywgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub3JtYWxpemVkTW9kLmVuYWJsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAvL0lmIGEgcGF0aHMgY29uZmlnLCB0aGVuIGp1c3QgbG9h
ZCB0aGF0IGZpbGUgaW5zdGVhZCB0bworICAgICAgICAgICAgICAgICAgICAvL3Jlc29sdmUgdGhl
IHBsdWdpbiwgYXMgaXQgaXMgYnVpbHQgaW50byB0aGF0IHBhdGhzIGxheWVyLgorICAgICAgICAg
ICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
bWFwLnVybCA9IGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMubG9hZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhp
cywgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQo
W10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIGxvYWQuZXJy
b3IgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuaW5pdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3Ig
PSBlcnI7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRd
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBt
b2R1bGVzIGZvciB0aGlzIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2Ug
dGhleSB3aWxsIG5ldmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCisgICAgICAgICAgICAg
ICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFs
aXplZCcpID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVn
aXN0cnkobW9kLm1hcC5pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3Io
ZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9B
bGxvdyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRo
ZQorICAgICAgICAgICAgICAgICAgICAvL2NvbnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhl
IGxvYWQuCisgICAgICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1
bmN0aW9uICh0ZXh0LCB0ZXh0QWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGlu
dCBldmlsOiB0cnVlICovCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9
IG1hcC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VN
b2R1bGVNYXAobW9kdWxlTmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50
ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9B
cyBvZiAyLjEuMCwgc3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNl
IHBlciByZXNvdXJjZS4gU3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBv
bGQgc3R5bGUgb2YgcGFzc2luZyBtb2R1bGVOYW1lIGJ1dCBkaXNjYXJkCisgICAgICAgICAgICAg
ICAgICAgICAgICAvL3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVm
LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0ID0gdGV4dEFsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgLy9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQg
bWF0Y2hpbmcgZm9yIElFIGZvciBhbnkgZGVmaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAv
L2NhbGxzIGluIHRoZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5
IGNyZWF0aW5nIGEgbW9kdWxlIGluc3RhbmNlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly9pdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhl
ciBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29u
ZmlnLCBpZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21v
ZHVsZU5hbWVdID0gY29uZmlnLmNvbmZpZ1tpZF07CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxLmV4ZWModGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9y
KCdmcm9tdGV4dGV2YWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ2Zyb21UZXh0IGV2YWwgZm9yICcgKyBpZCArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbaWRdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBk
ZXBlbmRlbmN5IGZvciB0aGUgcGx1Z2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291
cmNlCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXAp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMu
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1l
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1v
ZHVsZSB0byB0aGUgdmFsdWUgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVz
b3VyY2UgSUQuCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5h
bWVdLCBsb2FkKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCBy
ZWxpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmlu
ZyB3aXRoIG5vIHBhdGggdGhhdCBhY3R1YWxseSB3YW50cyB0bworICAgICAgICAgICAgICAgICAg
ICAvL3JlZmVyZW5jZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCisgICAgICAgICAgICAgICAgICAg
IHBsdWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CisgICAg
ICAgICAgICAgICAgfSkpOworCisgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2lu
TWFwLCB0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlk
XSA9IHBsdWdpbk1hcDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGVuYWJsZTogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0g
PSB0aGlzOworICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CisKKyAgICAgICAg
ICAgICAgICAvL1NldCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5n
LAorICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmlu
ZWQgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0
cmlnZ2VyIGluYWR2ZXJ0ZW50IGxvYWQKKyAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENv
dW50IHN0aWxsIGJlaW5nIHplcm8uCisgICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKKyAgICAgICAg
ICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBp
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbW9kLCBoYW5kbGVyOworCisgICAgICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy9EZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRl
cE1hcAorICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1
bGUuCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMu
bWFwLmlzRGVmaW5lID8gdGhpcy5tYXAgOiB0aGlzLm1hcC5wYXJlbnRNYXApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHNbaV0gPSBkZXBNYXA7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgKz0gMTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24g
KGRlcEV4cG9ydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51bmRl
ZmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5k
ZWZpbmVEZXAoaSwgZGVwRXhwb3J0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jaGVjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy5lcnJiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIHRoaXMuZXJyYmFjaykpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRpcmVjdCBlcnJiYWNrIG9uIHRoaXMgbW9kdWxl
LCBidXQgc29tZXRoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpcyBs
aXN0ZW5pbmcgZm9yIGVycm9ycywgc28gYmUgc3VyZSB0bworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHByb3BhZ2F0ZSB0aGUgZXJyb3IgY29ycmVjdGx5LgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbihlcnIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVy
cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWQg
PSBkZXBNYXAuaWQ7CisgICAgICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXTsKKwor
ICAgICAgICAgICAgICAgICAgICAvL1NraXAgc3BlY2lhbCBtb2R1bGVzIGxpa2UgJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnCisgICAgICAgICAgICAgICAgICAgIC8vQWxzbywgZG9uJ3Qg
Y2FsbCBlbmFibGUgaWYgaXQgaXMgYWxyZWFkeSBlbmFibGVkLAorICAgICAgICAgICAgICAgICAg
ICAvL2ltcG9ydGFudCBpbiBjaXJjdWxhciBkZXBlbmRlbmN5IGNhc2VzLgorICAgICAgICAgICAg
ICAgICAgICBpZiAoIWhhc1Byb3AoaGFuZGxlcnMsIGlkKSAmJiBtb2QgJiYgIW1vZC5lbmFibGVk
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShkZXBNYXAsIHRoaXMp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkpOworCisgICAgICAg
ICAgICAgICAgLy9FbmFibGUgZWFjaCBwbHVnaW4gdGhhdCBpcyB1c2VkIGluCisgICAgICAgICAg
ICAgICAgLy9hIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICBlYWNoUHJvcCh0aGlzLnBsdWdp
bk1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbk1hcCkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBwbHVnaW5NYXAuaWQpOworICAgICAgICAg
ICAgICAgICAgICBpZiAobW9kICYmICFtb2QuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxp
bmcgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKKyAgICAgICAgICAg
IH0sCisKKyAgICAgICAgICAgIG9uOiBmdW5jdGlvbiAobmFtZSwgY2IpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgY2JzID0gdGhpcy5ldmVudHNbbmFtZV07CisgICAgICAgICAgICAgICAgaWYgKCFj
YnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2JzID0gdGhpcy5ldmVudHNbbmFtZV0gPSBbXTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2JzLnB1c2goY2IpOworICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgZW1pdDogZnVuY3Rpb24gKG5hbWUsIGV2dCkgeworICAg
ICAgICAgICAgICAgIGVhY2godGhpcy5ldmVudHNbbmFtZV0sIGZ1bmN0aW9uIChjYikgeworICAg
ICAgICAgICAgICAgICAgICBjYihldnQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgICAgIGlmIChuYW1lID09PSAnZXJyb3InKSB7CisgICAgICAgICAgICAgICAgICAgIC8vTm93
IHRoYXQgdGhlIGVycm9yIGhhbmRsZXIgd2FzIHRyaWdnZXJlZCwgcmVtb3ZlCisgICAgICAgICAg
ICAgICAgICAgIC8vdGhlIGxpc3RlbmVycywgc2luY2UgdGhpcyBicm9rZW4gTW9kdWxlIGluc3Rh
bmNlCisgICAgICAgICAgICAgICAgICAgIC8vY2FuIHN0YXkgYXJvdW5kIGZvciBhIHdoaWxlIGlu
IHRoZSByZWdpc3RyeS4KKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRzW25h
bWVdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAg
ICAgICBmdW5jdGlvbiBjYWxsR2V0TW9kdWxlKGFyZ3MpIHsKKyAgICAgICAgICAgIC8vU2tpcCBt
b2R1bGVzIGFscmVhZHkgZGVmaW5lZC4KKyAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVk
LCBhcmdzWzBdKSkgeworICAgICAgICAgICAgICAgIGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKGFy
Z3NbMF0sIG51bGwsIHRydWUpKS5pbml0KGFyZ3NbMV0sIGFyZ3NbMl0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIobm9kZSwgZnVu
YywgbmFtZSwgaWVOYW1lKSB7CisgICAgICAgICAgICAvL0Zhdm9yIGRldGFjaEV2ZW50IGJlY2F1
c2Ugb2YgSUU5CisgICAgICAgICAgICAvL2lzc3VlLCBzZWUgYXR0YWNoRXZlbnQvYWRkRXZlbnRM
aXN0ZW5lciBjb21tZW50IGVsc2V3aGVyZQorICAgICAgICAgICAgLy9pbiB0aGlzIGZpbGUuCisg
ICAgICAgICAgICBpZiAobm9kZS5kZXRhY2hFdmVudCAmJiAhaXNPcGVyYSkgeworICAgICAgICAg
ICAgICAgIC8vUHJvYmFibHkgSUUuIElmIG5vdCBpdCB3aWxsIHRocm93IGFuIGVycm9yLCB3aGlj
aCB3aWxsIGJlCisgICAgICAgICAgICAgICAgLy91c2VmdWwgdG8ga25vdy4KKyAgICAgICAgICAg
ICAgICBpZiAoaWVOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuZGV0YWNoRXZlbnQo
aWVOYW1lLCBmdW5jKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jLCBmYWxz
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICog
R2l2ZW4gYW4gZXZlbnQgZnJvbSBhIHNjcmlwdCBub2RlLCBnZXQgdGhlIHJlcXVpcmVqcyBpbmZv
IGZyb20gaXQsCisgICAgICAgICAqIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVy
cyBvbiB0aGUgbm9kZS4KKyAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0CisgICAgICAgICAq
IEByZXR1cm5zIHtPYmplY3R9CisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBnZXRTY3Jp
cHREYXRhKGV2dCkgeworICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQg
b2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAorICAgICAgICAgICAgLy9hbGwg
b2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5v
dWdoCisgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgorICAg
ICAgICAgICAgdmFyIG5vZGUgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudDsK
KworICAgICAgICAgICAgLy9SZW1vdmUgdGhlIGxpc3RlbmVycyBvbmNlIGhlcmUuCisgICAgICAg
ICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgJ2xvYWQnLCAn
b25yZWFkeXN0YXRlY2hhbmdlJyk7CisgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBj
b250ZXh0Lm9uU2NyaXB0RXJyb3IsICdlcnJvcicpOworCisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgaWQ6IG5vZGUgJiYg
bm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpCisgICAgICAgICAgICB9Owor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW50YWtlRGVmaW5lcygpIHsKKyAgICAgICAg
ICAgIHZhciBhcmdzOworCisgICAgICAgICAgICAvL0FueSBkZWZpbmVkIG1vZHVsZXMgaW4gdGhl
IGdsb2JhbCBxdWV1ZSwgaW50YWtlIHRoZW0gbm93LgorICAgICAgICAgICAgdGFrZUdsb2JhbFF1
ZXVlKCk7CisKKyAgICAgICAgICAgIC8vTWFrZSBzdXJlIGFueSByZW1haW5pbmcgZGVmUXVldWUg
aXRlbXMgZ2V0IHByb3Blcmx5IHByb2Nlc3NlZC4KKyAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1
ZS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ21pc21hdGNoJywgJ01pc21hdGNoZWQgYW5vbnlt
b3VzIGRlZmluZSgpIG1vZHVsZTogJyArCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2Fy
Z3MubGVuZ3RoIC0gMV0pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvL2FyZ3MgYXJlIGlkLCBkZXBzLCBmYWN0b3J5LiBTaG91bGQgYmUgbm9ybWFsaXpl
ZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUoKSBmdW5jdGlvbi4KKyAgICAg
ICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CisgICAg
ICAgIH0KKworICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgY29uZmlnOiBjb25maWcs
CisgICAgICAgICAgICBjb250ZXh0TmFtZTogY29udGV4dE5hbWUsCisgICAgICAgICAgICByZWdp
c3RyeTogcmVnaXN0cnksCisgICAgICAgICAgICBkZWZpbmVkOiBkZWZpbmVkLAorICAgICAgICAg
ICAgdXJsRmV0Y2hlZDogdXJsRmV0Y2hlZCwKKyAgICAgICAgICAgIGRlZlF1ZXVlOiBkZWZRdWV1
ZSwKKyAgICAgICAgICAgIGRlZlF1ZXVlTWFwOiB7fSwKKyAgICAgICAgICAgIE1vZHVsZTogTW9k
dWxlLAorICAgICAgICAgICAgbWFrZU1vZHVsZU1hcDogbWFrZU1vZHVsZU1hcCwKKyAgICAgICAg
ICAgIG5leHRUaWNrOiByZXEubmV4dFRpY2ssCisgICAgICAgICAgICBvbkVycm9yOiBvbkVycm9y
LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFNldCBhIGNvbmZpZ3VyYXRpb24g
Zm9yIHRoZSBjb250ZXh0LgorICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25m
aWcgb2JqZWN0IHRvIGludGVncmF0ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY29u
ZmlndXJlOiBmdW5jdGlvbiAoY2ZnKSB7CisgICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhl
IGJhc2VVcmwgZW5kcyBpbiBhIHNsYXNoLgorICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVy
bCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VVcmwuY2hhckF0KGNmZy5iYXNl
VXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5i
YXNlVXJsICs9ICcvJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgb2xkIHN0eWxlIHVybEFyZ3Mgc3RyaW5nIHRv
IGEgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjZmcudXJsQXJncyA9PT0g
J3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHVybEFyZ3MgPSBjZmcudXJsQXJn
czsKKyAgICAgICAgICAgICAgICAgICAgY2ZnLnVybEFyZ3MgPSBmdW5jdGlvbihpZCwgdXJsKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVybC5pbmRleE9mKCc/JykgPT09IC0x
ID8gJz8nIDogJyYnKSArIHVybEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9TYXZlIG9mZiB0aGUgcGF0aHMgc2luY2Ug
dGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKKyAgICAgICAgICAgICAgICAvL3RoZXkg
YXJlIGFkZGl0aXZlLgorICAgICAgICAgICAgICAgIHZhciBzaGltID0gY29uZmlnLnNoaW0sCisg
ICAgICAgICAgICAgICAgICAgIG9ianMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRo
czogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHRydWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25maWc6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBt
YXA6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGVhY2hQ
cm9wKGNmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChvYmpzW3Byb3BdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ1twcm9w
XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHt9OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29u
ZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB2YWx1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
Ly9SZXZlcnNlIG1hcCB0aGUgYnVuZGxlcworICAgICAgICAgICAgICAgIGlmIChjZmcuYnVuZGxl
cykgeworICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuYnVuZGxlcywgZnVuY3Rpb24g
KHZhbHVlLCBwcm9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLCBmdW5j
dGlvbiAodikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBwcm9wKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXNNYXBbdl0gPSBwcm9wOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvL01lcmdlIHNoaW0KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLnNoaW0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLnNoaW0sIGZ1bmN0aW9uICh2YWx1ZSwgaWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBzdHJ1Y3R1cmUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXBzOiB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlLmV4cG9y
dHMgfHwgdmFsdWUuaW5pdCkgJiYgIXZhbHVlLmV4cG9ydHNGbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlLmV4cG9ydHNGbiA9IGNvbnRleHQubWFrZVNoaW1FeHBvcnRzKHZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHNoaW1baWRdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICBjb25maWcuc2hpbSA9IHNoaW07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy9BZGp1c3QgcGFja2FnZXMgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAg
IGlmIChjZmcucGFja2FnZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZWFjaChjZmcucGFja2Fn
ZXMsIGZ1bmN0aW9uIChwa2dPYmopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2Nh
dGlvbiwgbmFtZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcGtnT2JqID0gdHlwZW9mIHBr
Z09iaiA9PT0gJ3N0cmluZycgPyB7bmFtZTogcGtnT2JqfSA6IHBrZ09iajsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IHBrZ09iai5uYW1lOworICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb24gPSBwa2dPYmoubG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGF0aHNb
bmFtZV0gPSBwa2dPYmoubG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vU2F2ZSBwb2ludGVyIHRvIG1haW4gbW9kdWxlIElEIGZv
ciBwa2cgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90
IGluIG1haW4sIHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVyZW50IHBh
Y2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZW52cyBoYXZlIGRpZmZlcmVudCBjb252
ZW50aW9uczogc29tZSB1c2UgYSBtb2R1bGUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vc29tZSB1c2UgYSBmaWxlIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcu
cGtnc1tuYW1lXSA9IHBrZ09iai5uYW1lICsgJy8nICsgKHBrZ09iai5tYWluIHx8ICdtYWluJykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjdXJyRGlyUmVn
RXhwLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShq
c1N1ZmZpeFJlZ0V4cCwgJycpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcgdG8g
ZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCisgICAgICAgICAgICAgICAgLy91cGRh
dGUgdGhlIG1hcHMgZm9yIHRoZW0sIHNpbmNlIHRoZWlyIGluZm8sIGxpa2UgVVJMcyB0byBsb2Fk
LAorICAgICAgICAgICAgICAgIC8vbWF5IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICBl
YWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy9JZiBtb2R1bGUgYWxyZWFkeSBoYXMgaW5pdCBjYWxsZWQsIHNpbmNlIGl0IGlzIHRvbwor
ICAgICAgICAgICAgICAgICAgICAvL2xhdGUgdG8gbW9kaWZ5IHRoZW0sIGFuZCBpZ25vcmUgdW5u
b3JtYWxpemVkIG9uZXMKKyAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0cmFu
c2llbnQuCisgICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiAhbW9kLm1hcC51
bm5vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5tYXAgPSBtYWtlTW9k
dWxlTWFwKGlkLCBudWxsLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25m
aWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKKyAgICAgICAgICAgICAgICAvL3Jl
cXVpcmUgd2l0aCB0aG9zZSBhcmdzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJlcXVpcmUgaXMgZGVm
aW5lZCBhcyBhCisgICAgICAgICAgICAgICAgLy9jb25maWcgb2JqZWN0IGJlZm9yZSByZXF1aXJl
LmpzIGlzIGxvYWRlZC4KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxi
YWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShjZmcuZGVwcyB8fCBb
XSwgY2ZnLmNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisg
ICAgICAgICAgICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIGZuKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5pdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCB8fCAodmFsdWUuZXhw
b3J0cyAmJiBnZXRHbG9iYWwodmFsdWUuZXhwb3J0cykpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gZm47CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBt
YWtlUmVxdWlyZTogZnVuY3Rpb24gKHJlbE1hcCwgb3B0aW9ucykgeworICAgICAgICAgICAgICAg
IG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9j
YWxSZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBpZCwgbWFwLCByZXF1aXJlTW9kOworCisgICAgICAgICAgICAgICAgICAgIGlmIChvcHRp
b25zLmVuYWJsZUJ1aWxkQ2FsbGJhY2sgJiYgY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihjYWxsYmFj
aykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLl9fcmVxdWlyZUpzQnVpbGQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9J
bnZhbGlkIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvciht
YWtlRXJyb3IoJ3JlcXVpcmVhcmdzJywgJ0ludmFsaWQgcmVxdWlyZSBjYWxsJyksIGVycmJhY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAv
L0lmIHJlcXVpcmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJlcXVlc3RlZCwgZ2V0IHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRs
ZXJzLiBDYXZlYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgb25seSB3b3JrcyB3
aGlsZSBtb2R1bGUgaXMgYmVpbmcgZGVmaW5lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZWxNYXAgJiYgaGFzUHJvcChoYW5kbGVycywgZGVwcykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFwLmlkXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lu
Y2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlzCisgICAgICAg
ICAgICAgICAgICAgICAgICAvL2F2YWlsYWJsZSAoYXMgaW4gdGhlIE5vZGUgYWRhcHRlciksIHBy
ZWZlciB0aGF0LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5nZXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBkZXBzLCByZWxN
YXAsIGxvY2FsUmVxdWlyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIG1vZHVsZSBuYW1lLCBpZiBpdCBjb250YWlucyAu
IG9yIC4uCisgICAgICAgICAgICAgICAgICAgICAgICBtYXAgPSBtYWtlTW9kdWxlTWFwKGRlcHMs
IHJlbE1hcCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAu
aWQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBpZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3Io
J25vdGxvYWRlZCcsICdNb2R1bGUgbmFtZSAiJyArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICciIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZvciBjb250ZXh0OiAnICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSArCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbE1hcCA/ICcnIDogJy4gVXNlIHJlcXVp
cmUoW10pJykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBkZWZpbmVkW2lkXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIC8vR3JhYiBkZWZpbmVzIHdhaXRpbmcgaW4gdGhlIGdsb2JhbCBxdWV1
ZS4KKyAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOworCisgICAgICAgICAgICAg
ICAgICAgIC8vTWFyayBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcyBuZWVkaW5nIHRvIGJlIGxvYWRl
ZC4KKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5uZXh0VGljayhmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvL1NvbWUgZGVmaW5lcyBjb3VsZCBoYXZlIGJlZW4gYWRk
ZWQgc2luY2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvL3JlcXVpcmUgY2FsbCwgY29s
bGVjdCB0aGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kID0gZ2V0TW9kdWxlKG1ha2VNb2R1bGVN
YXAobnVsbCwgcmVsTWFwKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vU3RvcmUgaWYg
bWFwIGNvbmZpZyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGlzIHJlcXVpcmUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vY2FsbCBmb3IgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWlyZU1vZC5za2lwTWFwID0gb3B0aW9ucy5za2lwTWFwOworCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1aXJlTW9kLmluaXQoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCisgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxv
Y2FsUmVxdWlyZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtaXhpbihs
b2NhbFJlcXVpcmUsIHsKKyAgICAgICAgICAgICAgICAgICAgaXNCcm93c2VyOiBpc0Jyb3dzZXIs
CisKKyAgICAgICAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICAgICAqIENvbnZl
cnRzIGEgbW9kdWxlIG5hbWUgKyAuZXh0ZW5zaW9uIGludG8gYW4gVVJMIHBhdGguCisgICAgICAg
ICAgICAgICAgICAgICAqICpSZXF1aXJlcyogdGhlIHVzZSBvZiBhIG1vZHVsZSBuYW1lLiBJdCBk
b2VzIG5vdCBzdXBwb3J0IHVzaW5nCisgICAgICAgICAgICAgICAgICAgICAqIHBsYWluIFVSTHMg
bGlrZSBuYW1lVG9VcmwuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAg
ICAgICB0b1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWVQbHVzRXh0KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0g
bW9kdWxlTmFtZVBsdXNFeHQubGFzdEluZGV4T2YoJy4nKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWdtZW50ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3BsaXQoJy8nKVswXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gc2VnbWVudCA9PT0gJy4nIHx8IHNl
Z21lbnQgPT09ICcuLic7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vSGF2ZSBhIGZpbGUg
ZXh0ZW5zaW9uIGFsaWFzLCBhbmQgaXQgaXMgbm90IHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy9kb3RzIGZyb20gYSByZWxhdGl2ZSBwYXRoLgorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGluZGV4ICE9PSAtMSAmJiAoIWlzUmVsYXRpdmUgfHwgaW5kZXggPiAxKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZyhp
bmRleCwgbW9kdWxlTmFtZVBsdXNFeHQubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZygwLCBp
bmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemUobW9kdWxlTmFtZVBsdXNFeHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxNYXAg
JiYgcmVsTWFwLmlkLCB0cnVlKSwgZXh0LCAgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lZDogZnVuY3Rpb24gKGlkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBtYWtlTW9kdWxlTWFwKGlk
LCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZCk7CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkOiBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlkID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSku
aWQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBpZCkg
fHwgaGFzUHJvcChyZWdpc3RyeSwgaWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvL09ubHkgYWxsb3cgdW5kZWYgb24gdG9w
IGxldmVsIHJlcXVpcmUgY2FsbHMKKyAgICAgICAgICAgICAgICBpZiAoIXJlbE1hcCkgeworICAg
ICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUudW5kZWYgPSBmdW5jdGlvbiAoaWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCBhbnkgd2FpdGluZyBkZWZpbmUoKSBjYWxscyB0
byB0aGlzIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAvL2ZpeCBmb3IgIzQwOAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBtYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIHRydWUpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBtb2QudW5kZWZlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZW1vdmVTY3JpcHQoaWQpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgZGVmaW5lZFtpZF07CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdXJs
RmV0Y2hlZFttYXAudXJsXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1bmRlZkV2
ZW50c1tpZF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gcXVldWVkIGRlZmlu
ZXMgdG9vLiBHbyBiYWNrd2FyZHMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vaW4gYXJyYXkg
c28gdGhhdCB0aGUgc3BsaWNlcyBkbyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vbWVz
cyB1cCB0aGUgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFJldmVyc2Uo
ZGVmUXVldWUsIGZ1bmN0aW9uKGFyZ3MsIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXJnc1swXSA9PT0gaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmUXVldWUuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IGNvbnRleHQuZGVmUXVldWVNYXBbaWRdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bW9kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVy
cyBpbiBjYXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlIHdpbGwg
YmUgYXR0ZW1wdGVkIHRvIGJlIHJlbG9hZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly91c2luZyBhIGRpZmZlcmVudCBjb25maWcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bmRlZkV2ZW50c1tpZF0gPSBtb2QuZXZlbnRzOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CisgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENhbGxlZCB0byBl
bmFibGUgYSBtb2R1bGUgaWYgaXQgaXMgc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5CisgICAgICAgICAg
ICAgKiBhd2FpdGluZyBlbmFibGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBhcmVu
dCBtb2R1bGUsCisgICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4g
dGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieQorICAgICAgICAgICAgICogdGhlIG9wdGltaXpl
ci4gTm90IHNob3duIGhlcmUgdG8ga2VlcCBjb2RlIGNvbXBhY3QuCisgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKGRlcE1hcCkgeworICAgICAgICAgICAgICAg
IHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGRlcE1hcC5pZCk7CisgICAgICAgICAgICAgICAg
aWYgKG1vZCkgeworICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUoZGVwTWFwKS5lbmFibGUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvKioK
KyAgICAgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGJ5IGVudmlyb25tZW50IGFkYXB0
ZXJzIHRvIGNvbXBsZXRlIGEgbG9hZCBldmVudC4KKyAgICAgICAgICAgICAqIEEgbG9hZCBldmVu
dCBjb3VsZCBiZSBhIHNjcmlwdCBsb2FkIG9yIGp1c3QgYSBsb2FkIHBhc3MgZnJvbSBhIHN5bmNo
cm9ub3VzCisgICAgICAgICAgICAgKiBsb2FkIGNhbGwuCisgICAgICAgICAgICAgKiBAcGFyYW0g
e1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIHBvdGVudGlhbGx5
IGNvbXBsZXRlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjb21wbGV0ZUxvYWQ6IGZ1
bmN0aW9uIChtb2R1bGVOYW1lKSB7CisgICAgICAgICAgICAgICAgdmFyIGZvdW5kLCBhcmdzLCBt
b2QsCisgICAgICAgICAgICAgICAgICAgIHNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1vZHVs
ZU5hbWUpIHx8IHt9LAorICAgICAgICAgICAgICAgICAgICBzaEV4cG9ydHMgPSBzaGltLmV4cG9y
dHM7CisKKyAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKKworICAgICAgICAgICAg
ICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9
IGRlZlF1ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gbW9kdWxlTmFtZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYWxyZWFkeSBmb3VuZCBhbiBhbm9ueW1vdXMgbW9k
dWxlIGFuZCBib3VuZCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGlzIG5hbWUs
IHRoZW4gdGhpcyBpcyBzb21lIG90aGVyIGFub24gbW9kdWxlCisgICAgICAgICAgICAgICAgICAg
ICAgICAvL3dhaXRpbmcgZm9yIGl0cyBjb21wbGV0ZUxvYWQgdG8gZmlyZS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0gPT09
IG1vZHVsZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRm91bmQgbWF0Y2hpbmcg
ZGVmaW5lIGNhbGwgZm9yIHRoaXMgc2NyaXB0IQorICAgICAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbEdldE1vZHVsZShhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OworCisgICAgICAgICAgICAgICAgLy9EbyB0aGlzIGFm
dGVyIHRoZSBjeWNsZSBvZiBjYWxsR2V0TW9kdWxlIGluIGNhc2UgdGhlIHJlc3VsdAorICAgICAg
ICAgICAgICAgIC8vb2YgdGhvc2UgY2FsbHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRoZSByZWdpc3Ry
eS4KKyAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOwor
CisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiAhaGFzUHJvcChkZWZpbmVkLCBtb2R1bGVO
YW1lKSAmJiBtb2QgJiYgIW1vZC5pbml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bmZpZy5lbmZvcmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRz
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kdWxl
TmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBvbkVycm9yKG1ha2VFcnJvcignbm9kZWZpbmUnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ05vIGRlZmluZSBjYWxsIGZvciAnICsgbW9kdWxlTmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vQSBzY3JpcHQgdGhhdCBkb2VzIG5vdCBjYWxsIGRl
ZmluZSgpLCBzbyBqdXN0IHNpbXVsYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBj
YWxsIGZvciBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVs
ZU5hbWUsIChzaGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2hlY2tMb2Fk
ZWQoKTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICog
Q29udmVydHMgYSBtb2R1bGUgbmFtZSB0byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMgY2FzZXMgd2hl
cmUKKyAgICAgICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJM
LgorICAgICAgICAgICAgICogTm90ZSB0aGF0IGl0ICoqZG9lcyBub3QqKiBjYWxsIG5vcm1hbGl6
ZSBvbiB0aGUgbW9kdWxlTmFtZSwKKyAgICAgICAgICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gaGF2
ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gVGhpcyBpcyBhbgorICAgICAgICAgICAgICogaW50
ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJ
LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0aW9uIChtb2R1
bGVOYW1lLCBleHQsIHNraXBFeHQpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHN5bXMs
IGksIHBhcmVudE1vZHVsZSwgdXJsLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoLCBi
dW5kbGVJZCwKKyAgICAgICAgICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtn
cywgbW9kdWxlTmFtZSk7CisKKyAgICAgICAgICAgICAgICBpZiAocGtnTWFpbikgeworICAgICAg
ICAgICAgICAgICAgICBtb2R1bGVOYW1lID0gcGtnTWFpbjsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCBtb2R1bGVOYW1l
KTsKKworICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQsIGV4dCwgc2tpcEV4dCk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9JZiBhIGNvbG9uIGlzIGluIHRoZSBV
UkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQgYW5kIGl0IGlzIGp1c3QKKyAgICAg
ICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xh
c2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCisgICAgICAgICAgICAgICAgLy9vciBl
bmRzIHdpdGggLmpzLCB0aGVuIGFzc3VtZSB0aGUgdXNlciBtZWFudCB0byB1c2UgYW4gdXJsIGFu
ZCBub3QgYSBtb2R1bGUgaWQuCisgICAgICAgICAgICAgICAgLy9UaGUgc2xhc2ggaXMgaW1wb3J0
YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBhcyBmdWxsIHBhdGhzLgorICAgICAg
ICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1lKSkgeworICAgICAg
ICAgICAgICAgICAgICAvL0p1c3QgYSBwbGFpbiBwYXRoLCBub3QgbW9kdWxlIG5hbWUgbG9va3Vw
LCBzbyBqdXN0IHJldHVybiBpdC4KKyAgICAgICAgICAgICAgICAgICAgLy9BZGQgZXh0ZW5zaW9u
IGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdvbmt5LCBvbmx5IG5vbi0uanMgdGhp
bmdzIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24sIHRoaXMgbWV0aG9k
IHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgorICAgICAgICAgICAgICAgICAgICB1cmwg
PSBtb2R1bGVOYW1lICsgKGV4dCB8fCAnJyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0
byBhIHBhdGguCisgICAgICAgICAgICAgICAgICAgIHBhdGhzID0gY29uZmlnLnBhdGhzOworCisg
ICAgICAgICAgICAgICAgICAgIHN5bXMgPSBtb2R1bGVOYW1lLnNwbGl0KCcvJyk7CisgICAgICAg
ICAgICAgICAgICAgIC8vRm9yIGVhY2ggbW9kdWxlIG5hbWUgc2VnbWVudCwgc2VlIGlmIHRoZXJl
IGlzIGEgcGF0aAorICAgICAgICAgICAgICAgICAgICAvL3JlZ2lzdGVyZWQgZm9yIGl0LiBTdGFy
dCB3aXRoIG1vc3Qgc3BlY2lmaWMgbmFtZQorICAgICAgICAgICAgICAgICAgICAvL2FuZCB3b3Jr
IHVwIGZyb20gaXQuCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHN5bXMubGVuZ3RoOyBp
ID4gMDsgaSAtPSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2R1bGUgPSBz
eW1zLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50UGF0aCA9IGdldE93bihwYXRocywgcGFyZW50TW9kdWxlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJlbnRQYXRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9J
ZiBhbiBhcnJheSwgaXQgbWVhbnMgdGhlcmUgYXJlIGEgZmV3IGNob2ljZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy9DaG9vc2UgdGhlIG9uZSB0aGF0IGlzIGRlc2lyZWQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShwYXJlbnRQYXRoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gcGFyZW50UGF0aFswXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3ltcy5zcGxpY2UoMCwgaSwgcGFyZW50UGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAvL0pvaW4gdGhlIHBhdGggcGFydHMgdG9nZXRoZXIs
IHRoZW4gZmlndXJlIG91dCBpZiBiYXNlVXJsIGlzIG5lZWRlZC4KKyAgICAgICAgICAgICAgICAg
ICAgdXJsID0gc3ltcy5qb2luKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0
IHx8ICgvXmRhdGFcOnxeYmxvYlw6fFw/Ly50ZXN0KHVybCkgfHwgc2tpcEV4dCA/ICcnIDogJy5q
cycpKTsKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gKHVybC5jaGFyQXQoMCkgPT09ICcvJyB8
fCB1cmwubWF0Y2goL15bXHdcK1wuXC1dKzovKSA/ICcnIDogY29uZmlnLmJhc2VVcmwpICsgdXJs
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcudXJs
QXJncyAmJiAhL15ibG9iXDovLnRlc3QodXJsKSA/CisgICAgICAgICAgICAgICAgICAgICAgIHVy
bCArIGNvbmZpZy51cmxBcmdzKG1vZHVsZU5hbWUsIHVybCkgOiB1cmw7CisgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAvL0RlbGVnYXRlcyB0byByZXEubG9hZC4gQnJva2VuIG91dCBhcyBh
IHNlcGFyYXRlIGZ1bmN0aW9uIHRvCisgICAgICAgICAgICAvL2FsbG93IG92ZXJyaWRpbmcgaW4g
dGhlIG9wdGltaXplci4KKyAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChpZCwgdXJsKSB7Cisg
ICAgICAgICAgICAgICAgcmVxLmxvYWQoY29udGV4dCwgaWQsIHVybCk7CisgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNh
bGxiYWNrIGZ1bmN0aW9uLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24KKyAgICAg
ICAgICAgICAqIHNvbGVseSB0byBhbGxvdyB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlcXVlbmNlIHRo
ZSBmaWxlcyBpbiB0aGUgYnVpbHQKKyAgICAgICAgICAgICAqIGxheWVyIGluIHRoZSByaWdodCBz
ZXF1ZW5jZS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcHJpdmF0ZQorICAgICAg
ICAgICAgICovCisgICAgICAgICAgICBleGVjQ2I6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywg
YXJncywgZXhwb3J0cykgeworICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShl
eHBvcnRzLCBhcmdzKTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAg
ICAgICAgICogY2FsbGJhY2sgZm9yIHNjcmlwdCBsb2FkcywgdXNlZCB0byBjaGVjayBzdGF0dXMg
b2YgbG9hZGluZy4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0ge0V2ZW50
fSBldnQgdGhlIGV2ZW50IGZyb20gdGhlIGJyb3dzZXIgZm9yIHRoZSBzY3JpcHQKKyAgICAgICAg
ICAgICAqIHRoYXQgd2FzIGxvYWRlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgb25T
Y3JpcHRMb2FkOiBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgLy9Vc2luZyBjdXJy
ZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAor
ICAgICAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0
IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAorICAgICAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBh
bmQgc3RpbGwgbWFrZXMgc2Vuc2UuCisgICAgICAgICAgICAgICAgaWYgKGV2dC50eXBlID09PSAn
bG9hZCcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkeVJlZ0V4cC50ZXN0KChldnQu
Y3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vUmVzZXQgaW50ZXJhY3RpdmUgc2NyaXB0IHNvIGEgc2NyaXB0IG5vZGUg
aXMgbm90IGhlbGQgb250byBmb3IKKyAgICAgICAgICAgICAgICAgICAgLy90byBsb25nLgorICAg
ICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCA9IG51bGw7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy9QdWxsIG91dCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGFuZCB0aGUgY29udGV4
dC4KKyAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKGRhdGEuaWQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAg
ICAgICogQ2FsbGJhY2sgZm9yIHNjcmlwdCBlcnJvcnMuCisgICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIG9uU2NyaXB0RXJyb3I6IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICB2
YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc1Bh
dGhGYWxsYmFjayhkYXRhLmlkKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50cyA9
IFtdOworICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24odmFs
dWUsIGtleSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdfQHIn
KSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUuZGVwTWFw
cywgZnVuY3Rpb24oZGVwTWFwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChkZXBNYXAuaWQgPT09IGRhdGEuaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudHMucHVzaChrZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVy
cm9yKG1ha2VFcnJvcignc2NyaXB0ZXJyb3InLCAnU2NyaXB0IGVycm9yIGZvciAiJyArIGRhdGEu
aWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVu
dHMubGVuZ3RoID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICciLCBuZWVkZWQgYnk6ICcgKyBwYXJlbnRzLmpvaW4oJywgJykgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyInKSwgZXZ0LCBbZGF0YS5pZF0pKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgY29u
dGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOworICAgICAgICByZXR1cm4gY29u
dGV4dDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYWluIGVudHJ5IHBvaW50LgorICAgICAq
CisgICAgICogSWYgdGhlIG9ubHkgYXJndW1lbnQgdG8gcmVxdWlyZSBpcyBhIHN0cmluZywgdGhl
biB0aGUgbW9kdWxlIHRoYXQKKyAgICAgKiBpcyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmluZyBp
cyBmZXRjaGVkIGZvciB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KKyAgICAgKgorICAgICAqIElm
IHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhlbiBpdCB3aWxsIGJlIHRyZWF0ZWQg
YXMgYW4gYXJyYXkKKyAgICAgKiBvZiBkZXBlbmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRjaC4g
QW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGJhY2sgY2FuCisgICAgICogYmUgc3BlY2lmaWVkIHRv
IGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCisg
ICAgICoKKyAgICAgKiBNYWtlIGEgbG9jYWwgcmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBjb21w
bGlhbmNlIChpdCBhc3N1bWVzIHRoaW5ncworICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBu
b3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAorICAgICAqIG5hbWUgZm9yIG1p
bmlmaWNhdGlvbi9sb2NhbCBzY29wZSB1c2UuCisgICAgICovCisgICAgcmVxID0gcmVxdWlyZWpz
ID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgeworCisgICAg
ICAgIC8vRmluZCB0aGUgcmlnaHQgY29udGV4dCwgdXNlIGRlZmF1bHQKKyAgICAgICAgdmFyIGNv
bnRleHQsIGNvbmZpZywKKyAgICAgICAgICAgIGNvbnRleHROYW1lID0gZGVmQ29udGV4dE5hbWU7
CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2Fs
bC4KKyAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpICYmIHR5cGVvZiBkZXBzICE9PSAnc3RyaW5n
JykgeworICAgICAgICAgICAgLy8gZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QKKyAgICAgICAgICAg
IGNvbmZpZyA9IGRlcHM7CisgICAgICAgICAgICBpZiAoaXNBcnJheShjYWxsYmFjaykpIHsKKyAg
ICAgICAgICAgICAgICAvLyBBZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCisg
ICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOworICAgICAgICAgICAgICAgIGNhbGxiYWNr
ID0gZXJyYmFjazsKKyAgICAgICAgICAgICAgICBlcnJiYWNrID0gb3B0aW9uYWw7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlcHMgPSBbXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsKKyAg
ICAgICAgICAgIGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7CisgICAgICAgIH0KKworICAg
ICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7CisgICAgICAgIGlm
ICghY29udGV4dCkgeworICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW2NvbnRleHROYW1l
XSA9IHJlcS5zLm5ld0NvbnRleHQoY29udGV4dE5hbWUpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGNvbmZpZykgeworICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ss
IGVycmJhY2spOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBTdXBwb3J0IHJlcXVpcmUuY29u
ZmlnKCkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29vcGVyYXRlIHdpdGggb3RoZXIKKyAgICAgKiBB
TUQgbG9hZGVycyBvbiBnbG9iYWxseSBhZ3JlZWQgbmFtZXMuCisgICAgICovCisgICAgcmVxLmNv
bmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHsKKyAgICAgICAgcmV0dXJuIHJlcShjb25maWcpOwor
ICAgIH07CisKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3Vy
cmVudCB0aWNrCisgICAgICogb2YgdGhlIGV2ZW50IGxvb3AuIE92ZXJyaWRlIGZvciBvdGhlciBl
bnZzCisgICAgICogdGhhdCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91dC4K
KyAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4K
KyAgICAgKi8KKyAgICByZXEubmV4dFRpY2sgPSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVm
aW5lZCcgPyBmdW5jdGlvbiAoZm4pIHsKKyAgICAgICAgc2V0VGltZW91dChmbiwgNCk7CisgICAg
fSA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9OworCisgICAgLyoqCisgICAgICogRXhwb3J0IHJl
cXVpcmUgYXMgYSBnbG9iYWwsIGJ1dCBvbmx5IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3Qu
CisgICAgICovCisgICAgaWYgKCFyZXF1aXJlKSB7CisgICAgICAgIHJlcXVpcmUgPSByZXE7Cisg
ICAgfQorCisgICAgcmVxLnZlcnNpb24gPSB2ZXJzaW9uOworCisgICAgLy9Vc2VkIHRvIGZpbHRl
ciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCisgICAgcmVxLmpzRXh0
UmVnRXhwID0gL15cL3w6fFw/fFwuanMkLzsKKyAgICByZXEuaXNCcm93c2VyID0gaXNCcm93c2Vy
OworICAgIHMgPSByZXEucyA9IHsKKyAgICAgICAgY29udGV4dHM6IGNvbnRleHRzLAorICAgICAg
ICBuZXdDb250ZXh0OiBuZXdDb250ZXh0CisgICAgfTsKKworICAgIC8vQ3JlYXRlIGRlZmF1bHQg
Y29udGV4dC4KKyAgICByZXEoe30pOworCisgICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1zZW5z
aXRpdmUgbWV0aG9kcyBvbiBnbG9iYWwgcmVxdWlyZS4KKyAgICBlYWNoKFsKKyAgICAgICAgJ3Rv
VXJsJywKKyAgICAgICAgJ3VuZGVmJywKKyAgICAgICAgJ2RlZmluZWQnLAorICAgICAgICAnc3Bl
Y2lmaWVkJworICAgIF0sIGZ1bmN0aW9uIChwcm9wKSB7CisgICAgICAgIC8vUmVmZXJlbmNlIGZy
b20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwK
KyAgICAgICAgLy9zbyB0aGF0IGR1cmluZyBidWlsZHMsIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2Yg
dGhlIGRlZmF1bHQgY29udGV4dAorICAgICAgICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVzZWQu
CisgICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjdHgg
PSBjb250ZXh0c1tkZWZDb250ZXh0TmFtZV07CisgICAgICAgICAgICByZXR1cm4gY3R4LnJlcXVp
cmVbcHJvcF0uYXBwbHkoY3R4LCBhcmd1bWVudHMpOworICAgICAgICB9OworICAgIH0pOworCisg
ICAgaWYgKGlzQnJvd3NlcikgeworICAgICAgICBoZWFkID0gcy5oZWFkID0gZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTsKKyAgICAgICAgLy9JZiBCQVNFIHRhZyBpcyBp
biBwbGF5LCB1c2luZyBhcHBlbmRDaGlsZCBpcyBhIHByb2JsZW0gZm9yIElFNi4KKyAgICAgICAg
Ly9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGlu
IHRoaXMgalF1ZXJ5IGJ1ZzoKKyAgICAgICAgLy9odHRwOi8vZGV2LmpxdWVyeS5jb20vdGlja2V0
LzI3MDkKKyAgICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnYmFzZScpWzBdOworICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGhl
YWQgPSBzLmhlYWQgPSBiYXNlRWxlbWVudC5wYXJlbnROb2RlOworICAgICAgICB9CisgICAgfQor
CisgICAgLyoqCisgICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5l
cmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcworICAgICAqIGZ1bmN0aW9uLiBJbnRlcmNlcHQv
b3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgY3VzdG9tIGVycm9yIGhhbmRsaW5nLgorICAgICAqIEBw
YXJhbSB7RXJyb3J9IGVyciB0aGUgZXJyb3Igb2JqZWN0LgorICAgICAqLworICAgIHJlcS5vbkVy
cm9yID0gZGVmYXVsdE9uRXJyb3I7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIHRoZSBub2Rl
IGZvciB0aGUgbG9hZCBjb21tYW5kLiBPbmx5IHVzZWQgaW4gYnJvd3NlciBlbnZzLgorICAgICAq
LworICAgIHJlcS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJs
KSB7CisgICAgICAgIHZhciBub2RlID0gY29uZmlnLnhodG1sID8KKyAgICAgICAgICAgICAgICBk
b2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCAn
aHRtbDpzY3JpcHQnKSA6CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c2NyaXB0Jyk7CisgICAgICAgIG5vZGUudHlwZSA9IGNvbmZpZy5zY3JpcHRUeXBlIHx8ICd0ZXh0
L2phdmFzY3JpcHQnOworICAgICAgICBub2RlLmNoYXJzZXQgPSAndXRmLTgnOworICAgICAgICBu
b2RlLmFzeW5jID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfTsKKworICAgIC8q
KgorICAgICAqIERvZXMgdGhlIHJlcXVlc3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJyb3dz
ZXIgY2FzZS4KKyAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBv
dGhlciBlbnZpcm9ubWVudHMKKyAgICAgKiB0byBvdmVycmlkZSBpdC4KKyAgICAgKgorICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0
ZS4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9k
dWxlLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxlLgor
ICAgICAqLworICAgIHJlcS5sb2FkID0gZnVuY3Rpb24gKGNvbnRleHQsIG1vZHVsZU5hbWUsIHVy
bCkgeworICAgICAgICB2YXIgY29uZmlnID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcpIHx8
IHt9LAorICAgICAgICAgICAgbm9kZTsKKyAgICAgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAg
ICAgICAgLy9JbiB0aGUgYnJvd3NlciBzbyB1c2UgYSBzY3JpcHQgdGFnCisgICAgICAgICAgICBu
b2RlID0gcmVxLmNyZWF0ZU5vZGUoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOworCisgICAgICAg
ICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcsIGNvbnRleHQuY29u
dGV4dE5hbWUpOworICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1v
ZHVsZScsIG1vZHVsZU5hbWUpOworCisgICAgICAgICAgICAvL1NldCB1cCBsb2FkIGxpc3RlbmVy
LiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2UgSUU5IGhhcworICAgICAgICAgICAgLy9h
IHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9ubG9hZCBm
aXJpbmdzCisgICAgICAgICAgICAvL3RoYXQgZG8gbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBh
bGwgb3RoZXIgYnJvd3NlcnMgd2l0aAorICAgICAgICAgICAgLy9hZGRFdmVudExpc3RlbmVyIHN1
cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVudCBmb3IgYQorICAgICAgICAgICAgLy9z
Y3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKKyAgICAgICAgICAg
IC8vaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy82NDgw
NTcvc2NyaXB0LW9ubG9hZC1ldmVudC1pcy1ub3QtZmlyZWQtaW1tZWRpYXRlbHktYWZ0ZXItc2Ny
aXB0LWV4ZWN1dGlvbgorICAgICAgICAgICAgLy9VTkZPUlRVTkFURUxZIE9wZXJhIGltcGxlbWVu
dHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxvdyB0aGUgc2NyaXB0CisgICAgICAgICAg
ICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KKyAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaEV2
ZW50ICYmCisgICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgbm9kZS5hdHRhY2hFdmVudCBp
cyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNjcmlwdCBvcgorICAgICAgICAgICAgICAg
ICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCisgICAgICAgICAgICAgICAgICAg
IC8vcmVhZCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMTg3
CisgICAgICAgICAgICAgICAgICAgIC8vaWYgd2UgY2FuIE5PVCBmaW5kIFtuYXRpdmUgY29kZV0g
dGhlbiBpdCBtdXN0IE5PVCBuYXRpdmVseSBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgICAg
IC8vaW4gSUU4LCBub2RlLmF0dGFjaEV2ZW50IGRvZXMgbm90IGhhdmUgdG9TdHJpbmcoKQorICAg
ICAgICAgICAgICAgICAgICAvL05vdGUgdGhlIHRlc3QgZm9yICJbbmF0aXZlIGNvZGUiIHdpdGgg
bm8gY2xvc2luZyBicmFjZSwgc2VlOgorICAgICAgICAgICAgICAgICAgICAvL2h0dHBzOi8vZ2l0
aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8yNzMKKyAgICAgICAgICAgICAgICAg
ICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJp
bmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSA8IDApICYmCisgICAgICAgICAgICAgICAgICAg
ICFpc09wZXJhKSB7CisgICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0
IDYtOCkgZG8gbm90IGZpcmUKKyAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQg
YWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQsIHNvCisgICAgICAgICAgICAgICAgLy93ZSBjYW5u
b3QgdGllIHRoZSBhbm9ueW1vdXMgZGVmaW5lIGNhbGwgdG8gYSBuYW1lLgorICAgICAgICAgICAg
ICAgIC8vSG93ZXZlciwgSUUgcmVwb3J0cyB0aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFj
dGl2ZScKKyAgICAgICAgICAgICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRl
ZmluZSBjYWxsLgorICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKKworICAg
ICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRl
eHQub25TY3JpcHRMb2FkKTsKKyAgICAgICAgICAgICAgICAvL0l0IHdvdWxkIGJlIGdyZWF0IHRv
IGFkZCBhbiBlcnJvciBoYW5kbGVyIGhlcmUgdG8gY2F0Y2gKKyAgICAgICAgICAgICAgICAvLzQw
NHMgaW4gSUU5Ky4gSG93ZXZlciwgb25yZWFkeXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUK
KyAgICAgICAgICAgICAgICAvL3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhl
bHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKKyAgICAgICAgICAgICAgICAvL2lzIHVzZWQsIHRoZW4g
SUUgd2lsbCBmaXJlIGVycm9yIGJlZm9yZSBsb2FkLCBidXQgd2UgY2Fubm90CisgICAgICAgICAg
ICAgICAgLy91c2UgdGhhdCBwYXRod2F5IGdpdmVuIHRoZSBjb25uZWN0Lm1pY3Jvc29mdC5jb20g
aXNzdWUKKyAgICAgICAgICAgICAgICAvL21lbnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcg
dGhlICdzY3JpcHQgZXhlY3V0ZSwKKyAgICAgICAgICAgICAgICAvL3RoZW4gZmlyZSB0aGUgc2Ny
aXB0IGxvYWQgZXZlbnQgbGlzdGVuZXIgYmVmb3JlIGV4ZWN1dGUKKyAgICAgICAgICAgICAgICAv
L25leHQgc2NyaXB0JyB0aGF0IG90aGVyIGJyb3dzZXJzIGRvLgorICAgICAgICAgICAgICAgIC8v
QmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBpc3N1ZXMsCisgICAgICAgICAgICAgICAgLy9hbmQg
dGhlbiBkZXN0cm95cyBhbGwgaW5zdGFsbHMgb2YgSUUgNi05LgorICAgICAgICAgICAgICAgIC8v
bm9kZS5hdHRhY2hFdmVudCgnb25lcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvcik7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcign
bG9hZCcsIGNvbnRleHQub25TY3JpcHRMb2FkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbm9k
ZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvciwgZmFsc2Up
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZS5zcmMgPSB1cmw7CisKKyAgICAgICAg
ICAgIC8vQ2FsbGluZyBvbk5vZGVDcmVhdGVkIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBu
b2RlIGhhdmUgYmVlbgorICAgICAgICAgICAgLy9zZXQsIGJ1dCBiZWZvcmUgaXQgaXMgcGxhY2Vk
IGluIHRoZSBET00uCisgICAgICAgICAgICBpZiAoY29uZmlnLm9uTm9kZUNyZWF0ZWQpIHsKKyAg
ICAgICAgICAgICAgICBjb25maWcub25Ob2RlQ3JlYXRlZChub2RlLCBjb25maWcsIG1vZHVsZU5h
bWUsIHVybCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUg
Y2FzZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCisgICAg
ICAgICAgICAvL29mIHRoZSBhcHBlbmRDaGlsZCBleGVjdXRpb24sIHNvIHRvIHRpZSBhbiBhbm9u
eW1vdXMgZGVmaW5lCisgICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGlj
aCBpcyBzdG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCisgICAgICAgICAgICAvL3RvIGEgcmVm
ZXJlbmNlIHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgor
ICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbm9kZTsKKyAgICAgICAgICAgIGlm
IChiYXNlRWxlbWVudCkgeworICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUs
IGJhc2VFbGVtZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGVh
ZC5hcHBlbmRDaGlsZChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRs
eUFkZGluZ1NjcmlwdCA9IG51bGw7CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAg
ICB9IGVsc2UgaWYgKGlzV2ViV29ya2VyKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgIC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3Qg
YSB2ZXJ5CisgICAgICAgICAgICAgICAgLy9lZmZpY2llbnQgdXNlIG9mIGltcG9ydFNjcmlwdHMs
IGltcG9ydFNjcmlwdHMgd2lsbCBibG9jayB1bnRpbAorICAgICAgICAgICAgICAgIC8vaXRzIHNj
cmlwdCBpcyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJz
CisgICAgICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQg
YSBidWlsZCBoYXMgYmVlbiBkb25lIHNvCisgICAgICAgICAgICAgICAgLy90aGF0IG9ubHkgb25l
IHNjcmlwdCBuZWVkcyB0byBiZSBsb2FkZWQgYW55d2F5LiBUaGlzIG1heSBuZWVkCisgICAgICAg
ICAgICAgICAgLy90byBiZSByZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNv
bW1vbi4KKworICAgICAgICAgICAgICAgIC8vIFBvc3QgYSB0YXNrIHRvIHRoZSBldmVudCBsb29w
IHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIFdlYktpdAorICAgICAgICAgICAgICAgIC8vIHdoZXJl
IHRoZSB3b3JrZXIgZ2V0cyBnYXJiYWdlLWNvbGxlY3RlZCBhZnRlciBjYWxsaW5nCisgICAgICAg
ICAgICAgICAgLy8gaW1wb3J0U2NyaXB0cygpOiBodHRwczovL3dlYmtpdC5vcmcvYi8xNTMzMTcK
KyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge30sIDApOworICAgICAgICAg
ICAgICAgIGltcG9ydFNjcmlwdHModXJsKTsKKworICAgICAgICAgICAgICAgIC8vQWNjb3VudCBm
b3IgYW5vbnltb3VzIG1vZHVsZXMKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9h
ZChtb2R1bGVOYW1lKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0Lm9uRXJyb3IobWFrZUVycm9yKCdpbXBvcnRzY3JpcHRzJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydFNjcmlwdHMgZmFpbGVkIGZvciAnICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAnIGF0ICcgKyB1cmws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworICAgIGZ1bmN0aW9uIGdldEludGVyYWN0aXZlU2NyaXB0KCkgeworICAgICAgICBp
ZiAoaW50ZXJhY3RpdmVTY3JpcHQgJiYgaW50ZXJhY3RpdmVTY3JpcHQucmVhZHlTdGF0ZSA9PT0g
J2ludGVyYWN0aXZlJykgeworICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0Owor
ICAgICAgICB9CisKKyAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2Ny
aXB0KSB7CisgICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2
ZScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGludGVyYWN0aXZlU2NyaXB0ID0gc2NyaXB0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnRlcmFjdGl2
ZVNjcmlwdDsKKyAgICB9CisKKyAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIHNjcmlwdCBhdHRy
aWJ1dGUsIHdoaWNoIGNvdWxkIGFsc28gYWRqdXN0IHRoZSBiYXNlVXJsLgorICAgIGlmIChpc0Jy
b3dzZXIgJiYgIWNmZy5za2lwRGF0YU1haW4pIHsKKyAgICAgICAgLy9GaWd1cmUgb3V0IGJhc2VV
cmwuIEdldCBpdCBmcm9tIHRoZSBzY3JpcHQgdGFnIHdpdGggcmVxdWlyZS5qcyBpbiBpdC4KKyAg
ICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CisgICAgICAg
ICAgICAvL1NldCB0aGUgJ2hlYWQnIHdoZXJlIHdlIGNhbiBhcHBlbmQgY2hpbGRyZW4gYnkKKyAg
ICAgICAgICAgIC8vdXNpbmcgdGhlIHNjcmlwdCdzIHBhcmVudC4KKyAgICAgICAgICAgIGlmICgh
aGVhZCkgeworICAgICAgICAgICAgICAgIGhlYWQgPSBzY3JpcHQucGFyZW50Tm9kZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUg
dG8gc2V0IG1haW4gc2NyaXB0IGZvciB0aGUgcGFnZQorICAgICAgICAgICAgLy90byBsb2FkLiBJ
ZiBpdCBpcyB0aGVyZSwgdGhlIHBhdGggdG8gZGF0YSBtYWluIGJlY29tZXMgdGhlCisgICAgICAg
ICAgICAvL2Jhc2VVcmwsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldC4KKyAgICAgICAgICAgIGRh
dGFNYWluID0gc2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYWluJyk7CisgICAgICAgICAgICBp
ZiAoZGF0YU1haW4pIHsKKyAgICAgICAgICAgICAgICAvL1ByZXNlcnZlIGRhdGFNYWluIGluIGNh
c2UgaXQgaXMgYSBwYXRoIChpLmUuIGNvbnRhaW5zICc/JykKKyAgICAgICAgICAgICAgICBtYWlu
U2NyaXB0ID0gZGF0YU1haW47CisKKyAgICAgICAgICAgICAgICAvL1NldCBmaW5hbCBiYXNlVXJs
IGlmIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGFuIGV4cGxpY2l0IG9uZSwKKyAgICAgICAgICAgICAg
ICAvL2J1dCBvbmx5IGRvIHNvIGlmIHRoZSBkYXRhLW1haW4gdmFsdWUgaXMgbm90IGEgbG9hZGVy
IHBsdWdpbgorICAgICAgICAgICAgICAgIC8vbW9kdWxlIElELgorICAgICAgICAgICAgICAgIGlm
ICghY2ZnLmJhc2VVcmwgJiYgbWFpblNjcmlwdC5pbmRleE9mKCchJykgPT09IC0xKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4gZm9y
IHVzZSBhcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy9iYXNlVXJsLgorICAgICAgICAgICAg
ICAgICAgICBzcmMgPSBtYWluU2NyaXB0LnNwbGl0KCcvJyk7CisgICAgICAgICAgICAgICAgICAg
IG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSBz
cmMubGVuZ3RoID8gc3JjLmpvaW4oJy8nKSAgKyAnLycgOiAnLi8nOworCisgICAgICAgICAgICAg
ICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkgdHJhaWxpbmcgLmpzIHNpbmNlIG1haW5TY3JpcHQg
aXMgbm93CisgICAgICAgICAgICAgICAgLy9saWtlIGEgbW9kdWxlIG5hbWUuCisgICAgICAgICAg
ICAgICAgbWFpblNjcmlwdCA9IG1haW5TY3JpcHQucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycp
OworCisgICAgICAgICAgICAgICAgLy9JZiBtYWluU2NyaXB0IGlzIHN0aWxsIGEgcGF0aCwgZmFs
bCBiYWNrIHRvIGRhdGFNYWluCisgICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50
ZXN0KG1haW5TY3JpcHQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRh
TWFpbjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL1B1dCB0aGUgZGF0
YS1tYWluIHNjcmlwdCBpbiB0aGUgZmlsZXMgdG8gbG9hZC4KKyAgICAgICAgICAgICAgICBjZmcu
ZGVwcyA9IGNmZy5kZXBzID8gY2ZnLmRlcHMuY29uY2F0KG1haW5TY3JpcHQpIDogW21haW5TY3Jp
cHRdOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRs
ZXMgZGVmaW5pdGlvbnMgb2YgbW9kdWxlcy4gRGlmZmVycyBmcm9tCisgICAgICogcmVxdWlyZSgp
IGluIHRoYXQgYSBzdHJpbmcgZm9yIHRoZSBtb2R1bGUgc2hvdWxkIGJlIHRoZSBmaXJzdCBhcmd1
bWVudCwKKyAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgZGVwZW5kZW5j
aWVzIGFyZSBsb2FkZWQgc2hvdWxkCisgICAgICogcmV0dXJuIGEgdmFsdWUgdG8gZGVmaW5lIHRo
ZSBtb2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgYXJndW1lbnQncworICAgICAqIG5h
bWUuCisgICAgICovCisgICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNr
KSB7CisgICAgICAgIHZhciBub2RlLCBjb250ZXh0OworCisgICAgICAgIC8vQWxsb3cgZm9yIGFu
b255bW91cyBtb2R1bGVzCisgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHsK
KyAgICAgICAgICAgIC8vQWRqdXN0IGFyZ3MgYXBwcm9wcmlhdGVseQorICAgICAgICAgICAgY2Fs
bGJhY2sgPSBkZXBzOworICAgICAgICAgICAgZGVwcyA9IG5hbWU7CisgICAgICAgICAgICBuYW1l
ID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vVGhpcyBtb2R1bGUgbWF5IG5vdCBoYXZl
IGRlcGVuZGVuY2llcworICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykpIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrID0gZGVwczsKKyAgICAgICAgICAgIGRlcHMgPSBudWxsOworICAgICAgICB9CisK
KyAgICAgICAgLy9JZiBubyBuYW1lLCBhbmQgY2FsbGJhY2sgaXMgYSBmdW5jdGlvbiwgdGhlbiBm
aWd1cmUgb3V0IGlmIGl0IGEKKyAgICAgICAgLy9Db21tb25KUyB0aGluZyB3aXRoIGRlcGVuZGVu
Y2llcy4KKyAgICAgICAgaWYgKCFkZXBzICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CisgICAg
ICAgICAgICBkZXBzID0gW107CisgICAgICAgICAgICAvL1JlbW92ZSBjb21tZW50cyBmcm9tIHRo
ZSBjYWxsYmFjayBzdHJpbmcsCisgICAgICAgICAgICAvL2xvb2sgZm9yIHJlcXVpcmUgY2FsbHMs
IGFuZCBwdWxsIHRoZW0gaW50byB0aGUgZGVwZW5kZW5jaWVzLAorICAgICAgICAgICAgLy9idXQg
b25seSBpZiB0aGVyZSBhcmUgZnVuY3Rpb24gYXJncy4KKyAgICAgICAgICAgIGlmIChjYWxsYmFj
ay5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaworICAgICAgICAgICAgICAgICAg
ICAudG9TdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UmVnRXhw
LCBjb21tZW50UmVwbGFjZSkKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY2pzUmVxdWly
ZVJlZ0V4cCwgZnVuY3Rpb24gKG1hdGNoLCBkZXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlcHMucHVzaChkZXApOworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
ICAgIC8vTWF5IGJlIGEgQ29tbW9uSlMgdGhpbmcgZXZlbiB3aXRob3V0IHJlcXVpcmUgY2FsbHMs
IGJ1dCBzdGlsbAorICAgICAgICAgICAgICAgIC8vY291bGQgdXNlIGV4cG9ydHMsIGFuZCBtb2R1
bGUuIEF2b2lkIGRvaW5nIGV4cG9ydHMgYW5kIG1vZHVsZQorICAgICAgICAgICAgICAgIC8vd29y
ayB0aG91Z2ggaWYgaXQganVzdCBuZWVkcyByZXF1aXJlLgorICAgICAgICAgICAgICAgIC8vUkVR
VUlSRVMgdGhlIGZ1bmN0aW9uIHRvIGV4cGVjdCB0aGUgQ29tbW9uSlMgdmFyaWFibGVzIGluIHRo
ZQorICAgICAgICAgICAgICAgIC8vb3JkZXIgbGlzdGVkIGJlbG93LgorICAgICAgICAgICAgICAg
IGRlcHMgPSAoY2FsbGJhY2subGVuZ3RoID09PSAxID8gWydyZXF1aXJlJ10gOiBbJ3JlcXVpcmUn
LCAnZXhwb3J0cycsICdtb2R1bGUnXSkuY29uY2F0KGRlcHMpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy9JZiBpbiBJRSA2LTggYW5kIGhpdCBhbiBhbm9ueW1vdXMgZGVm
aW5lKCkgY2FsbCwgZG8gdGhlIGludGVyYWN0aXZlCisgICAgICAgIC8vd29yay4KKyAgICAgICAg
aWYgKHVzZUludGVyYWN0aXZlKSB7CisgICAgICAgICAgICBub2RlID0gY3VycmVudGx5QWRkaW5n
U2NyaXB0IHx8IGdldEludGVyYWN0aXZlU2NyaXB0KCk7CisgICAgICAgICAgICBpZiAobm9kZSkg
eworICAgICAgICAgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgICAgICAgICBuYW1l
ID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dHNbbm9kZS5nZXRBdHRyaWJ1
dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvL0Fsd2F5cyBzYXZlIG9mZiBldmFsdWF0aW5nIHRoZSBkZWYgY2FsbCB1bnRpbCB0
aGUgc2NyaXB0IG9ubG9hZCBoYW5kbGVyLgorICAgICAgICAvL1RoaXMgYWxsb3dzIG11bHRpcGxl
IG1vZHVsZXMgdG8gYmUgaW4gYSBmaWxlIHdpdGhvdXQgcHJlbWF0dXJlbHkKKyAgICAgICAgLy90
cmFjaW5nIGRlcGVuZGVuY2llcywgYW5kIGFsbG93cyBmb3IgYW5vbnltb3VzIG1vZHVsZSBzdXBw
b3J0LAorICAgICAgICAvL3doZXJlIHRoZSBtb2R1bGUgbmFtZSBpcyBub3Qga25vd24gdW50aWwg
dGhlIHNjcmlwdCBvbmxvYWQgZXZlbnQKKyAgICAgICAgLy9vY2N1cnMuIElmIG5vIGNvbnRleHQs
IHVzZSB0aGUgZ2xvYmFsIHF1ZXVlLCBhbmQgZ2V0IGl0IHByb2Nlc3NlZAorICAgICAgICAvL2lu
IHRoZSBvbnNjcmlwdCBsb2FkIGNhbGxiYWNrLgorICAgICAgICBpZiAoY29udGV4dCkgeworICAg
ICAgICAgICAgY29udGV4dC5kZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwor
ICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtuYW1lXSA9IHRydWU7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxs
YmFja10pOworICAgICAgICB9CisgICAgfTsKKworICAgIGRlZmluZS5hbWQgPSB7CisgICAgICAg
IGpRdWVyeTogdHJ1ZQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlcyB0aGUgdGV4
dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKKyAgICAgKiB0
byB1c2UgYSBiZXR0ZXIsIGVudmlyb25tZW50LXNwZWNpZmljIGNhbGwuIE9ubHkgdXNlZCBmb3Ig
dHJhbnNwaWxpbmcKKyAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZvciBwbGFpbiBKUyBtb2R1
bGVzLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1dGUvZXZh
bHVhdGUuCisgICAgICovCisgICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAodGV4dCkgeworICAgICAg
ICAvKmpzbGludCBldmlsOiB0cnVlICovCisgICAgICAgIHJldHVybiBldmFsKHRleHQpOworICAg
IH07CisKKyAgICAvL1NldCB1cCB3aXRoIGNvbmZpZyBpbmZvLgorICAgIHJlcShjZmcpOworfSh0
aGlzLCAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogc2V0
VGltZW91dCkpKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9k
dWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdlYTE4
MDE2MTIxMjZmMWRiNjVjZTA1NjhmMmEwMjM3M2I5M2I1NQotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXgu
Y3NzCkBAIC0wLDAgKzEsMzc4IEBACitodG1sLAorYm9keSB7CisgICAgbWFyZ2luOiAwOworICAg
IHBhZGRpbmc6IDA7Cit9CisKK2J1dHRvbiB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6
IDA7CisgICAgYm9yZGVyOiAwOworICAgIGJhY2tncm91bmQ6IG5vbmU7CisgICAgZm9udC1zaXpl
OiAxMDAlOworICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgICBmb250LWZhbWlseTog
aW5oZXJpdDsKKyAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICBjb2xvcjogaW5oZXJpdDsK
KyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKKyAg
ICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LWZvbnQtc21v
b3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cit9
CisKK2JvZHkgeworICAgIGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBB
cmlhbCwgc2Fucy1zZXJpZjsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dyb3Vu
ZDogI2Y1ZjVmNTsKKyAgICBjb2xvcjogIzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4Owor
ICAgIG1heC13aWR0aDogNTUwcHg7CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1m
b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50
aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQtd2Vp
Z2h0OiAzMDA7Cit9CisKK2J1dHRvbiwKK2lucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAgIG91
dGxpbmU6IG5vbmU7Cit9CisKKy5oaWRkZW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyN0
b2RvYXBwIHsKKyAgICBiYWNrZ3JvdW5kOiAjZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4
IDA7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAw
IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEo
MCwgMCwgMCwgMC4xKTsKK30KKworI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vo
b2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOwor
ICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisjdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRl
ciB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAg
Y29sb3I6ICNlNmU2ZTY7Cit9CisKKyN0b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlciB7
CisgICAgZm9udC1zdHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29s
b3I6ICNlNmU2ZTY7Cit9CisKKyN0b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgdG9wOiAtMTU1cHg7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAxMDBw
eDsKKyAgICBmb250LXdlaWdodDogMTAwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBj
b2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xNSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRlcmlu
Zzogb3B0aW1pemVMZWdpYmlsaXR5OworICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXpl
TGVnaWJpbGl0eTsKKyAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQor
CisjbmV3LXRvZG8sCisuZWRpdCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdp
bjogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1m
YW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1oZWln
aHQ6IDEuNGVtOworICAgIGJvcmRlcjogMDsKKyAgICBvdXRsaW5lOiBub25lOworICAgIGNvbG9y
OiBpbmhlcml0OworICAgIHBhZGRpbmc6IDZweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5
OworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7
CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5n
OiBhbnRpYWxpYXNlZDsKKyAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAg
ICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cit9CisKKyNuZXctdG9kbyB7CisgICAgcGFk
ZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgYmFja2dy
b3VuZDogcmdiYSgwLCAwLCAwLCAwLjAwMyk7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMnB4
IDFweCByZ2JhKDAsMCwwLDAuMDMpOworfQorCisjbWFpbiB7CisgICAgcG9zaXRpb246IHJlbGF0
aXZlOworICAgIHotaW5kZXg6IDI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7
Cit9CisKK2xhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddIHsKKyAgICBkaXNwbGF5OiBub25lOworfQor
CisjdG9nZ2xlLWFsbCB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTU1cHg7
CisgICAgbGVmdDogLTEycHg7CisgICAgd2lkdGg6IDYwcHg7CisgICAgaGVpZ2h0OiAzNHB4Owor
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZh
cmkgKi8KK30KKworI3RvZ2dsZS1hbGw6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsKKyAg
ICBmb250LXNpemU6IDIycHg7CisgICAgY29sb3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzogMTBw
eCAyN3B4IDEwcHggMjdweDsKK30KKworI3RvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgeworICAg
IGNvbG9yOiAjNzM3MzczOworfQorCisjdG9kby1saXN0IHsKKyAgICBtYXJnaW46IDA7CisgICAg
cGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxlOiBub25lOworfQorCisjdG9kby1saXN0IGxpIHsK
KyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGJvcmRl
ci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOworfQorCisjdG9kby1saXN0IGxpOmxhc3QtY2hp
bGQgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGlu
ZyB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKKyAgICBwYWRkaW5nOiAwOworfQorCisjdG9k
by1saXN0IGxpLmVkaXRpbmcgLmVkaXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHdpZHRo
OiA1MDZweDsKKyAgICBwYWRkaW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OworICAgIG1hcmdpbjog
MCAwIDAgNDNweDsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKKyAgICBkaXNw
bGF5OiBub25lOworfQorCisjdG9kby1saXN0IGxpIC50b2dnbGUgeworICAgIHRleHQtYWxpZ246
IGNlbnRlcjsKKyAgICB3aWR0aDogNDBweDsKKyAgICAvKiBhdXRvLCBzaW5jZSBub24tV2ViS2l0
IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCisgICAgaGVpZ2h0OiBh
dXRvOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgYm90dG9tOiAw
OworICAgIG1hcmdpbjogYXV0byAwOworICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFy
aSAqLworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBhcHBlYXJhbmNlOiBub25l
OworfQorCisjdG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVybCgn
ZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48
Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWRlZGVk
IiBzdHJva2Utd2lkdGg9IjMiLz48L3N2Zz4nKTsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xl
OmNoZWNrZWQ6YWZ0ZXIgeworICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0
ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVp
Z2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUw
IiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMiLz48
cGF0aCBmaWxsPSIjNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01
MnoiLz48L3N2Zz4nKTsKK30KKworI3RvZG8tbGlzdCBsaSBsYWJlbCB7CisgICAgd2hpdGUtc3Bh
Y2U6IHByZTsKKyAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOworICAgIHBhZGRpbmc6IDE1cHgg
NjBweCAxNXB4IDE1cHg7CisgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CisgICAgZGlzcGxheTogYmxv
Y2s7CisgICAgbGluZS1oZWlnaHQ6IDEuMjsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRzOwor
fQorCisjdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7CisgICAgY29sb3I6ICNkOWQ5ZDk7
CisgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKyN0b2RvLWxpc3QgbGkg
LmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHRvcDogMDsKKyAgICByaWdodDogMTBweDsKKyAgICBib3R0b206IDA7CisgICAgd2lkdGg6
IDQwcHg7CisgICAgaGVpZ2h0OiA0MHB4OworICAgIG1hcmdpbjogYXV0byAwOworICAgIGZvbnQt
c2l6ZTogMzBweDsKKyAgICBjb2xvcjogI2NjOWE5YTsKKyAgICBtYXJnaW4tYm90dG9tOiAxMXB4
OworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Cit9CisKKyN0b2RvLWxpc3Qg
bGkgLmRlc3Ryb3k6aG92ZXIgeworICAgIGNvbG9yOiAjYWY1YjVlOworfQorCisjdG9kby1saXN0
IGxpIC5kZXN0cm95OmFmdGVyIHsKKyAgICBjb250ZW50OiAnw5cnOworfQorCisjdG9kby1saXN0
IGxpOmhvdmVyIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKworI3RvZG8tbGlz
dCBsaSAuZWRpdCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0
aW5nOmxhc3QtY2hpbGQgeworICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Cit9CisKKyNmb290ZXIg
eworICAgIGNvbG9yOiAjNzc3OworICAgIHBhZGRpbmc6IDEwcHggMTVweDsKKyAgICBoZWlnaHQ6
IDIwcHg7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xp
ZCAjZTZlNmU2OworfQorCisjZm9vdGVyOmJlZm9yZSB7CisgICAgY29udGVudDogJyc7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGJvdHRvbTogMDsKKyAgICBs
ZWZ0OiAwOworICAgIGhlaWdodDogNTBweDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIGJv
eC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAg
MCA4cHggMCAtM3B4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCA5cHggMXB4IC0zcHggcmdi
YSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2ZjZmNiwK
KyAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOworfQor
CisjdG9kby1jb3VudCB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgdGV4dC1hbGlnbjogbGVmdDsK
K30KKworI3RvZG8tY291bnQgc3Ryb25nIHsKKyAgICBmb250LXdlaWdodDogMzAwOworfQorCisj
ZmlsdGVycyB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHls
ZTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgbGVm
dDogMDsKK30KKworI2ZpbHRlcnMgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30KKworI2Zp
bHRlcnMgbGkgYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiAzcHg7CisgICAg
cGFkZGluZzogM3B4IDdweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgYm9yZGVy
OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisj
ZmlsdGVycyBsaSBhLnNlbGVjdGVkLAorI2ZpbHRlcnMgbGkgYTpob3ZlciB7CisgICAgYm9yZGVy
LWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjEpOworfQorCisjZmlsdGVycyBsaSBhLnNlbGVj
dGVkIHsKKyAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Cit9CisKKyNj
bGVhci1jb21wbGV0ZWQsCitodG1sICNjbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKKyAgICBmbG9h
dDogcmlnaHQ7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGxpbmUtaGVpZ2h0OiAyMHB4
OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAg
cG9zaXRpb246IHJlbGF0aXZlOworfQorCisjY2xlYXItY29tcGxldGVkOmhvdmVyIHsKKyAgICB0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworI2luZm8geworICAgIG1hcmdpbjogNjVw
eCBhdXRvIDA7CisgICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9udC1zaXplOiAxMHB4OworICAg
IHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgICB0ZXh0
LWFsaWduOiBjZW50ZXI7Cit9CisKKyNpbmZvIHAgeworICAgIGxpbmUtaGVpZ2h0OiAxOworfQor
CisjaW5mbyBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5v
bmU7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKworI2luZm8gYTpob3ZlciB7CisgICAgdGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1vdmUgYmFj
a2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5IHNp
bmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAorKi8KK0BtZWRpYSBzY3JlZW4g
YW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgeworICAgICN0b2dnbGUtYWxs
LAorICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGJhY2tncm91bmQ6IG5vbmU7
CisgICAgfQorCisgICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgaGVpZ2h0OiA0
MHB4OworICAgIH0KKworICAgICN0b2dnbGUtYWxsIHsKKyAgICAgICAgLXdlYmtpdC10cmFuc2Zv
cm06IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKKyAg
ICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgICAgICBhcHBlYXJhbmNlOiBub25l
OworICAgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7CisgICAgI2Zvb3RlciB7
CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAjZmlsdGVycyB7CisgICAgICAg
IGJvdHRvbTogMTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2UuanNvbiBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcGFja2FnZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVmYzFkMGQ1OWMwZmIyOWE3ODJkZWEwN2E1YzE1MzI1MmRjMTRkNDEKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9k
b212Yy1hcHAtY3NzL3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDEwMyBAQAoreworICAiX2FyZ3Mi
OiBbCisgICAgWworICAgICAgeworICAgICAgICAicmF3IjogInRvZG9tdmMtYXBwLWNzc0BeMS4w
LjAiLAorICAgICAgICAic2NvcGUiOiBudWxsLAorICAgICAgICAiZXNjYXBlZE5hbWUiOiAidG9k
b212Yy1hcHAtY3NzIiwKKyAgICAgICAgIm5hbWUiOiAidG9kb212Yy1hcHAtY3NzIiwKKyAgICAg
ICAgInJhd1NwZWMiOiAiXjEuMC4wIiwKKyAgICAgICAgInNwZWMiOiAiPj0xLjAuMCA8Mi4wLjAi
LAorICAgICAgICAidHlwZSI6ICJyYW5nZSIKKyAgICAgIH0sCisgICAgICAiL1VzZXJzL2FkZHlv
L0Rlc2t0b3AvU3BlZWRvbWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodCIKKyAgICBdCisgIF0sCisgICJfZnJvbSI6ICJ0b2RvbXZjLWFwcC1jc3NAPj0x
LjAuMCA8Mi4wLjAiLAorICAiX2lkIjogInRvZG9tdmMtYXBwLWNzc0AxLjAuNCIsCisgICJfaW5D
YWNoZSI6IHRydWUsCisgICJfbG9jYXRpb24iOiAiL3RvZG9tdmMtYXBwLWNzcyIsCisgICJfbm9k
ZVZlcnNpb24iOiAiMC4xMi4wIiwKKyAgIl9ucG1Vc2VyIjogeworICAgICJuYW1lIjogInNpbmRy
ZXNvcmh1cyIsCisgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20iCisgIH0sCisg
ICJfbnBtVmVyc2lvbiI6ICIyLjUuMSIsCisgICJfcGhhbnRvbUNoaWxkcmVuIjoge30sCisgICJf
cmVxdWVzdGVkIjogeworICAgICJyYXciOiAidG9kb212Yy1hcHAtY3NzQF4xLjAuMCIsCisgICAg
InNjb3BlIjogbnVsbCwKKyAgICAiZXNjYXBlZE5hbWUiOiAidG9kb212Yy1hcHAtY3NzIiwKKyAg
ICAibmFtZSI6ICJ0b2RvbXZjLWFwcC1jc3MiLAorICAgICJyYXdTcGVjIjogIl4xLjAuMCIsCisg
ICAgInNwZWMiOiAiPj0xLjAuMCA8Mi4wLjAiLAorICAgICJ0eXBlIjogInJhbmdlIgorICB9LAor
ICAiX3JlcXVpcmVkQnkiOiBbCisgICAgIi8iCisgIF0sCisgICJfcmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1hcHAtY3NzLy0vdG9kb212Yy1hcHAtY3NzLTEu
MC40LnRneiIsCisgICJfc2hhc3VtIjogImQyNTI5Mjc5YTZkYTViZWZiMDZiNTVjMGMzMjRjNWZj
ZmQ5NGQ2NTYiLAorICAiX3Nocmlua3dyYXAiOiBudWxsLAorICAiX3NwZWMiOiAidG9kb212Yy1h
cHAtY3NzQF4xLjAuMCIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL0Rlc2t0b3AvU3BlZWRv
bWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodCIsCisg
ICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiU2luZHJlIFNvcmh1cyIsCisgICAgImVtYWlsIjog
InNpbmRyZXNvcmh1c0BnbWFpbC5jb20iLAorICAgICJ1cmwiOiAic2luZHJlc29yaHVzLmNvbSIK
KyAgfSwKKyAgImJ1Z3MiOiB7CisgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGFzdGVq
cy90b2RvbXZjLWFwcC1jc3MvaXNzdWVzIgorICB9LAorICAiZGVwZW5kZW5jaWVzIjoge30sCisg
ICJkZXNjcmlwdGlvbiI6ICJDU1MgZm9yIFRvZG9NVkMgYXBwcyIsCisgICJkZXZEZXBlbmRlbmNp
ZXMiOiB7fSwKKyAgImRpcmVjdG9yaWVzIjoge30sCisgICJkaXN0IjogeworICAgICJzaGFzdW0i
OiAiZDI1MjkyNzlhNmRhNWJlZmIwNmI1NWMwYzMyNGM1ZmNmZDk0ZDY1NiIsCisgICAgInRhcmJh
bGwiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1hcHAtY3NzLy0vdG9kb212
Yy1hcHAtY3NzLTEuMC40LnRneiIKKyAgfSwKKyAgImZpbGVzIjogWworICAgICJpbmRleC5jc3Mi
CisgIF0sCisgICJnaXRIZWFkIjogIjFlNGUzODg4NGEzNTE5M2VhZjE4MDhhNWJhNDQ0MjE4MzI4
NjcxODQiLAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212
Yy1hcHAtY3NzIiwKKyAgImtleXdvcmRzIjogWworICAgICJ0b2RvbXZjIiwKKyAgICAidGFzdGVq
cyIsCisgICAgImFwcCIsCisgICAgInRvZG8iLAorICAgICJ0ZW1wbGF0ZSIsCisgICAgImNzcyIs
CisgICAgInN0eWxlIiwKKyAgICAic3R5bGVzaGVldCIKKyAgXSwKKyAgImxpY2Vuc2UiOiAiQ0Mt
QlktNC4wIiwKKyAgIm1haW50YWluZXJzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogInNpbmRy
ZXNvcmh1cyIsCisgICAgICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgICB9
LAorICAgIHsKKyAgICAgICJuYW1lIjogImFkZHlvc21hbmkiLAorICAgICAgImVtYWlsIjogImFk
ZHlvc21hbmlAZ21haWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAicGFzc3ki
LAorICAgICAgImVtYWlsIjogInBoYXJ0aWdAcmRyZWkubmV0IgorICAgIH0sCisgICAgeworICAg
ICAgIm5hbWUiOiAic3RlcGhlbnBsdXNwbHVzIiwKKyAgICAgICJlbWFpbCI6ICJzYXdjaHVrQGdt
YWlsLmNvbSIKKyAgICB9CisgIF0sCisgICJuYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisgICJv
cHRpb25hbERlcGVuZGVuY2llcyI6IHt9LAorICAicmVhZG1lIjogIkVSUk9SOiBObyBSRUFETUUg
ZGF0YSBmb3VuZCEiLAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJnaXQiLAorICAg
ICJ1cmwiOiAiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtYXBwLWNzcy5n
aXQiCisgIH0sCisgICJzY3JpcHRzIjoge30sCisgICJ2ZXJzaW9uIjogIjEuMC40IgorfQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBw
LWNzcy9yZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9k
b212Yy1hcHAtY3NzL3JlYWRtZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGRiZWJmMDI0YzA0YWViNjAyMGNh
ZjEzMWEyZWQwMzE4OTA4MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQKQEAgLTAsMCArMSwy
OCBAQAorIyB0b2RvbXZjLWFwcC1jc3MKKworPiBDU1MgZm9yIFRvZG9NVkMgYXBwcworCishW10o
c2NyZWVuc2hvdC5wbmcpCisKKworIyMgSW5zdGFsbAorCisKK2BgYAorJCBucG0gaW5zdGFsbCAt
LXNhdmUgdG9kb212Yy1hcHAtY3NzCitgYGAKKworCisjIyBHZXR0aW5nIHN0YXJ0ZWQKKworYGBg
aHRtbAorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1h
cHAtY3NzL2luZGV4LmNzcyI+CitgYGAKKworU2VlIHRoZSBbVG9kb01WQyBhcHAgdGVtcGxhdGVd
KGh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtYXBwLXRlbXBsYXRlKS4KKworCisK
KyMjIExpY2Vuc2UKKworPGEgcmVsPSJsaWNlbnNlIiBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21t
b25zLm9yZy9saWNlbnNlcy9ieS80LjAvZGVlZC5lbl9VUyI+PGltZyBhbHQ9IkNyZWF0aXZlIENv
bW1vbnMgTGljZW5zZSIgc3R5bGU9ImJvcmRlci13aWR0aDowIiBzcmM9Imh0dHA6Ly9pLmNyZWF0
aXZlY29tbW9ucy5vcmcvbC9ieS80LjAvODB4MTUucG5nIiAvPjwvYT48YnIgLz5UaGlzIDxzcGFu
IHhtbG5zOmRjdD0iaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIgaHJlZj0iaHR0cDovL3B1cmwu
b3JnL2RjL2RjbWl0eXBlL0ludGVyYWN0aXZlUmVzb3VyY2UiIHJlbD0iZGN0OnR5cGUiPndvcms8
L3NwYW4+IGJ5IDxhIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIGhy
ZWY9Imh0dHA6Ly9zaW5kcmVzb3JodXMuY29tIiBwcm9wZXJ0eT0iY2M6YXR0cmlidXRpb25OYW1l
IiByZWw9ImNjOmF0dHJpYnV0aW9uVVJMIj5TaW5kcmUgU29yaHVzPC9hPiBpcyBsaWNlbnNlZCB1
bmRlciBhIDxhIHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcv
bGljZW5zZXMvYnkvNC4wL2RlZWQuZW5fVVMiPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24g
NC4wIEludGVybmF0aW9uYWwgTGljZW5zZTwvYT4uCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGQyNWQzYzg0YWM2YzZhZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9iYXNlLmNzcwpAQCAtMCwwICsxLDE0MSBAQAoraHIgeworICAgIG1hcmdpbjogMjBw
eCAwOworICAgIGJvcmRlcjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNjNWM1YzU7
CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjZjdmN2Y3OworfQorCisubGVhcm4gYSB7
CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cisg
ICAgY29sb3I6ICNiODNmNDU7Cit9CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29y
YXRpb246IHVuZGVybGluZTsKKyAgICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAor
LmxlYXJuIGg0LAorLmxlYXJuIGg1IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdl
aWdodDogNTAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisK
Ky5sZWFybiBoMyB7CisgICAgZm9udC1zaXplOiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAg
IGZvbnQtc2l6ZTogMThweDsKK30KKworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAw
OworICAgIGZvbnQtc2l6ZTogMTRweDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAw
OworICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5l
LWhlaWdodDogMjBweDsKK30KKworLmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAg
ICBmb250LXdlaWdodDogMzAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRv
cDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworfQorCisjaXNzdWUtY291bnQgeworICAgIGRp
c3BsYXk6IG5vbmU7Cit9CisKKy5xdW90ZSB7CisgICAgYm9yZGVyOiBub25lOworICAgIG1hcmdp
bjogMjBweCAwIDYwcHggMDsKK30KKworLnF1b3RlIHAgeworICAgIGZvbnQtc3R5bGU6IGl0YWxp
YzsKK30KKworLnF1b3RlIHA6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4oCcJzsKKyAgICBmb250
LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICB0b3A6IC0yMHB4OworICAgIGxlZnQ6IDNweDsKK30KKworLnF1b3RlIHA6YWZ0ZXIgewor
ICAgIGNvbnRlbnQ6ICfigJ0nOworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAu
MTU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQycHg7CisgICAgcmln
aHQ6IDNweDsKK30KKworLnF1b3RlIGZvb3RlciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIGJvdHRvbTogLTQwcHg7CisgICAgcmlnaHQ6IDA7Cit9CisKKy5xdW90ZSBmb290ZXIgaW1n
IHsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgYSB7CisgICAg
bWFyZ2luLWxlZnQ6IDVweDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuc3Bl
ZWNoLWJ1YmJsZSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHBhZGRpbmc6IDEwcHg7
CisgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMDQpOworICAgIGJvcmRlci1yYWRpdXM6
IDVweDsKK30KKworLnNwZWVjaC1idWJibGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICcnOworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDEwMCU7CisgICAgcmlnaHQ6IDMwcHg7Cisg
ICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci10b3AtY29sb3I6
IHJnYmEoMCwgMCwgMCwgLjA0KTsKK30KKworLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHdpZHRoOiAyNzJweDsKKyAgICB0b3A6IDhweDsKKyAgICBs
ZWZ0OiAtMzAwcHg7CisgICAgcGFkZGluZzogMTBweDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7CisgICAgdHJh
bnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsK
K30KKworQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7CisgICAgLmxlYXJuLWJhciB7CisgICAg
ICAgIHdpZHRoOiBhdXRvOworICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4OworICAgIH0KKwor
ICAgIC5sZWFybi1iYXIgPiAubGVhcm4geworICAgICAgICBsZWZ0OiA4cHg7CisgICAgfQorfQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMt
Y29tbW9uL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9k
b212Yy1jb21tb24vYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MWUwMDZiYzUwMmRkYzRjNzRmNDdiZDEz
YTgzOTIyNzdmODMwZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKQEAgLTAsMCArMSwyNDkgQEAK
Ky8qIGdsb2JhbCBfICovCisoZnVuY3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAg
IC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi8KKyAgICAvLyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUg
TW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJzY29yZWpzLm9yZworICAgIHZhciBfID0g
KGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVmYXVsdHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7
CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHZhciBhcmdzSW5kZXggPSAxLCBh
cmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJnc0luZGV4IDwgYXJnc0xlbmd0aDsgYXJn
c0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIgaXRlcmFibGUgPSBhcmd1bWVudHNbYXJn
c0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICAvLyBCeSBk
ZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMsIGNo
YW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBh
bHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAgICBfLnRlbXBsYXRlU2V0dGluZ3MgPSB7Cisg
ICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShbXHNcU10rPyklPi9nLAorICAgICAgICAgICAg
aW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2csCisgICAgICAgICAgICBlc2NhcGUgICAg
ICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAgICB9OworCisgICAgICAgIC8vIFdoZW4gY3Vz
dG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUg
YW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdl
eCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAgICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRj
aC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87CisKKyAgICAgICAgLy8gQ2VydGFpbiBj
aGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRv
IGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwuCisgICAgICAgIHZhciBlc2NhcGVzID0gewor
ICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAgICAgICAgICAgICdcXCc6ICAgICAnXFwnLAor
ICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAgICAgICAgICAgICdcbic6ICAgICAnbicsCisg
ICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAgICAgICAgICAgJ1x1MjAyOCc6ICd1MjAyOCcs
CisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JworICAgICAgICB9OworCisgICAgICAgIHZh
ciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4fFx1MjAyOS9nOworCisgICAgICAgIC8v
IEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1w
bGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFy
Yml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSwKKyAgICAgICAgLy8gYW5k
IGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCisgICAg
ICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBkYXRhLCBzZXR0aW5ncykgeworICAgICAg
ICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAgIHNldHRpbmdzID0gXy5kZWZhdWx0cyh7fSwg
c2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisKKyAgICAgICAgICAgIC8vIENvbWJpbmUg
ZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgor
ICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVnRXhwKFsKKyAgICAgICAgICAgICAgICAo
c2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0
dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAgICAgIChz
ZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2UKKyAgICAgICAgICAgIF0uam9pbign
fCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAgICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUg
c291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KKyAgICAgICAg
ICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7Cisg
ICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwg
aW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2Ug
Kz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAucmVwbGFj
ZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hd
OyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2Nh
cGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlu
dGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgi
ICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStcbiciOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
c291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBz
b3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBz
cGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgorICAgICAgICAgICAg
aWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0gJ3dpdGgob2JqfHx7fSl7XG4nICsgc291
cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9
QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAgICAgICAgICAgInByaW50PWZ1bmN0aW9u
KCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsKKyAgICAgICAgICAgICAgICBz
b3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAn
XycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAg
ZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJldHVybiByZW5kZXIoZGF0YSwgXyk7CisgICAg
ICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8pOworICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29u
dmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgICAgICAgICAgdGVtcGxhdGUuc291cmNl
ID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFibGUgfHwgJ29iaicpICsgJyl7XG4nICsg
c291cmNlICsgJ30nOworCisgICAgICAgICAgICByZXR1cm4gdGVtcGxhdGU7CisgICAgICAgIH07
CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSkoe30pOworCisgICAgaWYgKGxvY2F0aW9uLmhv
c3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7CisgICAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIs
YSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsK
KyAgICAgICAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5l
dyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksCisgICAgICAgIG09cy5nZXRFbGVtZW50c0J5
VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3Jl
KGEsbSkKKyAgICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdodHRwczovL3d3dy5n
b29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpOworICAgICAgICBnYSgnY3Jl
YXRlJywgJ1VBLTMxMDgxMDYyLTEnLCAnYXV0bycpOworICAgICAgICBnYSgnc2VuZCcsICdwYWdl
dmlldycpOworICAgIH0KKyAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqLworCisgICAgZnVuY3Rp
b24gcmVkaXJlY3QoKSB7CisgICAgICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3Rhc3Rl
anMuZ2l0aHViLmlvJykgeworICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IGxvY2F0aW9uLmhy
ZWYucmVwbGFjZSgndGFzdGVqcy5naXRodWIuaW8vdG9kb212YycsICd0b2RvbXZjLmNvbScpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluZFJvb3QoKSB7CisgICAgICAgIHZh
ciBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKCdleGFtcGxlcy8nKTsKKyAgICAgICAgcmV0
dXJuIGxvY2F0aW9uLmhyZWYuc3Vic3RyKDAsIGJhc2UpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGdldEZpbGUoZmlsZSwgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKCFsb2NhdGlvbi5ob3N0KSB7
CisgICAgICAgICAgICByZXR1cm4gY29uc29sZS5pbmZvKCdNaXNzIHRoZSBpbmZvIGJhcj8gUnVu
IFRvZG9NVkMgZnJvbSBhIHNlcnZlciB0byBhdm9pZCBhIGNyb3NzLW9yaWdpbiBlcnJvci4nKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKwor
ICAgICAgICB4aHIub3BlbignR0VUJywgZmluZFJvb3QoKSArIGZpbGUsIHRydWUpOworICAgICAg
ICB4aHIuc2VuZCgpOworCisgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIGNhbGxiYWNrKSB7CisgICAgICAgICAg
ICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisgICAgfQorCisgICAgZnVuY3Rpb24gTGVhcm4obGVhcm5KU09OLCBjb25maWcpIHsKKyAg
ICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJuKSkgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
dGVtcGxhdGUsIGZyYW1ld29yazsKKworICAgICAgICBpZiAodHlwZW9mIGxlYXJuSlNPTiAhPT0g
J29iamVjdCcpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGVhcm5KU09O
ID0gSlNPTi5wYXJzZShsZWFybkpTT04pOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChjb25maWcpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gY29uZmlnLnRlbXBsYXRlOwor
ICAgICAgICAgICAgZnJhbWV3b3JrID0gY29uZmlnLmZyYW1ld29yazsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghdGVtcGxhdGUgJiYgbGVhcm5KU09OLnRlbXBsYXRlcykgeworICAgICAgICAg
ICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVzLnRvZG9tdmM7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIWZyYW1ld29yayAmJiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1m
cmFtZXdvcmtdJykpIHsKKyAgICAgICAgICAgIGZyYW1ld29yayA9IGRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKS5kYXRhc2V0LmZyYW1ld29yazsKKyAgICAgICAgfQor
CisgICAgICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKKworICAgICAgICBpZiAobGVhcm5K
U09OLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNP
Ti5iYWNrZW5kOworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBm
cmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCh7CisgICAgICAgICAgICAgICAgYmFj
a2VuZDogdHJ1ZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVhcm5KU09O
W2ZyYW1ld29ya10pIHsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNP
TltmcmFtZXdvcmtdOworICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtKU09OLmlzc3VlTGFiZWwg
PSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVuZCgpOworICAgICAgICB9CisKKyAg
ICAgICAgdGhpcy5mZXRjaElzc3VlQ291bnQoKTsKKyAgICB9CisKKyAgICBMZWFybi5wcm90b3R5
cGUuYXBwZW5kID0gZnVuY3Rpb24gKG9wdHMpIHsKKyAgICAgICAgdmFyIGFzaWRlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKKyAgICAgICAgYXNpZGUuaW5uZXJIVE1MID0gXy50
ZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1ld29ya0pTT04pOworICAgICAgICBhc2lk
ZS5jbGFzc05hbWUgPSAnbGVhcm4nOworCisgICAgICAgIGlmIChvcHRzICYmIG9wdHMuYmFja2Vu
ZCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGRlbW8gbGluaworICAgICAgICAgICAgdmFyIHNv
dXJjZUxpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvcignLnNvdXJjZS1saW5rcycpOworICAgICAg
ICAgICAgdmFyIGhlYWRpbmcgPSBzb3VyY2VMaW5rcy5maXJzdEVsZW1lbnRDaGlsZDsKKyAgICAg
ICAgICAgIHZhciBzb3VyY2VMaW5rID0gc291cmNlTGlua3MubGFzdEVsZW1lbnRDaGlsZDsKKyAg
ICAgICAgICAgIC8vIENvcnJlY3QgbGluayBwYXRoCisgICAgICAgICAgICB2YXIgaHJlZiA9IHNv
dXJjZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7CisgICAgICAgICAgICBzb3VyY2VMaW5rLnNl
dEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYuc3Vic3RyKGhyZWYubGFzdEluZGV4T2YoJ2h0dHAnKSkp
OworICAgICAgICAgICAgc291cmNlTGlua3MuaW5uZXJIVE1MID0gaGVhZGluZy5vdXRlckhUTUwg
KyBzb3VyY2VMaW5rLm91dGVySFRNTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAgICAgICAgIHZhciBkZW1vTGlua3MgPSBhc2lkZS5x
dWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5rJyk7CisgICAgICAgICAgICBBcnJheS5wcm90b3R5
cGUuZm9yRWFjaC5jYWxsKGRlbW9MaW5rcywgZnVuY3Rpb24gKGRlbW9MaW5rKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGRlbW9MaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpLnN1YnN0cigwLCA0KSAh
PT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbW9MaW5rLnNldEF0dHJpYnV0ZSgn
aHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBkb2N1
bWVudC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSArICcgbGVhcm4t
YmFyJykudHJpbSgpOworICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50SFRNTCgn
YWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVySFRNTCk7CisgICAgfTsKKworICAgIExlYXJuLnByb3Rv
dHlwZS5mZXRjaElzc3VlQ291bnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpc3N1ZUxp
bmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291bnQtbGluaycpOworICAgICAg
ICBpZiAoaXNzdWVMaW5rKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gaXNzdWVMaW5rLmhyZWYu
cmVwbGFjZSgnaHR0cHM6Ly9naXRodWIuY29tJywgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVw
b3MnKTsKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAg
ICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOworICAgICAgICAgICAgeGhyLm9ubG9h
ZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcnNlZFJlc3BvbnNlID0g
SlNPTi5wYXJzZShlLnRhcmdldC5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgIGlmIChw
YXJzZWRSZXNwb25zZSBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBjb3VudCA9IHBhcnNlZFJlc3BvbnNlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNvdW50ICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZUxpbmsuaW5uZXJI
VE1MID0gJ1RoaXMgYXBwIGhhcyAnICsgY291bnQgKyAnIG9wZW4gaXNzdWVzJzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpc3N1ZS1jb3VudCcpLnN0
eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB4aHIuc2VuZCgpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHJlZGlyZWN0KCk7CisgICAgZ2V0RmlsZSgnbGVhcm4uanNvbics
IExlYXJuKTsKK30pKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2Rl
X21vZHVsZXMvdG9kb212Yy1jb21tb24vcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44OWY5YThiZGJkOTIxZDQyOTIwNzA5ZDkyN2M2ZGJjZDg1ZmYzMTg4Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9u
L3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDEwNCBAQAoreworICAiX2FyZ3MiOiBbCisgICAgWwor
ICAgICAgeworICAgICAgICAicmF3IjogInRvZG9tdmMtY29tbW9uQF4xLjAuMSIsCisgICAgICAg
ICJzY29wZSI6IG51bGwsCisgICAgICAgICJlc2NhcGVkTmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIs
CisgICAgICAgICJuYW1lIjogInRvZG9tdmMtY29tbW9uIiwKKyAgICAgICAgInJhd1NwZWMiOiAi
XjEuMC4xIiwKKyAgICAgICAgInNwZWMiOiAiPj0xLjAuMSA8Mi4wLjAiLAorICAgICAgICAidHlw
ZSI6ICJyYW5nZSIKKyAgICAgIH0sCisgICAgICAiL1VzZXJzL2FkZHlvL0Rlc2t0b3AvU3BlZWRv
bWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodCIKKyAg
ICBdCisgIF0sCisgICJfZnJvbSI6ICJ0b2RvbXZjLWNvbW1vbkA+PTEuMC4xIDwyLjAuMCIsCisg
ICJfaWQiOiAidG9kb212Yy1jb21tb25AMS4wLjMiLAorICAiX2luQ2FjaGUiOiB0cnVlLAorICAi
X2xvY2F0aW9uIjogIi90b2RvbXZjLWNvbW1vbiIsCisgICJfbm9kZVZlcnNpb24iOiAiNy4xLjAi
LAorICAiX25wbU9wZXJhdGlvbmFsSW50ZXJuYWwiOiB7CisgICAgImhvc3QiOiAicGFja2FnZXMt
MTgtZWFzdC5pbnRlcm5hbC5ucG1qcy5jb20iLAorICAgICJ0bXAiOiAidG1wL3RvZG9tdmMtY29t
bW9uLTEuMC4zLnRnel8xNDc5Mjc2MzYxMjI3XzAuNTExMjQ4ODAxMzY5MjIiCisgIH0sCisgICJf
bnBtVXNlciI6IHsKKyAgICAibmFtZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICJlbWFpbCI6ICJz
aW5kcmVzb3JodXNAZ21haWwuY29tIgorICB9LAorICAiX25wbVZlcnNpb24iOiAiMy4xMC45IiwK
KyAgIl9waGFudG9tQ2hpbGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7CisgICAgInJhdyI6
ICJ0b2RvbXZjLWNvbW1vbkBeMS4wLjEiLAorICAgICJzY29wZSI6IG51bGwsCisgICAgImVzY2Fw
ZWROYW1lIjogInRvZG9tdmMtY29tbW9uIiwKKyAgICAibmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIs
CisgICAgInJhd1NwZWMiOiAiXjEuMC4xIiwKKyAgICAic3BlYyI6ICI+PTEuMC4xIDwyLjAuMCIs
CisgICAgInR5cGUiOiAicmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIK
KyAgXSwKKyAgIl9yZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZj
LWNvbW1vbi8tL3RvZG9tdmMtY29tbW9uLTEuMC4zLnRneiIsCisgICJfc2hhc3VtIjogImNiYTE4
NjgxMDljYWE0MDFiOTA4ZWJmNzc3OTRjYzEwMTRiNzQ4NzMiLAorICAiX3Nocmlua3dyYXAiOiBu
dWxsLAorICAiX3NwZWMiOiAidG9kb212Yy1jb21tb25AXjEuMC4xIiwKKyAgIl93aGVyZSI6ICIv
VXNlcnMvYWRkeW8vRGVza3RvcC9TcGVlZG9tZXRlci1hL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0IiwKKyAgImF1dGhvciI6IHsKKyAgICAibmFtZSI6ICJUYXN0
ZUpTIgorICB9LAorICAiYnVncyI6IHsKKyAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS90
YXN0ZWpzL3RvZG9tdmMtY29tbW9uL2lzc3VlcyIKKyAgfSwKKyAgImRlcGVuZGVuY2llcyI6IHt9
LAorICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIFRvZG9NVkMgdXRpbGl0aWVzIHVzZWQgYnkgb3Vy
IGFwcHMiLAorICAiZGV2RGVwZW5kZW5jaWVzIjoge30sCisgICJkaXJlY3RvcmllcyI6IHt9LAor
ICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjogImNiYTE4NjgxMDljYWE0MDFiOTA4ZWJmNzc3OTRj
YzEwMTRiNzQ4NzMiLAorICAgICJ0YXJiYWxsIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3RvZG9tdmMtY29tbW9uLy0vdG9kb212Yy1jb21tb24tMS4wLjMudGd6IgorICB9LAorICAiZmls
ZXMiOiBbCisgICAgImJhc2UuanMiLAorICAgICJiYXNlLmNzcyIKKyAgXSwKKyAgImdpdEhlYWQi
OiAiZTc0MjViYWZiOTU2MWQ3NjZiNzY5ODQ0ODEwZTA0OTY3MzRmZmU4YyIsCisgICJob21lcGFn
ZSI6ICJodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWNvbW1vbiNyZWFkbWUiLAor
ICAia2V5d29yZHMiOiBbCisgICAgInRvZG9tdmMiLAorICAgICJ0YXN0ZWpzIiwKKyAgICAidXRp
bCIsCisgICAgInV0aWxpdGllcyIKKyAgXSwKKyAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgIm1haW4i
OiAiYmFzZS5qcyIsCisgICJtYWludGFpbmVycyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJz
aW5kcmVzb3JodXMiLAorICAgICAgImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20iCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJhZGR5b3NtYW5pIiwKKyAgICAgICJlbWFpbCI6
ICJhZGR5b3NtYW5pQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInBh
c3N5IiwKKyAgICAgICJlbWFpbCI6ICJwaGFydGlnQHJkcmVpLm5ldCIKKyAgICB9LAorICAgIHsK
KyAgICAgICJuYW1lIjogInN0ZXBoZW5wbHVzcGx1cyIsCisgICAgICAiZW1haWwiOiAic2F3Y2h1
a0BnbWFpbC5jb20iCisgICAgfQorICBdLAorICAibmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisg
ICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHt9LAorICAicmVhZG1lIjogIkVSUk9SOiBObyBSRUFE
TUUgZGF0YSBmb3VuZCEiLAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJnaXQiLAor
ICAgICJ1cmwiOiAiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtY29tbW9u
LmdpdCIKKyAgfSwKKyAgInNjcmlwdHMiOiB7fSwKKyAgInN0eWxlIjogImJhc2UuY3NzIiwKKyAg
InZlcnNpb24iOiAiMS4wLjMiCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vcmVhZG1lLm1kIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5tZApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YTVkZTUxMThmM2ZjNzc1OGU4ZGRjMGE2ODY4NzQ5Y2VlOWNhZjk1Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9u
L3JlYWRtZS5tZApAQCAtMCwwICsxLDE1IEBACisjIHRvZG9tdmMtY29tbW9uCisKKz4gQ29tbW9u
IFRvZG9NVkMgdXRpbGl0aWVzIHVzZWQgYnkgb3VyIGFwcHMKKworCisjIyBJbnN0YWxsCisKK2Bg
YAorJCBucG0gaW5zdGFsbCAtLXNhdmUgdG9kb212Yy1jb21tb24KK2BgYAorCisKKyMjIExpY2Vu
c2UKKworTUlUIMKpIFtUYXN0ZUpTXShodHRwOi8vdGFzdGVqcy5jb20pCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQ2Nzg0ZGQ5ZmQxYWI2YzgyMDVhZTE0NmRj
NGNlZjJmZmU2NDJiZQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0
L3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDEzIEBACit7CisJInByaXZhdGUiOiB0cnVlLAorCSJk
ZXBlbmRlbmNpZXMiOiB7CisJCSJkZXBvdCI6ICJeMC4xLjYiLAorCQkiZXM1LXNoaW0iOiAiXjIu
MC4wIiwKKwkJImZsaWdodGpzIjogImZsaWdodGpzL2ZsaWdodCN2MS4zLjAiLAorCQkianF1ZXJ5
IjogIl4yLjEuMCIsCisJCSJyZXF1aXJlanMiOiAiXjIuMS4xNSIsCisJCSJyZXF1aXJlanMtdGV4
dCI6ICJeMi4wLjEyIiwKKwkJInRvZG9tdmMtYXBwLWNzcyI6ICJeMS4wLjAiLAorCQkidG9kb212
Yy1jb21tb24iOiAiXjEuMC4xIgorCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYWNlZWM2MDg4NmU5
NTE2NTBhNGUxZjA0NmIzOGY3MTliMjUyN2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9pbmRleC5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsMjkgKzAsMCBAQAotPCFkb2N0eXBlIGh0bWw+Ci08aHRtbCBsYW5nPSJlbiIgZGF0
YS1mcmFtZXdvcms9ImZsaWdodCI+Ci0gICAgPGhlYWQ+Ci0gICAgICAgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KLSAgICAgICAgPHRpdGxlPkZsaWdodCDigKIgVG9kbzwvdGl0bGU+Ci0gICAgICAg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNv
bW1vbi9iYXNlLmNzcyI+Ci0gICAgPC9oZWFkPgotICAgIDxib2R5PgotICAgICAgICA8c2VjdGlv
biBpZD0idG9kb2FwcCI+Ci0gICAgICAgICAgICA8aGVhZGVyIGlkPSJoZWFkZXIiPgotICAgICAg
ICAgICAgICAgIDxoMT50b2RvczwvaDE+Ci0gICAgICAgICAgICAgICAgPGlucHV0IGlkPSJuZXct
dG9kbyIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4KLSAg
ICAgICAgICAgIDwvaGVhZGVyPgotICAgICAgICAgICAgPHNlY3Rpb24gaWQ9Im1haW4iPgotICAg
ICAgICAgICAgICAgIDxpbnB1dCBpZD0idG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2tib3giPgotICAg
ICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1hcmsgYWxsIGFzIGNvbXBsZXRl
PC9sYWJlbD4KLSAgICAgICAgICAgICAgICA8dWwgaWQ9InRvZG8tbGlzdCI+PC91bD4KLSAgICAg
ICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgICAgIDxmb290ZXIgaWQ9ImZvb3RlciI+PC9mb290
ZXI+Ci0gICAgICAgIDwvc2VjdGlvbj4KLSAgICAgICAgPGZvb3RlciBpZD0iaW5mbyI+Ci0gICAg
ICAgICAgICA8cD5Eb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG88L3A+Ci0gICAgICAgICAgICA8
cD5DcmVhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21rdWtsaXMiPk1pY2hhbCBL
dWtsaXM8L2E+PC9wPgotICAgICAgICAgICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9k
b212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgotICAgICAgICA8L2Zvb3Rlcj4KLSAgICAgICAgPHNj
cmlwdCBzcmM9ImJvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qcyI+PC9zY3Jp
cHQ+Ci0gICAgICAgIDxzY3JpcHQgZGF0YS1tYWluPSJhcHAvanMvbWFpbiIgc3JjPSJib3dlcl9j
b21wb25lbnRzL3JlcXVpcmVqcy9yZXF1aXJlLmpzIj48L3NjcmlwdD4KLSAgICA8L2JvZHk+Ci08
L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2thcm1hLmNvbmYuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2thcm1hLmNvbmYuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDM5YzI0MmI5NTM3MjIyYWUzYTFhMjRjNTQ2YzUzNDU1MWZhM2UwNWQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9rYXJtYS5j
b25mLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLy8gS2FybWEgY29uZmlndXJh
dGlvbiBmaWxlCi0vLwotLy8gRm9yIGFsbCBhdmFpbGFibGUgY29uZmlnIG9wdGlvbnMgYW5kIGRl
ZmF1bHQgdmFsdWVzLCBzZWU6Ci0vLyBodHRwczovL2dpdGh1Yi5jb20va2FybWEtcnVubmVyL2th
cm1hL2Jsb2Ivc3RhYmxlL2xpYi9jb25maWcuanMjTDU0Ci0KLW1vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24gKGNvbmZpZykgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIGNvbmZpZy5zZXQoewot
ICAgICAgICAvLyBiYXNlIHBhdGgsIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc29sdmUgZmlsZXMg
YW5kIGV4Y2x1ZGUKLSAgICAgICAgYmFzZVBhdGg6ICcnLAotCi0gICAgICAgIGZyYW1ld29ya3M6
IFsnamFzbWluZSddLAotCi0gICAgICAgIC8vIGxpc3Qgb2YgZmlsZXMgLyBwYXR0ZXJucyB0byBs
b2FkIGluIHRoZSBicm93c2VyCi0gICAgICAgIGZpbGVzOiBbCi0gICAgICAgICAgICAvLyBsb2Fk
ZWQgd2l0aG91dCByZXF1aXJlCi0gICAgICAgICAgICAnYm93ZXJfY29tcG9uZW50cy9lczUtc2hp
bS9lczUtc2hpbS5qcycsCi0gICAgICAgICAgICAnYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9l
czUtc2hhbS5qcycsCi0gICAgICAgICAgICAnYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5
LmpzJywKLSAgICAgICAgICAgICdib3dlcl9jb21wb25lbnRzL2phc21pbmUtZmxpZ2h0L2xpYi9q
YXNtaW5lLWZsaWdodC5qcycsCi0gICAgICAgICAgICAnYm93ZXJfY29tcG9uZW50cy9qYXNtaW5l
LWpxdWVyeS9saWIvamFzbWluZS1qcXVlcnkuanMnLAotCi0gICAgICAgICAgICAvLyBoYWNrIHRv
IGxvYWQgUmVxdWlyZUpTIGFmdGVyIHRoZSBzaGltIGxpYnMKLSAgICAgICAgICAgICdub2RlX21v
ZHVsZXMva2FybWEtcmVxdWlyZWpzL2xpYi9yZXF1aXJlLmpzJywKLSAgICAgICAgICAgICdub2Rl
X21vZHVsZXMva2FybWEtcmVxdWlyZWpzL2xpYi9hZGFwdGVyLmpzJywKLQotICAgICAgICAgICAg
Ly8gbG9hZGVkIHdpdGggcmVxdWlyZQotICAgICAgICAgICAgeyBwYXR0ZXJuOiAnYm93ZXJfY29t
cG9uZW50cy9mbGlnaHQvKiovKi5qcycsIGluY2x1ZGVkOiBmYWxzZSB9LAotICAgICAgICAgICAg
eyBwYXR0ZXJuOiAnYm93ZXJfY29tcG9uZW50cy9kZXBvdC8qKi8qLmpzJywgaW5jbHVkZWQ6IGZh
bHNlIH0sCi0gICAgICAgICAgICB7IHBhdHRlcm46ICdib3dlcl9jb21wb25lbnRzL3JlcXVpcmVq
cy10ZXh0L3RleHQuanMnLCBpbmNsdWRlZDogZmFsc2UgfSwKLSAgICAgICAgICAgIHsgcGF0dGVy
bjogJ2FwcC8qKi8qLmpzJywgaW5jbHVkZWQ6IGZhbHNlIH0sCi0gICAgICAgICAgICB7IHBhdHRl
cm46ICdhcHAvKiovKi5odG1sJywgaW5jbHVkZWQ6IGZhbHNlIH0sCi0gICAgICAgICAgICB7IHBh
dHRlcm46ICd0ZXN0L3NwZWMvKiovKl9zcGVjLmpzJywgaW5jbHVkZWQ6IGZhbHNlIH0sCi0gICAg
ICAgICAgICB7IHBhdHRlcm46ICd0ZXN0L2ZpeHR1cmUvKi5odG1sJywgaW5jbHVkZWQ6IGZhbHNl
IH0sCi0KLSAgICAgICAgICAgIC8vIEVudHJ5IHBvaW50IGZvciBrYXJtYS4KLSAgICAgICAgICAg
ICd0ZXN0L3Rlc3QtbWFpbi5qcycsCi0KLSAgICAgICAgICAgIHsgcGF0dGVybjogJ3Rlc3QvbW9j
ay8qLmpzJywgaW5jbHVkZWQ6IHRydWUgfQotICAgICAgICBdLAotCi0gICAgICAgIC8vIGxpc3Qg
b2YgZmlsZXMgdG8gZXhjbHVkZQotICAgICAgICBleGNsdWRlOiBbXSwKLQotICAgICAgICAvLyB1
c2UgZG90cyByZXBvcnRlciwgYXMgdHJhdmlzIHRlcm1pbmFsIGRvZXMgbm90IHN1cHBvcnQgZXNj
YXBpbmcgc2VxdWVuY2VzCi0gICAgICAgIC8vIHBvc3NpYmxlIHZhbHVlczogJ2RvdHMnLCAncHJv
Z3Jlc3MnCi0gICAgICAgIC8vIENMSSAtLXJlcG9ydGVycyBwcm9ncmVzcwotICAgICAgICByZXBv
cnRlcnM6IFsnZG90cyddLAotCi0gICAgICAgIC8vIGVuYWJsZSAvIGRpc2FibGUgd2F0Y2hpbmcg
ZmlsZSBhbmQgZXhlY3V0aW5nIHRlc3RzIHdoZW5ldmVyIGFueSBmaWxlIGNoYW5nZXMKLSAgICAg
ICAgLy8gQ0xJIC0tYXV0by13YXRjaCAtLW5vLWF1dG8td2F0Y2gKLSAgICAgICAgYXV0b1dhdGNo
OiB0cnVlLAotCi0gICAgICAgIC8vIFN0YXJ0IHRoZXNlIGJyb3dzZXJzLCBjdXJyZW50bHkgYXZh
aWxhYmxlOgotICAgICAgICAvLyAtIENocm9tZQotICAgICAgICAvLyAtIENocm9tZUNhbmFyeQot
ICAgICAgICAvLyAtIEZpcmVmb3gKLSAgICAgICAgLy8gLSBPcGVyYQotICAgICAgICAvLyAtIFNh
ZmFyaSAob25seSBNYWMpCi0gICAgICAgIC8vIC0gUGhhbnRvbUpTCi0gICAgICAgIC8vIC0gSUUg
KG9ubHkgV2luZG93cykKLSAgICAgICAgLy8gQ0xJIC0tYnJvd3NlcnMgQ2hyb21lLCBGaXJlZm94
LCBTYWZhcmkKLSAgICAgICAgYnJvd3NlcnM6IFsnQ2hyb21lJywgJ0ZpcmVmb3gnXSwKLQotICAg
ICAgICAvLyBJZiBicm93c2VyIGRvZXMgbm90IGNhcHR1cmUgaW4gZ2l2ZW4gdGltZW91dCBbbXNd
LCBraWxsIGl0Ci0gICAgICAgIC8vIENMSSAtLWNhcHR1cmUtdGltZW91dCA1MDAwCi0gICAgICAg
IGNhcHR1cmVUaW1lb3V0OiAyMDAwMCwKLQotICAgICAgICAvLyBBdXRvIHJ1biB0ZXN0cyBvbiBz
dGFydCAod2hlbiBicm93c2VycyBhcmUgY2FwdHVyZWQpIGFuZCBleGl0Ci0gICAgICAgIC8vIENM
SSAtLXNpbmdsZS1ydW4gLS1uby1zaW5nbGUtcnVuCi0gICAgICAgIHNpbmdsZVJ1bjogZmFsc2Us
Ci0KLSAgICAgICAgcGx1Z2luczogWwotICAgICAgICAgICAgJ2thcm1hLWphc21pbmUnLAotICAg
ICAgICAgICAgJ2thcm1hLXJlcXVpcmVqcycsCi0gICAgICAgICAgICAna2FybWEtY2hyb21lLWxh
dW5jaGVyJywKLSAgICAgICAgICAgICdrYXJtYS1maXJlZm94LWxhdW5jaGVyJywKLSAgICAgICAg
ICAgICdrYXJtYS1pZS1sYXVuY2hlcicsCi0gICAgICAgICAgICAna2FybWEtcGhhbnRvbWpzLWxh
dW5jaGVyJywKLSAgICAgICAgICAgICdrYXJtYS1zYWZhcmktbGF1bmNoZXInCi0gICAgICAgIF0K
LSAgICB9KTsKLX07CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3BhY2thZ2UuanNvbiBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvcGFja2FnZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjYzFjZjcyYzg1ZDYzZTg3N2UzODk4NjlmYWRhNjFlNDRlMjk0YWM3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvcGFj
a2FnZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotewotICAibmFtZSI6ICJm
bGlnaHQtdG9kb212YyIsCi0gICJ2ZXJzaW9uIjogIjAuMC4wIiwKLSAgImRldkRlcGVuZGVuY2ll
cyI6IHsKLSAgICAia2FybWEiOiAifjAuMTAuMSIsCi0gICAgImthcm1hLWphc21pbmUiOiAifjAu
MS4wIiwKLSAgICAia2FybWEtcmVxdWlyZWpzIjogIn4wLjEuMCIsCi0gICAgImthcm1hLWNocm9t
ZS1sYXVuY2hlciI6ICJ+MC4xLjAiLAotICAgICJrYXJtYS1pZS1sYXVuY2hlciI6ICJ+MC4xLjEi
LAotICAgICJrYXJtYS1maXJlZm94LWxhdW5jaGVyIjogIn4wLjEuMCIsCi0gICAgImthcm1hLXBo
YW50b21qcy1sYXVuY2hlciI6ICJ+MC4xLjAiLAotICAgICJrYXJtYS1zYWZhcmktbGF1bmNoZXIi
OiAifjAuMS4xIgotICB9LAotICAic2NyaXB0cyI6IHsKLSAgICAidGVzdCI6ICJrYXJtYSBzdGFy
dCAtLWJyb3dzZXJzIEZpcmVmb3ggLS1zaW5nbGUtcnVuIgotICB9Ci19CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvcmVhZG1lLm1kCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZhNTM1NzkxMzM4N2ZlNDQ2ZjYwY2I5MjMx
MzBiMDhjZmY5ZWJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvcmVhZG1lLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAs
MCBAQAotIyBGbGlnaHQgVG9kb01WQyBFeGFtcGxlCi0KLT4gRmxpZ2h0IGlzIGEgbGlnaHR3ZWln
aHQsIGNvbXBvbmVudC1iYXNlZCBKYXZhU2NyaXB0IGZyYW1ld29yayB0aGF0IG1hcHMgYmVoYXZp
b3IgdG8gRE9NIG5vZGVzLgotCi0+IF9bRmxpZ2h0IC0gZmxpZ2h0anMuZ2l0aHViLmlvXShodHRw
Oi8vZmxpZ2h0anMuZ2l0aHViLmlvKV8KLQotCi0jIyBMZWFybmluZyBGbGlnaHQKLQotVGhlIFtG
bGlnaHQgd2Vic2l0ZV0oaHR0cDovL2ZsaWdodGpzLmdpdGh1Yi5pbykgaXMgYSBncmVhdCByZXNv
dXJjZSBmb3IgZ2V0dGluZyBzdGFydGVkLgotCi1IZXJlIGFyZSBzb21lIGxpbmtzIHlvdSBtYXkg
ZmluZCBoZWxwZnVsOgotCi0qIFtHaXRIdWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9mbGlnaHRqcy9m
bGlnaHQpCi0qIFtEZW1vIEFwcGxpY2F0aW9uXShodHRwOi8vdHdpdHRlci5naXRodWIuaW8vZmxp
Z2h0L2RlbW8pCi0qIFtJbnN0YWxsYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9mbGlnaHRqcy9m
bGlnaHQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI2luc3RhbGxhdGlvbikKLSogW0ZsaWdodCBvbiBU
d2l0dGVyXShodHRwOi8vdHdpdHRlci5jb20vZmxpZ2h0KQotCi1fSWYgeW91IGhhdmUgb3RoZXIg
aGVscGZ1bCBsaW5rcyB0byBzaGFyZSwgb3IgZmluZCBhbnkgb2YgdGhlIGxpbmtzIGFib3ZlIG5v
IGxvbmdlciB3b3JrLCBwbGVhc2UgW2xldCB1cyBrbm93XShodHRwczovL2dpdGh1Yi5jb20vdGFz
dGVqcy90b2RvbXZjL2lzc3VlcykuXwotCi0KLSMjIFJ1bm5pbmcgdGhlIFRlc3RzCi0KLVRvIHJ1
biB0aGUgdGVzdHMsIHlvdSBuZWVkIHRvIGluc3RhbGwgYWRkaXRpb25hbCBoZWxwZXJzIHZpYSBi
b3dlciBhbmQgbnBtIGFuZAotcnVuIGBucG0gdGVzdGAgYWZ0ZXJ3YXJkczoKLQotYGBgYmFzaAot
Ym93ZXIgaW5zdGFsbCAmIG5wbSBpbnN0YWxsCi1ucG0gdGVzdAotYGBgCi0KLVlvdSBjYW4gYWxz
byBydW4gYGthcm1hIHN0YXJ0YCBhZnRlciB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQg
dG8KLWF1dG9tYXRpY2FsbHkgd2F0Y2ggZm9yIGNoYW5nZXMgYW5kIHJlLXJ1biB0aGUgdGVzdCBz
dWl0ZS4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC8uanNoaW50cmMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L3Rlc3QvLmpzaGludHJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxOTAyMzNjZWVhNzI5NTUwNjA5ZTk5ODU2ODBlNTA0MGNkYTU5NWI5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC8u
anNoaW50cmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi17Ci0JIm5vZGUiOiB0cnVl
LAotCSJicm93c2VyIjogdHJ1ZSwKLQkiZXNuZXh0IjogdHJ1ZSwKLQkiYml0d2lzZSI6IHRydWUs
Ci0JImNhbWVsY2FzZSI6IHRydWUsCi0JImN1cmx5IjogdHJ1ZSwKLQkiZXFlcWVxIjogdHJ1ZSwK
LQkiaW1tZWQiOiB0cnVlLAotCSJpbmRlbnQiOiA0LAotCSJsYXRlZGVmIjogdHJ1ZSwKLQkibmV3
Y2FwIjogdHJ1ZSwKLQkibm9hcmciOiB0cnVlLAotCSJxdW90bWFyayI6ICJzaW5nbGUiLAotCSJy
ZWdleHAiOiB0cnVlLAotCSJ1bmRlZiI6IHRydWUsCi0JInVudXNlZCI6IHRydWUsCi0JInN0cmlj
dCI6IHRydWUsCi0JInRyYWlsaW5nIjogdHJ1ZSwKLQkic21hcnR0YWJzIjogdHJ1ZSwKLQkid2hp
dGUiOiB0cnVlLAotCSJqcXVlcnkiOiB0cnVlLAotCSJnbG9iYWxzIjogewotCQkicmVxdWlyZWpz
IjogZmFsc2UsCi0JCSJkZXNjcmliZSI6IGZhbHNlLAotCQkiZGVzY3JpYmVDb21wb25lbnQiOiBm
YWxzZSwKLQkJInNldHVwQ29tcG9uZW50IjogZmFsc2UsCi0JCSJpdCI6IGZhbHNlLAotCQkiZXhw
ZWN0IjogZmFsc2UsCi0JCSJiZWZvcmVFYWNoIjogZmFsc2UsCi0JCSJhZnRlckVhY2giOiBmYWxz
ZSwKLQkJInNweU9uRXZlbnQiOiBmYWxzZSwKLQkJIm1vY2tzIjogZmFsc2UsCi0JCSJyZWFkRml4
dHVyZXMiOiBmYWxzZSwKLQkJInNweU9uIjogZmFsc2UKLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL2Zvb3Rlci5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC90ZXN0L2ZpeHR1cmUvZm9vdGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGM3YTg5NzJmZmJiOGFkZjZmZWYwM2Y4OTQxODE2MjAyOGQ5NTM2YTEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2Zp
eHR1cmUvZm9vdGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08Zm9vdGVyIGlk
PSJmb290ZXIiPjwvZm9vdGVyPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2Zp
eHR1cmUvbmV3X3RvZG8uaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL25ld190
b2RvLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhOWZmZDI1ZTBjNTEwYjcy
N2VmOTJkNjUyMmE4Y2UzODAyNTM0MGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2ZpeHR1cmUvbmV3X3RvZG8uaHRt
bAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTxpbnB1dCBpZD0ibmV3LXRvZG8iIHBsYWNl
aG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvZml4dHVyZS90b2dnbGVfYWxsLmh0bWwgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L3Rlc3QvZml4dHVyZS90b2dnbGVfYWxsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ5ZDUzZGYxZjY5ZjUwNmYzNDQ4YmJmYTk2YmY4NzJmNzIyMzc2NGYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC90ZXN0L2ZpeHR1cmUvdG9nZ2xlX2FsbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBA
QAotPGlucHV0IGlkPSJ0b2dnbGUtYWxsIiB0eXBlPSJjaGVja2JveCI+CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvbW9jay9kYXRhc3RvcmUuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L3Rlc3QvbW9jay9kYXRhc3RvcmUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDli
ZTg2YzQ2MDFmNGEzYWJhYTI0YTE4YjY0MGZiYjAwNzA4NzE5OGMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L21vY2sv
ZGF0YXN0b3JlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotKGZ1bmN0aW9uICgp
IHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICBmdW5jdGlvbiBGYWtlRGF0YVN0b3JlKGRhdGEp
IHsKLSAgICAgICAgdGhpcy5kYXRhID0gZGF0YSB8fCBbCi0gICAgICAgICAgICB7dGl0bGU6ICdi
dXkgc29tZSB1bmljb3JucycsIGNvbXBsZXRlZDogZmFsc2UsIGlkOiAnMTA4ZThjNTEtYmIzZi02
MDhkLTE1ZTItNjExY2ZjN2U1ODM4J30sCi0gICAgICAgICAgICB7dGl0bGU6ICdnZXQgYSBiYWd1
ZXR0ZSBtdXN0YWNoZScsIGNvbXBsZXRlZDogZmFsc2UsIGlkOiAnNmNkZDBhMWYtYjZmOC0yMWUx
LWYzNWItYWExOGFmOTlhZDkxJ30sCi0gICAgICAgICAgICB7dGl0bGU6ICdzaGF2ZSB5YWtzJywg
Y29tcGxldGVkOiB0cnVlLCBpZDogJ2FiZTY3OGRkLTMwODctMTk4Yy1lZWZhLTE4MDI0OGNiM2Q4
Yid9Ci0gICAgICAgIF07Ci0gICAgfQotCi0gICAgRmFrZURhdGFTdG9yZS5wcm90b3R5cGUuYWxs
ID0gZnVuY3Rpb24gYWxsKCkgewotICAgICAgICByZXR1cm4gdGhpcy5kYXRhOwotICAgIH07Ci0K
LSAgICBGYWtlRGF0YVN0b3JlLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gc2F2ZShkYXRhKSB7
Ci0gICAgICAgIHRoaXMuZGF0YS5wdXNoKGRhdGEpOwotICAgIH07Ci0KLSAgICBGYWtlRGF0YVN0
b3JlLnByb3RvdHlwZS5kZXN0cm95QWxsID0gZnVuY3Rpb24gZGVzdHJveUFsbCgpIHsKLSAgICAg
ICAgLy8gU3R1YgotICAgIH07Ci0KLSAgICB3aW5kb3cubW9ja3MuRGF0YVN0b3JlID0gRmFrZURh
dGFTdG9yZTsKLX0oKSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy9k
YXRhL3N0YXRzX3NwZWMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy9kYXRhL3N0YXRz
X3NwZWMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNGE0NjU2ODVmYzg3NDFm
ODJkYzgwN2NkMjZjNGUyZjQ4MDc5YTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvZGF0YS9zdGF0c19zcGVj
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotZGVzY3JpYmVDb21wb25lbnQoJ2Fw
cC9qcy9kYXRhL3N0YXRzJywgZnVuY3Rpb24gKCkgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAg
IGRlc2NyaWJlKCdyZWNvdW50IHdpdGhvdXQgZGF0YXN0b3JlJywgZnVuY3Rpb24gKCkgewotICAg
ICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHNldHVwQ29tcG9uZW50
KHsKLSAgICAgICAgICAgICAgICBkYXRhU3RvcmU6IG5ldyBtb2Nrcy5EYXRhU3RvcmUoW10pCi0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBpdCgnc2hvdWxkIHRyaWdnZXIgYSBkYXRhU3RhdHNDb3VudGVkIGV2ZW50JywgZnVu
Y3Rpb24gKCkgewotICAgICAgICAgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFTdGF0c0Nv
dW50ZWQnKTsKLSAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnJlY291bnQoKTsKLSAgICAgICAg
ICAgIGV4cGVjdCgnZGF0YVN0YXRzQ291bnRlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1
bWVudCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQgdHJpZ2dlciBkYXRhU3Rh
dHNDb3VudGVkIHdoZW4gdG9kb3MgYXJlIGxvYWRlZCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHNweU9uRXZlbnQoZG9jdW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJyk7Ci0gICAgICAgICAg
ICAkKGRvY3VtZW50KS50cmlnZ2VyKCdkYXRhVG9kb3NMb2FkZWQnKTsKLSAgICAgICAgICAgIGV4
cGVjdCgnZGF0YVN0YXRzQ291bnRlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQgcHJvdmlkZSBlbXB0eSBzdGF0cycs
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHNweU9uRXZlbnQoZG9jdW1lbnQsICdkYXRhU3Rh
dHNDb3VudGVkJyk7Ci0gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5yZWNvdW50KCk7Ci0gICAg
ICAgICAgICBleHBlY3QoJ2RhdGFTdGF0c0NvdW50ZWQnKS50b0hhdmVCZWVuVHJpZ2dlcmVkT25B
bmRXaXRoKGRvY3VtZW50LCB7Ci0gICAgICAgICAgICAgICAgYWxsOiAwLAotICAgICAgICAgICAg
ICAgIHJlbWFpbmluZzogMCwKLSAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IDAsCi0gICAgICAg
ICAgICAgICAgZmlsdGVyOiAnJwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0p
OwotCi0gICAgZGVzY3JpYmUoJ3JlY291bnQgd2l0aCBkYXRhc3RvcmUnLCBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgc2V0dXBDb21w
b25lbnQoewotICAgICAgICAgICAgICAgIGRhdGFTdG9yZTogbmV3IG1vY2tzLkRhdGFTdG9yZSgp
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBwcm92
aWRlIGZ1bGwgc3RhdHMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBzcHlPbkV2ZW50KGRv
Y3VtZW50LCAnZGF0YVN0YXRzQ291bnRlZCcpOwotICAgICAgICAgICAgdGhpcy5jb21wb25lbnQu
cmVjb3VudCgpOwotICAgICAgICAgICAgZXhwZWN0KCdkYXRhU3RhdHNDb3VudGVkJykudG9IYXZl
QmVlblRyaWdnZXJlZE9uQW5kV2l0aChkb2N1bWVudCwgewotICAgICAgICAgICAgICAgIGFsbDog
MywKLSAgICAgICAgICAgICAgICByZW1haW5pbmc6IDIsCi0gICAgICAgICAgICAgICAgY29tcGxl
dGVkOiAxLAotICAgICAgICAgICAgICAgIGZpbHRlcjogJycKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKLSAgICB9KTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0
L3NwZWMvZGF0YS90b2Rvc19zcGVjLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvZGF0
YS90b2Rvc19zcGVjLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjY1MmNlYjk2
ZjQ2MDM0NmQyNjY2NTFiMjE5MGFjOTRkYWRmNDRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEvdG9k
b3Nfc3BlYy5qcworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLWRlc2NyaWJlQ29tcG9u
ZW50KCdhcHAvanMvZGF0YS90b2RvcycsIGZ1bmN0aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7
Ci0KLSAgICBkZXNjcmliZSgnd2l0aG91dCBkYXRhc3RvcmUnLCBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5kYXRhU3RvcmUg
PSBuZXcgbW9ja3MuRGF0YVN0b3JlKFtdKTsKLSAgICAgICAgICAgIHNldHVwQ29tcG9uZW50KHsK
LSAgICAgICAgICAgICAgICBkYXRhU3RvcmU6IHRoaXMuZGF0YVN0b3JlCi0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBhZGQgYSBuZXcgZW50cnknLCBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgdGl0bGUgPSAnYnV5IHNvbWUgdW5pY29ybnMn
OwotCi0gICAgICAgICAgICBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVRvZG9BZGRlZCcpOwot
ICAgICAgICAgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcigndWlBZGRSZXF1ZXN0ZWQnLCB7Ci0g
ICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlCi0gICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgZXhwZWN0KCdkYXRhVG9kb0FkZGVkJykudG9IYXZlQmVlblRyaWdnZXJlZE9uKGRvY3VtZW50
KTsKLSAgICAgICAgICAgIGV4cGVjdCh0aGlzLmRhdGFTdG9yZS5kYXRhLmxlbmd0aCkudG9CZSgx
KTsKLSAgICAgICAgICAgIGV4cGVjdCh0aGlzLmRhdGFTdG9yZS5hbGwoKVswXS50aXRsZSkudG9C
ZSh0aXRsZSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgZGVzY3JpYmUoJ3dpdGggZGF0
YXN0b3JlJywgZnVuY3Rpb24gKCkgewotICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgICAgIHRoaXMuZGF0YVN0b3JlID0gbmV3IG1vY2tzLkRhdGFTdG9yZSgpOwotICAg
ICAgICAgICAgc2V0dXBDb21wb25lbnQoewotICAgICAgICAgICAgICAgIGRhdGFTdG9yZTogdGhp
cy5kYXRhU3RvcmUKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgn
cmVtb3ZlcyBjb21wbGV0ZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBzcHlPbih0aGlz
LmRhdGFTdG9yZSwgJ2Rlc3Ryb3lBbGwnKTsKLSAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnRy
aWdnZXIoJ3VpQ2xlYXJSZXF1ZXN0ZWQnKTsKLSAgICAgICAgICAgIGV4cGVjdCh0aGlzLmRhdGFT
dG9yZS5kZXN0cm95QWxsKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IGNvbXBsZXRlZDogdHJ1ZSB9
KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19KTsKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC90ZXN0L3NwZWMvdWkvbmV3X2l0ZW1fc3BlYy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVz
dC9zcGVjL3VpL25ld19pdGVtX3NwZWMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJkZDQyOWU5N2JjNzU0OGY4YmRjNzY4ZjZiM2UxNDgwMWQyZWRiNmYuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Nw
ZWMvdWkvbmV3X2l0ZW1fc3BlYy5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLWRl
c2NyaWJlQ29tcG9uZW50KCdhcHAvanMvdWkvbmV3X2l0ZW0nLCBmdW5jdGlvbiAoKSB7Ci0gICAg
J3VzZSBzdHJpY3QnOwotCi0gICAgdmFyIEVOVEVSX0tFWSA9IDEzOwotCi0gICAgYmVmb3JlRWFj
aChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHNldHVwQ29tcG9uZW50KHJlYWRGaXh0dXJlcygnbmV3
X3RvZG8uaHRtbCcpKTsKLSAgICB9KTsKLQotICAgIGl0KCd0cmlnZ2VycyB1aUFkZFJlcXVlc3Rl
ZCBvbiBlbnRlcicsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgn
a2V5ZG93bicpOwotICAgICAgICBldmVudC53aGljaCA9IEVOVEVSX0tFWTsKLQotICAgICAgICBz
cHlPbkV2ZW50KGRvY3VtZW50LCAndWlBZGRSZXF1ZXN0ZWQnKTsKLSAgICAgICAgdGhpcy5jb21w
b25lbnQuJG5vZGUudmFsKCdzaGF2ZSBtb2FyIHlha3MnKTsKLQotICAgICAgICB0aGlzLmNvbXBv
bmVudC50cmlnZ2VyKGV2ZW50KTsKLQotICAgICAgICBleHBlY3QoJ3VpQWRkUmVxdWVzdGVkJyku
dG9IYXZlQmVlblRyaWdnZXJlZE9uQW5kV2l0aChkb2N1bWVudCwgewotICAgICAgICAgICAgdGl0
bGU6ICdzaGF2ZSBtb2FyIHlha3MnCi0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgaXQoJ3Ry
aW1zIHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgn
a2V5ZG93bicpOwotICAgICAgICBldmVudC53aGljaCA9IEVOVEVSX0tFWTsKLQotICAgICAgICBz
cHlPbkV2ZW50KGRvY3VtZW50LCAndWlBZGRSZXF1ZXN0ZWQnKTsKLSAgICAgICAgdGhpcy5jb21w
b25lbnQuJG5vZGUudmFsKCcgIHRyaW0gaW5wdXRzICcpOwotCi0gICAgICAgIHRoaXMuY29tcG9u
ZW50LnRyaWdnZXIoZXZlbnQpOwotCi0gICAgICAgIGV4cGVjdCgndWlBZGRSZXF1ZXN0ZWQnKS50
b0hhdmVCZWVuVHJpZ2dlcmVkT25BbmRXaXRoKGRvY3VtZW50LCB7Ci0gICAgICAgICAgICB0aXRs
ZTogJ3RyaW0gaW5wdXRzJwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGl0KCdpZ25vcmUg
ZW1wdHkgdmFsdWVzJywgZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgZXZlbnQgPSAkLkV2ZW50
KCdrZXlkb3duJyk7Ci0gICAgICAgIGV2ZW50LndoaWNoID0gRU5URVJfS0VZOwotCi0gICAgICAg
IHNweU9uRXZlbnQoZG9jdW1lbnQsICd1aUFkZFJlcXVlc3RlZCcpOwotCi0gICAgICAgIHRoaXMu
Y29tcG9uZW50LnRyaWdnZXIoZXZlbnQpOwotCi0gICAgICAgIGV4cGVjdCgndWlBZGRSZXF1ZXN0
ZWQnKS5ub3QudG9IYXZlQmVlblRyaWdnZXJlZE9uKGRvY3VtZW50KTsKLSAgICB9KTsKLX0pOwot
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS9zdGF0c19zcGVjLmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvc3RhdHNfc3BlYy5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTFjODhkMzk1OWMwYzg5YjRkMmVhNWI1N2JlMTNjYzIyOTI2
MTkwZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS9zdGF0c19zcGVjLmpzCisrKyAvZGV2L251bGwKQEAg
LTEsNjYgKzAsMCBAQAotZGVzY3JpYmVDb21wb25lbnQoJ2FwcC9qcy91aS9zdGF0cycsIGZ1bmN0
aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgc2V0dXBDb21wb25lbnQocmVhZEZpeHR1cmVzKCdmb290ZXIuaHRtbCcpKTsK
LSAgICB9KTsKLQotICAgIGl0KCdyZW5kZXJzIHdoZW4gc3RhdHMgY2hhbmdlJywgZnVuY3Rpb24g
KCkgewotICAgICAgICB2YXIgZGF0YSA9IHsKLSAgICAgICAgICAgIGFsbDogMywKLSAgICAgICAg
ICAgIHJlbWFpbmluZzogMiwKLSAgICAgICAgICAgIGNvbXBsZXRlZDogMSwKLSAgICAgICAgICAg
IGZpbHRlcjogJycKLSAgICAgICAgfTsKLSAgICAgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LiRu
b2RlKS50b0JlRW1wdHkoKTsKLSAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcignZGF0YVN0YXRz
Q291bnRlZCcsIGRhdGEpOwotICAgICAgICBleHBlY3QodGhpcy5jb21wb25lbnQuJG5vZGUpLm5v
dC50b0JlRW1wdHkoKTsKLSAgICAgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LiRub2RlKS50b0Jl
VmlzaWJsZSgpOwotICAgIH0pOwotCi0gICAgaXQoJ2lzIGhpZGRlbiB3aGVuIGRhdGEgaXMgZW1w
dHknLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAgYWxs
OiAwLAotICAgICAgICAgICAgcmVtYWluaW5nOiAwLAotICAgICAgICAgICAgY29tcGxldGVkOiAw
LAotICAgICAgICAgICAgZmlsdGVyOiAnJwotICAgICAgICB9OwotICAgICAgICAkKGRvY3VtZW50
KS50cmlnZ2VyKCdkYXRhU3RhdHNDb3VudGVkJywgZGF0YSk7Ci0gICAgICAgIGV4cGVjdCh0aGlz
LmNvbXBvbmVudC4kbm9kZSkudG9CZUhpZGRlbigpOwotICAgIH0pOwotCi0gICAgaXQoJ2hpZGVz
IGNsZWFyLWNvbXBsZXRlZCB3aXRoIG5vIGNvbXBsZXRlZCBpdGVtcycsIGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgdmFyIGRhdGEgPSB7Ci0gICAgICAgICAgICBhbGw6IDIsCi0gICAgICAgICAgICBy
ZW1haW5pbmc6IDIsCi0gICAgICAgICAgICBjb21wbGV0ZWQ6IDAsCi0gICAgICAgICAgICBmaWx0
ZXI6ICcnCi0gICAgICAgIH07Ci0gICAgICAgIHRoaXMuY29tcG9uZW50LnJlbmRlcihudWxsLCBk
YXRhKTsKLSAgICAgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LnNlbGVjdCgnY2xlYXJDb21wbGV0
ZWRTZWxlY3RvcicpLmxlbmd0aCkudG9CZSgwKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG93cyBj
bGVhci1jb21wbGV0ZWQgd2l0aCBjb21wbGV0ZWQgaXRlbXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAgYWxsOiAyLAotICAgICAgICAgICAgcmVtYWlu
aW5nOiAxLAotICAgICAgICAgICAgY29tcGxldGVkOiAxLAotICAgICAgICAgICAgZmlsdGVyOiAn
JwotICAgICAgICB9OwotICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXIobnVsbCwgZGF0YSk7
Ci0gICAgICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC5zZWxlY3QoJ2NsZWFyQ29tcGxldGVkU2Vs
ZWN0b3InKS5sZW5ndGgpLnRvQmUoMSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgndHJpZ2dlcnMgdWlD
bGVhclJlcXVlc3RlZCBvbiBjbGljaycsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGRhdGEg
PSB7Ci0gICAgICAgICAgICBhbGw6IDIsCi0gICAgICAgICAgICByZW1haW5pbmc6IDEsCi0gICAg
ICAgICAgICBjb21wbGV0ZWQ6IDEsCi0gICAgICAgICAgICBmaWx0ZXI6ICcnCi0gICAgICAgIH07
Ci0gICAgICAgIHNweU9uRXZlbnQoZG9jdW1lbnQsICd1aUNsZWFyUmVxdWVzdGVkJyk7Ci0gICAg
ICAgIHRoaXMuY29tcG9uZW50LnJlbmRlcihudWxsLCBkYXRhKTsKLSAgICAgICAgdGhpcy5jb21w
b25lbnQudHJpZ2dlcih0aGlzLmNvbXBvbmVudC5hdHRyLmNsZWFyQ29tcGxldGVkU2VsZWN0b3Is
ICdjbGljaycpOwotICAgICAgICBleHBlY3QoJ3VpQ2xlYXJSZXF1ZXN0ZWQnKS50b0hhdmVCZWVu
VHJpZ2dlcmVkT24odGhpcy5jb21wb25lbnQpOwotICAgIH0pOwotfSk7CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS90b2dnbGVfYWxsX3NwZWMuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS90b2dnbGVfYWxsX3NwZWMuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDEyNmZhZjE4NzUwOTExNTkzYzliNGZkN2Y2MjExMzMzZjM2OGFhYjgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC90ZXN0L3NwZWMvdWkvdG9nZ2xlX2FsbF9zcGVjLmpzCisrKyAvZGV2L251bGwKQEAg
LTEsMzAgKzAsMCBAQAotZGVzY3JpYmVDb21wb25lbnQoJ2FwcC9qcy91aS90b2dnbGVfYWxsJywg
ZnVuY3Rpb24gKCkgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIGJlZm9yZUVhY2goZnVuY3Rp
b24gKCkgewotICAgICAgICBzZXR1cENvbXBvbmVudChyZWFkRml4dHVyZXMoJ3RvZ2dsZV9hbGwu
aHRtbCcpKTsKLSAgICB9KTsKLQotICAgIGl0KCdjaGVjayB0aGUgY2hlY2tib3ggdy9vIHJlbWFp
bmluZycsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGRhdGEgPSB7Ci0gICAgICAgICAgICBh
bGw6IDIsCi0gICAgICAgICAgICByZW1haW5pbmc6IDAsCi0gICAgICAgICAgICBjb21wbGV0ZWQ6
IDIsCi0gICAgICAgICAgICBmaWx0ZXI6ICcnCi0gICAgICAgIH07Ci0gICAgICAgICQoZG9jdW1l
bnQpLnRyaWdnZXIoJ2RhdGFTdGF0c0NvdW50ZWQnLCBkYXRhKTsKLSAgICAgICAgZXhwZWN0KHRo
aXMuY29tcG9uZW50LiRub2RlKS50b0JlQ2hlY2tlZCgpOwotICAgIH0pOwotCi0gICAgaXQoJ3Vu
Y2hlY2sgdGhlIGNoZWNrYm94IHcvIHJlbWFpbmluZycsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
dmFyIGRhdGEgPSB7Ci0gICAgICAgICAgICBhbGw6IDIsCi0gICAgICAgICAgICByZW1haW5pbmc6
IDEsCi0gICAgICAgICAgICBjb21wbGV0ZWQ6IDEsCi0gICAgICAgICAgICBmaWx0ZXI6ICcnCi0g
ICAgICAgIH07Ci0gICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2RhdGFTdGF0c0NvdW50ZWQn
LCBkYXRhKTsKLSAgICAgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LiRub2RlKS5ub3QudG9CZUNo
ZWNrZWQoKTsKLSAgICB9KTsKLX0pOwotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rl
c3QvdGVzdC1tYWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Rlc3QtbWFpbi5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyNjRjZjcwYThhNDkxYjIyZjc4NjUyNTM1ZWU5
YThjZDRkN2I5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvdGVzdC1tYWluLmpzCisrKyAvZGV2L251bGwKQEAgLTEs
MjggKzAsMCBAQAotLypqc2hpbnQgY2FtZWxjYXNlOmZhbHNlKi8KLS8qZ2xvYmFsIGphc21pbmUq
LwotJ3VzZSBzdHJpY3QnOwotCi12YXIgdGVzdHMgPSBPYmplY3Qua2V5cyh3aW5kb3cuX19rYXJt
YV9fLmZpbGVzKS5maWx0ZXIoZnVuY3Rpb24gKGZpbGUpIHsKLSAgICByZXR1cm4gKC9fc3BlY1wu
anMkLy50ZXN0KGZpbGUpKTsKLX0pOwotCi13aW5kb3cubW9ja3MgPSB7fTsKLQotcmVxdWlyZWpz
LmNvbmZpZyh7Ci0gICAgLy8gS2FybWEgc2VydmVzIGZpbGVzIGZyb20gJy9iYXNlJwotICAgIGJh
c2VVcmw6ICcvYmFzZScsCi0KLSAgICBwYXRoczogewotICAgICAgICBmbGlnaHQ6ICdib3dlcl9j
b21wb25lbnRzL2ZsaWdodCcsCi0gICAgICAgIGRlcG90OiAnYm93ZXJfY29tcG9uZW50cy9kZXBv
dC9kZXBvdCcsCi0gICAgICAgIHRleHQ6ICdib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy10ZXh0
L3RleHQnCi0gICAgfSwKLQotICAgIC8vIGFzayBSZXF1aXJlLmpzIHRvIGxvYWQgdGhlc2UgZmls
ZXMgKGFsbCBvdXIgdGVzdHMpCi0gICAgZGVwczogdGVzdHMsCi0KLSAgICAvLyBzdGFydCB0ZXN0
IHJ1biwgb25jZSBSZXF1aXJlLmpzIGlzIGRvbmUKLSAgICBjYWxsYmFjazogd2luZG93Ll9fa2Fy
bWFfXy5zdGFydAotfSk7Ci0KLWphc21pbmUuZ2V0Rml4dHVyZXMoKS5maXh0dXJlc1BhdGggPSAn
L2Jhc2UvdGVzdC9maXh0dXJlJzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309801</attachid>
            <date>2017-05-11 15:40:32 -0700</date>
            <delta_ts>2017-05-11 16:28:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171471-20170511154031.patch</filename>
            <type>text/plain</type>
            <size>1463059</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTY1CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLmE2MDRkMjQ0NWE5MzQ3NDIzZmE2ODVjMzZm
YjhhN2ZmZTMxOGMwNWMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTctMDQt
MjggIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IFVwZGF0ZSB0aGUgRmxpZ2h0LmpzIGltcGxlbWVudGF0aW9uIHRvIGEgbW9yZSByZWNl
bnQgbGlicmFyeSB2ZXJzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzE0NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgU3BlZWRvbWV0ZXI6IFVwZGF0ZSBGbGlnaHRKUyBUb2RvTVZDIGltcGxlbWVudGF0
aW9uCisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC8uZ2l0aWdub3JlOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0Ly5qc2hpbnRy
YzogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvbWFpbi5qczogUmVtb3ZlZC4KKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9hcHAvanMvc3RvcmUuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXIuanNvbjogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzOiBSZW1v
dmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzOiBS
ZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9pbmRleC5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvbG9nZ2VyLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
Y3NzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24v
YmcucG5nOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvZGF0YS9zdGF0cy5qczog
UmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanMuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L2FwcC9qcy9kYXRhL3RvZG9zLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9hcHAvanMvZGF0YS90b2Rvcy5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL21h
aW4uanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvcGFnZS9hcHAuanM6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9hcHAuanMuCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0
L2FwcC9qcy9zdG9yZS5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS9tYWlu
X3NlbGVjdG9yLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvbWFp
bl9zZWxlY3Rvci5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL25ld19pdGVtLmpzOiBS
ZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvbmV3X2l0ZW0uanMuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L2FwcC9qcy91aS9zdGF0cy5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvYXBwL2pzL3VpL3N0YXRzLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvdG9k
b19saXN0LmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvdG9kb19s
aXN0LmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvdG9nZ2xlX2FsbC5qczogUmVuYW1l
ZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3VpL3RvZ2dsZV9hbGwuanMuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanMuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2Fw
cC9qcy91dGlscy5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3V0aWxz
LmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvdGVtcGxhdGVzL3N0YXRzLmh0bWw6IFJlbmFtZWQg
ZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbC4KKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvYXBwL3RlbXBsYXRlcy90b2RvLmh0bWw6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvdG9kby5odG1sLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9pbmRleC5o
dG1sOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9pbmRleC5odG1sLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9ub2RlX21vZHVsZXMvZGVwb3QvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL2RlcG90L2RlcG90LmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2RlcG90L2RlcG90LmpzLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9ub2RlX21vZHVsZXMvZGVwb3QvZGVwb3QubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL2RlcG90L3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9MSUNFTlNFOiBBZGRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGFtLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLmpzLgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoYW0ubWluLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGltLmpzOiBBZGRl
ZC46CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUtc2hpbS5taW4u
anM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L0xJQ0VOU0U6
IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2luZGV4LmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvYWR2aWNlLmpz
OiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9s
aWIvYWR2aWNlLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9i
YXNlLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2Zs
aWdodC9saWIvYmFzZS5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9s
aWIvY29tcG9uZW50LmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21w
b25lbnRzL2ZsaWdodC9saWIvY29tcG9uZW50LmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21v
ZHVsZXMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9k
ZV9tb2R1bGVzL2ZsaWdodC9saWIvZGVidWcuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9kZWJ1Zy5qcy4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvbG9nZ2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvcmVnaXN0cnkuanM6IFJlbmFtZWQgZnJvbSBQ
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9yZWdpc3RyeS5qcy4K
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvdXRpbHMuanM6IFJlbmFt
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi91dGls
cy5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9SRUFETUUubWQ6IEFk
ZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5Lmpz
OiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVy
eS5taW4uanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvanF1ZXJ5L3Bh
Y2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9tZW1vcnlz
dG9yYWdlL21lbW9yeXN0b3JhZ2UuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21v
ZHVsZXMvcmVxdWlyZWpzLXRleHQvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25v
ZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvYm93ZXIuanNvbjogQWRkZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC9wYWNrYWdlLmpzb246IEFk
ZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvdGV4dC5q
czogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9yZXF1aXJl
anMtdGV4dC90ZXh0LmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpz
L1JFQURNRS5tZDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJl
anMvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3Jl
cXVpcmVqcy9yZXF1aXJlLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9j
b21wb25lbnRzL3JlcXVpcmVqcy9yZXF1aXJlLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21v
ZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kOiBBZGRlZC4KKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzOiBBZGRlZC4K
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNv
bjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9y
ZWFkbWUubWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9wYWNrYWdlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2thcm1hLmNvbmYuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvcGFja2FnZS5qc29u
OiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3JlYWRtZS5tZDogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0
Ly5qc2hpbnRyYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2ZpeHR1cmUvZm9vdGVyLmh0bWw6
IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL25ld190b2RvLmh0bWw6IFJlbW92ZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL3RvZ2dsZV9hbGwuaHRtbDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC90ZXN0L21vY2svZGF0YXN0b3JlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3Bl
Yy9kYXRhL3N0YXRzX3NwZWMuanM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEv
dG9kb3Nfc3BlYy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvbmV3X2l0ZW1f
c3BlYy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvc3RhdHNfc3BlYy5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvdG9nZ2xlX2FsbF9zcGVjLmpzOiBSZW1v
dmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvdGVzdC1tYWluLmpzOiBSZW1vdmVkLgorCiAyMDE3LTA0LTI3
ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBiYWNr
IHRlc3RzIGluYWR2ZXJ0ZW50bHkgZGVsZXRlZCBpbiByMjA1MDMyLgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC8uZ2l0aWdub3JlIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uZ2l0aWdub3JlCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjY1OGQ3ZDFiMzE4NDhjM2I3MTk2MDU0M2Ni
MDM2OGU1NmNkNGM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAg
QEAKLW5vZGVfbW9kdWxlcy8KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvLmpzaGludHJj
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC8uanNoaW50cmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGRiMGIwNGRmNDg4NjY0YjZiYzQ3N2RjOTQ5N2U0MDNkYTI1YzI1MjAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uanNo
aW50cmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi17Ci0JIm5vZGUiOiB0cnVlLAot
CSJicm93c2VyIjogdHJ1ZSwKLQkiZXNuZXh0IjogdHJ1ZSwKLQkiYml0d2lzZSI6IHRydWUsCi0J
ImNhbWVsY2FzZSI6IHRydWUsCi0JImN1cmx5IjogdHJ1ZSwKLQkiZXFlcWVxIjogdHJ1ZSwKLQki
aW1tZWQiOiB0cnVlLAotCSJpbmRlbnQiOiA0LAotCSJsYXRlZGVmIjogdHJ1ZSwKLQkibmV3Y2Fw
IjogdHJ1ZSwKLQkibm9hcmciOiB0cnVlLAotCSJxdW90bWFyayI6ICJzaW5nbGUiLAotCSJyZWdl
eHAiOiB0cnVlLAotCSJ1bmRlZiI6IHRydWUsCi0JInVudXNlZCI6IHRydWUsCi0JInN0cmljdCI6
IHRydWUsCi0JInRyYWlsaW5nIjogdHJ1ZSwKLQkic21hcnR0YWJzIjogdHJ1ZSwKLQkid2hpdGUi
OiB0cnVlLAotCSJ2YWxpZHRoaXMiOiB0cnVlCi19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2FwcC9qcy9hcHAuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9hcHAuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNGExZTNhNDJmM2Q2Y2VmZTk4OGU1NWFiNDQzMWI5
NTA4MDJkMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvYXBwLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAs
MCBAQAotLypnbG9iYWwgZGVmaW5lICovCi0ndXNlIHN0cmljdCc7Ci0KLWRlZmluZShbCi0gICAg
Jy4vZGF0YS90b2RvcycsCi0gICAgJy4vZGF0YS9zdGF0cycsCi0gICAgJy4vdWkvbmV3X2l0ZW0n
LAotICAgICcuL3VpL3RvZG9fbGlzdCcsCi0gICAgJy4vdWkvc3RhdHMnLAotICAgICcuL3VpL21h
aW5fc2VsZWN0b3InLAotICAgICcuL3VpL3RvZ2dsZV9hbGwnCi1dLCBmdW5jdGlvbiAoVG9kb3NE
YXRhLCBTdGF0c0RhdGEsIE5ld0l0ZW1VSSwgVG9kb0xpc3RVSSwgU3RhdHNVSSwgTWFpblNlbGVj
dG9yVUksIFRvZ2dsZUFsbFVJKSB7Ci0gICAgdmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIFN0YXRzRGF0YS5hdHRhY2hUbyhkb2N1bWVudCk7Ci0gICAgICAgIFRvZG9zRGF0
YS5hdHRhY2hUbyhkb2N1bWVudCk7Ci0gICAgICAgIE5ld0l0ZW1VSS5hdHRhY2hUbygnI25ldy10
b2RvJyk7Ci0gICAgICAgIE1haW5TZWxlY3RvclVJLmF0dGFjaFRvKCcjbWFpbicpOwotICAgICAg
ICBTdGF0c1VJLmF0dGFjaFRvKCcjZm9vdGVyJyk7Ci0gICAgICAgIFRvZ2dsZUFsbFVJLmF0dGFj
aFRvKCcjdG9nZ2xlLWFsbCcpOwotICAgICAgICBUb2RvTGlzdFVJLmF0dGFjaFRvKCcjdG9kby1s
aXN0Jyk7Ci0KLSAgICAgICAgdmFyIGR1bW15Tm9kZVRvTm90aWZ5QXBwSXNSZWFkeSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICBkdW1teU5vZGVUb05vdGlmeUFwcElz
UmVhZHkuaWQgPSAnYXBwSXNSZWFkeSc7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoZHVtbXlOb2RlVG9Ob3RpZnlBcHBJc1JlYWR5KTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHsK
LSAgICAgICAgaW5pdGlhbGl6ZTogaW5pdGlhbGl6ZQotICAgIH07Ci19KTsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2FwcC9qcy9kYXRhL3N0YXRzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjk3
YzAwYzJhYjljYTNiZmJhMjQ1ZThiOTkxNDY4YmJmMTM1NzY5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEv
c3RhdHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKmdsb2JhbCBkZWZpbmUg
Ki8KLSd1c2Ugc3RyaWN0JzsKLQotZGVmaW5lKFsKLSAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQn
LAotICAgICcuLi9zdG9yZScKLV0sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQsIGRhdGFTdG9y
ZSkgewotICAgIGZ1bmN0aW9uIHN0YXRzKCkgewotICAgICAgICB0aGlzLmRlZmF1bHRBdHRycyh7
Ci0gICAgICAgICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZQotICAgICAgICB9KTsKLQotICAgICAg
ICB0aGlzLnJlY291bnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgdG9kb3MgPSB0
aGlzLmF0dHIuZGF0YVN0b3JlLmFsbCgpOwotICAgICAgICAgICAgdmFyIGFsbCA9IHRvZG9zLmxl
bmd0aDsKLSAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0b2Rvcy5yZWR1Y2UoZnVuY3Rpb24g
KG1lbW8sIGVhY2gpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWVtbyArPSBlYWNoLmNvbXBs
ZXRlZCA/IDAgOiAxOwotICAgICAgICAgICAgfSwgMCk7Ci0KLSAgICAgICAgICAgIHRoaXMudHJp
Z2dlcignZGF0YVN0YXRzQ291bnRlZCcsIHsKLSAgICAgICAgICAgICAgICBhbGw6IGFsbCwKLSAg
ICAgICAgICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZywKLSAgICAgICAgICAgICAgICBjb21w
bGV0ZWQ6IGFsbCAtIHJlbWFpbmluZywKLSAgICAgICAgICAgICAgICBmaWx0ZXI6IGxvY2FsU3Rv
cmFnZS5nZXRJdGVtKCdmaWx0ZXInKSB8fCAnJwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb3NMb2FkZWQnLCB0aGlzLnJlY291bnQp
OwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvQWRkZWQnLCB0aGlzLnJl
Y291bnQpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvUmVtb3ZlZCcs
IHRoaXMucmVjb3VudCk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9U
b2dnbGVkJywgdGhpcy5yZWNvdW50KTsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdk
YXRhQ2xlYXJlZENvbXBsZXRlZCcsIHRoaXMucmVjb3VudCk7Ci0gICAgICAgICAgICB0aGlzLm9u
KGRvY3VtZW50LCAnZGF0YVRvZG9Ub2dnbGVkQWxsJywgdGhpcy5yZWNvdW50KTsKLSAgICAgICAg
fSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChzdGF0cyk7Ci19KTsKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2FwcC9qcy9kYXRhL3RvZG9zLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmY2E2ZjQyYTJkNjZjOWM0ZDY5ZTAzZGQyYmRhMzgzYjliN2U0MGE5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBw
L2pzL2RhdGEvdG9kb3MuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLypnbG9i
YWwgZGVmaW5lICovCi0ndXNlIHN0cmljdCc7Ci0KLWRlZmluZShbCi0gICAgJ2ZsaWdodC9saWIv
Y29tcG9uZW50JywKLSAgICAnLi4vc3RvcmUnCi1dLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50
LCBkYXRhU3RvcmUpIHsKLSAgICBmdW5jdGlvbiB0b2RvcygpIHsKLSAgICAgICAgdmFyIGZpbHRl
cjsKLSAgICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoewotICAgICAgICAgICAgZGF0YVN0b3JlOiBk
YXRhU3RvcmUKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5hZGQgPSBmdW5jdGlvbiAoZSwg
ZGF0YSkgewotICAgICAgICAgICAgdmFyIHRvZG8gPSB0aGlzLmF0dHIuZGF0YVN0b3JlLnNhdmUo
ewotICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLAotICAgICAgICAgICAgICAgIGNv
bXBsZXRlZDogZmFsc2UKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICB0aGlzLnRyaWdn
ZXIoJ2RhdGFUb2RvQWRkZWQnLCB7IHRvZG86IHRvZG8sIGZpbHRlcjogZmlsdGVyIH0pOwotICAg
ICAgICB9OwotCi0gICAgICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKLSAg
ICAgICAgICAgIHZhciB0b2RvID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5kZXN0cm95KGRhdGEuaWQp
OwotCi0gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFUb2RvUmVtb3ZlZCcsIHRvZG8pOwot
ICAgICAgICB9OwotCi0gICAgICAgIHRoaXMubG9hZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHZhciB0b2RvczsKLQotICAgICAgICAgICAgZmlsdGVyID0gbG9jYWxTdG9yYWdlLmdldEl0
ZW0oJ2ZpbHRlcicpOwotICAgICAgICAgICAgdG9kb3MgPSB0aGlzLmZpbmQoKTsKLSAgICAgICAg
ICAgIHRoaXMudHJpZ2dlcignZGF0YVRvZG9zTG9hZGVkJywgeyB0b2RvczogdG9kb3MgfSk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewot
ICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5zYXZlKGRhdGEpOwotICAgICAgICB9Owot
Ci0gICAgICAgIHRoaXMudG9nZ2xlQ29tcGxldGVkID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKLSAg
ICAgICAgICAgIHZhciBldmVudFR5cGU7Ci0gICAgICAgICAgICB2YXIgdG9kbyA9IHRoaXMuYXR0
ci5kYXRhU3RvcmUuZ2V0KGRhdGEuaWQpOwotCi0gICAgICAgICAgICB0b2RvLmNvbXBsZXRlZCA9
ICF0b2RvLmNvbXBsZXRlZDsKLSAgICAgICAgICAgIHRoaXMuYXR0ci5kYXRhU3RvcmUuc2F2ZSh0
b2RvKTsKLQotICAgICAgICAgICAgZXZlbnRUeXBlID0gZmlsdGVyID8gJ2RhdGFUb2RvUmVtb3Zl
ZCcgOiAnZGF0YVRvZG9Ub2dnbGVkJzsKLQotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKGV2ZW50
VHlwZSwgdG9kbyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy50b2dnbGVBbGxDb21wbGV0
ZWQgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9y
ZS51cGRhdGVBbGwoeyBjb21wbGV0ZWQ6IGRhdGEuY29tcGxldGVkIH0pOwotICAgICAgICAgICAg
dGhpcy50cmlnZ2VyKCdkYXRhVG9kb1RvZ2dsZWRBbGwnLCB7IHRvZG9zOiB0aGlzLmZpbmQoZmls
dGVyKSB9KTsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLmZpbHRlciA9IGZ1bmN0aW9uIChl
LCBkYXRhKSB7Ci0gICAgICAgICAgICB2YXIgdG9kb3M7Ci0KLSAgICAgICAgICAgIGxvY2FsU3Rv
cmFnZS5zZXRJdGVtKCdmaWx0ZXInLCBkYXRhLmZpbHRlcik7Ci0gICAgICAgICAgICBmaWx0ZXIg
PSBkYXRhLmZpbHRlcjsKLSAgICAgICAgICAgIHRvZG9zID0gdGhpcy5maW5kKCk7Ci0KLSAgICAg
ICAgICAgIHRoaXMudHJpZ2dlcignZGF0YVRvZG9zRmlsdGVyZWQnLCB7IHRvZG9zOiB0b2RvcyB9
KTsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLmZpbmQgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgdG9kb3M7Ci0KLSAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsKLSAgICAgICAg
ICAgICAgICB0b2RvcyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuZmluZChmdW5jdGlvbiAoZWFjaCkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBlYWNoW2ZpbHRlcl0gIT09ICd1
bmRlZmluZWQnKSA/IGVhY2guY29tcGxldGVkIDogIWVhY2guY29tcGxldGVkOwotICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0b2RvcyA9
IHRoaXMuYXR0ci5kYXRhU3RvcmUuYWxsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJldHVybiB0b2RvczsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLmNsZWFyQ29tcGxldGVk
ID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5kZXN0cm95
QWxsKHsgY29tcGxldGVkOiB0cnVlIH0pOwotCi0gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3Vp
RmlsdGVyUmVxdWVzdGVkJywgeyBmaWx0ZXI6IGZpbHRlciB9KTsKLSAgICAgICAgICAgIHRoaXMu
dHJpZ2dlcignZGF0YUNsZWFyZWRDb21wbGV0ZWQnKTsKLSAgICAgICAgfTsKLQotICAgICAgICB0
aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5v
bihkb2N1bWVudCwgJ3VpQWRkUmVxdWVzdGVkJywgdGhpcy5hZGQpOwotICAgICAgICAgICAgdGhp
cy5vbihkb2N1bWVudCwgJ3VpVXBkYXRlUmVxdWVzdGVkJywgdGhpcy51cGRhdGUpOwotICAgICAg
ICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpUmVtb3ZlUmVxdWVzdGVkJywgdGhpcy5yZW1vdmUp
OwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpTG9hZFJlcXVlc3RlZCcsIHRoaXMu
bG9hZCk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlUb2dnbGVSZXF1ZXN0ZWQn
LCB0aGlzLnRvZ2dsZUNvbXBsZXRlZCk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAn
dWlUb2dnbGVBbGxSZXF1ZXN0ZWQnLCB0aGlzLnRvZ2dsZUFsbENvbXBsZXRlZCk7Ci0gICAgICAg
ICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlDbGVhclJlcXVlc3RlZCcsIHRoaXMuY2xlYXJDb21w
bGV0ZWQpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpRmlsdGVyUmVxdWVzdGVk
JywgdGhpcy5maWx0ZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmaW5l
Q29tcG9uZW50KHRvZG9zKTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAv
anMvbWFpbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL21haW4uanMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGRiYWVhMGMzYjIyMjk5NTM1ZWI4OTU1YzEwNzZjMTRjODhiNWQz
ZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9hcHAvanMvbWFpbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAK
LSd1c2Ugc3RyaWN0JzsKLQotcmVxdWlyZS5jb25maWcoewotICAgIGJhc2VVcmw6ICcuLycsCi0g
ICAgcGF0aHM6IHsKLSAgICAgICAganF1ZXJ5OiAnYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1
ZXJ5JywKLSAgICAgICAgZXM1c2hpbTogJ2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNo
aW0nLAotICAgICAgICBlczVzaGFtOiAnYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hh
bScsCi0gICAgICAgIHRleHQ6ICdib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy10ZXh0L3RleHQn
LAotICAgICAgICBmbGlnaHQ6ICdib3dlcl9jb21wb25lbnRzL2ZsaWdodCcsCi0gICAgICAgIGRl
cG90OiAnYm93ZXJfY29tcG9uZW50cy9kZXBvdC9kZXBvdCcKLSAgICB9LAotICAgIHNoaW06IHsK
LSAgICAgICAgJ2FwcC9qcy9hcHAnOiB7Ci0gICAgICAgICAgICBkZXBzOiBbJ2pxdWVyeScsICdl
czVzaGltJywgJ2VzNXNoYW0nXQotICAgICAgICB9Ci0gICAgfQotfSk7Ci0KLXJlcXVpcmUoWydh
cHAvanMvYXBwJ10sIGZ1bmN0aW9uIChBcHApIHsKLSAgICBBcHAuaW5pdGlhbGl6ZSgpOwotfSk7
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9zdG9yZS5qcyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYXBwL2pzL3N0b3JlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
YjA5NmY1Y2ZlZjQwMTEyZWUzZjk3NGNjMjQwNDgwZGJkNzhkY2NmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3N0
b3JlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0vKmdsb2JhbCBkZWZpbmUgKi8K
LQotJ3VzZSBzdHJpY3QnOwotCi1kZWZpbmUoWwotICAgICdkZXBvdCcKLV0sIGZ1bmN0aW9uIChk
ZXBvdCkgewotICAgIHJldHVybiBkZXBvdCgndG9kb3MnLCB7IGlkQXR0cmlidXRlOiAnaWQnIH0p
OwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9tYWluX3NlbGVj
dG9yLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvbWFpbl9zZWxlY3Rvci5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4YzJkNGNlMGE5MmRlMmU0ZTEyMjg3ZmI2ZTE4
ODlhZjdlN2QzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9tYWluX3NlbGVjdG9yLmpzCisrKyAvZGV2L251
bGwKQEAgLTEsMjAgKzAsMCBAQAotLypnbG9iYWwgZGVmaW5lICovCi0ndXNlIHN0cmljdCc7Ci0K
LWRlZmluZShbCi0gICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JwotXSwgZnVuY3Rpb24gKGRlZmlu
ZUNvbXBvbmVudCkgewotICAgIGZ1bmN0aW9uIG1haW5TZWxlY3RvcigpIHsKLSAgICAgICAgdGhp
cy50b2dnbGUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyIHRvZ2dsZSA9
IGRhdGEuYWxsID4gMDsKLSAgICAgICAgICAgIHRoaXMuJG5vZGUudG9nZ2xlKHRvZ2dsZSk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgpOwotICAgICAgICAgICAgdGhpcy5vbihk
b2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnLCB0aGlzLnRvZ2dsZSk7Ci0gICAgICAgIH0pOwot
ICAgIH0KLQotICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQobWFpblNlbGVjdG9yKTsKLX0pOwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvbmV3X2l0ZW0uanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9uZXdfaXRlbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjFkNmQ4N2UzNDNiNTU4MWE4YTU3YThmYTMzOTRiNmQzYmE0MjUwYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2FwcC9qcy91aS9uZXdfaXRlbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8q
Z2xvYmFsIGRlZmluZSAqLwotJ3VzZSBzdHJpY3QnOwotCi1kZWZpbmUoWwotICAgICdmbGlnaHQv
bGliL2NvbXBvbmVudCcKLV0sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQpIHsKLSAgICBmdW5j
dGlvbiBuZXdJdGVtKCkgewotICAgICAgICB2YXIgRU5URVJfS0VZID0gMTM7Ci0KLSAgICAgICAg
dGhpcy5jcmVhdGVPbkVudGVyID0gZnVuY3Rpb24gKGUpIHsKLSAgICAgICAgICAgIGlmIChlLndo
aWNoICE9PSBFTlRFUl9LRVkgfHwKLSAgICAgICAgICAgICAgICAhdGhpcy4kbm9kZS52YWwoKS50
cmltKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHRoaXMudHJpZ2dlcigndWlBZGRSZXF1ZXN0ZWQnLCB7Ci0gICAgICAgICAgICAgICAg
dGl0bGU6IHRoaXMuJG5vZGUudmFsKCkudHJpbSgpCi0gICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgdGhpcy4kbm9kZS52YWwoJycpOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuYWZ0
ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLm9uKCdrZXlk
b3duJywgdGhpcy5jcmVhdGVPbkVudGVyKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGRlZmluZUNvbXBvbmVudChuZXdJdGVtKTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9z
dGF0cy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhlNWVjZGYzM2FmYzAwMTI4
OWExMTMzZWUxYjY3ODBjZjZhZTNjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9zdGF0cy5qcworKysgL2Rl
di9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qZ2xvYmFsIGRlZmluZSAqLwotJ3VzZSBzdHJpY3Qn
OwotCi1kZWZpbmUoWwotICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCi0gICAgJy4vd2l0aF9m
aWx0ZXJzJywKLSAgICAndGV4dCFhcHAvdGVtcGxhdGVzL3N0YXRzLmh0bWwnLAotICAgICcuLi91
dGlscycKLV0sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQsIHdpdGhGaWx0ZXJzLCBzdGF0c1Rt
cGwsIHV0aWxzKSB7Ci0gICAgZnVuY3Rpb24gc3RhdHMoKSB7Ci0gICAgICAgIHZhciB0ZW1wbGF0
ZSA9IHV0aWxzLnRtcGwoc3RhdHNUbXBsKTsKLQotICAgICAgICB0aGlzLmRlZmF1bHRBdHRycyh7
Ci0gICAgICAgICAgICBjbGVhckNvbXBsZXRlZFNlbGVjdG9yOiAnI2NsZWFyLWNvbXBsZXRlZCcK
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkg
ewotICAgICAgICAgICAgdmFyIHRvZ2dsZSA9IGRhdGEuYWxsID4gMDsKLQotICAgICAgICAgICAg
dGhpcy4kbm9kZS5odG1sKHRlbXBsYXRlKGRhdGEpKTsKLSAgICAgICAgICAgIHRoaXMuJG5vZGUu
dG9nZ2xlKHRvZ2dsZSk7Ci0gICAgICAgICAgICB0aGlzLm1hcmtTZWxlY3RlZChkYXRhLmZpbHRl
cik7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5jbGVhckNvbXBsZXRlZCA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlDbGVhclJlcXVlc3RlZCcpOwotICAg
ICAgICB9OwotCi0gICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB0aGlzLiRub2RlLmhpZGUoKTsKLSAgICAgICAgICAgIHRoaXMub24oZG9j
dW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJywgdGhpcy5yZW5kZXIpOwotICAgICAgICAgICAgdGhp
cy5vbignY2xpY2snLCB7ICdjbGVhckNvbXBsZXRlZFNlbGVjdG9yJzogdGhpcy5jbGVhckNvbXBs
ZXRlZCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluZUNvbXBvbmVu
dChzdGF0cywgd2l0aEZpbHRlcnMpOwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2FwcC9qcy91aS90b2RvX2xpc3QuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2Rv
X2xpc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjODA2ZmEyZjkyYmRlNDU3
YTNlZDY3ZjEwMDA4YjIwYTA2YjNkMTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvdG9kb19saXN0LmpzCisr
KyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qZ2xvYmFsIGRlZmluZSwgJCAqLwotJ3Vz
ZSBzdHJpY3QnOwotCi1kZWZpbmUoWwotICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCi0gICAg
J3RleHQhYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwnLAotICAgICcuLi91dGlscycKLV0sIGZ1bmN0
aW9uIChkZWZpbmVDb21wb25lbnQsIHRvZG9UbXBsLCB1dGlscykgewotICAgIGZ1bmN0aW9uIHRv
ZG9MaXN0KCkgewotICAgICAgICB2YXIgRU5URVJfS0VZID0gMTM7Ci0gICAgICAgIHZhciB0ZW1w
bGF0ZSA9IHV0aWxzLnRtcGwodG9kb1RtcGwpOwotCi0gICAgICAgIHRoaXMuZGVmYXVsdEF0dHJz
KHsKLSAgICAgICAgICAgIGRlc3Ryb3lTZWxlY3RvcjogJ2J1dHRvbi5kZXN0cm95JywKLSAgICAg
ICAgICAgIHRvZ2dsZVNlbGVjdG9yOiAnaW5wdXQudG9nZ2xlJywKLSAgICAgICAgICAgIGxhYmVs
U2VsZWN0b3I6ICdsYWJlbCcsCi0gICAgICAgICAgICBlZGl0U2VsZWN0b3I6ICcuZWRpdCcKLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5yZW5kZXJBbGwgPSBmdW5jdGlvbiAoZSwgZGF0YSkg
ewotICAgICAgICAgICAgdGhpcy4kbm9kZS5odG1sKCcnKTsKLSAgICAgICAgICAgIGRhdGEudG9k
b3MuZm9yRWFjaChmdW5jdGlvbiAoZWFjaCkgewotICAgICAgICAgICAgICAgIHRoaXMucmVuZGVy
KGUsIHsgdG9kbzogZWFjaCB9KTsKLSAgICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICB9Owot
Ci0gICAgICAgIHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKLSAgICAgICAgICAg
IGlmIChlLnR5cGUgPT09ICdkYXRhVG9kb0FkZGVkJyAmJiBkYXRhLmZpbHRlciA9PT0gJ2NvbXBs
ZXRlZCcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHRoaXMuJG5vZGUuYXBwZW5kKHRlbXBsYXRlKGRhdGEudG9kbykpOwotICAgICAgICB9
OwotCi0gICAgICAgIHRoaXMuZWRpdCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAg
ICB2YXIgJHRvZG9FbCA9ICQoZGF0YS5lbCkucGFyZW50cygnbGknKTsKLQotICAgICAgICAgICAg
JHRvZG9FbC5hZGRDbGFzcygnZWRpdGluZycpOwotICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2Vk
aXRTZWxlY3RvcicpLmZvY3VzKCk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5yZXF1ZXN0
VXBkYXRlID0gZnVuY3Rpb24gKGUpIHsKLSAgICAgICAgICAgIHZhciAkaW5wdXRFbCA9ICQoZS5j
dXJyZW50VGFyZ2V0KTsKLSAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJGlucHV0RWwucGFyZW50
cygnbGknKTsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9ICRpbnB1dEVsLnZhbCgpLnRyaW0oKTsK
LSAgICAgICAgICAgIHZhciBpZCA9ICR0b2RvRWwuYXR0cignaWQnKTsKLQotICAgICAgICAgICAg
aWYgKCEkdG9kb0VsLmhhc0NsYXNzKCdlZGl0aW5nJykpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICR0b2RvRWwucmVtb3ZlQ2xhc3MoJ2Vk
aXRpbmcnKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgJHRv
ZG9FbC5maW5kKCdsYWJlbCcpLmh0bWwodmFsdWUpOwotICAgICAgICAgICAgICAgIHRoaXMudHJp
Z2dlcigndWlVcGRhdGVSZXF1ZXN0ZWQnLCAgeyBpZDogaWQsIHRpdGxlOiB2YWx1ZSB9KTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVJlbW92
ZVJlcXVlc3RlZCcsIHsgaWQ6IGlkIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZU9uRW50ZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewot
ICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IEVOVEVSX0tFWSkgewotICAgICAgICAgICAgICAg
IHRoaXMucmVxdWVzdFVwZGF0ZShlLCBkYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsK
LQotICAgICAgICB0aGlzLnJlcXVlc3RSZW1vdmUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAg
ICAgICAgICAgdmFyIGlkID0gJChkYXRhLmVsKS5hdHRyKCdpZCcpLnNwbGl0KCdfJylbMV07Ci0g
ICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpUmVtb3ZlUmVxdWVzdGVkJywgeyBpZDogaWQgfSk7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbiAoZSwgZGF0YSkg
ewotICAgICAgICAgICAgdmFyICR0b2RvRWwgPSB0aGlzLiRub2RlLmZpbmQoJyMnICsgZGF0YS5p
ZCk7Ci0gICAgICAgICAgICAkdG9kb0VsLnJlbW92ZSgpOwotICAgICAgICB9OwotCi0gICAgICAg
IHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKLSAgICAgICAgICAgIHZhciAkdG9k
b0VsID0gJChkYXRhLmVsKS5wYXJlbnRzKCdsaScpOwotCi0gICAgICAgICAgICAkdG9kb0VsLnRv
Z2dsZUNsYXNzKCdjb21wbGV0ZWQnKTsKLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlUb2dn
bGVSZXF1ZXN0ZWQnLCB7IGlkOiAkdG9kb0VsLmF0dHIoJ2lkJykgfSk7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb0FkZGVkJywgdGhpcy5yZW5kZXIpOwotICAg
ICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2Rvc0xvYWRlZCcsIHRoaXMucmVuZGVy
QWxsKTsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb3NGaWx0ZXJlZCcs
IHRoaXMucmVuZGVyQWxsKTsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9k
b1RvZ2dsZWRBbGwnLCB0aGlzLnJlbmRlckFsbCk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3Vt
ZW50LCAnZGF0YVRvZG9SZW1vdmVkJywgdGhpcy5yZW1vdmUpOwotCi0gICAgICAgICAgICB0aGlz
Lm9uKCdjbGljaycsIHsgJ2Rlc3Ryb3lTZWxlY3Rvcic6IHRoaXMucmVxdWVzdFJlbW92ZSB9KTsK
LSAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeyAndG9nZ2xlU2VsZWN0b3InOiB0aGlzLnRv
Z2dsZSB9KTsKLSAgICAgICAgICAgIHRoaXMub24oJ2RibGNsaWNrJywgeyAnbGFiZWxTZWxlY3Rv
cic6IHRoaXMuZWRpdCB9KTsKLQotICAgICAgICAgICAgdGhpcy4kbm9kZS5vbignYmx1cicsICcu
ZWRpdCcsIHRoaXMucmVxdWVzdFVwZGF0ZS5iaW5kKHRoaXMpKTsKLSAgICAgICAgICAgIHRoaXMu
JG5vZGUub24oJ2tleWRvd24nLCAnLmVkaXQnLCB0aGlzLnJlcXVlc3RVcGRhdGVPbkVudGVyLmJp
bmQodGhpcykpOwotCi0gICAgICAgICAgICAvLyB0aGVzZSBkb24ndCB3b3JrCi0gICAgICAgICAg
ICAvLyB0aGlzLm9uKHRoaXMuYXR0ci5lZGl0U2VsZWN0b3IsICdibHVyJywgdGhpcy5yZXF1ZXN0
VXBkYXRlKTsKLSAgICAgICAgICAgIC8vIHRoaXMub24oJ2JsdXInLCB7ICdlZGl0U2VsZWN0b3In
OiB0aGlzLnJlcXVlc3RVcGRhdGUgfSk7Ci0KLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlM
b2FkUmVxdWVzdGVkJyk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHJldHVybiBkZWZpbmVD
b21wb25lbnQodG9kb0xpc3QpOwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Fw
cC9qcy91aS90b2dnbGVfYWxsLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvdG9nZ2xl
X2FsbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjNjk4M2MzMWFiNmZjMWIx
NzE4MDU4NTcwZDQyMzdkZjc0NzQ4YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2dnbGVfYWxsLmpzCisr
KyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLypnbG9iYWwgZGVmaW5lICovCi0ndXNlIHN0
cmljdCc7Ci0KLWRlZmluZShbCi0gICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JwotXSwgZnVuY3Rp
b24gKGRlZmluZUNvbXBvbmVudCkgewotICAgIGZ1bmN0aW9uIHRvZ2dsZUFsbCgpIHsKLSAgICAg
ICAgdGhpcy50b2dnbGVBbGxDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRo
aXMudHJpZ2dlcigndWlUb2dnbGVBbGxSZXF1ZXN0ZWQnLCB7Ci0gICAgICAgICAgICAgICAgY29t
cGxldGVkOiB0aGlzLiRub2RlLmlzKCc6Y2hlY2tlZCcpCi0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfTsKLQotICAgICAgICB0aGlzLnRvZ2dsZUNoZWNrYm94ID0gZnVuY3Rpb24gKGUsIGRhdGEp
IHsKLSAgICAgICAgICAgIHRoaXMubm9kZS5jaGVja2VkID0gIWRhdGEucmVtYWluaW5nOwotICAg
ICAgICB9OwotCi0gICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB0aGlzLm9uKCdjbGljaycsIHRoaXMudG9nZ2xlQWxsQ29tcGxldGUpOwot
ICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnLCB0aGlzLnRv
Z2dsZUNoZWNrYm94KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluZUNv
bXBvbmVudCh0b2dnbGVBbGwpOwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Fw
cC9qcy91aS93aXRoX2ZpbHRlcnMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS93aXRo
X2ZpbHRlcnMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZjM0YzhmMDdhNjE0
MDg2ZTAwZmIwYjUyMjUzZjgyMjRhNDRhODIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvd2l0aF9maWx0ZXJz
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLypnbG9iYWwgZGVmaW5lLCAkICov
Ci0ndXNlIHN0cmljdCc7Ci0KLWRlZmluZShmdW5jdGlvbiAoKSB7Ci0gICAgcmV0dXJuIGZ1bmN0
aW9uIHdpdGhGaWx0ZXJzKCkgewotICAgICAgICB0aGlzLmRlZmF1bHRBdHRycyh7Ci0gICAgICAg
ICAgICBmaWx0ZXJTZWxlY3RvcjogJyNmaWx0ZXJzIGEnCi0gICAgICAgIH0pOwotCi0gICAgICAg
IHRoaXMuY2hvb3NlRmlsdGVyID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKLSAgICAgICAgICAgIHZh
ciBmaWx0ZXIgPSBkYXRhLmVsLmhhc2guc2xpY2UoMik7Ci0KLSAgICAgICAgICAgIHRoaXMuc2Vs
ZWN0KCdmaWx0ZXJTZWxlY3RvcicpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOwotICAgICAgICAg
ICAgJChkYXRhLmVsKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKLSAgICAgICAgICAgIHRoaXMudHJp
Z2dlcigndWlGaWx0ZXJSZXF1ZXN0ZWQnLCB7IGZpbHRlcjogZmlsdGVyIH0pOwotICAgICAgICB9
OwotCi0gICAgICAgIHRoaXMubWFya1NlbGVjdGVkID0gZnVuY3Rpb24gKGZpbHRlcikgewotICAg
ICAgICAgICAgdGhpcy4kbm9kZS5maW5kKCdbaHJlZj0iIy8nICsgZmlsdGVyICsgJyJdJykuYWRk
Q2xhc3MoJ3NlbGVjdGVkJyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5hZnRlcignaW5p
dGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeyBm
aWx0ZXJTZWxlY3RvcjogdGhpcy5jaG9vc2VGaWx0ZXIgfSk7Ci0gICAgICAgIH0pOwotICAgIH07
Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3V0aWxzLmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9hcHAvanMvdXRpbHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGFhODU3MzM5MWMwNTRjNDExOGY0NTg0ZjA5OTBiYjNjNmQ4ODNhNDAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAv
anMvdXRpbHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLypnbG9iYWwgZGVm
aW5lICovCi0ndXNlIHN0cmljdCc7Ci0KLS8vIHRtcGwgZnVuY3Rpb24gc2Nvb3BlZCBmcm9tIHVu
ZGVyc2NvcmUuCi0vLyBodHRwOi8vZG9jdW1lbnRjbG91ZC5naXRodWIuY29tL3VuZGVyc2NvcmUv
I3RlbXBsYXRlCi1kZWZpbmUoZnVuY3Rpb24gKCkgewotICAgIHZhciBfID0ge307Ci0KLSAgICAv
LyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLgotICAgIHZhciBlbnRpdHlNYXAg
PSB7Ci0gICAgICAgIGVzY2FwZTogewotICAgICAgICAgICAgJyYnOiAnJmFtcDsnLAotICAgICAg
ICAgICAgJzwnOiAnJmx0OycsCi0gICAgICAgICAgICAnPic6ICcmZ3Q7JywKLSAgICAgICAgICAg
ICciJzogJyZxdW90OycsCi0gICAgICAgICAgICAvKmpzaGludCBxdW90bWFyazpmYWxzZSAqLwot
ICAgICAgICAgICAgIiciOiAnJiN4Mjc7JywKLSAgICAgICAgICAgICcvJzogJyYjeDJGOycKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB2YXIgZXNjYXBlS2V5cyA9ICcmPD4iXCcvJzsKLSAgICB2
YXIgdW5lc2NhcGVLZXlzID0gJyZhbXA7fCZsdDt8Jmd0O3wmcXVvdDt8JiN4Mjc7fCYjeDJGOyc7
Ci0KLSAgICAvLyBSZWdleGVzIGNvbnRhaW5pbmcgdGhlIGtleXMgYW5kIHZhbHVlcyBsaXN0ZWQg
aW1tZWRpYXRlbHkgYWJvdmUuCi0gICAgdmFyIGVudGl0eVJlZ2V4ZXMgPSB7Ci0gICAgICAgIGVz
Y2FwZTogICBuZXcgUmVnRXhwKCdbJyArIGVzY2FwZUtleXMgKyAnXScsICdnJyksCi0gICAgICAg
IHVuZXNjYXBlOiBuZXcgUmVnRXhwKCcoJyArIHVuZXNjYXBlS2V5cyArICcpJywgJ2cnKQotICAg
IH07Ci0KLSAgICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmlu
Z3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uCi0gICAgWydlc2NhcGUnLCAndW5lc2NhcGUn
XS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHsKLSAgICAgICAgX1ttZXRob2RdID0gZnVuY3Rp
b24gKHN0cmluZykgewotICAgICAgICAgICAgaWYgKHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcg
PT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIHJldHVybiAnJzsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuICgnJyArIHN0cmluZykucmVwbGFjZShlbnRpdHlSZWdl
eGVzW21ldGhvZF0sIGZ1bmN0aW9uIChtYXRjaCkgewotICAgICAgICAgICAgICAgIHJldHVybiBl
bnRpdHlNYXBbbWV0aG9kXVttYXRjaF07Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLSAg
ICB9KTsKLQotICAgIHZhciBzZXR0aW5ncyA9IHsKLSAgICAgICAgZXZhbHVhdGU6IC88JShbXHNc
U10rPyklPi9nLAotICAgICAgICBpbnRlcnBvbGF0ZTogLzwlPShbXHNcU10rPyklPi9nLAotICAg
ICAgICBlc2NhcGU6IC88JS0oW1xzXFNdKz8pJT4vZwotICAgIH07Ci0KLSAgICB2YXIgbm9NYXRj
aCA9IC8oLileLzsKLSAgICB2YXIgZXNjYXBlcyA9IHsKLSAgICAgICAgLypqc2hpbnQgcXVvdG1h
cms6ZmFsc2UgKi8KLSAgICAgICAgIiciOiAiJyIsCi0gICAgICAgICdcXCc6ICdcXCcsCi0gICAg
ICAgICdccic6ICdyJywKLSAgICAgICAgJ1xuJzogJ24nLAotICAgICAgICAnXHQnOiAndCcsCi0g
ICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAotICAgICAgICAnXHUyMDI5JzogJ3UyMDI5JwotICAg
IH07Ci0KLSAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsK
LQotICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJl
c2lnJ3MgaW1wbGVtZW50YXRpb24uCi0gICAgLy8gVW5kZXJzY29yZSB0ZW1wbGF0aW5nIGhhbmRs
ZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3aGl0ZXNwYWNlLAotICAgIC8vIGFu
ZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgotICAg
IHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uICh0ZXh0LCBkYXRhKSB7Ci0gICAgICAgIHZhciByZW5k
ZXI7Ci0KLSAgICAgICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhw
cmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCi0gICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4
cChbCi0gICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKLSAg
ICAgICAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCi0gICAg
ICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCi0gICAgICAgIF0u
am9pbignfCcpICsgJ3wkJywgJ2cnKTsKLQotICAgICAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0
ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgotICAgICAg
ICB2YXIgaW5kZXggPSAwOwotICAgICAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7Ci0gICAgICAg
IHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbiAobWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xh
dGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKLSAgICAgICAgICAgIHNvdXJjZSArPSB0ZXh0LnNsaWNl
KGluZGV4LCBvZmZzZXQpCi0gICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbiAo
bWF0Y2gpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOwot
ICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChlc2NhcGUpIHsKLSAgICAgICAgICAg
ICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVz
Y2FwZShfX3QpKStcbiciOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGludGVycG9s
YXRlKSB7Ci0gICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBv
bGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoZXZhbHVhdGUpIHsKLSAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZh
bHVhdGUgKyAiXG5fX3ArPSciOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5kZXggPSBv
ZmZzZXQgKyBtYXRjaC5sZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2g7Ci0gICAgICAg
IH0pOwotICAgICAgICBzb3VyY2UgKz0gIic7XG4iOwotCi0gICAgICAgIC8vIElmIGEgdmFyaWFi
bGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCi0g
ICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHsKLSAgICAgICAgICAgIHNvdXJjZSA9ICd3
aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOwotICAgICAgICB9Ci0KLSAgICAgICAg
c291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5wcm90b3R5cGUuam9pbiwiICsKLSAg
ICAgICAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9
O1xuIiArCi0gICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7Ci0KLSAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIC8qanNoaW50IGV2aWw6dHJ1ZSAqLwotICAgICAgICAgICAgcmVu
ZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJj
ZSk7Ci0gICAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICAgICAgZXJyLnNvdXJjZSA9IHNv
dXJjZTsKLSAgICAgICAgICAgIHRocm93IGVycjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChk
YXRhKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24gKGRhdGEpIHsKLSAgICAgICAgICAgIHJl
dHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKLSAgICAgICAgfTsKLQotICAgICAgICAv
LyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBm
b3IgcHJlY29tcGlsYXRpb24uCi0gICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbign
ICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsK
LQotICAgICAgICByZXR1cm4gdGVtcGxhdGU7Ci0gICAgfTsKLQotICAgIHJldHVybiB7Ci0gICAg
ICAgIHRtcGw6IHRlbXBsYXRlCi0gICAgfTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9hcHAvdGVtcGxhdGVzL3N0YXRzLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC90ZW1w
bGF0ZXMvc3RhdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiM2I1Y2Yz
ZjY4YzA2YWUzMTM0ZjQyZTRhMDkwNmExYTcwOGJlNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvc3Rh
dHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTxzcGFuIGlkPSJ0b2RvLWNv
dW50Ij4KLSAgICA8c3Ryb25nPjwlPSByZW1haW5pbmcgJT48L3N0cm9uZz4gPCU9IHJlbWFpbmlu
ZyA9PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJyAlPiBsZWZ0Ci08L3NwYW4+Ci08dWwgaWQ9ImZpbHRl
cnMiPgotICAgIDxsaT4KLSAgICAgICAgPGEgaHJlZj0iIy8iPkFsbDwvYT4KLSAgICA8L2xpPgot
ICAgIDxsaT4KLSAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwvYT4KLSAgICA8L2xp
PgotICAgIDxsaT4KLSAgICAgICAgPGEgaHJlZj0iIy9jb21wbGV0ZWQiPkNvbXBsZXRlZDwvYT4K
LSAgICA8L2xpPgotPC91bD4KLTwlIGlmIChjb21wbGV0ZWQpIHsgJT4KLTxidXR0b24gaWQ9ImNs
ZWFyLWNvbXBsZXRlZCI+Q2xlYXIgY29tcGxldGVkICg8JT0gY29tcGxldGVkICU+KTwvYnV0dG9u
PgotPCUgfSAlPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvdGVtcGxhdGVzL3Rv
ZG8uaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZmY3NTM4OWRmNTcwMTI2MmUxZjUyNjFlYzk0NTMz
MjRjM2ViNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDggKzAsMCBAQAotPGxpIGlkPSI8JT0gaWQgJT4iIGNsYXNzPSI8JT0gY29tcGxldGVkID8g
J2NvbXBsZXRlZCcgOiAnJyAlPiI+Ci0gICAgPGRpdiBjbGFzcz0idmlldyI+Ci0gICAgICAgIDxp
bnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJjaGVja2JveCIgPCU9IGNvbXBsZXRlZCA/ICdjaGVj
a2VkJyA6ICcnICU+PgotICAgICAgICA8bGFiZWw+PCUtIHRpdGxlICU+PC9sYWJlbD4KLSAgICAg
ICAgPGJ1dHRvbiBpZD0iZGVzdHJveV88JT0gaWQgJT4iIGNsYXNzPSJkZXN0cm95Ij48L2J1dHRv
bj4KLSAgICA8L2Rpdj4KLSAgICA8aW5wdXQgY2xhc3M9ImVkaXQiIHZhbHVlPSI8JS0gdGl0bGUg
JT4iPgotPC9saT4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXIuanNvbiBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDVmNTBmNDAxM2VkM2JlYWNmNWY4OGQxY2EzOTAwZGI4OTJkNjA1NC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyLmpz
b24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17Ci0gICJuYW1lIjogImZsaWdodC10
b2RvbXZjIiwKLSAgInZlcnNpb24iOiAiMC4wLjAiLAotICAiZGVwZW5kZW5jaWVzIjogewotICAg
ICJkZXBvdCI6ICJ+MC4xLjQiLAotICAgICJmbGlnaHQiOiAifjEuMS4wIiwKLSAgICAianF1ZXJ5
IjogIjEuOC4zIiwKLSAgICAicmVxdWlyZWpzIjogIn4yLjEuNSIsCi0gICAgInRvZG9tdmMtY29t
bW9uIjogIn4wLjEuNCIsCi0gICAgInJlcXVpcmVqcy10ZXh0IjogIn4yLjAuMTAiCi0gIH0sCi0g
ICJkZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgImphc21pbmUtZmxpZ2h0IjogIn4yLjEuMCIsCi0g
ICAgImphc21pbmUtanF1ZXJ5IjogIn4xLjUuOCIKLSAgfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2RlcG90L2RlcG90LmpzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9ib3dlcl9jb21wb25lbnRzL2RlcG90L2RlcG90LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxYzc2Mzg0MjNkZjRmYjhjY2Q1MTgzZDZiZGQ0ZTE2ODdhZDgzZDA4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvYm93ZXJfY29tcG9uZW50cy9kZXBvdC9kZXBvdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDI1
MSArMCwwIEBACi0vLyBkZXBvdC5qcyB2MC4xLjYKLQotLy8gKGMpIDIwMTMgTWljaGFsIEt1a2xp
cwotLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCi0vLyBodHRwOi8vb3BlbnNvdXJj
ZS5vcmcvbGljZW5zZXMvTUlUCi0KLShmdW5jdGlvbiAobmFtZSwgcm9vdCwgZmFjdG9yeSkgewot
ICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcpIHsKLSAgICBtb2R1bGUuZXhwb3J0cyA9
IGZhY3RvcnkoKTsKLSAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYg
ZGVmaW5lLmFtZCkgewotICAgIGRlZmluZShmYWN0b3J5KTsKLSAgfSBlbHNlIHsKLSAgICByb290
W25hbWVdID0gZmFjdG9yeSgpOwotICB9Ci19KCJkZXBvdCIsIHRoaXMsIGZ1bmN0aW9uICgpIHsK
LQotICAidXNlIHN0cmljdCI7Ci0KLSAgLy8gZGVwb3QgYXBpCi0KLSAgdmFyIGFwaSA9IHsKLQot
ICAgIHNhdmU6IGZ1bmN0aW9uIChyZWNvcmQpIHsKLSAgICAgIHZhciBpZDsKLQotICAgICAgaWYg
KCFyZWNvcmRbdGhpcy5pZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgcmVjb3JkW3RoaXMuaWRBdHRy
aWJ1dGVdID0gZ3VpZCgpOwotICAgICAgfQotCi0gICAgICBpZCA9IHJlY29yZFt0aGlzLmlkQXR0
cmlidXRlXSArICcnOwotCi0gICAgICBpZiAodGhpcy5pZHMuaW5kZXhPZihpZCkgPCAwKSB7Ci0g
ICAgICAgIHRoaXMuaWRzLnB1c2goaWQpOwotICAgICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnNl
dEl0ZW0odGhpcy5uYW1lLCB0aGlzLmlkcy5qb2luKCIsIikpOwotICAgICAgfQotCi0gICAgICB0
aGlzLnN0b3JhZ2VBZGFwdG9yLnNldEl0ZW0oZ2V0S2V5KHRoaXMubmFtZSwgaWQpLCBKU09OLnN0
cmluZ2lmeShyZWNvcmQpKTsKLQotICAgICAgcmV0dXJuIHJlY29yZDsKLSAgICB9LAotCi0gICAg
dXBkYXRlOiBmdW5jdGlvbiAoaWQsIGRhdGEpIHsKLSAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAn
dW5kZWZpbmVkJykgewotICAgICAgICBkYXRhID0gaWQ7Ci0gICAgICAgIGlkID0gZGF0YVt0aGlz
LmlkQXR0cmlidXRlXTsKLSAgICAgIH0KLQotICAgICAgdmFyIHJlY29yZCA9IHRoaXMuZ2V0KGlk
KTsKLQotICAgICAgaWYgKHJlY29yZCkgewotICAgICAgICByZWNvcmQgPSBleHRlbmQocmVjb3Jk
LCBkYXRhKTsKLSAgICAgICAgdGhpcy5zYXZlKHJlY29yZCk7Ci0gICAgICB9Ci0KLSAgICAgIHJl
dHVybiByZWNvcmQ7Ci0gICAgfSwKLQotICAgIHVwZGF0ZUFsbDogZnVuY3Rpb24gKGRhdGEpIHsK
LSAgICAgIHZhciByZWNvcmRzID0gdGhpcy5hbGwoKTsKLQotICAgICAgcmVjb3Jkcy5mb3JFYWNo
KGZ1bmN0aW9uIChyZWNvcmQpIHsKLSAgICAgICAgcmVjb3JkID0gZXh0ZW5kKHJlY29yZCwgZGF0
YSk7Ci0gICAgICAgIHRoaXMuc2F2ZShyZWNvcmQpOwotICAgICAgfSwgdGhpcyk7Ci0KLSAgICAg
IHJldHVybiByZWNvcmRzOwotICAgIH0sCi0KLSAgICBmaW5kOiBmdW5jdGlvbiAoY3JpdGVyaWEp
IHsKLSAgICAgIHZhciBrZXksIG1hdGNoLCByZWNvcmQ7Ci0gICAgICB2YXIgbmFtZSA9IHRoaXMu
bmFtZTsKLSAgICAgIHZhciBzZWxmID0gdGhpczsKLQotICAgICAgaWYgKCFjcml0ZXJpYSkgcmV0
dXJuIHRoaXMuYWxsKCk7Ci0KLSAgICAgIHJldHVybiB0aGlzLmlkcy5yZWR1Y2UoZnVuY3Rpb24g
KG1lbW8sIGlkKSB7Ci0gICAgICAgIHJlY29yZCA9IGpzb25EYXRhKHNlbGYuc3RvcmFnZUFkYXB0
b3IuZ2V0SXRlbShnZXRLZXkobmFtZSwgaWQpKSk7Ci0gICAgICAgIG1hdGNoID0gZmluZE1hdGNo
KGNyaXRlcmlhLCByZWNvcmQpOwotCi0gICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgIG1l
bW8ucHVzaChyZWNvcmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1lbW87Ci0gICAg
ICB9LCBbXSk7Ci0gICAgfSwKLQotICAgIGdldDogZnVuY3Rpb24gKGlkKSB7Ci0gICAgICByZXR1
cm4ganNvbkRhdGEodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGdldEtleSh0aGlzLm5hbWUs
IGlkKSkpOwotICAgIH0sCi0KLSAgICBhbGw6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciByZWNv
cmQsIHNlbGYgPSB0aGlzLCBuYW1lID0gdGhpcy5uYW1lOwotCi0gICAgICByZXR1cm4gdGhpcy5p
ZHMucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBpZCkgewotICAgICAgICByZWNvcmQgPSBzZWxmLnN0
b3JhZ2VBZGFwdG9yLmdldEl0ZW0oZ2V0S2V5KG5hbWUsIGlkKSk7Ci0KLSAgICAgICAgaWYgKHJl
Y29yZCkgewotICAgICAgICAgIG1lbW8ucHVzaChqc29uRGF0YShyZWNvcmQpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBtZW1vOwotICAgICAgfSwgW10pOwotICAgIH0sCi0KLSAgICBk
ZXN0cm95OiBmdW5jdGlvbiAocmVjb3JkKSB7Ci0gICAgICB2YXIgaW5kZXg7Ci0gICAgICB2YXIg
aWQgPSAocmVjb3JkW3RoaXMuaWRBdHRyaWJ1dGVdKSA/IHJlY29yZFt0aGlzLmlkQXR0cmlidXRl
XSA6IHJlY29yZDsKLSAgICAgIHZhciBrZXkgPSBnZXRLZXkodGhpcy5uYW1lLCBpZCk7Ci0KLSAg
ICAgIHJlY29yZCA9IGpzb25EYXRhKHRoaXMuc3RvcmFnZUFkYXB0b3IuZ2V0SXRlbShrZXkpKTsK
LSAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRlbShrZXkpOwotCi0gICAgICBpbmRl
eCA9IHRoaXMuaWRzLmluZGV4T2YoaWQpOwotICAgICAgaWYgKGluZGV4ICE9IC0xKSB0aGlzLmlk
cy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKHRo
aXMubmFtZSwgdGhpcy5pZHMuam9pbigiLCIpKTsKLQotICAgICAgcmV0dXJuIHJlY29yZDsKLSAg
ICB9LAotCi0gICAgZGVzdHJveUFsbDogZnVuY3Rpb24gKGNyaXRlcmlhKSB7Ci0gICAgICB2YXIg
YXR0ciwgaWQsIG1hdGNoLCByZWNvcmQsIGtleTsKLQotICAgICAgZm9yICh2YXIgaSA9IHRoaXMu
aWRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIGlkID0gdGhpcy5pZHNbaV07
Ci0gICAgICAgIGtleSA9IGdldEtleSh0aGlzLm5hbWUsIGlkKTsKLQotICAgICAgICBpZiAoY3Jp
dGVyaWEpIHsKLQotICAgICAgICAgIHJlY29yZCA9IGpzb25EYXRhKHRoaXMuc3RvcmFnZUFkYXB0
b3IuZ2V0SXRlbShrZXkpKTsKLSAgICAgICAgICBtYXRjaCA9IGZpbmRNYXRjaChjcml0ZXJpYSwg
cmVjb3JkKTsKLQotICAgICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgdGhpcy5zdG9y
YWdlQWRhcHRvci5yZW1vdmVJdGVtKGtleSk7Ci0gICAgICAgICAgICB0aGlzLmlkcy5zcGxpY2Uo
aSwgMSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgdGhpcy5zdG9yYWdlQWRhcHRvci5yZW1vdmVJdGVtKGtleSk7Ci0gICAgICAgIH0KLSAgICAg
IH0KLQotICAgICAgaWYgKGNyaXRlcmlhKSB7Ci0gICAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3Iu
c2V0SXRlbSh0aGlzLm5hbWUsIHRoaXMuaWRzLmpvaW4oIiwiKSk7Ci0gICAgICB9Ci0gICAgICBl
bHNlIHsKLSAgICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5yZW1vdmVJdGVtKHRoaXMubmFtZSk7
Ci0gICAgICAgIHRoaXMuaWRzID0gW107Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHNpemU6IGZ1
bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiB0aGlzLmlkcy5sZW5ndGg7Ci0gICAgfQotICB9Owot
Ci0gIC8vIGhlbHBlcnMKLQotICBmdW5jdGlvbiBqc29uRGF0YShkYXRhKSB7Ci0gICAgcmV0dXJu
IGRhdGEgJiYgSlNPTi5wYXJzZShkYXRhKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldEtleShuYW1l
LCBpZCkgewotICAgIHJldHVybiBuYW1lICsgIi0iICsgaWQ7Ci0gIH0KLQotICBmdW5jdGlvbiBm
aW5kTWF0Y2goY3JpdGVyaWEsIHJlY29yZCkgewotICAgIHZhciBtYXRjaCwgYXR0cjsKLQotICAg
IGlmICh0eXBlb2YgY3JpdGVyaWEgPT0gJ2Z1bmN0aW9uJykgewotICAgICAgbWF0Y2ggPSBjcml0
ZXJpYShyZWNvcmQpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIG1hdGNoID0gdHJ1ZTsKLSAg
ICAgIGZvciAoYXR0ciBpbiBjcml0ZXJpYSkgewotICAgICAgICBtYXRjaCAmPSAoY3JpdGVyaWFb
YXR0cl0gPT09IHJlY29yZFthdHRyXSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1h
dGNoOwotICB9Ci0KLSAgZnVuY3Rpb24gczQoKSB7Ci0gICAgcmV0dXJuIE1hdGguZmxvb3IoKDEg
KyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApCi0gICAgICAudG9TdHJpbmcoMTYpLnN1YnN0cmlu
ZygxKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGd1aWQoKSB7Ci0gICAgcmV0dXJuIHM0KCkgKyBzNCgp
ICsgJy0nICsgczQoKSArICctJyArIHM0KCkgKwotICAgICAgJy0nICtzNCgpICsgJy0nICsgczQo
KSArIHM0KCkgKyBzNCgpOwotICB9Ci0KLSAgZnVuY3Rpb24gZXh0ZW5kKGRlc3QsIHNvdXJjZSkg
ewotICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKLSAgICAgIGlmIChzb3VyY2UuaGFzT3du
UHJvcGVydHkoa2V5KSkgewotICAgICAgICBkZXN0W2tleV0gPSBzb3VyY2Vba2V5XTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZGVzdDsKLSAgfQotCi0gIGZ1bmN0aW9uIGRlcG90KG5h
bWUsIG9wdGlvbnMpIHsKLSAgICB2YXIgc3RvcmUsIGlkczsKLQotICAgIHZhciBkYXRhID0ge307
Ci0gICAgdmFyIGxvY2FsU3RvcmFnZSA9IHsKLSAgICAgICAgZ2V0SXRlbTogZnVuY3Rpb24gKGtl
eSkgeyByZXR1cm4gZGF0YVtrZXldOyB9LAotICAgICAgICBzZXRJdGVtOiBmdW5jdGlvbiAoa2V5
LCB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKCFkYXRhW2tleV0pCi0gICAgICAgICAgICAgICAg
dGhpcy5sZW5ndGgrKzsKLSAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlOwotICAgICAgICB9
LAotICAgICAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAgICAgICBkZWxl
dGUgZGF0YVtrZXldOwotICAgICAgICAgICAgdGhpcy5sZW5ndGgtLTsKLSAgICAgICAgfSwKLSAg
ICAgICAga2V5OiBmdW5jdGlvbiAoaW5kZXgpIHsKLSAgICAgICAgICAgIHZhciBpID0gMDsKLSAg
ICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkg
PT0gaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7Ci0gICAgICAgICAgICAg
ICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
IH0sCi0gICAgICAgIGxlbmd0aDogMCwKLSAgICB9OwotCi0gICAgb3B0aW9ucyA9IGV4dGVuZCh7
Ci0gICAgICBpZEF0dHJpYnV0ZTogJ19pZCcsCi0gICAgICBzdG9yYWdlQWRhcHRvcjogbG9jYWxT
dG9yYWdlCi0gICAgfSwgb3B0aW9ucyk7Ci0KLSAgICBpZiAoIW9wdGlvbnMuc3RvcmFnZUFkYXB0
b3IpIHRocm93IG5ldyBFcnJvcigiTm8gc3RvcmFnZSBhZGFwdG9yIHdhcyBmb3VuZCIpOwotCi0g
ICAgc3RvcmUgPSBvcHRpb25zLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0obmFtZSk7Ci0gICAgaWRz
ID0gKHN0b3JlICYmIHN0b3JlLnNwbGl0KCIsIikpIHx8IFtdOwotCi0gICAgcmV0dXJuIE9iamVj
dC5jcmVhdGUoYXBpLCB7Ci0gICAgICBuYW1lOiB7IHZhbHVlOiBuYW1lIH0sCi0gICAgICBzdG9y
ZTogeyB2YWx1ZTogc3RvcmUgfSwKLSAgICAgIGlkczogeyB2YWx1ZTogaWRzLCB3cml0YWJsZTog
dHJ1ZSB9LAotICAgICAgaWRBdHRyaWJ1dGU6IHsgdmFsdWU6IG9wdGlvbnMuaWRBdHRyaWJ1dGUg
fSwKLSAgICAgIHN0b3JhZ2VBZGFwdG9yOiB7IHZhbHVlOiBvcHRpb25zLnN0b3JhZ2VBZGFwdG9y
IH0KLSAgICB9KTsKLSAgfQotCi0gIHJldHVybiBkZXBvdDsKLX0pKTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFiNDZjYmMxZmE2MWY1Y2E0NDJmNGZkNWRjZDc2
MDQxOTYxYmU5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0uanMK
KysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMDktMjAxMiBi
eSBjb250cmlidXRvcnMsIE1JVCBMaWNlbnNlCi0vLyB2aW06IHRzPTQgc3RzPTQgc3c9NCBleHBh
bmR0YWIKLQotLy8gTW9kdWxlIHN5c3RlbXMgbWFnaWMgZGFuY2UKLShmdW5jdGlvbiAoZGVmaW5p
dGlvbikgewotICAgIC8vIFJlcXVpcmVKUwotICAgIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5j
dGlvbiIpIHsKLSAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pOwotICAgIC8vIFlVSTMKLSAgICB9
IGVsc2UgaWYgKHR5cGVvZiBZVUkgPT0gImZ1bmN0aW9uIikgewotICAgICAgICBZVUkuYWRkKCJl
czUtc2hhbSIsIGRlZmluaXRpb24pOwotICAgIC8vIENvbW1vbkpTIGFuZCA8c2NyaXB0PgotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGRlZmluaXRpb24oKTsKLSAgICB9Ci19KShmdW5jdGlvbiAoKSB7
Ci0KLS8vIEVTNSAxNS4yLjMuMgotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjIK
LWlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7Ci0gICAgLy8gaHR0cHM6Ly9naXRodWIuY29t
L2tyaXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMjaXNzdWUvMgotICAgIC8vIGh0dHA6Ly9lam9obi5v
cmcvYmxvZy9vYmplY3RnZXRwcm90b3R5cGVvZi8KLSAgICAvLyByZWNvbW1lbmRlZCBieSBmc2No
YWVmZXIgb24gZ2l0aHViCi0gICAgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0
UHJvdG90eXBlT2Yob2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8
ICgKLSAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvcgotICAgICAgICAgICAgICAgID8gb2Jq
ZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZQotICAgICAgICAgICAgICAgIDogcHJvdG90eXBlT2ZP
YmplY3QKLSAgICAgICAgKTsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUuMi4zLjMKLS8vIGh0dHA6
Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4zCi1pZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IpIHsKLSAgICB2YXIgRVJSX05PTl9PQkpFQ1QgPSAiT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSBub24tb2JqZWN0OiAiOwotCi0gICAgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmplY3QsIHByb3BlcnR5KSB7Ci0gICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2Jq
ZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkg
ewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCArIG9iamVj
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgb2JqZWN0IGRvZXMgbm90IG93bnMgcHJvcGVy
dHkgcmV0dXJuIHVuZGVmaW5lZCBpbW1lZGlhdGVseS4KLSAgICAgICAgaWYgKCFvd25zKG9iamVj
dCwgcHJvcGVydHkpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBJZiBvYmplY3QgaGFzIGEgcHJvcGVydHkgdGhlbiBpdCdzIGZvciBzdXJlIGJvdGggYGVu
dW1lcmFibGVgIGFuZAotICAgICAgICAvLyBgY29uZmlndXJhYmxlYC4KLSAgICAgICAgdmFyIGRl
c2NyaXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsKLQot
ICAgICAgICAvLyBJZiBKUyBlbmdpbmUgc3VwcG9ydHMgYWNjZXNzb3IgcHJvcGVydGllcyB0aGVu
IHByb3BlcnR5IG1heSBiZSBhCi0gICAgICAgIC8vIGdldHRlciBvciBzZXR0ZXIuCi0gICAgICAg
IGlmIChzdXBwb3J0c0FjY2Vzc29ycykgewotICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSBg
X19sb29rdXBHZXR0ZXJfX2Agd2lsbCByZXR1cm4gYSBnZXR0ZXIgZXZlbgotICAgICAgICAgICAg
Ly8gaWYgb2JqZWN0IGhhcyBvd24gbm9uIGdldHRlciBwcm9wZXJ0eSBhbG9uZyB3aXRoIGEgc2Ft
ZSBuYW1lZAotICAgICAgICAgICAgLy8gaW5oZXJpdGVkIGdldHRlci4gVG8gYXZvaWQgbWlzYmVo
YXZpb3Igd2UgdGVtcG9yYXJ5IHJlbW92ZQotICAgICAgICAgICAgLy8gYF9fcHJvdG9fX2Agc28g
dGhhdCBgX19sb29rdXBHZXR0ZXJfX2Agd2lsbCByZXR1cm4gZ2V0dGVyIG9ubHkKLSAgICAgICAg
ICAgIC8vIGlmIGl0J3Mgb3duZWQgYnkgYW4gb2JqZWN0LgotICAgICAgICAgICAgdmFyIHByb3Rv
dHlwZSA9IG9iamVjdC5fX3Byb3RvX187Ci0gICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0g
cHJvdG90eXBlT2ZPYmplY3Q7Ci0KLSAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBsb29rdXBHZXR0
ZXIob2JqZWN0LCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB2YXIgc2V0dGVyID0gbG9va3VwU2V0
dGVyKG9iamVjdCwgcHJvcGVydHkpOwotCi0gICAgICAgICAgICAvLyBPbmNlIHdlIGhhdmUgZ2V0
dGVyIGFuZCBzZXR0ZXIgd2UgY2FuIHB1dCB2YWx1ZXMgYmFjay4KLSAgICAgICAgICAgIG9iamVj
dC5fX3Byb3RvX18gPSBwcm90b3R5cGU7Ci0KLSAgICAgICAgICAgIGlmIChnZXR0ZXIgfHwgc2V0
dGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldHRlcikgewotICAgICAgICAgICAgICAgICAg
ICBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKHNldHRlcikgewotICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldCA9
IHNldHRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gSWYgaXQgd2Fz
IGFjY2Vzc29yIHByb3BlcnR5IHdlJ3JlIGRvbmUgYW5kIHJldHVybiBoZXJlCi0gICAgICAgICAg
ICAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgYWRkaW5nIGB2YWx1ZWAgdG8gdGhlIGRlc2NyaXB0
b3IuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBnb3QgdGhpcyBmYXIgd2Uga25vdyB0aGF0IG9i
amVjdCBoYXMgYW4gb3duIHByb3BlcnR5IHRoYXQgaXMKLSAgICAgICAgLy8gbm90IGFuIGFjY2Vz
c29yIHNvIHdlIHNldCBpdCBhcyBhIHZhbHVlIGFuZCByZXR1cm4gZGVzY3JpcHRvci4KLSAgICAg
ICAgZGVzY3JpcHRvci52YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07Ci0gICAgICAgIHJldHVybiBk
ZXNjcmlwdG9yOwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS4yLjMuNAotLy8gaHR0cDovL2VzNS5n
aXRodWIuY29tLyN4MTUuMi4zLjQKLWlmICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHsK
LSAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOwotICAg
IH07Ci19Ci0KLS8vIEVTNSAxNS4yLjMuNQotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUu
Mi4zLjUKLWlmICghT2JqZWN0LmNyZWF0ZSkgewotICAgIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlv
biBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7Ci0gICAgICAgIHZhciBvYmplY3Q7Ci0g
ICAgICAgIGlmIChwcm90b3R5cGUgPT09IG51bGwpIHsKLSAgICAgICAgICAgIG9iamVjdCA9IHsg
Il9fcHJvdG9fXyI6IG51bGwgfTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICh0
eXBlb2YgcHJvdG90eXBlICE9ICJvYmplY3QiKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0eXBlb2YgcHJvdG90eXBlKSsiXSAhPSAn
b2JqZWN0JyIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIFR5cGUgPSBmdW5jdGlv
biAoKSB7fTsKLSAgICAgICAgICAgIFR5cGUucHJvdG90eXBlID0gcHJvdG90eXBlOwotICAgICAg
ICAgICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKLSAgICAgICAgICAgIC8vIElFIGhhcyBubyBidWls
dC1pbiBpbXBsZW1lbnRhdGlvbiBvZiBgT2JqZWN0LmdldFByb3RvdHlwZU9mYAotICAgICAgICAg
ICAgLy8gbmVpdGhlciBgX19wcm90b19fYCwgYnV0IHRoaXMgbWFudWFsbHkgc2V0dGluZyBgX19w
cm90b19fYCB3aWxsCi0gICAgICAgICAgICAvLyBndWFyYW50ZWUgdGhhdCBgT2JqZWN0LmdldFBy
b3RvdHlwZU9mYCB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQgd2l0aAotICAgICAgICAgICAgLy8gb2Jq
ZWN0cyBjcmVhdGVkIHVzaW5nIGBPYmplY3QuY3JlYXRlYAotICAgICAgICAgICAgb2JqZWN0Ll9f
cHJvdG9fXyA9IHByb3RvdHlwZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocHJvcGVydGllcyAh
PT0gdm9pZCAwKSB7Ci0gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3Qs
IHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfTsK
LX0KLQotLy8gRVM1IDE1LjIuMy42Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMu
NgotCi0vLyBQYXRjaCBmb3IgV2ViS2l0IGFuZCBJRTggc3RhbmRhcmQgbW9kZQotLy8gRGVzaWdu
ZWQgYnkgaGF4IDxoYXguZ2l0aHViLmNvbT4KLS8vIHJlbGF0ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0
aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0vaXNzdWVzI2lzc3VlLzUKLS8vIElFOCBSZWZlcmVu
Y2U6Ci0vLyAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2RkMjgy
OTAwLmFzcHgKLS8vICAgICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
ZGQyMjk5MTYuYXNweAotLy8gV2ViS2l0IEJ1Z3M6Ci0vLyAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDIzCi0KLWZ1bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0
eVdvcmsob2JqZWN0KSB7Ci0gICAgdHJ5IHsKLSAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KG9iamVjdCwgInNlbnRpbmVsIiwge30pOwotICAgICAgICByZXR1cm4gInNlbnRpbmVsIiBpbiBv
YmplY3Q7Ci0gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIHJldHVybnMgZmFs
c3kKLSAgICB9Ci19Ci0KLS8vIGNoZWNrIHdoZXRoZXIgZGVmaW5lUHJvcGVydHkgd29ya3MgaWYg
aXQncyBnaXZlbi4gT3RoZXJ3aXNlLAotLy8gc2hpbSBwYXJ0aWFsbHkuCi1pZiAoT2JqZWN0LmRl
ZmluZVByb3BlcnR5KSB7Ci0gICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCA9IGRv
ZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOwotICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25E
b20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIgfHwKLSAgICAgICAgZG9lc0RlZmlu
ZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Ci0gICAgaWYgKCFk
ZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSkg
ewotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eTsKLSAgICB9Ci19Ci0KLWlmICghT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGRlZmluZVBy
b3BlcnR5RmFsbGJhY2spIHsKLSAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiA9ICJQ
cm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjsKLSAgICB2YXIgRVJSX05P
Tl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9i
amVjdDogIgotICAgIHZhciBFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQgPSAiZ2V0dGVycyAm
IHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIgKwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7Ci0KLSAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5
LCBkZXNjcmlwdG9yKSB7Ci0gICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAm
JiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkgewotICAg
ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQgKyBvYmpl
Y3QpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVj
dCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0g
bnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9E
RVNDUklQVE9SICsgZGVzY3JpcHRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gbWFrZSBhIHZh
bGlhbnQgYXR0ZW1wdCB0byB1c2UgdGhlIHJlYWwgZGVmaW5lUHJvcGVydHkKLSAgICAgICAgLy8g
Zm9yIEk4J3MgRE9NIGVsZW1lbnRzLgotICAgICAgICBpZiAoZGVmaW5lUHJvcGVydHlGYWxsYmFj
aykgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJv
cGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7
Ci0gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAvLyB0
cnkgdGhlIHNoaW0gaWYgdGhlIHJlYWwgb25lIGRvZXNuJ3Qgd29yawotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgaXQncyBhIGRhdGEgcHJvcGVydHkuCi0gICAgICAg
IGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7Ci0gICAgICAgICAgICAvLyBmYWlsIHNp
bGVudGx5IGlmICJ3cml0YWJsZSIsICJlbnVtZXJhYmxlIiwgb3IgImNvbmZpZ3VyYWJsZSIKLSAg
ICAgICAgICAgIC8vIGFyZSByZXF1ZXN0ZWQgYnV0IG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgICAg
IC8qCi0gICAgICAgICAgICAvLyBhbHRlcm5hdGUgYXBwcm9hY2g6Ci0gICAgICAgICAgICBpZiAo
IC8vIGNhbid0IGltcGxlbWVudCB0aGVzZSBmZWF0dXJlczsgYWxsb3cgZmFsc2UgYnV0IG5vdCB0
cnVlCi0gICAgICAgICAgICAgICAgIShvd25zKGRlc2NyaXB0b3IsICJ3cml0YWJsZSIpID8gZGVz
Y3JpcHRvci53cml0YWJsZSA6IHRydWUpIHx8Ci0gICAgICAgICAgICAgICAgIShvd25zKGRlc2Ny
aXB0b3IsICJlbnVtZXJhYmxlIikgPyBkZXNjcmlwdG9yLmVudW1lcmFibGUgOiB0cnVlKSB8fAot
ICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAiY29uZmlndXJhYmxlIikgPyBkZXNj
cmlwdG9yLmNvbmZpZ3VyYWJsZSA6IHRydWUpCi0gICAgICAgICAgICApCi0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJUaGlzIGltcGxl
bWVudGF0aW9uIG9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBkb2VzIG5vdCAiICsKLSAgICAgICAg
ICAgICAgICAgICAgInN1cHBvcnQgY29uZmlndXJhYmxlLCBlbnVtZXJhYmxlLCBvciB3cml0YWJs
ZS4iCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIGlm
IChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihvYmpl
Y3QsIHByb3BlcnR5KSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQXMgYWNj
ZXNzb3JzIGFyZSBzdXBwb3J0ZWQgb25seSBvbiBlbmdpbmVzIGltcGxlbWVudGluZwotICAgICAg
ICAgICAgICAgIC8vIGBfX3Byb3RvX19gIHdlIGNhbiBzYWZlbHkgb3ZlcnJpZGUgYF9fcHJvdG9f
X2Agd2hpbGUgZGVmaW5pbmcKLSAgICAgICAgICAgICAgICAvLyBhIHByb3BlcnR5IHRvIG1ha2Ug
c3VyZSB0aGF0IHdlIGRvbid0IGhpdCBhbiBpbmhlcml0ZWQKLSAgICAgICAgICAgICAgICAvLyBh
Y2Nlc3Nvci4KLSAgICAgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9f
XzsKLSAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7
Ci0gICAgICAgICAgICAgICAgLy8gRGVsZXRpbmcgYSBwcm9wZXJ0eSBhbnl3YXkgc2luY2UgZ2V0
dGVyIC8gc2V0dGVyIG1heSBiZQotICAgICAgICAgICAgICAgIC8vIGRlZmluZWQgb24gb2JqZWN0
IGl0c2VsZi4KLSAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTsKLSAgICAg
ICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKLSAgICAgICAg
ICAgICAgICAvLyBTZXR0aW5nIG9yaWdpbmFsIGBfX3Byb3RvX19gIGJhY2sgbm93LgotICAgICAg
ICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFzdXBw
b3J0c0FjY2Vzc29ycykgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJS
X0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8v
IElmIHdlIGdvdCB0aGF0IGZhciB0aGVuIGdldHRlcnMgYW5kIHNldHRlcnMgY2FuIGJlIGRlZmlu
ZWQgISEKLSAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJnZXQiKSkgewotICAgICAg
ICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAic2V0Iikp
IHsKLSAgICAgICAgICAgICAgICBkZWZpbmVTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3Jp
cHRvci5zZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBvYmpl
Y3Q7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjIuMy43Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3gxNS4yLjMuNwotaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcykgewotICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHBy
b3BlcnRpZXMpIHsKLSAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgewot
ICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJvcGVydHkpICYmIHByb3BlcnR5ICE9
ICJfX3Byb3RvX18iKSB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9i
amVjdCwgcHJvcGVydHksIHByb3BlcnRpZXNbcHJvcGVydHldKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS4y
LjMuOAotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjgKLWlmICghT2JqZWN0LnNl
YWwpIHsKLSAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7Ci0gICAgICAg
IC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQK
LSAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3Jh
ZGUgdG8gd29ya2luZwotICAgICAgICAvLyBidXQgaW5zZWN1cmUgY29kZS4KLSAgICAgICAgcmV0
dXJuIG9iamVjdDsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUuMi4zLjkKLS8vIGh0dHA6Ly9lczUu
Z2l0aHViLmNvbS8jeDE1LjIuMy45Ci1pZiAoIU9iamVjdC5mcmVlemUpIHsKLSAgICBPYmplY3Qu
ZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewotICAgICAgICAvLyB0aGlzIGlzIG1p
c2xlYWRpbmcgYW5kIGJyZWFrcyBmZWF0dXJlLWRldGVjdGlvbiwgYnV0Ci0gICAgICAgIC8vIGFs
bG93cyAic2VjdXJhYmxlIiBjb2RlIHRvICJncmFjZWZ1bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcK
LSAgICAgICAgLy8gYnV0IGluc2VjdXJlIGNvZGUuCi0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0g
ICAgfTsKLX0KLQotLy8gZGV0ZWN0IGEgUmhpbm8gYnVnIGFuZCBwYXRjaCBpdAotdHJ5IHsKLSAg
ICBPYmplY3QuZnJlZXplKGZ1bmN0aW9uICgpIHt9KTsKLX0gY2F0Y2ggKGV4Y2VwdGlvbikgewot
ICAgIE9iamVjdC5mcmVlemUgPSAoZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCkgewotICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewotICAgICAgICAgICAgaWYgKHR5
cGVvZiBvYmplY3QgPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBmcmVlemVP
YmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9KShPYmplY3Qu
ZnJlZXplKTsKLX0KLQotLy8gRVM1IDE1LjIuMy4xMAotLy8gaHR0cDovL2VzNS5naXRodWIuY29t
LyN4MTUuMi4zLjEwCi1pZiAoIU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucykgewotICAgIE9iamVj
dC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCkg
ewotICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcgYW5kIGJyZWFrcyBmZWF0dXJlLWRldGVj
dGlvbiwgYnV0Ci0gICAgICAgIC8vIGFsbG93cyAic2VjdXJhYmxlIiBjb2RlIHRvICJncmFjZWZ1
bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcKLSAgICAgICAgLy8gYnV0IGluc2VjdXJlIGNvZGUuCi0g
ICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjIuMy4xMQotLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjExCi1pZiAoIU9iamVjdC5pc1NlYWxlZCkg
ewotICAgIE9iamVjdC5pc1NlYWxlZCA9IGZ1bmN0aW9uIGlzU2VhbGVkKG9iamVjdCkgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjIuMy4xMgotLy8gaHR0
cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEyCi1pZiAoIU9iamVjdC5pc0Zyb3plbikgewot
ICAgIE9iamVjdC5pc0Zyb3plbiA9IGZ1bmN0aW9uIGlzRnJvemVuKG9iamVjdCkgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjIuMy4xMwotLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEzCi1pZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHsK
LSAgICBPYmplY3QuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKG9iamVjdCkg
ewotICAgICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QgdGhyb3cgYSBUeXBlRXJy
b3IgZXhjZXB0aW9uLgotICAgICAgICBpZiAoT2JqZWN0KG9iamVjdCkgIT09IG9iamVjdCkgewot
ICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKLSAgICAg
ICAgfQotICAgICAgICAvLyAyLiBSZXR1cm4gdGhlIEJvb2xlYW4gdmFsdWUgb2YgdGhlIFtbRXh0
ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0gICAgICAgIHZhciBuYW1lID0gJyc7
Ci0gICAgICAgIHdoaWxlIChvd25zKG9iamVjdCwgbmFtZSkpIHsKLSAgICAgICAgICAgIG5hbWUg
Kz0gJz8nOwotICAgICAgICB9Ci0gICAgICAgIG9iamVjdFtuYW1lXSA9IHRydWU7Ci0gICAgICAg
IHZhciByZXR1cm5WYWx1ZSA9IG93bnMob2JqZWN0LCBuYW1lKTsKLSAgICAgICAgZGVsZXRlIG9i
amVjdFtuYW1lXTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH07Ci19Ci0KLX0p
OwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2VzNS1zaGlt
L2VzNS1zaGltLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2VzNS1zaGlt
L2VzNS1zaGltLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTkxOTdkYjQ1ZjY1
M2IxODk2MGE4ZTgyMjQzMWExZjIyZWQzOTc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUt
c2hpbS9lczUtc2hpbS5qcworKysgL2Rldi9udWxsCkBAIC0xLDc3OCArMCwwIEBACi0vLyBDb3B5
cmlnaHQgMjAwOS0yMDEyIGJ5IGNvbnRyaWJ1dG9ycywgTUlUIExpY2Vuc2UKLS8vIHZpbTogdHM9
NCBzdHM9NCBzdz00IGV4cGFuZHRhYgotCi0vLyBNb2R1bGUgc3lzdGVtcyBtYWdpYyBkYW5jZQot
KGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7Ci0gICAgLy8gUmVxdWlyZUpTCi0gICAgaWYgKHR5cGVv
ZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgewotICAgICAgICBkZWZpbmUoZGVmaW5pdGlvbik7Ci0g
ICAgLy8gWVVJMwotICAgIH0gZWxzZSBpZiAodHlwZW9mIFlVSSA9PSAiZnVuY3Rpb24iKSB7Ci0g
ICAgICAgIFlVSS5hZGQoImVzNSIsIGRlZmluaXRpb24pOwotICAgIC8vIENvbW1vbkpTIGFuZCA8
c2NyaXB0PgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlZmluaXRpb24oKTsKLSAgICB9Ci19KShm
dW5jdGlvbiAoKSB7Ci0KLS8qKgotICogQnJpbmdzIGFuIGVudmlyb25tZW50IGFzIGNsb3NlIHRv
IEVDTUFTY3JpcHQgNSBjb21wbGlhbmNlCi0gKiBhcyBpcyBwb3NzaWJsZSB3aXRoIHRoZSBmYWNp
bGl0aWVzIG9mIGVyc3R3aGlsZSBlbmdpbmVzLgotICoKLSAqIEFubm90YXRlZCBFUzU6IGh0dHA6
Ly9lczUuZ2l0aHViLmNvbS8gKHNwZWNpZmljIGxpbmtzIGJlbG93KQotICogRVM1IFNwZWM6IGh0
dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1T
VC9FY21hLTI2Mi5wZGYKLSAqIFJlcXVpcmVkIHJlYWRpbmc6IGh0dHA6Ly9qYXZhc2NyaXB0d2Vi
bG9nLndvcmRwcmVzcy5jb20vMjAxMS8xMi8wNS9leHRlbmRpbmctamF2YXNjcmlwdC1uYXRpdmVz
LwotICovCi0KLS8vCi0vLyBGdW5jdGlvbgotLy8gPT09PT09PT0KLS8vCi0KLS8vIEVTLTUgMTUu
My40LjUKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjMuNC41Ci0KLWlmICghRnVuY3Rp
b24ucHJvdG90eXBlLmJpbmQpIHsKLSAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0
aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKLSAgICAgICAgLy8gMS4gTGV0IFRhcmdl
dCBiZSB0aGUgdGhpcyB2YWx1ZS4KLSAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7Ci0gICAgICAg
IC8vIDIuIElmIElzQ2FsbGFibGUoVGFyZ2V0KSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3Ig
ZXhjZXB0aW9uLgotICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAiZnVuY3Rpb24iKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBj
YWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOwotICAgICAgICB9Ci0gICAgICAgIC8v
IDMuIExldCBBIGJlIGEgbmV3IChwb3NzaWJseSBlbXB0eSkgaW50ZXJuYWwgbGlzdCBvZiBhbGwg
b2YgdGhlCi0gICAgICAgIC8vICAgYXJndW1lbnQgdmFsdWVzIHByb3ZpZGVkIGFmdGVyIHRoaXNB
cmcgKGFyZzEsIGFyZzIgZXRjKSwgaW4gb3JkZXIuCi0gICAgICAgIC8vIFhYWCBzbGljZWRBcmdz
IHdpbGwgc3RhbmQgaW4gZm9yICJBIiBpZiB1c2VkCi0gICAgICAgIHZhciBhcmdzID0gc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwKLSAgICAgICAgLy8gNC4gTGV0
IEYgYmUgYSBuZXcgbmF0aXZlIEVDTUFTY3JpcHQgb2JqZWN0LgotICAgICAgICAvLyAxMS4gU2V0
IHRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgdG8gdGhlIHN0YW5kYXJk
Ci0gICAgICAgIC8vICAgYnVpbHQtaW4gRnVuY3Rpb24gcHJvdG90eXBlIG9iamVjdCBhcyBzcGVj
aWZpZWQgaW4gMTUuMy4zLjEuCi0gICAgICAgIC8vIDEyLiBTZXQgdGhlIFtbQ2FsbF1dIGludGVy
bmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCi0gICAgICAgIC8vICAgMTUuMy40LjUu
MS4KLSAgICAgICAgLy8gMTMuIFNldCB0aGUgW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBwcm9wZXJ0
eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgotICAgICAgICAvLyAgIDE1LjMuNC41LjIuCi0gICAgICAg
IC8vIDE0LiBTZXQgdGhlIFtbSGFzSW5zdGFuY2VdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFz
IGRlc2NyaWJlZCBpbgotICAgICAgICAvLyAgIDE1LjMuNC41LjMuCi0gICAgICAgIHZhciBib3Vu
ZCA9IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3Vu
ZCkgewotICAgICAgICAgICAgICAgIC8vIDE1LjMuNC41LjIgW1tDb25zdHJ1Y3RdXQotICAgICAg
ICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIGEg
ZnVuY3Rpb24gb2JqZWN0LAotICAgICAgICAgICAgICAgIC8vIEYgdGhhdCB3YXMgY3JlYXRlZCB1
c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhCi0gICAgICAgICAgICAgICAg
Ly8gbGlzdCBvZiBhcmd1bWVudHMgRXh0cmFBcmdzLCB0aGUgZm9sbG93aW5nIHN0ZXBzIGFyZSB0
YWtlbjoKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBG
J3MgW1tUYXJnZXRGdW5jdGlvbl1dCi0gICAgICAgICAgICAgICAgLy8gICBpbnRlcm5hbCBwcm9w
ZXJ0eS4KLSAgICAgICAgICAgICAgICAvLyAyLiBJZiB0YXJnZXQgaGFzIG5vIFtbQ29uc3RydWN0
XV0gaW50ZXJuYWwgbWV0aG9kLCBhCi0gICAgICAgICAgICAgICAgLy8gICBUeXBlRXJyb3IgZXhj
ZXB0aW9uIGlzIHRocm93bi4KLSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgYm91bmRBcmdzIGJl
IHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZEFyZ3NdXSBpbnRlcm5hbAotICAgICAgICAgICAgICAg
IC8vICAgcHJvcGVydHkuCi0gICAgICAgICAgICAgICAgLy8gNC4gTGV0IGFyZ3MgYmUgYSBuZXcg
bGlzdCBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUKLSAgICAgICAgICAgICAgICAv
LyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1l
Ci0gICAgICAgICAgICAgICAgLy8gICB2YWx1ZXMgYXMgdGhlIGxpc3QgRXh0cmFBcmdzIGluIHRo
ZSBzYW1lIG9yZGVyLgotICAgICAgICAgICAgICAgIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwKLSAgICAgICAgICAgICAgICAvLyAg
IG1ldGhvZCBvZiB0YXJnZXQgcHJvdmlkaW5nIGFyZ3MgYXMgdGhlIGFyZ3VtZW50cy4KLQotICAg
ICAgICAgICAgICAgIHZhciBGID0gZnVuY3Rpb24oKXt9OwotICAgICAgICAgICAgICAgIEYucHJv
dG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTsKLSAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IG5l
dyBGOwotCi0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseSgKLSAgICAg
ICAgICAgICAgICAgICAgc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xp
Y2UuY2FsbChhcmd1bWVudHMpKQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAg
aWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGY7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gMTUuMy40LjUu
MSBbW0NhbGxdXQotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ2FsbF1dIGludGVybmFs
IG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwgRiwKLSAgICAgICAgICAgICAgICAvLyB3aGlj
aCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhCi0g
ICAgICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cyBFeHRy
YUFyZ3MsIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICAgICAgICAvLyBzdGVwcyBhcmUgdGFrZW46
Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidz
IFtbQm91bmRBcmdzXV0gaW50ZXJuYWwKLSAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5Lgot
ICAgICAgICAgICAgICAgIC8vIDIuIExldCBib3VuZFRoaXMgYmUgdGhlIHZhbHVlIG9mIEYncyBb
W0JvdW5kVGhpc11dIGludGVybmFsCi0gICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4KLSAg
ICAgICAgICAgICAgICAvLyAzLiBMZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJn
ZXRGdW5jdGlvbl1dIGludGVybmFsCi0gICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4KLSAg
ICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhl
IHNhbWUgdmFsdWVzIGFzIHRoZQotICAgICAgICAgICAgICAgIC8vICAgbGlzdCBib3VuZEFyZ3Mg
aW4gdGhlIHNhbWUgb3JkZXIgZm9sbG93ZWQgYnkgdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAv
LyAgIHZhbHVlcyBhcyB0aGUgbGlzdCBFeHRyYUFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIuCi0gICAg
ICAgICAgICAgICAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxs
XV0gaW50ZXJuYWwgbWV0aG9kCi0gICAgICAgICAgICAgICAgLy8gICBvZiB0YXJnZXQgcHJvdmlk
aW5nIGJvdW5kVGhpcyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQKLSAgICAgICAgICAgICAgICAvLyAg
IHByb3ZpZGluZyBhcmdzIGFzIHRoZSBhcmd1bWVudHMuCi0KLSAgICAgICAgICAgICAgICAvLyBl
cXVpdjogdGFyZ2V0LmNhbGwodGhpcywgLi4uYm91bmRBcmdzLCAuLi5hcmdzKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoCi0gICAgICAgICAgICAgICAgICAgIHRoYXQsCi0g
ICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKLSAg
ICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfTsKLSAgICAgICAg
Ly8gWFhYIGJvdW5kLmxlbmd0aCBpcyBuZXZlciB3cml0YWJsZSwgc28gZG9uJ3QgZXZlbiB0cnkK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gMTUuIElmIHRoZSBbW0NsYXNzXV0gaW50ZXJuYWwgcHJv
cGVydHkgb2YgVGFyZ2V0IGlzICJGdW5jdGlvbiIsIHRoZW4KLSAgICAgICAgLy8gICAgIGEuIExl
dCBMIGJlIHRoZSBsZW5ndGggcHJvcGVydHkgb2YgVGFyZ2V0IG1pbnVzIHRoZSBsZW5ndGggb2Yg
QS4KLSAgICAgICAgLy8gICAgIGIuIFNldCB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRv
IGVpdGhlciAwIG9yIEwsIHdoaWNoZXZlciBpcwotICAgICAgICAvLyAgICAgICBsYXJnZXIuCi0g
ICAgICAgIC8vIDE2LiBFbHNlIHNldCB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIDAu
Ci0gICAgICAgIC8vIDE3LiBTZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGxlbmd0aCBvd24gcHJv
cGVydHkgb2YgRiB0byB0aGUgdmFsdWVzCi0gICAgICAgIC8vICAgc3BlY2lmaWVkIGluIDE1LjMu
NS4xLgotCi0gICAgICAgIC8vIFRPRE8KLSAgICAgICAgLy8gMTguIFNldCB0aGUgW1tFeHRlbnNp
YmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0cnVlLgotCi0gICAgICAgIC8vIFRPRE8K
LSAgICAgICAgLy8gMTkuIExldCB0aHJvd2VyIGJlIHRoZSBbW1Rocm93VHlwZUVycm9yXV0gZnVu
Y3Rpb24gT2JqZWN0ICgxMy4yLjMpLgotICAgICAgICAvLyAyMC4gQ2FsbCB0aGUgW1tEZWZpbmVP
d25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBGIHdpdGgKLSAgICAgICAgLy8gICBhcmd1
bWVudHMgImNhbGxlciIsIFByb3BlcnR5RGVzY3JpcHRvciB7W1tHZXRdXTogdGhyb3dlciwgW1tT
ZXRdXToKLSAgICAgICAgLy8gICB0aHJvd2VyLCBbW0VudW1lcmFibGVdXTogZmFsc2UsIFtbQ29u
ZmlndXJhYmxlXV06IGZhbHNlfSwgYW5kCi0gICAgICAgIC8vICAgZmFsc2UuCi0gICAgICAgIC8v
IDIxLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYg
d2l0aAotICAgICAgICAvLyAgIGFyZ3VtZW50cyAiYXJndW1lbnRzIiwgUHJvcGVydHlEZXNjcmlw
dG9yIHtbW0dldF1dOiB0aHJvd2VyLAotICAgICAgICAvLyAgIFtbU2V0XV06IHRocm93ZXIsIFtb
RW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LAotICAgICAgICAv
LyAgIGFuZCBmYWxzZS4KLQotICAgICAgICAvLyBUT0RPCi0gICAgICAgIC8vIE5PVEUgRnVuY3Rp
b24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGRvIG5vdAot
ICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5IG9yIHRoZSBbW0NvZGVdXSwgW1tG
b3JtYWxQYXJhbWV0ZXJzXV0sIGFuZAotICAgICAgICAvLyBbW1Njb3BlXV0gaW50ZXJuYWwgcHJv
cGVydGllcy4KLSAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0ZSBwcm90b3R5cGUgaW4gcHVyZS1q
cy4KLQotICAgICAgICAvLyAyMi4gUmV0dXJuIEYuCi0gICAgICAgIHJldHVybiBib3VuZDsKLSAg
ICB9OwotfQotCi0vLyBTaG9ydGN1dCB0byBhbiBvZnRlbiBhY2Nlc3NlZCBwcm9wZXJ0aWVzLCBp
biBvcmRlciB0byBhdm9pZCBtdWx0aXBsZQotLy8gZGVyZWZlcmVuY2UgdGhhdCBjb3N0cyB1bml2
ZXJzYWxseS4KLS8vIF9QbGVhc2Ugbm90ZTogU2hvcnRjdXRzIGFyZSBkZWZpbmVkIGFmdGVyIGBG
dW5jdGlvbi5wcm90b3R5cGUuYmluZGAgYXMgd2UKLS8vIHVzIGl0IGluIGRlZmluaW5nIHNob3J0
Y3V0cy4KLXZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7Ci12YXIgcHJvdG90eXBl
T2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKLXZhciBwcm90b3R5cGVPZk9iamVjdCA9IE9iamVj
dC5wcm90b3R5cGU7Ci12YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNsaWNlOwotLy8gSGF2
aW5nIGEgdG9TdHJpbmcgbG9jYWwgdmFyaWFibGUgbmFtZSBicmVha3MgaW4gT3BlcmEgc28gdXNl
IF90b1N0cmluZy4KLXZhciBfdG9TdHJpbmcgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3Qu
dG9TdHJpbmcpOwotdmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3du
UHJvcGVydHkpOwotCi0vLyBJZiBKUyBlbmdpbmUgc3VwcG9ydHMgYWNjZXNzb3JzIGNyZWF0aW5n
IHNob3J0Y3V0cy4KLXZhciBkZWZpbmVHZXR0ZXI7Ci12YXIgZGVmaW5lU2V0dGVyOwotdmFyIGxv
b2t1cEdldHRlcjsKLXZhciBsb29rdXBTZXR0ZXI7Ci12YXIgc3VwcG9ydHNBY2Nlc3NvcnM7Ci1p
ZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVPZk9iamVjdCwgIl9fZGVmaW5l
R2V0dGVyX18iKSkpIHsKLSAgICBkZWZpbmVHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZP
YmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7Ci0gICAgZGVmaW5lU2V0dGVyID0gY2FsbC5iaW5kKHBy
b3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOwotICAgIGxvb2t1cEdldHRlciA9IGNh
bGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdldHRlcl9fKTsKLSAgICBsb29rdXBT
ZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBTZXR0ZXJfXyk7Ci19
Ci0KLS8vCi0vLyBBcnJheQotLy8gPT09PT0KLS8vCi0KLS8vIEVTNSAxNS40LjMuMgotLy8gaHR0
cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC4zLjIKLS8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2lzQXJy
YXkKLWlmICghQXJyYXkuaXNBcnJheSkgewotICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbiBp
c0FycmF5KG9iaikgewotICAgICAgICByZXR1cm4gX3RvU3RyaW5nKG9iaikgPT0gIltvYmplY3Qg
QXJyYXldIjsKLSAgICB9OwotfQotCi0vLyBUaGUgSXNDYWxsYWJsZSgpIGNoZWNrIGluIHRoZSBB
cnJheSBmdW5jdGlvbnMKLS8vIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBzdHJpY3QgY2hlY2sg
b24gdGhlCi0vLyBpbnRlcm5hbCBjbGFzcyBvZiB0aGUgb2JqZWN0IHRvIHRyYXAgY2FzZXMgd2hl
cmUKLS8vIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3YXMgYWN0dWFsbHkgYSByZWd1bGFyCi0vLyBl
eHByZXNzaW9uIGxpdGVyYWwsIHdoaWNoIGluIFY4IGFuZAotLy8gSmF2YVNjcmlwdENvcmUgaXMg
YSB0eXBlb2YgImZ1bmN0aW9uIi4gIE9ubHkgaW4KLS8vIFY4IGFyZSByZWd1bGFyIGV4cHJlc3Np
b24gbGl0ZXJhbHMgcGVybWl0dGVkIGFzCi0vLyByZWR1Y2UgcGFyYW1ldGVycywgc28gaXQgaXMg
ZGVzaXJhYmxlIGluIHRoZQotLy8gZ2VuZXJhbCBjYXNlIGZvciB0aGUgc2hpbSB0byBtYXRjaCB0
aGUgbW9yZQotLy8gc3RyaWN0IGFuZCBjb21tb24gYmVoYXZpb3Igb2YgcmVqZWN0aW5nIHJlZ3Vs
YXIKLS8vIGV4cHJlc3Npb25zLgotCi0vLyBFUzUgMTUuNC40LjE4Ci0vLyBodHRwOi8vZXM1Lmdp
dGh1Yi5jb20vI3gxNS40LjQuMTgKLS8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Vu
L0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2FycmF5L2ZvckVhY2gKLWlmICgh
QXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKLSAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9
IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7Ci0gICAgICAgIHZhciBzZWxmID0g
dG9PYmplY3QodGhpcyksCi0gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSwKLSAgICAg
ICAgICAgIGkgPSAtMSwKLSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwot
Ci0gICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5v
dCBhIGNhbGxhYmxlIGZ1bmN0aW9uCi0gICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29i
amVjdCBGdW5jdGlvbl0iKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8v
IFRPRE8gbWVzc2FnZQotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKCsraSA8IGxlbmd0aCkg
ewotICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewotICAgICAgICAgICAgICAgIC8vIEludm9r
ZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBjYWxsLCBwYXNzaW5nIGFyZ3VtZW50czoKLSAg
ICAgICAgICAgICAgICAvLyBjb250ZXh0LCBwcm9wZXJ0eSB2YWx1ZSwgcHJvcGVydHkga2V5LCB0
aGlzQXJnIG9iamVjdCBjb250ZXh0Ci0gICAgICAgICAgICAgICAgZnVuLmNhbGwodGhpc3AsIHNl
bGZbaV0sIGksIHNlbGYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX0KLQot
Ly8gRVM1IDE1LjQuNC4xOQotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE5Ci0v
LyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1Jl
ZmVyZW5jZS9PYmplY3RzL0FycmF5L21hcAotaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7Ci0g
ICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcChmdW4gLyosIHRoaXNwKi8pIHsK
LSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKLSAgICAgICAgICAgIGxlbmd0aCA9
IHNlbGYubGVuZ3RoID4+PiAwLAotICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSwK
LSAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwotCi0gICAgICAgIC8vIElmIG5vIGNh
bGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9u
Ci0gICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24i
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgIGlmIChpIGluIHNlbGYpCi0gICAgICAgICAgICAgICAgcmVzdWx0W2ld
ID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjQuNC4yMAotLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIwCi0vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L2ZpbHRl
cgotaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7Ci0gICAgQXJyYXkucHJvdG90eXBlLmZp
bHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7Ci0gICAgICAgIHZhciBz
ZWxmID0gdG9PYmplY3QodGhpcyksCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+
Pj4gMCwKLSAgICAgICAgICAgIHJlc3VsdCA9IFtdLAotICAgICAgICAgICAgdmFsdWUsCi0gICAg
ICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKLQotICAgICAgICAvLyBJZiBubyBjYWxsYmFj
ayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgotICAg
ICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewotICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxm
W2ldOwotICAgICAgICAgICAgICAgIGlmIChmdW4uY2FsbCh0aGlzcCwgdmFsdWUsIGksIHNlbGYp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9OwotfQotCi0vLyBFUzUgMTUuNC40LjE2Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
I3gxNS40LjQuMTYKLS8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3Jp
cHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2V2ZXJ5Ci1pZiAoIUFycmF5LnByb3Rv
dHlwZS5ldmVyeSkgewotICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeSA9IGZ1bmN0aW9uIGV2ZXJ5
KGZ1biAvKiwgdGhpc3AgKi8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwK
LSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAotICAgICAgICAgICAgdGhp
c3AgPSBhcmd1bWVudHNbMV07Ci0KLSAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24g
b3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KLSAgICAgICAgaWYgKF90
b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKLSAgICAgICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
aWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS40LjQuMTcKLS8vIGh0
dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNwotLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc29t
ZQotaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgewotICAgIEFycmF5LnByb3RvdHlwZS5zb21l
ID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7Ci0gICAgICAgIHZhciBzZWxmID0g
dG9PYmplY3QodGhpcyksCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwK
LSAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwotCi0gICAgICAgIC8vIElmIG5vIGNh
bGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9u
Ci0gICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24i
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0s
IGksIHNlbGYpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci19Ci0KLS8vIEVTNSAx
NS40LjQuMjEKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4yMQotLy8gaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2Uv
T2JqZWN0cy9BcnJheS9yZWR1Y2UKLWlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZSkgewotICAg
IEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiByZWR1Y2UoZnVuIC8qLCBpbml0aWFs
Ki8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKLSAgICAgICAgICAgIGxl
bmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwotCi0gICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1
bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCi0gICAgICAg
IGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7Ci0gICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIG5vIHZhbHVlIHRvIHJldHVybiBpZiBubyBpbml0aWFsIHZhbHVl
IGFuZCBhbiBlbXB0eSBhcnJheQotICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVu
Z3RoID09IDEpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZHVjZSBvZiBl
bXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZhciBpID0gMDsKLSAgICAgICAgdmFyIHJlc3VsdDsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5s
ZW5ndGggPj0gMikgewotICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGlmIChpIGluIHNl
bGYpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytdOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJu
Ci0gICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5p
dGlhbCB2YWx1ZScpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gd2hpbGUgKHRy
dWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgaWYgKGkgaW4gc2VsZikgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5j
YWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBzZWxmKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1
LjQuNC4yMgotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIyCi0vLyBodHRwczov
L2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9P
YmplY3RzL0FycmF5L3JlZHVjZVJpZ2h0Ci1pZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdo
dCkgewotICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJp
Z2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7Ci0gICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhp
cyksCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKLQotICAgICAgICAv
LyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxsYWJs
ZSBmdW5jdGlvbgotICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rp
b25dIikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBh
IGZ1bmN0aW9uIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBubyB2YWx1ZSB0byByZXR1cm4g
aWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkKLSAgICAgICAgaWYgKCFsZW5ndGggJiYg
YXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCdyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5ndGggLSAxOwotICAgICAgICBp
ZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVu
dHNbMV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGkgaW4gc2VsZikgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2kt
LV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIGlmIGFycmF5IGNvbnRhaW5zIG5vIHZhbHVlcywgbm8gaW5pdGlhbCB2
YWx1ZSB0byByZXR1cm4KLSAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkgewotICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJh
eSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IHdoaWxlICh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAg
IGlmIChpIGluIHRoaXMpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lk
IDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgc2VsZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
d2hpbGUgKGktLSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotfQotCi0vLyBF
UzUgMTUuNC40LjE0Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTQKLS8vIGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2Jh
bF9PYmplY3RzL0FycmF5L2luZGV4T2YKLWlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHsK
LSAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2Yoc291Z2h0IC8q
LCBmcm9tSW5kZXggKi8gKSB7Ci0gICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCi0g
ICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKLQotICAgICAgICBpZiAoIWxl
bmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy
IGkgPSAwOwotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKLSAgICAgICAgICAg
IGkgPSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGhh
bmRsZSBuZWdhdGl2ZSBpbmRpY2VzCi0gICAgICAgIGkgPSBpID49IDAgPyBpIDogTWF0aC5tYXgo
MCwgbGVuZ3RoICsgaSk7Ci0gICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgIGlmIChpIGluIHNlbGYgJiYgc2VsZltpXSA9PT0gc291Z2h0KSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IC0xOwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS40LjQuMTUKLS8vIGh0dHA6Ly9lczUuZ2l0aHVi
LmNvbS8jeDE1LjQuNC4xNQotLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2
YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvbGFzdEluZGV4T2YKLWlmICgh
QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSB7Ci0gICAgQXJyYXkucHJvdG90eXBlLmxhc3RJ
bmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8pIHsK
LSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwKLSAgICAgICAgICAgIGxlbmd0aCA9
IHNlbGYubGVuZ3RoID4+PiAwOwotCi0gICAgICAgIGlmICghbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGkgPSBsZW5ndGggLSAxOwotICAg
ICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKLSAgICAgICAgICAgIGkgPSBNYXRoLm1p
bihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gaGFu
ZGxlIG5lZ2F0aXZlIGluZGljZXMKLSAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBN
YXRoLmFicyhpKTsKLSAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBp
ZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkgewotICAgICAgICAgICAgICAgIHJl
dHVybiBpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAg
ICB9OwotfQotCi0vLwotLy8gT2JqZWN0Ci0vLyA9PT09PT0KLS8vCi0KLS8vIEVTNSAxNS4yLjMu
MTQKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xNAotaWYgKCFPYmplY3Qua2V5
cykgewotICAgIC8vIGh0dHA6Ly93aGF0dGhlaGVhZHNhaWQuY29tLzIwMTAvMTAvYS1zYWZlci1v
YmplY3Qta2V5cy1jb21wYXRpYmlsaXR5LWltcGxlbWVudGF0aW9uCi0gICAgdmFyIGhhc0RvbnRF
bnVtQnVnID0gdHJ1ZSwKLSAgICAgICAgZG9udEVudW1zID0gWwotICAgICAgICAgICAgInRvU3Ry
aW5nIiwKLSAgICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIsCi0gICAgICAgICAgICAidmFsdWVP
ZiIsCi0gICAgICAgICAgICAiaGFzT3duUHJvcGVydHkiLAotICAgICAgICAgICAgImlzUHJvdG90
eXBlT2YiLAotICAgICAgICAgICAgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwKLSAgICAgICAgICAg
ICJjb25zdHJ1Y3RvciIKLSAgICAgICAgXSwKLSAgICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9u
dEVudW1zLmxlbmd0aDsKLQotICAgIGZvciAodmFyIGtleSBpbiB7InRvU3RyaW5nIjogbnVsbH0p
IHsKLSAgICAgICAgaGFzRG9udEVudW1CdWcgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBPYmplY3Qu
a2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7Ci0KLSAgICAgICAgaWYgKCh0eXBlb2Ygb2Jq
ZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0
ID09PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5
cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIga2V5
cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgewotICAgICAgICAgICAg
aWYgKG93bnMob2JqZWN0LCBuYW1lKSkgewotICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1l
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoYXNEb250RW51bUJ1
ZykgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBp
IDwgaWk7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tp
XTsKLSAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgewotICAgICAg
ICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4ga2V5czsKLSAgICB9OwotCi19
Ci0KLS8vCi0vLyBEYXRlCi0vLyA9PT09Ci0vLwotCi0vLyBFUzUgMTUuOS41LjQzCi0vLyBodHRw
Oi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjUuNDMKLS8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBh
IFN0cmluZyB2YWx1ZSByZXByZXNlbnQgdGhlIGluc3RhbmNlIGluIHRpbWUKLS8vIHJlcHJlc2Vu
dGVkIGJ5IHRoaXMgRGF0ZSBvYmplY3QuIFRoZSBmb3JtYXQgb2YgdGhlIFN0cmluZyBpcyB0aGUg
RGF0ZSBUaW1lCi0vLyBzdHJpbmcgZm9ybWF0IGRlZmluZWQgaW4gMTUuOS4xLjE1LiBBbGwgZmll
bGRzIGFyZSBwcmVzZW50IGluIHRoZSBTdHJpbmcuCi0vLyBUaGUgdGltZSB6b25lIGlzIGFsd2F5
cyBVVEMsIGRlbm90ZWQgYnkgdGhlIHN1ZmZpeCBaLiBJZiB0aGUgdGltZSB2YWx1ZSBvZgotLy8g
dGhpcyBvYmplY3QgaXMgbm90IGEgZmluaXRlIE51bWJlciBhIFJhbmdlRXJyb3IgZXhjZXB0aW9u
IGlzIHRocm93bi4KLWlmICghRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgfHwgKG5ldyBEYXRl
KC02MjE5ODc1NTIwMDAwMCkudG9JU09TdHJpbmcoKS5pbmRleE9mKCctMDAwMDAxJykgPT09IC0x
KSkgewotICAgIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nID0gZnVuY3Rpb24gdG9JU09TdHJp
bmcoKSB7Ci0gICAgICAgIHZhciByZXN1bHQsIGxlbmd0aCwgdmFsdWUsIHllYXI7Ci0gICAgICAg
IGlmICghaXNGaW5pdGUodGhpcykpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9y
KCJEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyBjYWxsZWQgb24gbm9uLWZpbml0ZSB2YWx1ZS4i
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBkYXRlIHRpbWUgc3RyaW5nIGZvcm1hdCBp
cyBzcGVjaWZpZWQgaW4gMTUuOS4xLjE1LgotICAgICAgICByZXN1bHQgPSBbdGhpcy5nZXRVVENN
b250aCgpICsgMSwgdGhpcy5nZXRVVENEYXRlKCksCi0gICAgICAgICAgICB0aGlzLmdldFVUQ0hv
dXJzKCksIHRoaXMuZ2V0VVRDTWludXRlcygpLCB0aGlzLmdldFVUQ1NlY29uZHMoKV07Ci0gICAg
ICAgIHllYXIgPSB0aGlzLmdldFVUQ0Z1bGxZZWFyKCk7Ci0gICAgICAgIHllYXIgPSAoeWVhciA8
IDAgPyAnLScgOiAoeWVhciA+IDk5OTkgPyAnKycgOiAnJykpICsgKCcwMDAwMCcgKyBNYXRoLmFi
cyh5ZWFyKSkuc2xpY2UoMCA8PSB5ZWFyICYmIHllYXIgPD0gOTk5OSA/IC00IDogLTYpOwotCi0g
ICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7Ci0gICAgICAgIHdoaWxlIChsZW5ndGgtLSkg
ewotICAgICAgICAgICAgdmFsdWUgPSByZXN1bHRbbGVuZ3RoXTsKLSAgICAgICAgICAgIC8vIHBh
ZCBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyB0byBoYXZlIHR3byBk
aWdpdHMuCi0gICAgICAgICAgICBpZiAodmFsdWUgPCAxMCkgewotICAgICAgICAgICAgICAgIHJl
c3VsdFtsZW5ndGhdID0gIjAiICsgdmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gcGFkIG1pbGxpc2Vjb25kcyB0byBoYXZlIHRocmVlIGRpZ2l0cy4KLSAgICAgICAg
cmV0dXJuIHllYXIgKyAiLSIgKyByZXN1bHQuc2xpY2UoMCwgMikuam9pbigiLSIpICsgIlQiICsg
cmVzdWx0LnNsaWNlKDIpLmpvaW4oIjoiKSArICIuIiArCi0gICAgICAgICAgICAoIjAwMCIgKyB0
aGlzLmdldFVUQ01pbGxpc2Vjb25kcygpKS5zbGljZSgtMykgKyAiWiI7Ci0gICAgfQotfQotCi0v
LyBFUzUgMTUuOS40LjQKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNC40Ci1pZiAo
IURhdGUubm93KSB7Ci0gICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7Ci0gICAgICAgIHJl
dHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUuOS41LjQ0
Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjUuNDQKLS8vIFRoaXMgZnVuY3Rpb24g
cHJvdmlkZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBEYXRlIG9iamVjdCBmb3IgdXNl
IGJ5Ci0vLyBKU09OLnN0cmluZ2lmeSAoMTUuMTIuMykuCi1pZiAoIURhdGUucHJvdG90eXBlLnRv
SlNPTikgewotICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTihrZXkp
IHsKLSAgICAgICAgLy8gV2hlbiB0aGUgdG9KU09OIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBhcmd1
bWVudCBrZXksIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgLy8gc3RlcHMgYXJlIHRha2VuOgotCi0g
ICAgICAgIC8vIDEuICBMZXQgTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3QsIGdp
dmluZyBpdCB0aGUgdGhpcwotICAgICAgICAvLyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCi0gICAg
ICAgIC8vIDIuIExldCB0diBiZSBUb1ByaW1pdGl2ZShPLCBoaW50IE51bWJlcikuCi0gICAgICAg
IC8vIDMuIElmIHR2IGlzIGEgTnVtYmVyIGFuZCBpcyBub3QgZmluaXRlLCByZXR1cm4gbnVsbC4K
LSAgICAgICAgLy8gWFhYCi0gICAgICAgIC8vIDQuIExldCB0b0lTTyBiZSB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mCi0gICAgICAgIC8vIE8gd2l0
aCBhcmd1bWVudCAidG9JU09TdHJpbmciLgotICAgICAgICAvLyA1LiBJZiBJc0NhbGxhYmxlKHRv
SVNPKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgotICAgICAgICBpZiAo
dHlwZW9mIHRoaXMudG9JU09TdHJpbmcgIT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcigndG9JU09TdHJpbmcgcHJvcGVydHkgaXMgbm90IGNhbGxhYmxlJyk7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0
aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCi0gICAgICAgIC8vICB0b0lTTyB3aXRoIE8g
YXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFuIGVtcHR5IGFyZ3VtZW50IGxpc3QuCi0gICAgICAgIHJl
dHVybiB0aGlzLnRvSVNPU3RyaW5nKCk7Ci0KLSAgICAgICAgLy8gTk9URSAxIFRoZSBhcmd1bWVu
dCBpcyBpZ25vcmVkLgotCi0gICAgICAgIC8vIE5PVEUgMiBUaGUgdG9KU09OIGZ1bmN0aW9uIGlz
IGludGVudGlvbmFsbHkgZ2VuZXJpYzsgaXQgZG9lcyBub3QKLSAgICAgICAgLy8gcmVxdWlyZSB0
aGF0IGl0cyB0aGlzIHZhbHVlIGJlIGEgRGF0ZSBvYmplY3QuIFRoZXJlZm9yZSwgaXQgY2FuIGJl
Ci0gICAgICAgIC8vIHRyYW5zZmVycmVkIHRvIG90aGVyIGtpbmRzIG9mIG9iamVjdHMgZm9yIHVz
ZSBhcyBhIG1ldGhvZC4gSG93ZXZlciwKLSAgICAgICAgLy8gaXQgZG9lcyByZXF1aXJlIHRoYXQg
YW55IHN1Y2ggb2JqZWN0IGhhdmUgYSB0b0lTT1N0cmluZyBtZXRob2QuIEFuCi0gICAgICAgIC8v
IG9iamVjdCBpcyBmcmVlIHRvIHVzZSB0aGUgYXJndW1lbnQga2V5IHRvIGZpbHRlciBpdHMKLSAg
ICAgICAgLy8gc3RyaW5naWZpY2F0aW9uLgotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS45LjQuMgot
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjIKLS8vIGJhc2VkIG9uIHdvcmsgc2hh
cmVkIGJ5IERhbmllbCBGcmllc2VuIChkYW50bWFuKQotLy8gaHR0cDovL2dpc3QuZ2l0aHViLmNv
bS8zMDMyNDkKLWlmICghRGF0ZS5wYXJzZSB8fCBEYXRlLnBhcnNlKCIrMjc1NzYwLTA5LTEzVDAw
OjAwOjAwLjAwMFoiKSAhPT0gOC42NGUxNSkgewotICAgIC8vIFhYWCBnbG9iYWwgYXNzaWdubWVu
dCB3b24ndCB3b3JrIGluIGVtYmVkZGluZ3MgdGhhdCB1c2UKLSAgICAvLyBhbiBhbHRlcm5hdGUg
b2JqZWN0IGZvciB0aGUgY29udGV4dC4KLSAgICBEYXRlID0gKGZ1bmN0aW9uKE5hdGl2ZURhdGUp
IHsKLQotICAgICAgICAvLyBEYXRlLmxlbmd0aCA9PT0gNwotICAgICAgICB2YXIgRGF0ZSA9IGZ1
bmN0aW9uIERhdGUoWSwgTSwgRCwgaCwgbSwgcywgbXMpIHsKLSAgICAgICAgICAgIHZhciBsZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBO
YXRpdmVEYXRlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBsZW5ndGggPT0gMSAmJiBT
dHJpbmcoWSkgPT09IFkgPyAvLyBpc1N0cmluZyhZKQotICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBleHBsaWNpdGx5IHBhc3MgaXQgdGhyb3VnaCBwYXJzZToKLSAgICAgICAgICAgICAgICAgICAg
bmV3IE5hdGl2ZURhdGUoRGF0ZS5wYXJzZShZKSkgOgotICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIG1hbnVhbGx5IG1ha2UgY2FsbHMgZGVwZW5kaW5nIG9uIGFyZ3VtZW50Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBoZXJlCi0gICAgICAgICAgICAgICAgICAgIGxlbmd0
aCA+PSA3ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwgbSwgcywgbXMpIDoKLSAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoID49IDYgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtLCBz
KSA6Ci0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA1ID8gbmV3IE5hdGl2ZURhdGUoWSwg
TSwgRCwgaCwgbSkgOgotICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNCA/IG5ldyBOYXRp
dmVEYXRlKFksIE0sIEQsIGgpIDoKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDMgPyBu
ZXcgTmF0aXZlRGF0ZShZLCBNLCBEKSA6Ci0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSAy
ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSkgOgotICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0g
MSA/IG5ldyBOYXRpdmVEYXRlKFkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXcgTmF0aXZlRGF0ZSgpOwotICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgbWl4dXBzIHdp
dGggdW5maXhlZCBEYXRlIG9iamVjdAotICAgICAgICAgICAgICAgIGRhdGUuY29uc3RydWN0b3Ig
PSBEYXRlOwotICAgICAgICAgICAgICAgIHJldHVybiBkYXRlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAg
ICAgfTsKLQotICAgICAgICAvLyAxNS45LjEuMTUgRGF0ZSBUaW1lIFN0cmluZyBGb3JtYXQuCi0g
ICAgICAgIHZhciBpc29EYXRlRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoIl4iICsKLSAgICAgICAg
ICAgICIoXFxkezR9fFtcK1wtXVxcZHs2fSkiICsgLy8gZm91ci1kaWdpdCB5ZWFyIGNhcHR1cmUg
b3Igc2lnbiArIDYtZGlnaXQgZXh0ZW5kZWQgeWVhcgotICAgICAgICAgICAgIig/Oi0oXFxkezJ9
KSIgKyAvLyBvcHRpb25hbCBtb250aCBjYXB0dXJlCi0gICAgICAgICAgICAiKD86LShcXGR7Mn0p
IiArIC8vIG9wdGlvbmFsIGRheSBjYXB0dXJlCi0gICAgICAgICAgICAiKD86IiArIC8vIGNhcHR1
cmUgaG91cnM6bWludXRlczpzZWNvbmRzLm1pbGxpc2Vjb25kcwotICAgICAgICAgICAgICAgICJU
KFxcZHsyfSkiICsgLy8gaG91cnMgY2FwdHVyZQotICAgICAgICAgICAgICAgICI6KFxcZHsyfSki
ICsgLy8gbWludXRlcyBjYXB0dXJlCi0gICAgICAgICAgICAgICAgIig/OiIgKyAvLyBvcHRpb25h
bCA6c2Vjb25kcy5taWxsaXNlY29uZHMKLSAgICAgICAgICAgICAgICAgICAgIjooXFxkezJ9KSIg
KyAvLyBzZWNvbmRzIGNhcHR1cmUKLSAgICAgICAgICAgICAgICAgICAgIig/OlxcLihcXGR7M30p
KT8iICsgLy8gbWlsbGlzZWNvbmRzIGNhcHR1cmUKLSAgICAgICAgICAgICAgICAiKT8iICsKLSAg
ICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVyZSBVVEMgb2Zmc2V0IGNvbXBvbmVudAotICAgICAg
ICAgICAgICAgICJafCIgKyAvLyBVVEMgY2FwdHVyZQotICAgICAgICAgICAgICAgICIoPzoiICsg
Ly8gb2Zmc2V0IHNwZWNpZmllciArLy1ob3VyczptaW51dGVzCi0gICAgICAgICAgICAgICAgICAg
ICIoWy0rXSkiICsgLy8gc2lnbiBjYXB0dXJlCi0gICAgICAgICAgICAgICAgICAgICIoXFxkezJ9
KSIgKyAvLyBob3VycyBvZmZzZXQgY2FwdHVyZQotICAgICAgICAgICAgICAgICAgICAiOihcXGR7
Mn0pIiArIC8vIG1pbnV0ZXMgb2Zmc2V0IGNhcHR1cmUKLSAgICAgICAgICAgICAgICAiKSIgKwot
ICAgICAgICAgICAgIik/KT8pPyk/IiArCi0gICAgICAgICIkIik7Ci0KLSAgICAgICAgLy8gQ29w
eSBhbnkgY3VzdG9tIG1ldGhvZHMgYSAzcmQgcGFydHkgbGlicmFyeSBtYXkgaGF2ZSBhZGRlZAot
ICAgICAgICBmb3IgKHZhciBrZXkgaW4gTmF0aXZlRGF0ZSkgewotICAgICAgICAgICAgRGF0ZVtr
ZXldID0gTmF0aXZlRGF0ZVtrZXldOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29weSAibmF0
aXZlIiBtZXRob2RzIGV4cGxpY2l0bHk7IHRoZXkgbWF5IGJlIG5vbi1lbnVtZXJhYmxlCi0gICAg
ICAgIERhdGUubm93ID0gTmF0aXZlRGF0ZS5ub3c7Ci0gICAgICAgIERhdGUuVVRDID0gTmF0aXZl
RGF0ZS5VVEM7Ci0gICAgICAgIERhdGUucHJvdG90eXBlID0gTmF0aXZlRGF0ZS5wcm90b3R5cGU7
Ci0gICAgICAgIERhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGF0ZTsKLQotICAgICAgICAv
LyBVcGdyYWRlIERhdGUucGFyc2UgdG8gaGFuZGxlIHNpbXBsaWZpZWQgSVNPIDg2MDEgc3RyaW5n
cwotICAgICAgICBEYXRlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2Uoc3RyaW5nKSB7Ci0gICAgICAg
ICAgICB2YXIgbWF0Y2ggPSBpc29EYXRlRXhwcmVzc2lvbi5leGVjKHN0cmluZyk7Ci0gICAgICAg
ICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICBtYXRjaC5zaGlmdCgpOyAvLyBraWxs
IG1hdGNoWzBdLCB0aGUgZnVsbCBtYXRjaAotICAgICAgICAgICAgICAgIC8vIHBhcnNlIG1vbnRo
cywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDc7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICAvLyBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGlmIG5lY2Vzc2FyeQotICAgICAgICAgICAg
ICAgICAgICBtYXRjaFtpXSA9ICsobWF0Y2hbaV0gfHwgKGkgPCAzID8gMSA6IDApKTsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gbWF0Y2hbMV0gaXMgdGhlIG1vbnRoLiBNb250aHMgYXJlIDAtMTEg
aW4gSmF2YVNjcmlwdAotICAgICAgICAgICAgICAgICAgICAvLyBgRGF0ZWAgb2JqZWN0cywgYnV0
IDEtMTIgaW4gSVNPIG5vdGF0aW9uLCBzbyB3ZQotICAgICAgICAgICAgICAgICAgICAvLyBkZWNy
ZW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoW2ldLS07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUgVVRDIG9mZnNldCBjb21wb25l
bnQKLSAgICAgICAgICAgICAgICB2YXIgbWludXRlT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBob3Vy
T2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBzaWduID0gbWF0Y2gucG9wKCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBjb21wdXRlIHRoZSBleHBsaWNpdCB0aW1lIHpvbmUgb2Zmc2V0IGlmIHNwZWNpZmll
ZAotICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwOwotICAgICAgICAgICAgICAgIGlmIChz
aWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRldGVjdCBpbnZhbGlkIG9mZnNldHMgYW5k
IHJldHVybiBlYXJseQotICAgICAgICAgICAgICAgICAgICBpZiAoaG91ck9mZnNldCA+IDIzIHx8
IG1pbnV0ZU9mZnNldCA+IDU5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFO
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gZXhwcmVz
cyB0aGUgcHJvdmlkZWQgdGltZSB6b25lIG9mZnNldCBpbiBtaW51dGVzLiBUaGUgb2Zmc2V0IGlz
Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIGZvciB0aW1lIHpvbmVzIHdlc3Qgb2Yg
VVRDOyBwb3NpdGl2ZSBvdGhlcndpc2UuCi0gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9ICho
b3VyT2Zmc2V0ICogNjAgKyBtaW51dGVPZmZzZXQpICogNmU0ICogKHNpZ24gPT0gIisiID8gLTEg
OiAxKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBEYXRlLlVUQyBm
b3IgeWVhcnMgYmV0d2VlbiAwIGFuZCA5OSBjb252ZXJ0cyB5ZWFyIHRvIDE5MDAgKyB5ZWFyCi0g
ICAgICAgICAgICAgICAgLy8gVGhlIEdyZWdvcmlhbiBjYWxlbmRhciBoYXMgYSA0MDAteWVhciBj
eWNsZSwgc28KLSAgICAgICAgICAgICAgICAvLyB0byBEYXRlLlVUQyh5ZWFyICsgNDAwLCAuLi4u
ICkgLSAxMjYyMjc4MDgwMDAwMCA9PSBEYXRlLlVUQyh5ZWFyLCAuLi4pLAotICAgICAgICAgICAg
ICAgIC8vIHdoZXJlIDEyNjIyNzgwODAwMDAwIC0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbiBH
cmVnb3JpYW4gY2FsZW5kYXIgNDAwIHllYXJzCi0gICAgICAgICAgICAgICAgdmFyIHllYXIgPSAr
bWF0Y2hbMF07Ci0gICAgICAgICAgICAgICAgaWYgKDAgPD0geWVhciAmJiB5ZWFyIDw9IDk5KSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0geWVhciArIDQwMDsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuVVRDLmFwcGx5KHRoaXMsIG1hdGNoKSArIG9mZnNl
dCAtIDEyNjIyNzgwODAwMDAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIGNvbXB1dGUgYSBuZXcgVVRDIGRhdGUgdmFsdWUsIGFjY291bnRpbmcgZm9yIHRoZSBvcHRp
b25hbCBvZmZzZXQKLSAgICAgICAgICAgICAgICByZXR1cm4gTmF0aXZlRGF0ZS5VVEMuYXBwbHko
dGhpcywgbWF0Y2gpICsgb2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgfTsKLQot
ICAgICAgICByZXR1cm4gRGF0ZTsKLSAgICB9KShEYXRlKTsKLX0KLQotLy8KLS8vIFN0cmluZwot
Ly8gPT09PT09Ci0vLwotCi0vLyBFUzUgMTUuNS40LjIwCi0vLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3gxNS41LjQuMjAKLXZhciB3cyA9ICJceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUx
NjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArCi0gICAgIlx1MjAwNFx1MjAwNVx1
MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKwot
ICAgICJcdTIwMjlcdUZFRkYiOwotaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0gfHwgd3MudHJp
bSgpKSB7Ci0gICAgLy8gaHR0cDovL2Jsb2cuc3RldmVubGV2aXRoYW4uY29tL2FyY2hpdmVzL2Zh
c3Rlci10cmltLWphdmFzY3JpcHQKLSAgICAvLyBodHRwOi8vcGVyZmVjdGlvbmtpbGxzLmNvbS93
aGl0ZXNwYWNlLWRldmlhdGlvbnMvCi0gICAgd3MgPSAiWyIgKyB3cyArICJdIjsKLSAgICB2YXIg
dHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3cyArIHdzICsgIioiKSwKLSAgICAg
ICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArICIqJCIpOwotICAgIFN0cmlu
Zy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7Ci0gICAgICAgIGlmICh0aGlzID09
PSB1bmRlZmluZWQgfHwgdGhpcyA9PT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5
cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK3RoaXMrIiB0byBvYmplY3QiKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAiIiku
cmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7Ci0gICAgfTsKLX0KLQotLy8KLS8vIFV0aWwKLS8v
ID09PT09PQotLy8KLQotLy8gRVM1IDkuNAotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4OS40
Ci0vLyBodHRwOi8vanNwZXJmLmNvbS90by1pbnRlZ2VyCi12YXIgdG9JbnRlZ2VyID0gZnVuY3Rp
b24gKG4pIHsKLSAgICBuID0gK247Ci0gICAgaWYgKG4gIT09IG4pIHsgLy8gaXNOYU4KLSAgICAg
ICAgbiA9IDA7Ci0gICAgfSBlbHNlIGlmIChuICE9PSAwICYmIG4gIT09ICgxLzApICYmIG4gIT09
IC0oMS8wKSkgewotICAgICAgICBuID0gKG4gPiAwIHx8IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5h
YnMobikpOwotICAgIH0KLSAgICByZXR1cm4gbjsKLX07Ci0KLXZhciBwcmVwYXJlU3RyaW5nID0g
ImEiWzBdICE9ICJhIjsKLSAgICAvLyBFUzUgOS45Ci0gICAgLy8gaHR0cDovL2VzNS5naXRodWIu
Y29tLyN4OS45Ci12YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykgewotICAgIGlmIChvID09IG51
bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkCi0gICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8gb2JqZWN0Iik7Ci0gICAg
fQotICAgIC8vIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQgYnktaW5kZXgg
YWNjZXNzIG9mCi0gICAgLy8gc3RyaW5nIGNoYXJhY3RlcnMgKGV4LiBJRSA8IDkpLCBzcGxpdCB0
aGUgc3RyaW5nCi0gICAgaWYgKHByZXBhcmVTdHJpbmcgJiYgdHlwZW9mIG8gPT0gInN0cmluZyIg
JiYgbykgewotICAgICAgICByZXR1cm4gby5zcGxpdCgiIik7Ci0gICAgfQotICAgIHJldHVybiBP
YmplY3Qobyk7Ci19OwotCi19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJf
Y29tcG9uZW50cy9mbGlnaHQvbGliL2FkdmljZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJf
Y29tcG9uZW50cy9mbGlnaHQvbGliL2FkdmljZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODk4YzM0MDZlNWY2ODIzMzY5ZTQ3OGM1OTZiMWU0OTMxMDcyNzEwNS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jv
d2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9hZHZpY2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2
OSArMCwwIEBACi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYwotLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1J
VCBMaWNlbnNlCi0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotZGVmaW5lKAotCi0gIFsK
LSAgICAnLi9jb21wb3NlJwotICBdLAotCi0gIGZ1bmN0aW9uKGNvbXBvc2UpIHsKLSAgICAndXNl
IHN0cmljdCc7Ci0KLSAgICB2YXIgYWR2aWNlID0gewotCi0gICAgICBhcm91bmQ6IGZ1bmN0aW9u
KGJhc2UsIHdyYXBwZWQpIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBvc2VkQXJvdW5k
KCkgewotICAgICAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtl
ZCBmYXN0ZXIKLSAgICAgICAgICB2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdz
ID0gbmV3IEFycmF5KGwgKyAxKTsKLSAgICAgICAgICBhcmdzWzBdID0gYmFzZS5iaW5kKHRoaXMp
OwotICAgICAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSBhcmdzW2kgKyAxXSA9IGFyZ3VtZW50c1tp
XTsKLQotICAgICAgICAgIHJldHVybiB3cmFwcGVkLmFwcGx5KHRoaXMsIGFyZ3MpOwotICAgICAg
ICB9OwotICAgICAgfSwKLQotICAgICAgYmVmb3JlOiBmdW5jdGlvbihiYXNlLCBiZWZvcmUpIHsK
LSAgICAgICAgdmFyIGJlZm9yZUZuID0gKHR5cGVvZiBiZWZvcmUgPT0gJ2Z1bmN0aW9uJykgPyBi
ZWZvcmUgOiBiZWZvcmUub2JqW2JlZm9yZS5mbk5hbWVdOwotICAgICAgICByZXR1cm4gZnVuY3Rp
b24gY29tcG9zZWRCZWZvcmUoKSB7Ci0gICAgICAgICAgYmVmb3JlRm4uYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKLSAgICAgICAgICByZXR1cm4gYmFzZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwot
ICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgYWZ0ZXI6IGZ1bmN0aW9uKGJhc2UsIGFmdGVy
KSB7Ci0gICAgICAgIHZhciBhZnRlckZuID0gKHR5cGVvZiBhZnRlciA9PSAnZnVuY3Rpb24nKSA/
IGFmdGVyIDogYWZ0ZXIub2JqW2FmdGVyLmZuTmFtZV07Ci0gICAgICAgIHJldHVybiBmdW5jdGlv
biBjb21wb3NlZEFmdGVyKCkgewotICAgICAgICAgIHZhciByZXMgPSAoYmFzZS51bmJvdW5kIHx8
IGJhc2UpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgYWZ0ZXJGbi5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIH07Ci0gICAg
ICB9LAotCi0gICAgICAvLyBhIG1peGluIHRoYXQgYWxsb3dzIG90aGVyIG1peGlucyB0byBhdWdt
ZW50IGV4aXN0aW5nIGZ1bmN0aW9ucyBieSBhZGRpbmcgYWRkaXRpb25hbAotICAgICAgLy8gY29k
ZSBiZWZvcmUsIGFmdGVyIG9yIGFyb3VuZC4KLSAgICAgIHdpdGhBZHZpY2U6IGZ1bmN0aW9uKCkg
ewotICAgICAgICBbJ2JlZm9yZScsICdhZnRlcicsICdhcm91bmQnXS5mb3JFYWNoKGZ1bmN0aW9u
KG0pIHsKLSAgICAgICAgICB0aGlzW21dID0gZnVuY3Rpb24obWV0aG9kLCBmbikgewotCi0gICAg
ICAgICAgICBjb21wb3NlLnVubG9ja1Byb3BlcnR5KHRoaXMsIG1ldGhvZCwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpc1ttZXRob2RdID09ICdmdW5jdGlvbicpIHsK
LSAgICAgICAgICAgICAgICB0aGlzW21ldGhvZF0gPSBhZHZpY2VbbV0odGhpc1ttZXRob2RdLCBm
bik7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpc1ttZXRob2Rd
ID0gZm47Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICByZXR1cm4gdGhpc1ttZXRo
b2RdOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICB9OwotICAgICAgICB9LCB0aGlzKTsK
LSAgICAgIH0KLSAgICB9OwotCi0gICAgcmV0dXJuIGFkdmljZTsKLSAgfQotKTsKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2Jhc2UuanMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9iYXNlLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjExYTBjYTE1ODUwZDQ5MTIwZTg0ZWQzNTBj
ZDIxNjI5ZDk5ZmJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2Jhc2UuanMK
KysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKLS8v
IExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQotLy8gaHR0cDovL29wZW5zb3VyY2Uub3Jn
L2xpY2Vuc2VzL01JVAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0KLWRlZmluZSgKLQotICBbCi0gICAgJy4vdXRpbHMnLAotICAgICcuL3JlZ2lzdHJ5JywK
LSAgICAnLi9kZWJ1ZycKLSAgXSwKLQotICBmdW5jdGlvbih1dGlscywgcmVnaXN0cnksIGRlYnVn
KSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgLy8gY29tbW9uIG1peGluIGFsbG9jYXRlcyBi
YXNpYyBmdW5jdGlvbmFsaXR5IC0gdXNlZCBieSBhbGwgY29tcG9uZW50IHByb3RvdHlwZXMKLSAg
ICAvLyBjYWxsYmFjayBjb250ZXh0IGlzIGJvdW5kIHRvIGNvbXBvbmVudAotICAgIHZhciBjb21w
b25lbnRJZCA9IDA7Ci0KLSAgICBmdW5jdGlvbiB0ZWFyZG93bkluc3RhbmNlKGluc3RhbmNlSW5m
byl7Ci0gICAgICBpbnN0YW5jZUluZm8uZXZlbnRzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbihl
dmVudCkgewotICAgICAgICB2YXIgYXJncyA9IFtldmVudC50eXBlXTsKLQotICAgICAgICBldmVu
dC5lbGVtZW50ICYmIGFyZ3MudW5zaGlmdChldmVudC5lbGVtZW50KTsKLSAgICAgICAgKHR5cGVv
ZiBldmVudC5jYWxsYmFjayA9PSAnZnVuY3Rpb24nKSAmJiBhcmdzLnB1c2goZXZlbnQuY2FsbGJh
Y2spOwotCi0gICAgICAgIHRoaXMub2ZmLmFwcGx5KHRoaXMsIGFyZ3MpOwotICAgICAgfSwgaW5z
dGFuY2VJbmZvLmluc3RhbmNlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjaGVja1NlcmlhbGl6
YWJsZSh0eXBlLCBkYXRhKSB7Ci0gICAgICB0cnkgewotICAgICAgICB3aW5kb3cucG9zdE1lc3Nh
Z2UoZGF0YSwgJyonKTsKLSAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICBjb25zb2xlLmxvZygn
dW5zZXJpYWxpemFibGUgZGF0YSBmb3IgZXZlbnQnLHR5cGUsJzonLGRhdGEpOwotICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoCi0gICAgICAgICAgWydUaGUgZXZlbnQnLCB0eXBlLCAnb24gY29tcG9u
ZW50JywgdGhpcy50b1N0cmluZygpLCAnd2FzIHRyaWdnZXJlZCB3aXRoIG5vbi1zZXJpYWxpemFi
bGUgZGF0YSddLmpvaW4oJyAnKQotICAgICAgICApOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHdpdGhCYXNlKCkgewotCi0gICAgICAvLyBkZWxlZ2F0ZSB0cmlnZ2VyLCBiaW5kIGFu
ZCB1bmJpbmQgdG8gYW4gZWxlbWVudAotICAgICAgLy8gaWYgJGVsZW1lbnQgbm90IHN1cHBsaWVk
LCB1c2UgY29tcG9uZW50J3Mgbm9kZQotICAgICAgLy8gb3RoZXIgYXJndW1lbnRzIGFyZSBwYXNz
ZWQgb24KLSAgICAgIC8vIGV2ZW50IGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgc3BlY2lmeWluZyB0
aGUgdHlwZQotICAgICAgLy8gb2YgdGhlIGV2ZW50LCBvciBhIGhhc2ggc3BlY2lmeWluZyBib3Ro
IHRoZSB0eXBlCi0gICAgICAvLyBhbmQgYSBkZWZhdWx0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4K
LSAgICAgIHRoaXMudHJpZ2dlciA9IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgJGVsZW1lbnQs
IHR5cGUsIGRhdGEsIGV2ZW50LCBkZWZhdWx0Rm47Ci0gICAgICAgIHZhciBsYXN0SW5kZXggPSBh
cmd1bWVudHMubGVuZ3RoIC0gMSwgbGFzdEFyZyA9IGFyZ3VtZW50c1tsYXN0SW5kZXhdOwotCi0g
ICAgICAgIGlmICh0eXBlb2YgbGFzdEFyZyAhPSAnc3RyaW5nJyAmJiAhKGxhc3RBcmcgJiYgbGFz
dEFyZy5kZWZhdWx0QmVoYXZpb3IpKSB7Ci0gICAgICAgICAgbGFzdEluZGV4LS07Ci0gICAgICAg
ICAgZGF0YSA9IGxhc3RBcmc7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGFzdEluZGV4ID09
IDEpIHsKLSAgICAgICAgICAkZWxlbWVudCA9ICQoYXJndW1lbnRzWzBdKTsKLSAgICAgICAgICBl
dmVudCA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAkZWxlbWVu
dCA9IHRoaXMuJG5vZGU7Ci0gICAgICAgICAgZXZlbnQgPSBhcmd1bWVudHNbMF07Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdEJlaGF2aW9yKSB7Ci0gICAgICAgICAgZGVm
YXVsdEZuID0gZXZlbnQuZGVmYXVsdEJlaGF2aW9yOwotICAgICAgICAgIGV2ZW50ID0gJC5FdmVu
dChldmVudC50eXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHR5cGUgPSBldmVudC50eXBlIHx8
IGV2ZW50OwotCi0gICAgICAgIGlmIChkZWJ1Zy5lbmFibGVkICYmIHdpbmRvdy5wb3N0TWVzc2Fn
ZSkgewotICAgICAgICAgIGNoZWNrU2VyaWFsaXphYmxlLmNhbGwodGhpcywgdHlwZSwgZGF0YSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXR0ci5ldmVudERhdGEgPT09
ICdvYmplY3QnKSB7Ci0gICAgICAgICAgZGF0YSA9ICQuZXh0ZW5kKHRydWUsIHt9LCB0aGlzLmF0
dHIuZXZlbnREYXRhLCBkYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgICRlbGVtZW50LnRyaWdn
ZXIoKGV2ZW50IHx8IHR5cGUpLCBkYXRhKTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZuICYmICFl
dmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgewotICAgICAgICAgICh0aGlzW2RlZmF1bHRGbl0g
fHwgZGVmYXVsdEZuKS5jYWxsKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICRl
bGVtZW50OwotICAgICAgfTsKLQotICAgICAgdGhpcy5vbiA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB2YXIgJGVsZW1lbnQsIHR5cGUsIGNhbGxiYWNrLCBvcmlnaW5hbENiOwotICAgICAgICB2YXIg
bGFzdEluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCAtIDEsIG9yaWdpbiA9IGFyZ3VtZW50c1tsYXN0
SW5kZXhdOwotCi0gICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luID09ICdvYmplY3QnKSB7Ci0gICAg
ICAgICAgLy9kZWxlZ2F0ZSBjYWxsYmFjawotICAgICAgICAgIG9yaWdpbmFsQ2IgPSB1dGlscy5k
ZWxlZ2F0ZSgKLSAgICAgICAgICAgIHRoaXMucmVzb2x2ZURlbGVnYXRlUnVsZXMob3JpZ2luKQot
ICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgb3JpZ2luYWxDYiA9IG9y
aWdpbjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXN0SW5kZXggPT0gMikgewotICAgICAg
ICAgICRlbGVtZW50ID0gJChhcmd1bWVudHNbMF0pOwotICAgICAgICAgIHR5cGUgPSBhcmd1bWVu
dHNbMV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgJGVsZW1lbnQgPSB0aGlzLiRub2Rl
OwotICAgICAgICAgIHR5cGUgPSBhcmd1bWVudHNbMF07Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAodHlwZW9mIG9yaWdpbmFsQ2IgIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb3JpZ2luYWxDYiAh
PSAnb2JqZWN0JykgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGJpbmQg
dG8gIicgKyB0eXBlICsgJyIgYmVjYXVzZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgaXMgbm90IGEgZnVu
Y3Rpb24gb3IgYW4gb2JqZWN0Jyk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYWxsYmFjayA9IG9y
aWdpbmFsQ2IuYmluZCh0aGlzKTsKLSAgICAgICAgY2FsbGJhY2sudGFyZ2V0ID0gb3JpZ2luYWxD
YjsKLQotICAgICAgICAvLyBpZiB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgaXMgYWxyZWFkeSBicmFu
ZGVkIGJ5IGpRdWVyeSdzIGd1aWQsIGNvcHkgaXQgdG8gdGhlIGNvbnRleHQtYm91bmQgdmVyc2lv
bgotICAgICAgICBpZiAob3JpZ2luYWxDYi5ndWlkKSB7Ci0gICAgICAgICAgY2FsbGJhY2suZ3Vp
ZCA9IG9yaWdpbmFsQ2IuZ3VpZDsKLSAgICAgICAgfQotCi0gICAgICAgICRlbGVtZW50Lm9uKHR5
cGUsIGNhbGxiYWNrKTsKLQotICAgICAgICAvLyBnZXQganF1ZXJ5J3MgZ3VpZCBmcm9tIG91ciBi
b3VuZCBmbiwgc28gdW5iaW5kaW5nIHdpbGwgd29yawotICAgICAgICBvcmlnaW5hbENiLmd1aWQg
PSBjYWxsYmFjay5ndWlkOwotCi0gICAgICAgIHJldHVybiBjYWxsYmFjazsKLSAgICAgIH07Ci0K
LSAgICAgIHRoaXMub2ZmID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciAkZWxlbWVudCwgdHlw
ZSwgY2FsbGJhY2s7Ci0gICAgICAgIHZhciBsYXN0SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoIC0g
MTsKLQotICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tsYXN0SW5kZXhdID09ICdmdW5jdGlv
bicpIHsKLSAgICAgICAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1tsYXN0SW5kZXhdOwotICAgICAg
ICAgIGxhc3RJbmRleCAtPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxhc3RJbmRleCA9
PSAxKSB7Ci0gICAgICAgICAgJGVsZW1lbnQgPSAkKGFyZ3VtZW50c1swXSk7Ci0gICAgICAgICAg
dHlwZSA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAkZWxlbWVu
dCA9IHRoaXMuJG5vZGU7Ci0gICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1swXTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiAkZWxlbWVudC5vZmYodHlwZSwgY2FsbGJhY2spOwotICAgICAg
fTsKLQotICAgICAgdGhpcy5yZXNvbHZlRGVsZWdhdGVSdWxlcyA9IGZ1bmN0aW9uKHJ1bGVJbmZv
KSB7Ci0gICAgICAgIHZhciBydWxlcyA9IHt9OwotCi0gICAgICAgIE9iamVjdC5rZXlzKHJ1bGVJ
bmZvKS5mb3JFYWNoKGZ1bmN0aW9uKHIpIHsKLSAgICAgICAgICBpZiAoIShyIGluIHRoaXMuYXR0
cikpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50ICInICsgdGhpcy50
b1N0cmluZygpICsgJyIgd2FudHMgdG8gbGlzdGVuIG9uICInICsgciArICciIGJ1dCBubyBzdWNo
IGF0dHJpYnV0ZSB3YXMgZGVmaW5lZC4nKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcnVsZXNb
dGhpcy5hdHRyW3JdXSA9IHJ1bGVJbmZvW3JdOwotICAgICAgICB9LCB0aGlzKTsKLQotICAgICAg
ICByZXR1cm4gcnVsZXM7Ci0gICAgICB9OwotCi0gICAgICB0aGlzLmRlZmF1bHRBdHRycyA9IGZ1
bmN0aW9uKGRlZmF1bHRzKSB7Ci0gICAgICAgIHV0aWxzLnB1c2godGhpcy5kZWZhdWx0cywgZGVm
YXVsdHMsIHRydWUpIHx8ICh0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHMpOwotICAgICAgfTsKLQot
ICAgICAgdGhpcy5zZWxlY3QgPSBmdW5jdGlvbihhdHRyaWJ1dGVLZXkpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuJG5vZGUuZmluZCh0aGlzLmF0dHJbYXR0cmlidXRlS2V5XSk7Ci0gICAgICB9Owot
Ci0gICAgICB0aGlzLmluaXRpYWxpemUgPSBmdW5jdGlvbihub2RlLCBhdHRycykgewotICAgICAg
ICBhdHRycyB8fCAoYXR0cnMgPSB7fSk7Ci0gICAgICAgIC8vb25seSBhc3NpZ24gaWRlbnRpdHkg
aWYgdGhlcmUgaXNuJ3Qgb25lIChpbml0aWFsaXplIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGlt
ZXMpCi0gICAgICAgIHRoaXMuaWRlbnRpdHkgfHwgKHRoaXMuaWRlbnRpdHkgPSBjb21wb25lbnRJ
ZCsrKTsKLQotICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0NvbXBvbmVudCBuZWVkcyBhIG5vZGUnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub2Rl
LmpxdWVyeSkgewotICAgICAgICAgIHRoaXMubm9kZSA9IG5vZGVbMF07Ci0gICAgICAgICAgdGhp
cy4kbm9kZSA9IG5vZGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhpcy5ub2RlID0g
bm9kZTsKLSAgICAgICAgICB0aGlzLiRub2RlID0gJChub2RlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIG1lcmdlIGRlZmF1bHRzIHdpdGggc3VwcGxpZWQgb3B0aW9ucwotICAgICAgICAvLyBw
dXQgb3B0aW9ucyBpbiBhdHRyLl9fcHJvdG9fXyB0byBhdm9pZCBtZXJnZSBvdmVyaGVhZAotICAg
ICAgICB2YXIgYXR0ciA9IE9iamVjdC5jcmVhdGUoYXR0cnMpOwotICAgICAgICBmb3IgKHZhciBr
ZXkgaW4gdGhpcy5kZWZhdWx0cykgewotICAgICAgICAgIGlmICghYXR0cnMuaGFzT3duUHJvcGVy
dHkoa2V5KSkgewotICAgICAgICAgICAgYXR0cltrZXldID0gdGhpcy5kZWZhdWx0c1trZXldOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuYXR0ciA9IGF0dHI7Ci0KLSAg
ICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0cyB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbihr
ZXkpIHsKLSAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0c1trZXldID09PSBudWxsICYmIHRoaXMu
YXR0cltrZXldID09PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVp
cmVkIGF0dHJpYnV0ZSAiJyArIGtleSArICciIG5vdCBzcGVjaWZpZWQgaW4gYXR0YWNoVG8gZm9y
IGNvbXBvbmVudCAiJyArIHRoaXMudG9TdHJpbmcoKSArICciLicpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9OwotCi0gICAg
ICB0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRlYXJkb3duSW5zdGFuY2Uo
cmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKSk7Ci0gICAgICB9OwotICAgIH0KLQotICAg
IHJldHVybiB3aXRoQmFzZTsKLSAgfQotKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvbmVudC5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvbmVudC5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjJjOGI1NTA1NTQ1ZDE1MmU0MGViODA4YjJiMjUxOTE1NTVlNjAw
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb25lbnQuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0vLyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKLS8vIExpY2Vu
c2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQotLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu
c2VzL01JVAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0K
LWRlZmluZSgKLQotICBbCi0gICAgJy4vYWR2aWNlJywKLSAgICAnLi91dGlscycsCi0gICAgJy4v
Y29tcG9zZScsCi0gICAgJy4vYmFzZScsCi0gICAgJy4vcmVnaXN0cnknLAotICAgICcuL2xvZ2dl
cicsCi0gICAgJy4vZGVidWcnCi0gIF0sCi0KLSAgZnVuY3Rpb24oYWR2aWNlLCB1dGlscywgY29t
cG9zZSwgd2l0aEJhc2UsIHJlZ2lzdHJ5LCB3aXRoTG9nZ2luZywgZGVidWcpIHsKLSAgICAndXNl
IHN0cmljdCc7Ci0KLSAgICB2YXIgZnVuY3Rpb25OYW1lUmVnRXggPSAvZnVuY3Rpb24gKC4qPylc
cz9cKC87Ci0KLSAgICAvLyB0ZWFyZG93biBmb3IgYWxsIGluc3RhbmNlcyBvZiB0aGlzIGNvbnN0
cnVjdG9yCi0gICAgZnVuY3Rpb24gdGVhcmRvd25BbGwoKSB7Ci0gICAgICB2YXIgY29tcG9uZW50
SW5mbyA9IHJlZ2lzdHJ5LmZpbmRDb21wb25lbnRJbmZvKHRoaXMpOwotCi0gICAgICBjb21wb25l
bnRJbmZvICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudEluZm8uaW5zdGFuY2VzKS5mb3JFYWNoKGZ1
bmN0aW9uKGspIHsKLSAgICAgICAgdmFyIGluZm8gPSBjb21wb25lbnRJbmZvLmluc3RhbmNlc1tr
XTsKLSAgICAgICAgaW5mby5pbnN0YW5jZS50ZWFyZG93bigpOwotICAgICAgfSk7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gY2hlY2tTZXJpYWxpemFibGUodHlwZSwgZGF0YSkgewotICAgICAgdHJ5
IHsKLSAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7Ci0gICAgICB9IGNhdGNo
KGUpIHsKLSAgICAgICAgY29uc29sZS5sb2coJ3Vuc2VyaWFsaXphYmxlIGRhdGEgZm9yIGV2ZW50
Jyx0eXBlLCc6JyxkYXRhKTsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKAotICAgICAgICAgIFsn
VGhlIGV2ZW50JywgdHlwZSwgJ29uIGNvbXBvbmVudCcsIHRoaXMudG9TdHJpbmcoKSwgJ3dhcyB0
cmlnZ2VyZWQgd2l0aCBub24tc2VyaWFsaXphYmxlIGRhdGEnXS5qb2luKCcgJykKLSAgICAgICAg
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBhdHRhY2hUbyhzZWxlY3Rvci8qLCBv
cHRpb25zIGFyZ3MgKi8pIHsKLSAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBi
ZW5jaG1hcmtlZCBmYXN0ZXIKLSAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICAg
IHZhciBhcmdzID0gbmV3IEFycmF5KGwgLSAxKTsKLSAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwg
bDsgaSsrKSBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKLQotICAgICAgaWYgKCFzZWxlY3Rv
cikgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBuZWVkcyB0byBiZSBhdHRh
Y2hUb1wnZCBhIGpRdWVyeSBvYmplY3QsIG5hdGl2ZSBub2RlIG9yIHNlbGVjdG9yIHN0cmluZycp
OwotICAgICAgfQotCi0gICAgICB2YXIgb3B0aW9ucyA9IHV0aWxzLm1lcmdlLmFwcGx5KHV0aWxz
LCBhcmdzKTsKLSAgICAgIHZhciBjb21wb25lbnRJbmZvID0gcmVnaXN0cnkuZmluZENvbXBvbmVu
dEluZm8odGhpcyk7Ci0KLSAgICAgICQoc2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oaSwgbm9kZSkg
ewotICAgICAgICBpZiAoY29tcG9uZW50SW5mbyAmJiBjb21wb25lbnRJbmZvLmlzQXR0YWNoZWRU
byhub2RlKSkgewotICAgICAgICAgIC8vIGFscmVhZHkgYXR0YWNoZWQKLSAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICAobmV3IHRoaXMpLmluaXRpYWxpemUobm9kZSwgb3B0
aW9ucyk7Ci0gICAgICB9LmJpbmQodGhpcykpOwotICAgIH0KLQotICAgIC8vIGRlZmluZSB0aGUg
Y29uc3RydWN0b3IgZm9yIGEgY3VzdG9tIGNvbXBvbmVudCB0eXBlCi0gICAgLy8gdGFrZXMgYW4g
dW5saW1pdGVkIG51bWJlciBvZiBtaXhpbiBmdW5jdGlvbnMgYXMgYXJndW1lbnRzCi0gICAgLy8g
dHlwaWNhbCBhcGkgY2FsbCB3aXRoIDMgbWl4aW5zOiBkZWZpbmUodGltZWxpbmUsIHdpdGhUd2Vl
dENhcGFiaWxpdHksIHdpdGhTY3JvbGxDYXBhYmlsaXR5KTsKLSAgICBmdW5jdGlvbiBkZWZpbmUo
LyptaXhpbnMqLykgewotICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNo
bWFya2VkIGZhc3RlcgotICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgLy8g
YWRkIHRocmVlIGZvciBjb21tb24gbWl4aW5zCi0gICAgICB2YXIgbWl4aW5zID0gbmV3IEFycmF5
KGwgKyAzKTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSBtaXhpbnNbaV0gPSBh
cmd1bWVudHNbaV07Ci0KLSAgICAgIHZhciBDb21wb25lbnQgPSBmdW5jdGlvbigpIHt9OwotCi0g
ICAgICBDb21wb25lbnQudG9TdHJpbmcgPSBDb21wb25lbnQucHJvdG90eXBlLnRvU3RyaW5nID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBwcmV0dHlQcmludE1peGlucyA9IG1peGlucy5tYXAo
ZnVuY3Rpb24obWl4aW4pIHsKLSAgICAgICAgICBpZiAobWl4aW4ubmFtZSA9PSBudWxsKSB7Ci0g
ICAgICAgICAgICAvLyBmdW5jdGlvbiBuYW1lIHByb3BlcnR5IG5vdCBzdXBwb3J0ZWQgYnkgdGhp
cyBicm93c2VyLCB1c2UgcmVnZXgKLSAgICAgICAgICAgIHZhciBtID0gbWl4aW4udG9TdHJpbmco
KS5tYXRjaChmdW5jdGlvbk5hbWVSZWdFeCk7Ci0gICAgICAgICAgICByZXR1cm4gKG0gJiYgbVsx
XSkgPyBtWzFdIDogJyc7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAo
bWl4aW4ubmFtZSAhPSAnd2l0aEJhc2UnKSA/IG1peGluLm5hbWUgOiAnJzsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpOwotICAgICAgICByZXR1cm4g
cHJldHR5UHJpbnRNaXhpbnM7Ci0gICAgICB9OwotCi0gICAgICBpZiAoZGVidWcuZW5hYmxlZCkg
ewotICAgICAgICBDb21wb25lbnQuZGVzY3JpYmUgPSBDb21wb25lbnQucHJvdG90eXBlLmRlc2Ny
aWJlID0gQ29tcG9uZW50LnRvU3RyaW5nKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vICdvcHRpb25z
JyBpcyBvcHRpb25hbCBoYXNoIHRvIGJlIG1lcmdlZCB3aXRoICdkZWZhdWx0cycgaW4gdGhlIGNv
bXBvbmVudCBkZWZpbml0aW9uCi0gICAgICBDb21wb25lbnQuYXR0YWNoVG8gPSBhdHRhY2hUbzsK
LSAgICAgIENvbXBvbmVudC50ZWFyZG93bkFsbCA9IHRlYXJkb3duQWxsOwotCi0gICAgICAvLyBw
cmVwZW5kIGNvbW1vbiBtaXhpbnMgdG8gc3VwcGxpZWQgbGlzdCwgdGhlbiBtaXhpbiBhbGwgZmxh
dm9ycwotICAgICAgaWYgKGRlYnVnLmVuYWJsZWQpIHsKLSAgICAgICAgbWl4aW5zLnVuc2hpZnQo
d2l0aExvZ2dpbmcpOwotICAgICAgfQotICAgICAgbWl4aW5zLnVuc2hpZnQod2l0aEJhc2UsIGFk
dmljZS53aXRoQWR2aWNlLCByZWdpc3RyeS53aXRoUmVnaXN0cmF0aW9uKTsKLSAgICAgIGNvbXBv
c2UubWl4aW4oQ29tcG9uZW50LnByb3RvdHlwZSwgbWl4aW5zKTsKLQotICAgICAgcmV0dXJuIENv
bXBvbmVudDsKLSAgICB9Ci0KLSAgICBkZWZpbmUudGVhcmRvd25BbGwgPSBmdW5jdGlvbigpIHsK
LSAgICAgIHJlZ2lzdHJ5LmNvbXBvbmVudHMuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpIHsK
LSAgICAgICAgYy5jb21wb25lbnQudGVhcmRvd25BbGwoKTsKLSAgICAgIH0pOwotICAgICAgcmVn
aXN0cnkucmVzZXQoKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIGRlZmluZTsKLSAgfQotKTsKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2Nv
bXBvc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9j
b21wb3NlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDc5ZDk5ZWUwOWUyOTZi
YTkzOTExNDE5NTJhMzNlYjFiZTA3Zjk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQv
bGliL2NvbXBvc2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIENvcHlyaWdodCAyMDEzIFR3
aXR0ZXIsIEluYwotLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCi0vLyBodHRwOi8v
b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotZGVmaW5lKAotCi0gIFsKLSAgICAnLi91dGlscycsCi0gICAg
Jy4vZGVidWcnCi0gIF0sCi0KLSAgZnVuY3Rpb24odXRpbHMsIGRlYnVnKSB7Ci0gICAgJ3VzZSBz
dHJpY3QnOwotCi0gICAgLy9lbnVtZXJhYmxlcyBhcmUgc2hpbXMgLSBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3Igc2hpbSBkb2Vzbid0IHdvcmsKLSAgICB2YXIgY2FuV3JpdGVQcm90ZWN0ID0gZGVi
dWcuZW5hYmxlZCAmJiAhdXRpbHMuaXNFbnVtZXJhYmxlKE9iamVjdCwgJ2dldE93blByb3BlcnR5
RGVzY3JpcHRvcicpOwotICAgIC8vd2hpdGVsaXN0IG9mIHVubG9ja2FibGUgcHJvcGVydHkgbmFt
ZXMKLSAgICB2YXIgZG9udExvY2sgPSBbJ21peGVkSW4nXTsKLQotICAgIGlmIChjYW5Xcml0ZVBy
b3RlY3QpIHsKLSAgICAgIC8vSUU4IGdldE93blByb3BlcnR5RGVzY3JpcHRvciBpcyBidWlsdC1p
biBidXQgdGhyb3dzIGV4ZXB0aW9uIG9uIG5vbiBET00gb2JqZWN0cwotICAgICAgdHJ5IHsKLSAg
ICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QsICdrZXlzJyk7Ci0g
ICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgY2FuV3JpdGVQcm90ZWN0ID0gZmFsc2U7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0UHJvcGVydHlXcml0YWJpbGl0eShvYmosIGlz
V3JpdGFibGUpIHsKLSAgICAgIGlmICghY2FuV3JpdGVQcm90ZWN0KSB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgIH0KLQotICAgICAgdmFyIHByb3BzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLQot
ICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKAotICAgICAgICBmdW5jdGlvbiAoa2V5KSB7
Ci0gICAgICAgICAgaWYgKGRvbnRMb2NrLmluZGV4T2Yoa2V5KSA8IDApIHsKLSAgICAgICAgICAg
IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7Ci0g
ICAgICAgICAgICBkZXNjLndyaXRhYmxlID0gaXNXcml0YWJsZTsKLSAgICAgICAgICAgIHByb3Bz
W2tleV0gPSBkZXNjOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgKTsKLQotICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCBwcm9wcyk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gdW5sb2NrUHJvcGVydHkob2JqLCBwcm9wLCBvcCkgewotICAgICAgdmFyIHdyaXRhYmxlOwot
Ci0gICAgICBpZiAoIWNhbldyaXRlUHJvdGVjdCB8fCAhb2JqLmhhc093blByb3BlcnR5KHByb3Ap
KSB7Ci0gICAgICAgIG9wLmNhbGwob2JqKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0g
ICAgICB3cml0YWJsZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9w
KS53cml0YWJsZTsKLSAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsgd3Jp
dGFibGU6IHRydWUgfSk7Ci0gICAgICBvcC5jYWxsKG9iaik7Ci0gICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkob2JqLCBwcm9wLCB7IHdyaXRhYmxlOiB3cml0YWJsZSB9KTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBtaXhpbihiYXNlLCBtaXhpbnMpIHsKLSAgICAgIGJhc2UubWl4ZWRJbiA9IGJh
c2UuaGFzT3duUHJvcGVydHkoJ21peGVkSW4nKSA/IGJhc2UubWl4ZWRJbiA6IFtdOwotCi0gICAg
ICBtaXhpbnMuZm9yRWFjaChmdW5jdGlvbihtaXhpbikgewotICAgICAgICBpZiAoYmFzZS5taXhl
ZEluLmluZGV4T2YobWl4aW4pID09IC0xKSB7Ci0gICAgICAgICAgc2V0UHJvcGVydHlXcml0YWJp
bGl0eShiYXNlLCBmYWxzZSk7Ci0gICAgICAgICAgbWl4aW4uY2FsbChiYXNlKTsKLSAgICAgICAg
ICBiYXNlLm1peGVkSW4ucHVzaChtaXhpbik7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAg
ICBzZXRQcm9wZXJ0eVdyaXRhYmlsaXR5KGJhc2UsIHRydWUpOwotICAgIH0KLQotICAgIHJldHVy
biB7Ci0gICAgICBtaXhpbjogbWl4aW4sCi0gICAgICB1bmxvY2tQcm9wZXJ0eTogdW5sb2NrUHJv
cGVydHkKLSAgICB9OwotCi0gIH0KLSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jv
d2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9kZWJ1Zy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2RlYnVnLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyNjcwYWNmYjM1YThmZDIxNmZkMDFiNzFkNzI4MDg4ZDYxMDYzYzg3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2RlYnVnLmpzCisrKyAvZGV2L251bGwKQEAgLTEs
MTU3ICswLDAgQEAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCi0vLyBMaWNlbnNlZCB1bmRlciBUaGUg
TUlUIExpY2Vuc2UKLS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKLS8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1kZWZpbmUoCi0KLSAg
W10sCi0KLSAgZnVuY3Rpb24oKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgLy8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAvLyBTZWFyY2ggb2JqZWN0IG1vZGVsCi0g
ICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgIGZ1bmN0aW9uIHRy
YXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpIHsKLSAgICAgIG9wdGlvbnMgPSBvcHRp
b25zIHx8IHt9OwotICAgICAgdmFyIG9iaiA9IG9wdGlvbnMub2JqIHx8IHdpbmRvdzsKLSAgICAg
IHZhciBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICgob2JqPT13aW5kb3cpID8gJ3dpbmRvdycgOiAn
Jyk7Ci0gICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhvYmopOwotICAgICAgcHJvcHMuZm9y
RWFjaChmdW5jdGlvbihwcm9wKSB7Ci0gICAgICAgIGlmICgodGVzdHNbdXRpbF0gfHwgdXRpbCko
c2VhcmNoVGVybSwgb2JqLCBwcm9wKSl7Ci0gICAgICAgICAgY29uc29sZS5sb2coW3BhdGgsICcu
JywgcHJvcF0uam9pbignJyksICctPicsIFsnKCcsIHR5cGVvZiBvYmpbcHJvcF0sICcpJ10uam9p
bignJyksIG9ialtwcm9wXSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5
cGUudG9TdHJpbmcuY2FsbChvYmpbcHJvcF0pID09ICdbb2JqZWN0IE9iamVjdF0nICYmIChvYmpb
cHJvcF0gIT0gb2JqKSAmJiBwYXRoLnNwbGl0KCcuJykuaW5kZXhPZihwcm9wKSA9PSAtMSkgewot
ICAgICAgICAgIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIHtvYmo6IG9ialtwcm9wXSwgcGF0
aDogW3BhdGgscHJvcF0uam9pbignLicpfSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIHNlYXJjaCh1dGlsLCBleHBlY3RlZCwgc2VhcmNoVGVybSwgb3B0aW9u
cykgewotICAgICAgaWYgKCFleHBlY3RlZCB8fCB0eXBlb2Ygc2VhcmNoVGVybSA9PSBleHBlY3Rl
ZCkgewotICAgICAgICB0cmF2ZXJzZSh1dGlsLCBzZWFyY2hUZXJtLCBvcHRpb25zKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoW3NlYXJjaFRlcm0sICdtdXN0IGJlJywg
ZXhwZWN0ZWRdLmpvaW4oJyAnKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFyIHRlc3RzID0g
ewotICAgICAgJ25hbWUnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4g
c2VhcmNoVGVybSA9PSBwcm9wO30sCi0gICAgICAnbmFtZUNvbnRhaW5zJzogZnVuY3Rpb24oc2Vh
cmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIHByb3AuaW5kZXhPZihzZWFyY2hUZXJtKSA+IC0x
O30sCi0gICAgICAndHlwZSc6IGZ1bmN0aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVy
biBvYmpbcHJvcF0gaW5zdGFuY2VvZiBzZWFyY2hUZXJtO30sCi0gICAgICAndmFsdWUnOiBmdW5j
dGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4gb2JqW3Byb3BdID09PSBzZWFyY2hU
ZXJtO30sCi0gICAgICAndmFsdWVDb2VyY2VkJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBw
cm9wKSB7cmV0dXJuIG9ialtwcm9wXSA9PSBzZWFyY2hUZXJtO30KLSAgICB9OwotCi0gICAgZnVu
Y3Rpb24gYnlOYW1lKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ25hbWUnLCAnc3RyaW5n
Jywgc2VhcmNoVGVybSwgb3B0aW9ucyk7fQotICAgIGZ1bmN0aW9uIGJ5TmFtZUNvbnRhaW5zKHNl
YXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ25hbWVDb250YWlucycsICdzdHJpbmcnLCBzZWFy
Y2hUZXJtLCBvcHRpb25zKTt9Ci0gICAgZnVuY3Rpb24gYnlUeXBlKHNlYXJjaFRlcm0sIG9wdGlv
bnMpIHtzZWFyY2goJ3R5cGUnLCAnZnVuY3Rpb24nLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9Ci0g
ICAgZnVuY3Rpb24gYnlWYWx1ZShzZWFyY2hUZXJtLCBvcHRpb25zKSB7c2VhcmNoKCd2YWx1ZScs
IG51bGwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO30KLSAgICBmdW5jdGlvbiBieVZhbHVlQ29lcmNl
ZChzZWFyY2hUZXJtLCBvcHRpb25zKSB7c2VhcmNoKCd2YWx1ZUNvZXJjZWQnLCBudWxsLCBzZWFy
Y2hUZXJtLCBvcHRpb25zKTt9Ci0gICAgZnVuY3Rpb24gY3VzdG9tKGZuLCBvcHRpb25zKSB7dHJh
dmVyc2UoZm4sIG51bGwsIG9wdGlvbnMpO30KLQotICAgIC8vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCi0gICAgLy8gRXZlbnQgbG9nZ2luZwotICAgIC8vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqCi0KLSAgICB2YXIgQUxMID0gJ2FsbCc7IC8vbm8gZmlsdGVyCi0K
LSAgICAvL25vIGxvZ2dpbmcgYnkgZGVmYXVsdAotICAgIHZhciBkZWZhdWx0RXZlbnROYW1lc0Zp
bHRlciA9IFtdOwotICAgIHZhciBkZWZhdWx0QWN0aW9uc0ZpbHRlciA9IFtdOwotCi0gICAgdmFy
IGxvZ0ZpbHRlciA9IHJldHJpZXZlTG9nRmlsdGVyKCk7Ci0KLSAgICBmdW5jdGlvbiBmaWx0ZXJF
dmVudExvZ3NCeUFjdGlvbigvKmFjdGlvbnMqLykgewotICAgICAgdmFyIGFjdGlvbnMgPSBbXS5z
bGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0KLSAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzLmxlbmd0
aCB8fCAobG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBBTEwpOwotICAgICAgbG9nRmlsdGVyLmFjdGlv
bnMgPSBhY3Rpb25zLmxlbmd0aCA/IGFjdGlvbnMgOiBBTEw7Ci0gICAgICBzYXZlTG9nRmlsdGVy
KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZmlsdGVyRXZlbnRMb2dzQnlOYW1lKC8qZXZlbnRO
YW1lcyovKSB7Ci0gICAgICB2YXIgZXZlbnROYW1lcyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRz
KTsKLQotICAgICAgbG9nRmlsdGVyLmFjdGlvbnMubGVuZ3RoIHx8IChsb2dGaWx0ZXIuYWN0aW9u
cyA9IEFMTCk7Ci0gICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9IGV2ZW50TmFtZXMubGVuZ3Ro
ID8gZXZlbnROYW1lcyA6IEFMTDsKLSAgICAgIHNhdmVMb2dGaWx0ZXIoKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBoaWRlQWxsRXZlbnRMb2dzKCkgewotICAgICAgbG9nRmlsdGVyLmFjdGlvbnMg
PSBbXTsKLSAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzID0gW107Ci0gICAgICBzYXZlTG9nRmls
dGVyKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2hvd0FsbEV2ZW50TG9ncygpIHsKLSAgICAg
IGxvZ0ZpbHRlci5hY3Rpb25zID0gQUxMOwotICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBB
TEw7Ci0gICAgICBzYXZlTG9nRmlsdGVyKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2F2ZUxv
Z0ZpbHRlcigpIHsKLSAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKSB7Ci0gICAgICAgIGxv
Y2FsU3RvcmFnZS5zZXRJdGVtKCdsb2dGaWx0ZXJfZXZlbnROYW1lcycsIGxvZ0ZpbHRlci5ldmVu
dE5hbWVzKTsKLSAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xvZ0ZpbHRlcl9hY3Rpb25z
JywgbG9nRmlsdGVyLmFjdGlvbnMpOwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHJl
dHJpZXZlTG9nRmlsdGVyKCkgewotICAgICAgdmFyIHJlc3VsdCA9IHsKLSAgICAgICAgZXZlbnRO
YW1lczogKHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ0Zp
bHRlcl9ldmVudE5hbWVzJykpIHx8IGRlZmF1bHRFdmVudE5hbWVzRmlsdGVyLAotICAgICAgICBh
Y3Rpb25zOiAod2luZG93LmxvY2FsU3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9n
RmlsdGVyX2FjdGlvbnMnKSkgfHwgZGVmYXVsdEFjdGlvbnNGaWx0ZXIKLSAgICAgIH07Ci0KLSAg
ICAgIC8vIHJlY29uc3RpdHV0ZSBhcnJheXMKLSAgICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9y
RWFjaChmdW5jdGlvbihrKSB7Ci0gICAgICAgIHZhciB0aGlzUHJvcCA9IHJlc3VsdFtrXTsKLSAg
ICAgICAgaWYgKHR5cGVvZiB0aGlzUHJvcCA9PSAnc3RyaW5nJyAmJiB0aGlzUHJvcCAhPT0gQUxM
KSB7Ci0gICAgICAgICAgcmVzdWx0W2tdID0gdGhpc1Byb3Auc3BsaXQoJywnKTsKLSAgICAgICAg
fQotICAgICAgfSk7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHJldHVybiB7
Ci0KLSAgICAgIGVuYWJsZTogZnVuY3Rpb24oZW5hYmxlKSB7Ci0gICAgICAgIHRoaXMuZW5hYmxl
ZCA9ICEhZW5hYmxlOwotCi0gICAgICAgIGlmIChlbmFibGUgJiYgd2luZG93LmNvbnNvbGUpIHsK
LSAgICAgICAgICBjb25zb2xlLmluZm8oJ0Jvb3RpbmcgaW4gREVCVUcgbW9kZScpOwotICAgICAg
ICAgIGNvbnNvbGUuaW5mbygnWW91IGNhbiBjb25maWd1cmUgZXZlbnQgbG9nZ2luZyB3aXRoIERF
QlVHLmV2ZW50cy5sb2dBbGwoKS9sb2dOb25lKCkvbG9nQnlOYW1lKCkvbG9nQnlBY3Rpb24oKScp
OwotICAgICAgICB9Ci0KLSAgICAgICAgd2luZG93LkRFQlVHID0gdGhpczsKLSAgICAgIH0sCi0K
LSAgICAgIGZpbmQ6IHsKLSAgICAgICAgYnlOYW1lOiBieU5hbWUsCi0gICAgICAgIGJ5TmFtZUNv
bnRhaW5zOiBieU5hbWVDb250YWlucywKLSAgICAgICAgYnlUeXBlOiBieVR5cGUsCi0gICAgICAg
IGJ5VmFsdWU6IGJ5VmFsdWUsCi0gICAgICAgIGJ5VmFsdWVDb2VyY2VkOiBieVZhbHVlQ29lcmNl
ZCwKLSAgICAgICAgY3VzdG9tOiBjdXN0b20KLSAgICAgIH0sCi0KLSAgICAgIGV2ZW50czogewot
ICAgICAgICBsb2dGaWx0ZXI6IGxvZ0ZpbHRlciwKLQotICAgICAgICAvLyBBY2NlcHRzIGFueSBu
dW1iZXIgb2YgYWN0aW9uIGFyZ3MKLSAgICAgICAgLy8gZS5nLiBERUJVRy5ldmVudHMubG9nQnlB
Y3Rpb24oIm9uIiwgIm9mZiIpCi0gICAgICAgIGxvZ0J5QWN0aW9uOiBmaWx0ZXJFdmVudExvZ3NC
eUFjdGlvbiwKLQotICAgICAgICAvLyBBY2NlcHRzIGFueSBudW1iZXIgb2YgZXZlbnQgbmFtZSBh
cmdzIChpbmMuIHJlZ2V4IG9yIHdpbGRjYXJkcykKLSAgICAgICAgLy8gZS5nLiBERUJVRy5ldmVu
dHMubG9nQnlOYW1lKC91aS4qLywgIipUaHJlYWQqIik7Ci0gICAgICAgIGxvZ0J5TmFtZTogZmls
dGVyRXZlbnRMb2dzQnlOYW1lLAotCi0gICAgICAgIGxvZ0FsbDogc2hvd0FsbEV2ZW50TG9ncywK
LSAgICAgICAgbG9nTm9uZTogaGlkZUFsbEV2ZW50TG9ncwotICAgICAgfQotICAgIH07Ci0gIH0K
LSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0
L2xpYi9pbmRleC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQv
bGliL2luZGV4LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTgwNmFhYzRjZjQ1
MmIzZWFkYmQ4NGUyMzY4MGM2ZGM1YTk2NmQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGln
aHQvbGliL2luZGV4LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDb3B5cmlnaHQgMjAxMyBU
d2l0dGVyLCBJbmMKLS8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQotLy8gaHR0cDov
L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLWRlZmluZSgKLQotICBbCi0gICAgJy4vYWR2aWNlJywKLSAg
ICAnLi9jb21wb25lbnQnLAotICAgICcuL2NvbXBvc2UnLAotICAgICcuL2xvZ2dlcicsCi0gICAg
Jy4vcmVnaXN0cnknLAotICAgICcuL3V0aWxzJwotICBdLAotCi0gIGZ1bmN0aW9uKGFkdmljZSwg
Y29tcG9uZW50LCBjb21wb3NlLCBsb2dnZXIsIHJlZ2lzdHJ5LCB1dGlscykgewotICAgICd1c2Ug
c3RyaWN0JzsKLQotICAgIHJldHVybiB7Ci0gICAgICBhZHZpY2U6IGFkdmljZSwKLSAgICAgIGNv
bXBvbmVudDogY29tcG9uZW50LAotICAgICAgY29tcG9zZTogY29tcG9zZSwKLSAgICAgIGxvZ2dl
cjogbG9nZ2VyLAotICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAotICAgICAgdXRpbHM6IHV0aWxz
Ci0gICAgfTsKLQotICB9Ci0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9j
b21wb25lbnRzL2ZsaWdodC9saWIvbG9nZ2VyLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9j
b21wb25lbnRzL2ZsaWdodC9saWIvbG9nZ2VyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3MWRkM2E4YjVmOGZmYWVjMTg5NDY2NzAzN2I5MGM4MDM0NjUxMDllLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2xvZ2dlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDg4
ICswLDAgQEAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ly8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCi0vLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlU
IExpY2Vuc2UKLS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKLS8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1kZWZpbmUoCi0KLSAgWwot
ICAgICcuL3V0aWxzJwotICBdLAotCi0gIGZ1bmN0aW9uKHV0aWxzKSB7Ci0gICAgJ3VzZSBzdHJp
Y3QnOwotCi0gICAgdmFyIGFjdGlvblN5bWJvbHMgPSB7Ci0gICAgICBvbjogJzwtJywKLSAgICAg
IHRyaWdnZXI6ICctPicsCi0gICAgICBvZmY6ICd4ICcKLSAgICB9OwotCi0gICAgZnVuY3Rpb24g
ZWxlbVRvU3RyaW5nKGVsZW0pIHsKLSAgICAgIHZhciB0YWdTdHIgPSBlbGVtLnRhZ05hbWUgPyBl
bGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6IGVsZW0udG9TdHJpbmcoKTsKLSAgICAgIHZhciBj
bGFzc1N0ciA9IGVsZW0uY2xhc3NOYW1lID8gJy4nICsgKGVsZW0uY2xhc3NOYW1lKSA6ICcnOwot
ICAgICAgdmFyIHJlc3VsdCA9IHRhZ1N0ciArIGNsYXNzU3RyOwotICAgICAgcmV0dXJuIGVsZW0u
dGFnTmFtZSA/IFsnXCcnLCAnXCcnXS5qb2luKHJlc3VsdCkgOiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gbG9nKGFjdGlvbiwgY29tcG9uZW50LCBldmVudEFyZ3MpIHsKLSAgICAgIHZh
ciBuYW1lLCBlbGVtLCBmbiwgbG9nRmlsdGVyLCB0b1JlZ0V4cCwgYWN0aW9uTG9nZ2FibGUsIG5h
bWVMb2dnYWJsZTsKLQotICAgICAgaWYgKHR5cGVvZiBldmVudEFyZ3NbZXZlbnRBcmdzLmxlbmd0
aC0xXSA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgIGZuID0gZXZlbnRBcmdzLnBvcCgpOwotICAg
ICAgICBmbiA9IGZuLnVuYm91bmQgfHwgZm47IC8vIHVzZSB1bmJvdW5kIHZlcnNpb24gaWYgYW55
IChiZXR0ZXIgaW5mbykKLSAgICAgIH0KLQotICAgICAgaWYgKHR5cGVvZiBldmVudEFyZ3NbZXZl
bnRBcmdzLmxlbmd0aCAtIDFdID09ICdvYmplY3QnKSB7Ci0gICAgICAgIGV2ZW50QXJncy5wb3Ao
KTsgLy8gdHJpZ2dlciBkYXRhIGFyZyAtIG5vdCBsb2dnZWQgcmlnaHQgbm93Ci0gICAgICB9Ci0K
LSAgICAgIGlmIChldmVudEFyZ3MubGVuZ3RoID09IDIpIHsKLSAgICAgICAgZWxlbSA9IGV2ZW50
QXJnc1swXTsKLSAgICAgICAgbmFtZSA9IGV2ZW50QXJnc1sxXTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGVsZW0gPSBjb21wb25lbnQuJG5vZGVbMF07Ci0gICAgICAgIG5hbWUgPSBldmVudEFy
Z3NbMF07Ci0gICAgICB9Ci0KLSAgICAgIGlmICh3aW5kb3cuREVCVUcgJiYgd2luZG93LkRFQlVH
LmVuYWJsZWQpIHsKLSAgICAgICAgbG9nRmlsdGVyID0gREVCVUcuZXZlbnRzLmxvZ0ZpbHRlcjsK
LQotICAgICAgICAvLyBubyByZWdleCBmb3IgeW91LCBhY3Rpb25zLi4uCi0gICAgICAgIGFjdGlv
bkxvZ2dhYmxlID0gbG9nRmlsdGVyLmFjdGlvbnMgPT0gJ2FsbCcgfHwgKGxvZ0ZpbHRlci5hY3Rp
b25zLmluZGV4T2YoYWN0aW9uKSA+IC0xKTsKLSAgICAgICAgLy8gZXZlbnQgbmFtZSBmaWx0ZXIg
YWxsb3cgd2lsZGNhcmRzIG9yIHJlZ2V4Li4uCi0gICAgICAgIHRvUmVnRXhwID0gZnVuY3Rpb24o
ZXhwcikgewotICAgICAgICAgIHJldHVybiBleHByLnRlc3QgPyBleHByIDogbmV3IFJlZ0V4cCgn
XicgKyBleHByLnJlcGxhY2UoL1wqL2csICcuKicpICsgJyQnKTsKLSAgICAgICAgfTsKLSAgICAg
ICAgbmFtZUxvZ2dhYmxlID0KLSAgICAgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9PSAnYWxs
JyB8fAotICAgICAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzLnNvbWUoZnVuY3Rpb24oZSkge3Jl
dHVybiB0b1JlZ0V4cChlKS50ZXN0KG5hbWUpO30pOwotCi0gICAgICAgIGlmIChhY3Rpb25Mb2dn
YWJsZSAmJiBuYW1lTG9nZ2FibGUpIHsKLSAgICAgICAgICBjb25zb2xlLmluZm8oCi0gICAgICAg
ICAgICBhY3Rpb25TeW1ib2xzW2FjdGlvbl0sCi0gICAgICAgICAgICBhY3Rpb24sCi0gICAgICAg
ICAgICAnWycgKyBuYW1lICsgJ10nLAotICAgICAgICAgICAgZWxlbVRvU3RyaW5nKGVsZW0pLAot
ICAgICAgICAgICAgY29tcG9uZW50LmNvbnN0cnVjdG9yLmRlc2NyaWJlLnNwbGl0KCcgJykuc2xp
Y2UoMCwzKS5qb2luKCcgJykgLy8gdHdvIG1peGlucyBvbmx5Ci0gICAgICAgICAgKTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHdpdGhMb2dnaW5nKCkgewotICAg
ICAgdGhpcy5iZWZvcmUoJ3RyaWdnZXInLCBmdW5jdGlvbigpIHsKLSAgICAgICAgbG9nKCd0cmln
Z2VyJywgdGhpcywgdXRpbHMudG9BcnJheShhcmd1bWVudHMpKTsKLSAgICAgIH0pOwotICAgICAg
dGhpcy5iZWZvcmUoJ29uJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGxvZygnb24nLCB0aGlzLCB1
dGlscy50b0FycmF5KGFyZ3VtZW50cykpOwotICAgICAgfSk7Ci0gICAgICB0aGlzLmJlZm9yZSgn
b2ZmJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGxvZygnb2ZmJywgdGhpcywgdXRpbHMudG9BcnJh
eShhcmd1bWVudHMpKTsKLSAgICAgIH0pOwotICAgIH0KLQotICAgIHJldHVybiB3aXRoTG9nZ2lu
ZzsKLSAgfQotKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50
cy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25l
bnRzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDkwNmE2ODFhZGY0M2EzODJjZTlkYjQxMjFkZjZjMDgxNjA4NjdkNTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9j
b21wb25lbnRzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIg
KzAsMCBAQAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0v
LyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKLS8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQg
TGljZW5zZQotLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWRlZmluZSgKLQotICBbXSwK
LQotICBmdW5jdGlvbigpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICBmdW5jdGlvbiBwYXJz
ZUV2ZW50QXJncyhpbnN0YW5jZSwgYXJncykgewotICAgICAgdmFyIGVsZW1lbnQsIHR5cGUsIGNh
bGxiYWNrOwotICAgICAgdmFyIGVuZCA9IGFyZ3MubGVuZ3RoOwotCi0gICAgICBpZiAodHlwZW9m
IGFyZ3NbZW5kIC0gMV0gPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgZW5kIC09IDE7Ci0gICAg
ICAgIGNhbGxiYWNrID0gYXJnc1tlbmRdOwotICAgICAgfQotCi0gICAgICBpZiAodHlwZW9mIGFy
Z3NbZW5kIC0gMV0gPT09ICdvYmplY3QnKSB7Ci0gICAgICAgIGVuZCAtPSAxOwotICAgICAgfQot
Ci0gICAgICBpZiAoZW5kID09IDIpIHsKLSAgICAgICAgZWxlbWVudCA9IGFyZ3NbMF07Ci0gICAg
ICAgIHR5cGUgPSBhcmdzWzFdOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZWxlbWVudCA9IGlu
c3RhbmNlLm5vZGU7Ci0gICAgICAgIHR5cGUgPSBhcmdzWzBdOwotICAgICAgfQotCi0gICAgICBy
ZXR1cm4gewotICAgICAgICBlbGVtZW50OiBlbGVtZW50LAotICAgICAgICB0eXBlOiB0eXBlLAot
ICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sKLSAgICAgIH07Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gbWF0Y2hFdmVudChhLCBiKSB7Ci0gICAgICByZXR1cm4gKAotICAgICAgICAoYS5lbGVtZW50
ID09IGIuZWxlbWVudCkgJiYKLSAgICAgICAgKGEudHlwZSA9PSBiLnR5cGUpICYmCi0gICAgICAg
IChiLmNhbGxiYWNrID09IG51bGwgfHwgKGEuY2FsbGJhY2sgPT0gYi5jYWxsYmFjaykpCi0gICAg
ICApOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIFJlZ2lzdHJ5KCkgewotCi0gICAgICB2YXIgcmVn
aXN0cnkgPSB0aGlzOwotCi0gICAgICAodGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICB0aGlzLmNvbXBvbmVudHMgPSBbXTsKLSAgICAgICAgdGhpcy5hbGxJbnN0YW5jZXMgPSB7fTsK
LSAgICAgICAgdGhpcy5ldmVudHMgPSBbXTsKLSAgICAgIH0pLmNhbGwodGhpcyk7Ci0KLSAgICAg
IGZ1bmN0aW9uIENvbXBvbmVudEluZm8oY29tcG9uZW50KSB7Ci0gICAgICAgIHRoaXMuY29tcG9u
ZW50ID0gY29tcG9uZW50OwotICAgICAgICB0aGlzLmF0dGFjaGVkVG8gPSBbXTsKLSAgICAgICAg
dGhpcy5pbnN0YW5jZXMgPSB7fTsKLQotICAgICAgICB0aGlzLmFkZEluc3RhbmNlID0gZnVuY3Rp
b24oaW5zdGFuY2UpIHsKLSAgICAgICAgICB2YXIgaW5zdGFuY2VJbmZvID0gbmV3IEluc3RhbmNl
SW5mbyhpbnN0YW5jZSk7Ci0gICAgICAgICAgdGhpcy5pbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRp
dHldID0gaW5zdGFuY2VJbmZvOwotICAgICAgICAgIHRoaXMuYXR0YWNoZWRUby5wdXNoKGluc3Rh
bmNlLm5vZGUpOwotCi0gICAgICAgICAgcmV0dXJuIGluc3RhbmNlSW5mbzsKLSAgICAgICAgfTsK
LQotICAgICAgICB0aGlzLnJlbW92ZUluc3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKLSAg
ICAgICAgICBkZWxldGUgdGhpcy5pbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldOwotICAgICAg
ICAgIHZhciBpbmRleE9mTm9kZSA9IHRoaXMuYXR0YWNoZWRUby5pbmRleE9mKGluc3RhbmNlLm5v
ZGUpOwotICAgICAgICAgIChpbmRleE9mTm9kZSA+IC0xKSAmJiB0aGlzLmF0dGFjaGVkVG8uc3Bs
aWNlKGluZGV4T2ZOb2RlLCAxKTsKLQotICAgICAgICAgIGlmICghT2JqZWN0LmtleXModGhpcy5p
bnN0YW5jZXMpLmxlbmd0aCkgewotICAgICAgICAgICAgLy9pZiBJIGhvbGQgbm8gbW9yZSBpbnN0
YW5jZXMgcmVtb3ZlIG1lIGZyb20gcmVnaXN0cnkKLSAgICAgICAgICAgIHJlZ2lzdHJ5LnJlbW92
ZUNvbXBvbmVudEluZm8odGhpcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAg
IHRoaXMuaXNBdHRhY2hlZFRvID0gZnVuY3Rpb24obm9kZSkgewotICAgICAgICAgIHJldHVybiB0
aGlzLmF0dGFjaGVkVG8uaW5kZXhPZihub2RlKSA+IC0xOwotICAgICAgICB9OwotICAgICAgfQot
Ci0gICAgICBmdW5jdGlvbiBJbnN0YW5jZUluZm8oaW5zdGFuY2UpIHsKLSAgICAgICAgdGhpcy5p
bnN0YW5jZSA9IGluc3RhbmNlOwotICAgICAgICB0aGlzLmV2ZW50cyA9IFtdOwotCi0gICAgICAg
IHRoaXMuYWRkQmluZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgdGhpcy5ldmVudHMu
cHVzaChldmVudCk7Ci0gICAgICAgICAgcmVnaXN0cnkuZXZlbnRzLnB1c2goZXZlbnQpOwotICAg
ICAgICB9OwotCi0gICAgICAgIHRoaXMucmVtb3ZlQmluZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0g
ICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGU7IGUgPSB0aGlzLmV2ZW50c1tpXTsgaSsrKSB7Ci0g
ICAgICAgICAgICBpZiAobWF0Y2hFdmVudChlLCBldmVudCkpIHsKLSAgICAgICAgICAgICAgdGhp
cy5ldmVudHMuc3BsaWNlKGksIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5hZGRJbnN0YW5jZSA9IGZ1bmN0aW9uKGluc3Rh
bmNlKSB7Ci0gICAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmZpbmRDb21wb25lbnRJbmZvKGlu
c3RhbmNlKTsKLQotICAgICAgICBpZiAoIWNvbXBvbmVudCkgewotICAgICAgICAgIGNvbXBvbmVu
dCA9IG5ldyBDb21wb25lbnRJbmZvKGluc3RhbmNlLmNvbnN0cnVjdG9yKTsKLSAgICAgICAgICB0
aGlzLmNvbXBvbmVudHMucHVzaChjb21wb25lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy
IGluc3QgPSBjb21wb25lbnQuYWRkSW5zdGFuY2UoaW5zdGFuY2UpOwotCi0gICAgICAgIHRoaXMu
YWxsSW5zdGFuY2VzW2luc3RhbmNlLmlkZW50aXR5XSA9IGluc3Q7Ci0KLSAgICAgICAgcmV0dXJu
IGNvbXBvbmVudDsKLSAgICAgIH07Ci0KLSAgICAgIHRoaXMucmVtb3ZlSW5zdGFuY2UgPSBmdW5j
dGlvbihpbnN0YW5jZSkgewotICAgICAgICB2YXIgaW5kZXgsIGluc3RJbmZvID0gdGhpcy5maW5k
SW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKLQotICAgICAgICAvL3JlbW92ZSBmcm9tIGNvbXBvbmVu
dCBpbmZvCi0gICAgICAgIHZhciBjb21wb25lbnRJbmZvID0gdGhpcy5maW5kQ29tcG9uZW50SW5m
byhpbnN0YW5jZSk7Ci0gICAgICAgIGNvbXBvbmVudEluZm8gJiYgY29tcG9uZW50SW5mby5yZW1v
dmVJbnN0YW5jZShpbnN0YW5jZSk7Ci0KLSAgICAgICAgLy9yZW1vdmUgZnJvbSByZWdpc3RyeQot
ICAgICAgICBkZWxldGUgdGhpcy5hbGxJbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldOwotICAg
ICAgfTsKLQotICAgICAgdGhpcy5yZW1vdmVDb21wb25lbnRJbmZvID0gZnVuY3Rpb24oY29tcG9u
ZW50SW5mbykgewotICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbXBvbmVudHMuaW5kZXhPZihj
b21wb25lbnRJbmZvKTsKLSAgICAgICAgKGluZGV4ID4gLTEpICYmIHRoaXMuY29tcG9uZW50cy5z
cGxpY2UoaW5kZXgsIDEpOwotICAgICAgfTsKLQotICAgICAgdGhpcy5maW5kQ29tcG9uZW50SW5m
byA9IGZ1bmN0aW9uKHdoaWNoKSB7Ci0gICAgICAgIHZhciBjb21wb25lbnQgPSB3aGljaC5hdHRh
Y2hUbyA/IHdoaWNoIDogd2hpY2guY29uc3RydWN0b3I7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGM7IGMgPSB0aGlzLmNvbXBvbmVudHNbaV07IGkrKykgewotICAgICAgICAgIGlmIChjLmNv
bXBvbmVudCA9PT0gY29tcG9uZW50KSB7Ci0gICAgICAgICAgICByZXR1cm4gYzsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH07Ci0KLSAgICAg
IHRoaXMuZmluZEluc3RhbmNlSW5mbyA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLmFsbEluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV0gfHwgbnVsbDsKLSAgICAg
IH07Ci0KLSAgICAgIHRoaXMuZmluZEluc3RhbmNlSW5mb0J5Tm9kZSA9IGZ1bmN0aW9uKG5vZGUp
IHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmFs
bEluc3RhbmNlcykuZm9yRWFjaChmdW5jdGlvbihrKSB7Ci0gICAgICAgICAgdmFyIHRoaXNJbnN0
YW5jZUluZm8gPSB0aGlzLmFsbEluc3RhbmNlc1trXTsKLSAgICAgICAgICBpZiAodGhpc0luc3Rh
bmNlSW5mby5pbnN0YW5jZS5ub2RlID09PSBub2RlKSB7Ci0gICAgICAgICAgICByZXN1bHQucHVz
aCh0aGlzSW5zdGFuY2VJbmZvKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sIHRoaXMpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfTsKLQotICAgICAgdGhpcy5vbiA9IGZ1bmN0aW9u
KGNvbXBvbmVudE9uKSB7Ci0gICAgICAgIHZhciBpbnN0YW5jZSA9IHJlZ2lzdHJ5LmZpbmRJbnN0
YW5jZUluZm8odGhpcyksIGJvdW5kQ2FsbGJhY2s7Ci0KLSAgICAgICAgLy8gdW5wYWNraW5nIGFy
Z3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgotICAgICAgICB2YXIgbCA9IGFyZ3Vt
ZW50cy5sZW5ndGgsIGkgPSAxOwotICAgICAgICB2YXIgb3RoZXJBcmdzID0gbmV3IEFycmF5KGwg
LSAxKTsKLSAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIG90aGVyQXJnc1tpIC0gMV0gPSBhcmd1
bWVudHNbaV07Ci0KLSAgICAgICAgaWYgKGluc3RhbmNlKSB7Ci0gICAgICAgICAgYm91bmRDYWxs
YmFjayA9IGNvbXBvbmVudE9uLmFwcGx5KG51bGwsIG90aGVyQXJncyk7Ci0gICAgICAgICAgaWYg
KGJvdW5kQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIG90aGVyQXJnc1tvdGhlckFyZ3MubGVuZ3Ro
LTFdID0gYm91bmRDYWxsYmFjazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdmFyIGV2ZW50ID0g
cGFyc2VFdmVudEFyZ3ModGhpcywgb3RoZXJBcmdzKTsKLSAgICAgICAgICBpbnN0YW5jZS5hZGRC
aW5kKGV2ZW50KTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgdGhpcy5vZmYgPSBmdW5j
dGlvbigvKmVsLCB0eXBlLCBjYWxsYmFjayovKSB7Ci0gICAgICAgIHZhciBldmVudCA9IHBhcnNl
RXZlbnRBcmdzKHRoaXMsIGFyZ3VtZW50cyksCi0gICAgICAgICAgICBpbnN0YW5jZSA9IHJlZ2lz
dHJ5LmZpbmRJbnN0YW5jZUluZm8odGhpcyk7Ci0KLSAgICAgICAgaWYgKGluc3RhbmNlKSB7Ci0g
ICAgICAgICAgaW5zdGFuY2UucmVtb3ZlQmluZChldmVudCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvL3JlbW92ZSBmcm9tIGdsb2JhbCBldmVudCByZWdpc3RyeQotICAgICAgICBmb3IgKHZhciBp
ID0gMCwgZTsgZSA9IHJlZ2lzdHJ5LmV2ZW50c1tpXTsgaSsrKSB7Ci0gICAgICAgICAgaWYgKG1h
dGNoRXZlbnQoZSwgZXZlbnQpKSB7Ci0gICAgICAgICAgICByZWdpc3RyeS5ldmVudHMuc3BsaWNl
KGksIDEpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgLy8gZGVi
dWcgdG9vbHMgbWF5IHdhbnQgdG8gYWRkIGFkdmljZSB0byB0cmlnZ2VyCi0gICAgICByZWdpc3Ry
eS50cmlnZ2VyID0gZnVuY3Rpb24oKSB7fTsKLQotICAgICAgdGhpcy50ZWFyZG93biA9IGZ1bmN0
aW9uKCkgewotICAgICAgICByZWdpc3RyeS5yZW1vdmVJbnN0YW5jZSh0aGlzKTsKLSAgICAgIH07
Ci0KLSAgICAgIHRoaXMud2l0aFJlZ2lzdHJhdGlvbiA9IGZ1bmN0aW9uKCkgewotICAgICAgICB0
aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmVnaXN0cnku
YWRkSW5zdGFuY2UodGhpcyk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHRoaXMuYXJvdW5kKCdv
bicsIHJlZ2lzdHJ5Lm9uKTsKLSAgICAgICAgdGhpcy5hZnRlcignb2ZmJywgcmVnaXN0cnkub2Zm
KTsKLSAgICAgICAgLy9kZWJ1ZyB0b29scyBtYXkgd2FudCB0byBhZGQgYWR2aWNlIHRvIHRyaWdn
ZXIKLSAgICAgICAgd2luZG93LkRFQlVHICYmIERFQlVHLmVuYWJsZWQgJiYgdGhpcy5hZnRlcign
dHJpZ2dlcicsIHJlZ2lzdHJ5LnRyaWdnZXIpOwotICAgICAgICB0aGlzLmFmdGVyKCd0ZWFyZG93
bicsIHtvYmo6IHJlZ2lzdHJ5LCBmbk5hbWU6ICd0ZWFyZG93bid9KTsKLSAgICAgIH07Ci0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gbmV3IFJlZ2lzdHJ5OwotICB9Ci0pOwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvdXRpbHMuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi91dGlscy5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmMDRkNTkwZGY4OTc3NDczMmE3NjM0NmI4NTc2Mzdl
NWE2NDYxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi91dGlscy5qcworKysg
L2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYwotLy8gTGlj
ZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCi0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGlj
ZW5zZXMvTUlUCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LQotZGVmaW5lKAotCi0gIFtdLAotCi0gIGZ1bmN0aW9uKCkgewotICAgICd1c2Ugc3RyaWN0JzsK
LQotICAgIHZhciBhcnJ5ID0gW107Ci0gICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAxMDA7Ci0K
LSAgICB2YXIgdXRpbHMgPSB7Ci0KLSAgICAgIGlzRG9tT2JqOiBmdW5jdGlvbihvYmopIHsKLSAg
ICAgICAgcmV0dXJuICEhKG9iai5ub2RlVHlwZSB8fCAob2JqID09PSB3aW5kb3cpKTsKLSAgICAg
IH0sCi0KLSAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uKG9iaiwgZnJvbSkgewotICAgICAgICByZXR1
cm4gYXJyeS5zbGljZS5jYWxsKG9iaiwgZnJvbSk7Ci0gICAgICB9LAotCi0gICAgICAvLyByZXR1
cm5zIG5ldyBvYmplY3QgcmVwcmVzZW50aW5nIG11bHRpcGxlIG9iamVjdHMgbWVyZ2VkIHRvZ2V0
aGVyCi0gICAgICAvLyBvcHRpb25hbCBmaW5hbCBhcmd1bWVudCBpcyBib29sZWFuIHdoaWNoIHNw
ZWNpZmllcyBpZiBtZXJnZSBpcyByZWN1cnNpdmUKLSAgICAgIC8vIG9yaWdpbmFsIG9iamVjdHMg
YXJlIHVubW9kaWZpZWQKLSAgICAgIC8vCi0gICAgICAvLyB1c2FnZToKLSAgICAgIC8vICAgdmFy
IGJhc2UgPSB7YToyLCBiOjZ9OwotICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YjozLCBjOjR9Owot
ICAgICAgLy8gICBtZXJnZShiYXNlLCBleHRyYSk7IC8ve2E6MiwgYjozLCBjOjR9Ci0gICAgICAv
LyAgIGJhc2U7IC8ve2E6MiwgYjo2fQotICAgICAgLy8KLSAgICAgIC8vICAgdmFyIGJhc2UgPSB7
YToyLCBiOjZ9OwotICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YjozLCBjOjR9OwotICAgICAgLy8g
ICB2YXIgZXh0cmFFeHRyYSA9IHthOjQsIGQ6OX07Ci0gICAgICAvLyAgIG1lcmdlKGJhc2UsIGV4
dHJhLCBleHRyYUV4dHJhKTsgLy97YTo0LCBiOjMsIGM6NC4gZDogOX0KLSAgICAgIC8vICAgYmFz
ZTsgLy97YToyLCBiOjZ9Ci0gICAgICAvLwotICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6
e2JiOjQsIGNjOjV9fTsKLSAgICAgIC8vICAgdmFyIGV4dHJhID0ge2E6NCwgYjp7Y2M6NywgZGQ6
MX19OwotICAgICAgLy8gICBtZXJnZShiYXNlLCBleHRyYSwgdHJ1ZSk7IC8ve2E6NCwgYjp7YmI6
NCwgY2M6NywgZGQ6MX19Ci0gICAgICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2fQotCi0gICAgICBt
ZXJnZTogZnVuY3Rpb24oLypvYmoxLCBvYmoyLC4uLi5kZWVwQ29weSovKSB7Ci0gICAgICAgIC8v
IHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKLSAgICAgICAg
dmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoLAotICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAg
ICBhcmdzID0gbmV3IEFycmF5KGwgKyAxKTsKLSAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIGFy
Z3NbaSArIDFdID0gYXJndW1lbnRzW2ldOwotCi0gICAgICAgIGlmIChsID09PSAwKSB7Ci0gICAg
ICAgICAgcmV0dXJuIHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy9zdGFydCB3aXRoIGVtcHR5
IG9iamVjdCBzbyBhIGNvcHkgaXMgY3JlYXRlZAotICAgICAgICBhcmdzWzBdID0ge307Ci0KLSAg
ICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gdHJ1ZSkgewotICAgICAgICAgIC8v
anF1ZXJ5IGV4dGVuZCByZXF1aXJlcyBkZWVwIGNvcHkgYXMgZmlyc3QgYXJnCi0gICAgICAgICAg
YXJncy5wb3AoKTsKLSAgICAgICAgICBhcmdzLnVuc2hpZnQodHJ1ZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gJC5leHRlbmQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsKLSAgICAgIH0s
Ci0KLSAgICAgIC8vIHVwZGF0ZXMgYmFzZSBpbiBwbGFjZSBieSBjb3B5aW5nIHByb3BlcnRpZXMg
b2YgZXh0cmEgdG8gaXQKLSAgICAgIC8vIG9wdGlvbmFsbHkgY2xvYmJlciBwcm90ZWN0ZWQKLSAg
ICAgIC8vIHVzYWdlOgotICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6Nn07Ci0gICAgICAv
LyAgIHZhciBleHRyYSA9IHtjOjR9OwotICAgICAgLy8gICBwdXNoKGJhc2UsIGV4dHJhKTsgLy97
YToyLCBiOjYsIGM6NH0KLSAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjYsIGM6NH0KLSAgICAg
IC8vCi0gICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2fTsKLSAgICAgIC8vICAgdmFyIGV4
dHJhID0ge2I6IDQgYzo0fTsKLSAgICAgIC8vICAgcHVzaChiYXNlLCBleHRyYSwgdHJ1ZSk7IC8v
RXJyb3IgKCJ1dGlscy5wdXNoIGF0dGVtcHRlZCB0byBvdmVyd3JpdGUgJ2InIHdoaWxlIHJ1bm5p
bmcgaW4gcHJvdGVjdGVkIG1vZGUiKQotICAgICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Nn0KLSAg
ICAgIC8vCi0gICAgICAvLyBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5IHdpbGwgbWVyZ2UgcmVj
dXJzaXZlbHkgd2hlbiBwcm90ZWN0IGlzIGZhbHNlCi0gICAgICAvLyBlZzoKLSAgICAgIC8vIHZh
ciBiYXNlID0ge2E6MTYsIGI6e2JiOjQsIGNjOjEwfX07Ci0gICAgICAvLyB2YXIgZXh0cmEgPSB7
Yjp7Y2M6MjUsIGRkOjE5fSwgYzo1fTsKLSAgICAgIC8vIHB1c2goYmFzZSwgZXh0cmEpOyAvL3th
OjE2LCB7YmI6NCwgY2M6MjUsIGRkOjE5fSwgYzo1fQotICAgICAgLy8KLSAgICAgIHB1c2g6IGZ1
bmN0aW9uKGJhc2UsIGV4dHJhLCBwcm90ZWN0KSB7Ci0gICAgICAgIGlmIChiYXNlKSB7Ci0gICAg
ICAgICAgT2JqZWN0LmtleXMoZXh0cmEgfHwge30pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7Ci0g
ICAgICAgICAgICBpZiAoYmFzZVtrZXldICYmIHByb3RlY3QpIHsKLSAgICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCd1dGlscy5wdXNoIGF0dGVtcHRlZCB0byBvdmVyd3JpdGUgIicgKyBrZXkg
KyAnIiB3aGlsZSBydW5uaW5nIGluIHByb3RlY3RlZCBtb2RlJyk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVtrZXldID09ICdvYmplY3QnICYmIHR5cGVvZiBl
eHRyYVtrZXldID09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgICAgIC8vIHJlY3Vyc2UKLSAgICAg
ICAgICAgICAgdGhpcy5wdXNoKGJhc2Vba2V5XSwgZXh0cmFba2V5XSk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAvLyBubyBwcm90ZWN0LCBzbyBleHRyYSB3aW5zCi0gICAg
ICAgICAgICAgIGJhc2Vba2V5XSA9IGV4dHJhW2tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfSwgdGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYmFzZTsKLSAgICAgIH0s
Ci0KLSAgICAgIGlzRW51bWVyYWJsZTogZnVuY3Rpb24ob2JqLCBwcm9wZXJ0eSkgewotICAgICAg
ICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5pbmRleE9mKHByb3BlcnR5KSA+IC0xOwotICAgICAg
fSwKLQotICAgICAgLy8gYnVpbGQgYSBmdW5jdGlvbiBmcm9tIG90aGVyIGZ1bmN0aW9uKHMpCi0g
ICAgICAvLyB1dGlscy5jb21wb3NlKGEsYixjKSAtPiBhKGIoYygpKSk7Ci0gICAgICAvLyBpbXBs
ZW1lbnRhdGlvbiBsaWZ0ZWQgZnJvbSB1bmRlcnNjb3JlLmpzIChjKSAyMDA5LTIwMTIgSmVyZW15
IEFzaGtlbmFzCi0gICAgICBjb21wb3NlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGZ1bmNz
ID0gYXJndW1lbnRzOwotCi0gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAgICB2
YXIgYXJncyA9IGFyZ3VtZW50czsKLQotICAgICAgICAgIGZvciAodmFyIGkgPSBmdW5jcy5sZW5n
dGgtMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGFyZ3MgPSBbZnVuY3NbaV0uYXBwbHko
dGhpcywgYXJncyldOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHJldHVybiBhcmdzWzBdOwot
ICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgLy8gQ2FuIG9ubHkgdW5pcXVlIGFycmF5cyBv
ZiBob21vZ2VuZW91cyBwcmltaXRpdmVzLCBlLmcuIGFuIGFycmF5IG9mIG9ubHkgc3RyaW5ncywg
YW4gYXJyYXkgb2Ygb25seSBib29sZWFucywgb3IgYW4gYXJyYXkgb2Ygb25seSBudW1lcmljcwot
ICAgICAgdW5pcXVlQXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7Ci0gICAgICAgIHZhciB1ID0ge30s
IGEgPSBbXTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8
IGw7ICsraSkgewotICAgICAgICAgIGlmICh1Lmhhc093blByb3BlcnR5KGFycmF5W2ldKSkgewot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgYS5wdXNoKGFy
cmF5W2ldKTsKLSAgICAgICAgICB1W2FycmF5W2ldXSA9IDE7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gYTsKLSAgICAgIH0sCi0KLSAgICAgIGRlYm91bmNlOiBmdW5jdGlvbihmdW5jLCB3
YWl0LCBpbW1lZGlhdGUpIHsKLSAgICAgICAgaWYgKHR5cGVvZiB3YWl0ICE9ICdudW1iZXInKSB7
Ci0gICAgICAgICAgd2FpdCA9IERFRkFVTFRfSU5URVJWQUw7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YXIgdGltZW91dCwgcmVzdWx0OwotCi0gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7Ci0gICAgICAgICAg
dmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsKLSAg
ICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7Ci0gICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMu
YXBwbHkoY29udGV4dCwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAg
ICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDsKLQotICAgICAgICAgIGNs
ZWFyVGltZW91dCh0aW1lb3V0KTsKLSAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRl
ciwgd2FpdCk7Ci0KLSAgICAgICAgICBpZiAoY2FsbE5vdykgewotICAgICAgICAgICAgcmVzdWx0
ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgdGhyb3R0bGU6IGZ1
bmN0aW9uKGZ1bmMsIHdhaXQpIHsKLSAgICAgICAgaWYgKHR5cGVvZiB3YWl0ICE9ICdudW1iZXIn
KSB7Ci0gICAgICAgICAgd2FpdCA9IERFRkFVTFRfSU5URVJWQUw7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgdGhyb3R0bGluZywgbW9yZSwgcmVzdWx0
OwotICAgICAgICB2YXIgd2hlbkRvbmUgPSB0aGlzLmRlYm91bmNlKGZ1bmN0aW9uKCl7Ci0gICAg
ICAgICAgbW9yZSA9IHRocm90dGxpbmcgPSBmYWxzZTsKLSAgICAgICAgfSwgd2FpdCk7Ci0KLSAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGNvbnRleHQgPSB0aGlzOyBhcmdz
ID0gYXJndW1lbnRzOwotICAgICAgICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgdGltZW91dCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAobW9yZSkgewotICAgICAgICAg
ICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgd2hlbkRvbmUoKTsKLSAgICAgICAgICB9OwotCi0gICAgICAgICAgaWYgKCF0
aW1lb3V0KSB7Ci0gICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7
Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHRocm90dGxpbmcpIHsKLSAgICAgICAgICAg
IG1vcmUgPSB0cnVlOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdHRsaW5n
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7
Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgd2hlbkRvbmUoKTsKLSAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgY291bnRUaGVuOiBmdW5jdGlv
bihudW0sIGJhc2UpIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGlm
ICghLS1udW0pIHsgcmV0dXJuIGJhc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQotICAgICAg
ICB9OwotICAgICAgfSwKLQotICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKHJ1bGVzKSB7Ci0gICAg
ICAgIHJldHVybiBmdW5jdGlvbihlLCBkYXRhKSB7Ci0gICAgICAgICAgdmFyIHRhcmdldCA9ICQo
ZS50YXJnZXQpLCBwYXJlbnQ7Ci0KLSAgICAgICAgICBPYmplY3Qua2V5cyhydWxlcykuZm9yRWFj
aChmdW5jdGlvbihzZWxlY3RvcikgewotICAgICAgICAgICAgaWYgKChwYXJlbnQgPSB0YXJnZXQu
Y2xvc2VzdChzZWxlY3RvcikpLmxlbmd0aCkgewotICAgICAgICAgICAgICBkYXRhID0gZGF0YSB8
fCB7fTsKLSAgICAgICAgICAgICAgZGF0YS5lbCA9IHBhcmVudFswXTsKLSAgICAgICAgICAgICAg
cmV0dXJuIHJ1bGVzW3NlbGVjdG9yXS5hcHBseSh0aGlzLCBbZSwgZGF0YV0pOwotICAgICAgICAg
ICAgfQotICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICB9OwotICAgICAgfQotCi0gICAgfTsK
LQotICAgIHJldHVybiB1dGlsczsKLSAgfQotKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9i
b3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGI0MzE4NTE5ZTg4ZGE2MTZkMzgxYWViMWMxNjA1MmU2MjgxYmFkNGUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9i
b3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NDcy
ICswLDAgQEAKLS8qIQotICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS44LjMKLSAqIGh0
dHA6Ly9qcXVlcnkuY29tLwotICoKLSAqIEluY2x1ZGVzIFNpenpsZS5qcwotICogaHR0cDovL3Np
enpsZWpzLmNvbS8KLSAqCi0gKiBDb3B5cmlnaHQgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiBhbmQg
b3RoZXIgY29udHJpYnV0b3JzCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKLSAq
IGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKLSAqCi0gKiBEYXRlOiBUdWUgTm92IDEzIDIwMTIg
MDg6MjA6MzMgR01ULTA1MDAgKEVhc3Rlcm4gU3RhbmRhcmQgVGltZSkKLSAqLwotKGZ1bmN0aW9u
KCB3aW5kb3csIHVuZGVmaW5lZCApIHsKLXZhcgotICAgICAgICAvLyBBIGNlbnRyYWwgcmVmZXJl
bmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKLSAgICAgICAgcm9vdGpRdWVyeSwKLQot
ICAgICAgICAvLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHkKLSAgICAgICAgcmVhZHlM
aXN0LAotCi0gICAgICAgIC8vIFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBhY2NvcmRpbmdseSB3
aXRoIHdpbmRvdyBhcmd1bWVudCAoc2FuZGJveCkKLSAgICAgICAgZG9jdW1lbnQgPSB3aW5kb3cu
ZG9jdW1lbnQsCi0gICAgICAgIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLAotICAgICAgICBu
YXZpZ2F0b3IgPSB3aW5kb3cubmF2aWdhdG9yLAotCi0gICAgICAgIC8vIE1hcCBvdmVyIGpRdWVy
eSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQotICAgICAgICBfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSwK
LQotICAgICAgICAvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQotICAgICAg
ICBfJCA9IHdpbmRvdy4kLAotCi0gICAgICAgIC8vIFNhdmUgYSByZWZlcmVuY2UgdG8gc29tZSBj
b3JlIG1ldGhvZHMKLSAgICAgICAgY29yZV9wdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2gsCi0g
ICAgICAgIGNvcmVfc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsCi0gICAgICAgIGNvcmVf
aW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLAotICAgICAgICBjb3JlX3RvU3RyaW5n
ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKLSAgICAgICAgY29yZV9oYXNPd24gPSBPYmpl
Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LAotICAgICAgICBjb3JlX3RyaW0gPSBTdHJpbmcu
cHJvdG90eXBlLnRyaW0sCi0KLSAgICAgICAgLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVl
cnkKLSAgICAgICAgalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewotICAg
ICAgICAgICAgICAgIC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGlu
aXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgalF1
ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgLy8gVXNlZCBmb3IgbWF0Y2hpbmcgbnVtYmVycwotICAgICAgICBjb3JlX3Bu
dW0gPSAvW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNlLAotCi0g
ICAgICAgIC8vIFVzZWQgZm9yIGRldGVjdGluZyBhbmQgdHJpbW1pbmcgd2hpdGVzcGFjZQotICAg
ICAgICBjb3JlX3Jub3R3aGl0ZSA9IC9cUy8sCi0gICAgICAgIGNvcmVfcnNwYWNlID0gL1xzKy8s
Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQIChoZXJlJ3MgbG9v
a2luZyBhdCB5b3UsIFNhZmFyaSA1LjAgYW5kIElFKQotICAgICAgICBydHJpbSA9IC9eW1xzXHVG
RUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywKLQotICAgICAgICAvLyBBIHNpbXBsZSB3YXkg
dG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5ncwotICAgICAgICAvLyBQcmlvcml0aXplICNpZCBvdmVy
IDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCi0gICAgICAgIHJx
dWlja0V4cHIgPSAvXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMoW1x3XC1dKikkKS8sCi0K
LSAgICAgICAgLy8gTWF0Y2ggYSBzdGFuZGFsb25lIHRhZwotICAgICAgICByc2luZ2xlVGFnID0g
L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLywKLQotICAgICAgICAvLyBKU09OIFJlZ0V4cAot
ICAgICAgICBydmFsaWRjaGFycyA9IC9eW1xdLDp7fVxzXSokLywKLSAgICAgICAgcnZhbGlkYnJh
Y2VzID0gLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywKLSAgICAgICAgcnZhbGlkZXNjYXBlID0gL1xc
KD86WyJcXFwvYmZucnRdfHVbXGRhLWZBLUZdezR9KS9nLAotICAgICAgICBydmFsaWR0b2tlbnMg
PSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCsoPzpbZUVd
W1wtK10/XGQrfCkvZywKLQotICAgICAgICAvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNh
bWVsaXppbmcKLSAgICAgICAgcm1zUHJlZml4ID0gL14tbXMtLywKLSAgICAgICAgcmRhc2hBbHBo
YSA9IC8tKFtcZGEtel0pL2dpLAotCi0gICAgICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2Fz
ZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKCkKLSAgICAgICAgZmNhbWVsQ2FzZSA9IGZ1bmN0aW9u
KCBhbGwsIGxldHRlciApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKCBsZXR0ZXIgKyAiIiAp
LnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gVGhlIHJlYWR5IGV2ZW50
IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2QKLSAgICAgICAgRE9NQ29udGVudExvYWRl
ZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICggZG9jdW1lbnQuYWRkRXZlbnRM
aXN0ZW5lciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBoZXJlIGJlY2F1c2UgcmVhZHlTdGF0ZSA9PT0g
ImNvbXBsZXRlIiBpbiBvbGRJRQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMg
Z29vZCBlbm91Z2ggZm9yIHVzIHRvIGNhbGwgdGhlIGRvbSByZWFkeSEKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9N
Q29udGVudExvYWRlZCApOwotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlYWR5KCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIC8vIFtbQ2xhc3NdXSAt
PiB0eXBlIHBhaXJzCi0gICAgICAgIGNsYXNzMnR5cGUgPSB7fTsKLQotalF1ZXJ5LmZuID0galF1
ZXJ5LnByb3RvdHlwZSA9IHsKLSAgICAgICAgY29uc3RydWN0b3I6IGpRdWVyeSwKLSAgICAgICAg
aW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkgewotICAgICAg
ICAgICAgICAgIHZhciBtYXRjaCwgZWxlbSwgcmV0LCBkb2M7Ci0KLSAgICAgICAgICAgICAgICAv
LyBIYW5kbGUgJCgiIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSkKLSAgICAgICAg
ICAgICAgICBpZiAoICFzZWxlY3RvciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSAk
KERPTUVsZW1lbnQpCi0gICAgICAgICAgICAgICAgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXNbMF0gPSBzZWxlY3Rv
cjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVv
ZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3Iu
bGVuZ3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFy
dCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVs
bCBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWF0
Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwgIWNvbnRleHQp
ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChodG1s
KSAtPiAkKGFycmF5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNo
WzFdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQg
PSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gKCBjb250ZXh0ICYmIGNv
bnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3Vt
ZW50ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzY3Jp
cHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0b3IgPSBqUXVlcnkucGFyc2VIVE1MKCBtYXRjaFsxXSwgZG9jLCB0
cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByc2lu
Z2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQg
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuYXR0ci5jYWxsKCBzZWxlY3RvciwgY29udGV4dCwgdHJ1ZSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIHRoaXMsIHNlbGVjdG9yICk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKCNpZCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJd
ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBw
YXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdl
ciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJl
IElFIGFuZCBPcGVyYSByZXR1cm4gaXRlbXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLmlkICE9PSBtYXRj
aFsyXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0b3IgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBpbmplY3Qg
dGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1swXSA9IGVs
ZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9
IHNlbGVjdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggY29udGV4dCB8fCByb290alF1ZXJ5
ICkuZmluZCggc2VsZWN0b3IgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFORExF
OiAkKGV4cHIsIGNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAod2hpY2ggaXMg
anVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcikKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChmdW5jdGlv
bikKLSAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3Rv
ciApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggc2VsZWN0b3Iu
c2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
c2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dCA9IHNlbGVjdG9yLmNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxlY3RvcgotICAg
ICAgICBzZWxlY3RvcjogIiIsCi0KLSAgICAgICAgLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBq
UXVlcnkgYmVpbmcgdXNlZAotICAgICAgICBqcXVlcnk6ICIxLjguMyIsCi0KLSAgICAgICAgLy8g
VGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwCi0gICAgICAgIGxlbmd0
aDogMCwKLQotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0
aGUgbWF0Y2hlZCBlbGVtZW50IHNldAotICAgICAgICBzaXplOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGg7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgdG9B
cnJheTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmVfc2xpY2UuY2Fs
bCggdGhpcyApOwotICAgICAgICB9LAotCi0gICAgICAgIC8vIEdldCB0aGUgTnRoIGVsZW1lbnQg
aW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKLSAgICAgICAgLy8gR2V0IHRoZSB3aG9sZSBt
YXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkKLSAgICAgICAgZ2V0OiBmdW5jdGlv
biggbnVtICkgewotICAgICAgICAgICAgICAgIHJldHVybiBudW0gPT0gbnVsbCA/Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBhICdjbGVhbicgYXJyYXkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudG9BcnJheSgpIDoKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUmV0dXJuIGp1c3QgdGhlIG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgKCBudW0g
PCAwID8gdGhpc1sgdGhpcy5sZW5ndGggKyBudW0gXSA6IHRoaXNbIG51bSBdICk7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBv
bnRvIHRoZSBzdGFjawotICAgICAgICAvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVt
ZW50IHNldCkKLSAgICAgICAgcHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMsIG5hbWUsIHNlbGVj
dG9yICkgewotCi0gICAgICAgICAgICAgICAgLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQg
ZWxlbWVudCBzZXQKLSAgICAgICAgICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlz
LmNvbnN0cnVjdG9yKCksIGVsZW1zICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIG9s
ZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKQotICAgICAgICAgICAgICAg
IHJldC5wcmV2T2JqZWN0ID0gdGhpczsKLQotICAgICAgICAgICAgICAgIHJldC5jb250ZXh0ID0g
dGhpcy5jb250ZXh0OwotCi0gICAgICAgICAgICAgICAgaWYgKCBuYW1lID09PSAiZmluZCIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsg
KCB0aGlzLnNlbGVjdG9yID8gIiAiIDogIiIgKSArIHNlbGVjdG9yOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQuc2VsZWN0
b3IgPSB0aGlzLnNlbGVjdG9yICsgIi4iICsgbmFtZSArICIoIiArIHNlbGVjdG9yICsgIikiOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbmV3bHkt
Zm9ybWVkIGVsZW1lbnQgc2V0Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAg
fSwKLQotICAgICAgICAvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4g
dGhlIG1hdGNoZWQgc2V0LgotICAgICAgICAvLyAoWW91IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMg
d2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBpcwotICAgICAgICAvLyBvbmx5IHVzZWQg
aW50ZXJuYWxseS4pCi0gICAgICAgIGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBhcmdz
ICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcmVhZHk6IGZ1bmN0aW9uKCBmbiApIHsKLSAgICAg
ICAgICAgICAgICAvLyBBZGQgdGhlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgalF1ZXJ5LnJl
YWR5LnByb21pc2UoKS5kb25lKCBmbiApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZXE6IGZ1bmN0aW9uKCBpICkgewotICAgICAgICAgICAg
ICAgIGkgPSAraTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA9PT0gLTEgPwotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5zbGljZSggaSApIDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuc2xpY2UoIGksIGkgKyAxICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmlyc3Q6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVxKCAwICk7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgbGFzdDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZXEoIC0xICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc2xpY2U6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggY29yZV9zbGljZS5hcHBs
eSggdGhpcywgYXJndW1lbnRzICksCi0gICAgICAgICAgICAgICAgICAgICAgICAic2xpY2UiLCBj
b3JlX3NsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikgKTsKLSAgICAgICAgfSwKLQotICAg
ICAgICBtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxl
bSApOwotICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAgfSwKLQotICAgICAgICBlbmQ6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhp
cy5jb25zdHJ1Y3RvcihudWxsKTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBGb3IgaW50ZXJu
YWwgdXNlIG9ubHkuCi0gICAgICAgIC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwg
bm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgotICAgICAgICBwdXNoOiBjb3JlX3B1c2gsCi0gICAg
ICAgIHNvcnQ6IFtdLnNvcnQsCi0gICAgICAgIHNwbGljZTogW10uc3BsaWNlCi19OwotCi0vLyBH
aXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0
YW50aWF0aW9uCi1qUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47Ci0KLWpRdWVy
eS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBv
cHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSwKLSAgICAgICAgICAg
ICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sCi0gICAgICAgICAgICAgICAgaSA9IDEs
Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwKLSAgICAgICAgICAg
ICAgICBkZWVwID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVh
dGlvbgotICAgICAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKLSAgICAg
ICAgICAgICAgICBkZWVwID0gdGFyZ2V0OwotICAgICAgICAgICAgICAgIHRhcmdldCA9IGFyZ3Vt
ZW50c1sxXSB8fCB7fTsKLSAgICAgICAgICAgICAgICAvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0
aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgaSA9IDI7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3Np
YmxlIGluIGRlZXAgY29weSkKLSAgICAgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0
IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKLSAgICAgICAgICAgICAgICB0YXJn
ZXQgPSB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGV4dGVuZCBqUXVlcnkgaXRzZWxmIGlm
IG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAotICAgICAgICBpZiAoIGxlbmd0aCA9PT0gaSAp
IHsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzOwotICAgICAgICAgICAgICAgIC0taTsK
LSAgICAgICAgfQotCi0gICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAg
ICAgICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKLSAg
ICAgICAgICAgICAgICBpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNyYyA9IHRhcmdldFsgbmFtZSBdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb3B5ID0gb3B0aW9uc1sgbmFtZSBdOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVl
cnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJyYXkgPSBqUXVlcnkuaXNBcnJheShj
b3B5KSkgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGNvcHlJc0FycmF5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc0FycmF5KHNyYykg
PyBzcmMgOiBbXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBj
bG9uZSB0aGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0
WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1
ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29weSAhPT0g
dW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
cmdldFsgbmFtZSBdID0gY29weTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0Ci0gICAgICAgIHJldHVybiB0
YXJnZXQ7Ci19OwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICAgICAgbm9Db25mbGljdDogZnVuY3Rp
b24oIGRlZXAgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiQgPSBfJDsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1
ZXJ5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeTsKLSAg
ICAgICAgfSwKLQotICAgICAgICAvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0
byB0cnVlIG9uY2UgaXQgb2NjdXJzLgotICAgICAgICBpc1JlYWR5OiBmYWxzZSwKLQotICAgICAg
ICAvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3Jl
Ci0gICAgICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCi0gICAgICAgIHJl
YWR5V2FpdDogMSwKLQotICAgICAgICAvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkgZXZl
bnQKLSAgICAgICAgaG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIGhvbGQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHlXYWl0
Kys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5yZWFkeSggdHJ1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAg
ICAgICAvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5Ci0gICAgICAgIHJlYWR5OiBmdW5j
dGlvbiggd2FpdCApIHsKLQotICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIHRoZXJlIGFyZSBw
ZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHkKLSAgICAgICAgICAgICAgICBpZiAo
IHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYm9keSBleGlzdHMsIGF0IGxlYXN0LCBpbiBjYXNl
IElFIGdldHMgYSBsaXR0bGUgb3ZlcnplYWxvdXMgKHRpY2tldCAjNTQ0MykuCi0gICAgICAgICAg
ICAgICAgaWYgKCAhZG9jdW1lbnQuYm9keSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHkKLSAgICAg
ICAgICAgICAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAvLyBJ
ZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYg
bmVlZCBiZQotICAgICAgICAgICAgICAgIGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5y
ZWFkeVdhaXQgPiAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMg
Ym91bmQsIHRvIGV4ZWN1dGUKLSAgICAgICAgICAgICAgICByZWFkeUxpc3QucmVzb2x2ZVdpdGgo
IGRvY3VtZW50LCBbIGpRdWVyeSBdICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGFu
eSBib3VuZCByZWFkeSBldmVudHMKLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5mbi50cmln
Z2VyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdn
ZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwK
LQotICAgICAgICAvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRldGFpbHMgY29uY2Vybmlu
ZyBpc0Z1bmN0aW9uLgotICAgICAgICAvLyBTaW5jZSB2ZXJzaW9uIDEuMywgRE9NIG1ldGhvZHMg
YW5kIGZ1bmN0aW9ucyBsaWtlIGFsZXJ0Ci0gICAgICAgIC8vIGFyZW4ndCBzdXBwb3J0ZWQuIFRo
ZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCi0gICAgICAgIGlzRnVuY3Rpb246IGZ1bmN0
aW9uKCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09
ICJmdW5jdGlvbiI7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaXNBcnJheTogQXJyYXkuaXNBcnJh
eSB8fCBmdW5jdGlvbiggb2JqICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkudHlw
ZShvYmopID09PSAiYXJyYXkiOwotICAgICAgICB9LAotCi0gICAgICAgIGlzV2luZG93OiBmdW5j
dGlvbiggb2JqICkgewotICAgICAgICAgICAgICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmog
PT0gb2JqLndpbmRvdzsKLSAgICAgICAgfSwKLQotICAgICAgICBpc051bWVyaWM6IGZ1bmN0aW9u
KCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFpc05hTiggcGFyc2VGbG9hdChvYmop
ICkgJiYgaXNGaW5pdGUoIG9iaiApOwotICAgICAgICB9LAotCi0gICAgICAgIHR5cGU6IGZ1bmN0
aW9uKCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8KLSAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyggb2JqICkgOgotICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3MydHlwZVsgY29yZV90b1N0cmluZy5jYWxsKG9iaikgXSB8fCAib2JqZWN0IjsKLSAg
ICAgICAgfSwKLQotICAgICAgICBpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewotICAg
ICAgICAgICAgICAgIC8vIE11c3QgYmUgYW4gT2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEJl
Y2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgdGhlIGNv
bnN0cnVjdG9yIHByb3BlcnR5LgotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IERP
TSBub2RlcyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFzcyB0aHJvdWdoLCBhcyB3ZWxsCi0g
ICAgICAgICAgICAgICAgaWYgKCAhb2JqIHx8IGpRdWVyeS50eXBlKG9iaikgIT09ICJvYmplY3Qi
IHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3Qgb3duIGNvbnN0
cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG9iai5jb25zdHJ1Y3RvciAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAh
Y29yZV9oYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIpICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICFjb3JlX2hhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5
cGUsICJpc1Byb3RvdHlwZU9mIikgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGNhdGNoICggZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFOCw5IFdpbGwg
dGhyb3cgZXhjZXB0aW9ucyBvbiBjZXJ0YWluIGhvc3Qgb2JqZWN0cyAjOTg5NwotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRv
IHNwZWVkIHVwLAotICAgICAgICAgICAgICAgIC8vIGlmIGxhc3Qgb25lIGlzIG93biwgdGhlbiBh
bGwgcHJvcGVydGllcyBhcmUgb3duLgotCi0gICAgICAgICAgICAgICAgdmFyIGtleTsKLSAgICAg
ICAgICAgICAgICBmb3IgKCBrZXkgaW4gb2JqICkge30KLQotICAgICAgICAgICAgICAgIHJldHVy
biBrZXkgPT09IHVuZGVmaW5lZCB8fCBjb3JlX2hhc093bi5jYWxsKCBvYmosIGtleSApOwotICAg
ICAgICB9LAotCi0gICAgICAgIGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmog
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9LAotCi0gICAgICAg
IGVycm9yOiBmdW5jdGlvbiggbXNnICkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
ciggbXNnICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gZGF0YTogc3RyaW5nIG9mIGh0bWwK
LSAgICAgICAgLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVu
dCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LCBkZWZhdWx0cyB0byBkb2N1bWVudAot
ICAgICAgICAvLyBzY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3Jp
cHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmcKLSAgICAgICAgcGFyc2VIVE1MOiBmdW5jdGlv
biggZGF0YSwgY29udGV4dCwgc2NyaXB0cyApIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyc2Vk
OwotICAgICAgICAgICAgICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmci
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJib29sZWFuIiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMgPSBjb250ZXh0OwotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OwotCi0gICAgICAgICAgICAgICAg
Ly8gU2luZ2xlIHRhZwotICAgICAgICAgICAgICAgIGlmICggKHBhcnNlZCA9IHJzaW5nbGVUYWcu
ZXhlYyggZGF0YSApKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbIGNvbnRl
eHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWzFdICkgXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBwYXJzZWQgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNv
bnRleHQsIHNjcmlwdHMgPyBudWxsIDogW10gKTsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5Lm1lcmdlKCBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChwYXJzZWQuY2FjaGVhYmxl
ID8galF1ZXJ5LmNsb25lKCBwYXJzZWQuZnJhZ21lbnQgKSA6IHBhcnNlZC5mcmFnbWVudCkuY2hp
bGROb2RlcyApOwotICAgICAgICB9LAotCi0gICAgICAgIHBhcnNlSlNPTjogZnVuY3Rpb24oIGRh
dGEgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0
cmluZyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBsZWFkaW5nL3RyYWlsaW5n
IHdoaXRlc3BhY2UgaXMgcmVtb3ZlZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQotICAgICAgICAgICAg
ICAgIGRhdGEgPSBqUXVlcnkudHJpbSggZGF0YSApOwotCi0gICAgICAgICAgICAgICAgLy8gQXR0
ZW1wdCB0byBwYXJzZSB1c2luZyB0aGUgbmF0aXZlIEpTT04gcGFyc2VyIGZpcnN0Ci0gICAgICAg
ICAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAmJiB3aW5kb3cuSlNPTi5wYXJzZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuSlNPTi5wYXJzZSggZGF0YSApOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgaW5jb21p
bmcgZGF0YSBpcyBhY3R1YWwgSlNPTgotICAgICAgICAgICAgICAgIC8vIExvZ2ljIGJvcnJvd2Vk
IGZyb20gaHR0cDovL2pzb24ub3JnL2pzb24yLmpzCi0gICAgICAgICAgICAgICAgaWYgKCBydmFs
aWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxpZGVzY2FwZSwgIkAiICkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC5yZXBsYWNlKCBydmFsaWR0b2tlbnMsICJdIiApCi0gICAgICAgICAg
ICAgICAgICAgICAgICAucmVwbGFjZSggcnZhbGlkYnJhY2VzLCAiIikpICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKCBuZXcgRnVuY3Rpb24oICJyZXR1cm4gIiArIGRhdGEg
KSApKCk7Ci0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9y
KCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSApOwotICAgICAgICB9LAotCi0gICAgICAgIC8vIENy
b3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKLSAgICAgICAgcGFyc2VYTUw6IGZ1bmN0aW9uKCBkYXRh
ICkgewotICAgICAgICAgICAgICAgIHZhciB4bWwsIHRtcDsKLSAgICAgICAgICAgICAgICBpZiAo
ICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuRE9NUGFyc2VyICkgeyAv
LyBTdGFuZGFyZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXcgRE9N
UGFyc2VyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHRtcC5wYXJz
ZUZyb21TdHJpbmcoIGRhdGEgLCAidGV4dC94bWwiICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeyAvLyBJRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgPSBu
ZXcgQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxET00iICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhtbC5hc3luYyA9ICJmYWxzZSI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHhtbC5sb2FkWE1MKCBkYXRhICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHhtbCA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVtZW50IHx8IHhtbC5nZXRFbGVtZW50c0J5VGFn
TmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4geG1sOwotICAgICAgICB9LAotCi0gICAgICAgIG5v
b3A6IGZ1bmN0aW9uKCkge30sCi0KLSAgICAgICAgLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEg
Z2xvYmFsIGNvbnRleHQKLSAgICAgICAgLy8gV29ya2Fyb3VuZHMgYmFzZWQgb24gZmluZGluZ3Mg
YnkgSmltIERyaXNjb2xsCi0gICAgICAgIC8vIGh0dHA6Ly93ZWJsb2dzLmphdmEubmV0L2Jsb2cv
ZHJpc2NvbGwvYXJjaGl2ZS8yMDA5LzA5LzA4L2V2YWwtamF2YXNjcmlwdC1nbG9iYWwtY29udGV4
dAotICAgICAgICBnbG9iYWxFdmFsOiBmdW5jdGlvbiggZGF0YSApIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIGRhdGEgJiYgY29yZV9ybm90d2hpdGUudGVzdCggZGF0YSApICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgdXNlIGV4ZWNTY3JpcHQgb24gSW50ZXJuZXQgRXhwbG9yZXIK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24g
c28gdGhhdCBjb250ZXh0IGlzIHdpbmRvdwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmF0
aGVyIHRoYW4galF1ZXJ5IGluIEZpcmVmb3gKLSAgICAgICAgICAgICAgICAgICAgICAgICggd2lu
ZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpbmRvd1sgImV2YWwiIF0uY2FsbCggd2luZG93LCBkYXRhICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9ICkoIGRhdGEgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5
IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwotICAgICAgICAvLyBNaWNyb3NvZnQgZm9yZ290IHRv
IGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpCi0gICAgICAgIGNhbWVsQ2FzZTogZnVu
Y3Rpb24oIHN0cmluZyApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2Uo
IHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICB9LAotCi0gICAgICAg
IC8vIGFyZ3MgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKLSAgICAgICAgZWFjaDogZnVuY3Rp
b24oIG9iaiwgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxl
bmd0aCA9IG9iai5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBpc09iaiA9IGxlbmd0
aCA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0Z1bmN0aW9uKCBvYmogKTsKLQotICAgICAgICAg
ICAgICAgIGlmICggYXJncyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNPYmog
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2su
YXBwbHkoIG9ialsgbmFtZSBdLCBhcmdzICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgaSsrIF0sIGFy
Z3MgKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3Ig
dGhlIG1vc3QgY29tbW9uIHVzZSBvZiBlYWNoCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNPYmogKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBuYW1lIF0sIG5hbWUs
IG9ialsgbmFtZSBdICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCA7IGkgPCBsZW5ndGg7ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSsrIF0gKSA9
PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqOwotICAg
ICAgICB9LAotCi0gICAgICAgIC8vIFVzZSBuYXRpdmUgU3RyaW5nLnRyaW0gZnVuY3Rpb24gd2hl
cmV2ZXIgcG9zc2libGUKLSAgICAgICAgdHJpbTogY29yZV90cmltICYmICFjb3JlX3RyaW0uY2Fs
bCgiXHVGRUZGXHhBMCIpID8KLSAgICAgICAgICAgICAgICBmdW5jdGlvbiggdGV4dCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0ID09IG51bGwgPwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvcmVfdHJpbS5jYWxsKCB0ZXh0ICk7Ci0gICAgICAgICAgICAgICAgfSA6Ci0KLSAgICAgICAg
ICAgICAgICAvLyBPdGhlcndpc2UgdXNlIG91ciBvd24gdHJpbW1pbmcgZnVuY3Rpb25hbGl0eQot
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB0ZXh0ICsgIiIgKS5yZXBs
YWNlKCBydHJpbSwgIiIgKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgIC8vIHJlc3Vs
dHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKLSAgICAgICAgbWFrZUFycmF5OiBmdW5jdGlv
biggYXJyLCByZXN1bHRzICkgewotICAgICAgICAgICAgICAgIHZhciB0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gcmVzdWx0cyB8fCBbXTsKLQotICAgICAgICAgICAgICAgIGlm
ICggYXJyICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgd2luZG93
LCBzdHJpbmdzIChhbmQgZnVuY3Rpb25zKSBhbHNvIGhhdmUgJ2xlbmd0aCcKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0bHkgdG8gaGFuZGxlIEJsYWNrYmVy
cnkgNC43IFJlZ0V4cCBpc3N1ZXMgIzY5MzAKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBqUXVlcnkudHlwZSggYXJyICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJy
Lmxlbmd0aCA9PSBudWxsIHx8IHR5cGUgPT09ICJzdHJpbmciIHx8IHR5cGUgPT09ICJmdW5jdGlv
biIgfHwgdHlwZSA9PT0gInJlZ2V4cCIgfHwgalF1ZXJ5LmlzV2luZG93KCBhcnIgKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9wdXNoLmNhbGwoIHJldCwgYXJyICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgYXJyICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK
LSAgICAgICAgfSwKLQotICAgICAgICBpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkg
ewotICAgICAgICAgICAgICAgIHZhciBsZW47Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGFyciAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29yZV9pbmRleE9mICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29yZV9pbmRleE9mLmNhbGwoIGFyciwg
ZWxlbSwgaSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsZW4gPSBhcnIubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkg
PyBpIDwgMCA/IE1hdGgubWF4KCAwLCBsZW4gKyBpICkgOiBpIDogMDsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNraXAgYWNjZXNzaW5nIGluIHNwYXJzZSBhcnJheXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpIGluIGFyciAmJiBhcnJbIGkgXSA9PT0gZWxl
bSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAg
ICAgICAgfSwKLQotICAgICAgICBtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGwgPSBzZWNvbmQubGVuZ3RoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaSA9IGZpcnN0Lmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGogPSAwOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgbCA9PT0gIm51bWJlciIgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCA7IGogPCBsOyBqKysgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlICggc2Vjb25kW2pdICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaisrIF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZmlyc3QubGVuZ3RoID0gaTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdDsKLSAg
ICAgICAgfSwKLQotICAgICAgICBncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnYg
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldFZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgaW52ID0g
ISFpbnY7Ci0KLSAgICAgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBz
YXZpbmcgdGhlIGl0ZW1zCi0gICAgICAgICAgICAgICAgLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0
b3IgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0s
IGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW52ICE9PSByZXRWYWwgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBlbGVtc1sgaSBdICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBhcmcgaXMgZm9yIGlu
dGVybmFsIHVzYWdlIG9ubHkKLSAgICAgICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNr
LCBhcmcgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBrZXksCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8ganF1ZXJ5IG9iamVjdHMgYXJlIHRyZWF0ZWQgYXMgYXJyYXlzCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpc0FycmF5ID0gZWxlbXMgaW5zdGFuY2VvZiBqUXVlcnkgfHwg
bGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYgKCAo
IGxlbmd0aCA+IDAgJiYgZWxlbXNbIDAgXSAmJiBlbGVtc1sgbGVuZ3RoIC0xIF0gKSB8fCBsZW5n
dGggPT09IDAgfHwgalF1ZXJ5LmlzQXJyYXkoIGVsZW1zICkgKSA7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMg
dG8gdGhlaXIKLSAgICAgICAgICAgICAgICBpZiAoIGlzQXJyYXkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxlbmd0aCBd
ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggZXZlcnkga2V5
IG9uIHRoZSBvYmplY3QsCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIGtleSBpbiBlbGVtcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGtleSBdLCBrZXksIGFyZyApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRbIHJldC5sZW5ndGggXSA9
IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRmxh
dHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgICAgICAgICAgICAgIHJldHVybiByZXQuY29uY2F0
LmFwcGx5KCBbXSwgcmV0ICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQSBnbG9iYWwgR1VJ
RCBjb3VudGVyIGZvciBvYmplY3RzCi0gICAgICAgIGd1aWQ6IDEsCi0KLSAgICAgICAgLy8gQmlu
ZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcg
YW55Ci0gICAgICAgIC8vIGFyZ3VtZW50cy4KLSAgICAgICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwg
Y29udGV4dCApIHsKLSAgICAgICAgICAgICAgICB2YXIgdG1wLCBhcmdzLCBwcm94eTsKLQotICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09ICJzdHJpbmciICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdG1wID0gZm5bIGNvbnRleHQgXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQgPSBmbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gdG1wOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRl
dGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCi0gICAgICAgICAgICAg
ICAgLy8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVu
ZGVmaW5lZC4KLSAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2ltdWxhdGVkIGJpbmQKLSAgICAgICAgICAg
ICAgICBhcmdzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTsKLSAgICAgICAgICAg
ICAgICBwcm94eSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZuLmFwcGx5KCBjb250ZXh0LCBhcmdzLmNvbmNhdCggY29yZV9zbGljZS5jYWxsKCBhcmd1bWVu
dHMgKSApICk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIFNldCB0
aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVy
LCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAotICAgICAgICAgICAgICAgIHByb3h5Lmd1aWQgPSBmbi5n
dWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHByb3h5OwotICAgICAgICB9LAotCi0gICAgICAgIC8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2Qg
dG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvbgotICAgICAgICAvLyBUaGUgdmFs
dWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb24KLSAgICAg
ICAgYWNjZXNzOiBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVt
cHR5R2V0LCBwYXNzICkgewotICAgICAgICAgICAgICAgIHZhciBleGVjLAotICAgICAgICAgICAg
ICAgICAgICAgICAgYnVsayA9IGtleSA9PSBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAg
aSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGg7Ci0K
LSAgICAgICAgICAgICAgICAvLyBTZXRzIG1hbnkgdmFsdWVzCi0gICAgICAgICAgICAgICAgaWYg
KCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBpIGluIGtleSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbaV0sIDEsIGVtcHR5R2V0LCB2YWx1ZSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2hh
aW5hYmxlID0gMTsKLQotICAgICAgICAgICAgICAgIC8vIFNldHMgb25lIHZhbHVlCi0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE9wdGlvbmFsbHksIGZ1bmN0aW9uIHZhbHVlcyBnZXQgZXhlY3V0ZWQg
aWYgZXhlYyBpcyB0cnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBleGVjID0gcGFzcyA9PT0g
dW5kZWZpbmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGJ1bGsgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEJ1bGsgb3BlcmF0aW9ucyBvbmx5IGl0ZXJhdGUgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24g
dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXhlYyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjID0gZm47Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZWxlbSwga2V5
LCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBleGVjLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IG51bGw7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBmbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbiggZWxlbXNbaV0sIGtleSwgZXhlYyA/IHZhbHVlLmNhbGwo
IGVsZW1zW2ldLCBpLCBmbiggZWxlbXNbaV0sIGtleSApICkgOiB2YWx1ZSwgcGFzcyApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYWluYWJsZSA9IDE7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYWluYWJsZSA/Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtcyA6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1bGsgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbi5jYWxsKCBlbGVtcyApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoID8gZm4oIGVsZW1zWzBdLCBrZXkgKSA6IGVtcHR5R2V0OwotICAgICAgICB9LAotCi0g
ICAgICAgIG5vdzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICggbmV3IERh
dGUoKSApLmdldFRpbWUoKTsKLSAgICAgICAgfQotfSk7Ci0KLWpRdWVyeS5yZWFkeS5wcm9taXNl
ID0gZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgaWYgKCAhcmVhZHlMaXN0ICkgewotCi0gICAg
ICAgICAgICAgICAgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBh
ZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4KLSAgICAgICAgICAg
ICAgICAvLyB3ZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRlICJpbnRlcmFjdGl2ZSIgaGVy
ZSwgYnV0IGl0IGNhdXNlZCBpc3N1ZXMgbGlrZSB0aGUgb25lCi0gICAgICAgICAgICAgICAgLy8g
ZGlzY292ZXJlZCBieSBDaHJpc1MgaGVyZTogaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQv
MTIyODIjY29tbWVudDoxNQotICAgICAgICAgICAgICAgIGlmICggZG9jdW1lbnQucmVhZHlTdGF0
ZSA9PT0gImNvbXBsZXRlIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBp
dCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxh
eSByZWFkeQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5
LCAxICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTdGFuZGFyZHMtYmFzZWQgYnJvd3NlcnMgc3Vw
cG9ydCBET01Db250ZW50TG9hZGVkCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZG9jdW1l
bnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0
aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwg
ZmFsc2UgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3aW5k
b3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAibG9hZCIsIGpRdWVyeS5yZWFkeSwgZmFsc2UgKTsK
LQotICAgICAgICAgICAgICAgIC8vIElmIElFIGV2ZW50IG1vZGVsIGlzIHVzZWQKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGZpcmlu
ZyBiZWZvcmUgb25sb2FkLCBtYXliZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCAib25yZWFkeXN0YXRl
Y2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawotICAg
ICAgICAgICAgICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCAib25sb2FkIiwgalF1ZXJ5
LnJlYWR5ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIElFIGFuZCBub3QgYSBm
cmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8gc2Vl
IGlmIHRoZSBkb2N1bWVudCBpcyByZWFkeQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRv
cCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b3AgPSB3aW5kb3cuZnJhbWVFbGVtZW50ID09IG51bGwgJiYg
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aChlKSB7fQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRvcCAmJiB0b3AuZG9TY3Jv
bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBkb1Njcm9s
bENoZWNrKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IWpRdWVyeS5pc1JlYWR5ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHRyaWNrIGJ5IERpZWdvIFBlcmluaQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBo
dHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AuZG9TY3JvbGwo
ImxlZnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gY2F0Y2goZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCggZG9TY3JvbGxDaGVjaywgNTAgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGV4ZWN1dGUg
YW55IHdhaXRpbmcgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkucmVhZHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2JqICk7Ci19OwotCi0vLyBQb3B1bGF0
ZSB0aGUgY2xhc3MydHlwZSBtYXAKLWpRdWVyeS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcg
RnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihp
LCBuYW1lKSB7Ci0gICAgICAgIGNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBuYW1lICsgIl0iIF0g
PSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci19KTsKLQotLy8gQWxsIGpRdWVyeSBvYmplY3RzIHNob3Vs
ZCBwb2ludCBiYWNrIHRvIHRoZXNlCi1yb290alF1ZXJ5ID0galF1ZXJ5KGRvY3VtZW50KTsKLS8v
IFN0cmluZyB0byBPYmplY3Qgb3B0aW9ucyBmb3JtYXQgY2FjaGUKLXZhciBvcHRpb25zQ2FjaGUg
PSB7fTsKLQotLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3Qt
Zm9ybWF0dGVkIG9uZXMgYW5kIHN0b3JlIGluIGNhY2hlCi1mdW5jdGlvbiBjcmVhdGVPcHRpb25z
KCBvcHRpb25zICkgewotICAgICAgICB2YXIgb2JqZWN0ID0gb3B0aW9uc0NhY2hlWyBvcHRpb25z
IF0gPSB7fTsKLSAgICAgICAgalF1ZXJ5LmVhY2goIG9wdGlvbnMuc3BsaXQoIGNvcmVfcnNwYWNl
ICksIGZ1bmN0aW9uKCBfLCBmbGFnICkgewotICAgICAgICAgICAgICAgIG9iamVjdFsgZmxhZyBd
ID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLS8qCi0g
KiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoK
LSAqCi0gKiAgICAgIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVk
IG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKLSAqICAgICAgICAgICAgICAgICAgICAgIHRo
ZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmpl
Y3QKLSAqCi0gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2
ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZQotICogImZpcmVkIiBtdWx0aXBsZSB0aW1lcy4K
LSAqCi0gKiBQb3NzaWJsZSBvcHRpb25zOgotICoKLSAqICAgICAgb25jZTogICAgICAgICAgICAg
ICAgICAgd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25j
ZSAobGlrZSBhIERlZmVycmVkKQotICoKLSAqICAgICAgbWVtb3J5OiAgICAgICAgICAgICAgICAg
d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxs
YmFjayBhZGRlZAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVy
IHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1v
cml6ZWQiCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIChs
aWtlIGEgRGVmZXJyZWQpCi0gKgotICogICAgICB1bmlxdWU6ICAgICAgICAgICAgICAgICB3aWxs
IGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBp
biB0aGUgbGlzdCkKLSAqCi0gKiAgICAgIHN0b3BPbkZhbHNlOiAgICBpbnRlcnJ1cHQgY2FsbGlu
Z3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2UKLSAqCi0gKi8KLWpRdWVyeS5DYWxsYmFj
a3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKLQotICAgICAgICAvLyBDb252ZXJ0IG9wdGlvbnMg
ZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkCi0gICAg
ICAgIC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdCkKLSAgICAgICAgb3B0aW9ucyA9IHR5cGVv
ZiBvcHRpb25zID09PSAic3RyaW5nIiA/Ci0gICAgICAgICAgICAgICAgKCBvcHRpb25zQ2FjaGVb
IG9wdGlvbnMgXSB8fCBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgKSA6Ci0gICAgICAgICAgICAg
ICAgalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTsKLQotICAgICAgICB2YXIgLy8gTGFzdCBm
aXJlIHZhbHVlIChmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzKQotICAgICAgICAgICAgICAgIG1l
bW9yeSwKLSAgICAgICAgICAgICAgICAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFk
eSBmaXJlZAotICAgICAgICAgICAgICAgIGZpcmVkLAotICAgICAgICAgICAgICAgIC8vIEZsYWcg
dG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKLSAgICAgICAgICAgICAgICBmaXJp
bmcsCi0gICAgICAgICAgICAgICAgLy8gRmlyc3QgY2FsbGJhY2sgdG8gZmlyZSAodXNlZCBpbnRl
cm5hbGx5IGJ5IGFkZCBhbmQgZmlyZVdpdGgpCi0gICAgICAgICAgICAgICAgZmlyaW5nU3RhcnQs
Ci0gICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRoZSBsb29wIHdoZW4gZmlyaW5nCi0gICAgICAg
ICAgICAgICAgZmlyaW5nTGVuZ3RoLAotICAgICAgICAgICAgICAgIC8vIEluZGV4IG9mIGN1cnJl
bnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJlbW92ZSBpZiBuZWVkZWQpCi0gICAg
ICAgICAgICAgICAgZmlyaW5nSW5kZXgsCi0gICAgICAgICAgICAgICAgLy8gQWN0dWFsIGNhbGxi
YWNrIGxpc3QKLSAgICAgICAgICAgICAgICBsaXN0ID0gW10sCi0gICAgICAgICAgICAgICAgLy8g
U3RhY2sgb2YgZmlyZSBjYWxscyBmb3IgcmVwZWF0YWJsZSBsaXN0cwotICAgICAgICAgICAgICAg
IHN0YWNrID0gIW9wdGlvbnMub25jZSAmJiBbXSwKLSAgICAgICAgICAgICAgICAvLyBGaXJlIGNh
bGxiYWNrcwotICAgICAgICAgICAgICAgIGZpcmUgPSBmdW5jdGlvbiggZGF0YSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1lbW9yeSA9IG9wdGlvbnMubWVtb3J5ICYmIGRhdGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmaXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmaXJpbmdJbmRleCA9IGZpcmluZ1N0YXJ0IHx8IDA7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmaXJpbmdTdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdMZW5ndGgg
PSBsaXN0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGxpc3QgJiYgZmlyaW5nSW5kZXggPCBmaXJp
bmdMZW5ndGg7IGZpcmluZ0luZGV4KysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggZGF0YVsgMCBdLCBkYXRhWyAxIF0g
KSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgPSBmYWxzZTsgLy8gVG8gcHJldmVudCBmdXJ0
aGVyIGNhbGxzIHVzaW5nIGFkZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmcgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGlzdCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzdGFjayApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHN0YWNrLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUoIHN0YWNrLnNoaWZ0KCkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1lbW9yeSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5kaXNhYmxlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAg
IC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0Ci0gICAgICAgICAgICAgICAgc2VsZiA9IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBv
ZiBjYWxsYmFja3MgdG8gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGlzdCApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgd2Ugc2F2
ZSB0aGUgY3VycmVudCBsZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSBsaXN0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZnVuY3Rpb24gYWRkKCBhcmdzICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9u
KCBfLCBhcmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIGFyZyApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09
ICJmdW5jdGlvbiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFz
KCBhcmcgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaCggYXJnICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0eXBlICE9PSAic3RyaW5nIiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKCBhcmcgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoIGFyZ3VtZW50cyApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHdlIG5lZWQgdG8gYWRkIHRoZSBj
YWxsYmFja3MgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY3VycmVudCBmaXJpbmcgYmF0Y2g/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBmaXJpbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaXRoIG1lbW9yeSwgaWYgd2UncmUgbm90
IGZpcmluZyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
d2Ugc2hvdWxkIGNhbGwgcmlnaHQgYXdheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIG1lbW9yeSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ1N0YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJlKCBtZW1vcnkgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBsaXN0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXg7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggKCBpbmRleCA9
IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnNwbGlj
ZSggaW5kZXgsIDEgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSGFuZGxlIGZpcmluZyBpbmRleGVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5nTGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmly
aW5nTGVuZ3RoLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXgg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleC0tOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRy
b2wgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdAotICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzOiBmdW5jdGlvbiggZm4gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY2Fs
bGJhY2tzIGZyb20gdGhlIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5OiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IFtdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBIYXZlIHRoZSBsaXN0IGRv
IG5vdGhpbmcgYW55bW9yZQotICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdGFjayA9IG1l
bW9yeSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSXMgaXQgZGlzYWJsZWQ/Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbGlz
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBMb2NrIHRoZSBsaXN0IGluIGl0cyBjdXJyZW50IHN0YXRlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBsb2NrOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhY2sgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IW1lbW9yeSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LmRpc2FibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJcyBpdCBsb2NrZWQ/Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsb2NrZWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIXN0YWNrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBn
aXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVX
aXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJncyA9IGFyZ3MgfHwgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGlzdCAmJiAoICFmaXJlZCB8
fCBzdGFjayApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggZmlyaW5nICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhY2sucHVzaCggYXJncyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaXJlKCBhcmdzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mg
d2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJlOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maXJlV2l0
aCggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxs
ZWQgYXQgbGVhc3Qgb25jZQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyZWQ6IGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFmaXJlZDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgIHJl
dHVybiBzZWxmOwotfTsKLWpRdWVyeS5leHRlbmQoewotCi0gICAgICAgIERlZmVycmVkOiBmdW5j
dGlvbiggZnVuYyApIHsKLSAgICAgICAgICAgICAgICB2YXIgdHVwbGVzID0gWwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgbGlzdGVuZXIg
bGlzdCwgZmluYWwgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAicmVz
b2x2ZSIsICJkb25lIiwgalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlc29sdmVk
IiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICJyZWplY3QiLCAiZmFpbCIs
IGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksICJyZWplY3RlZCIgXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWyAibm90aWZ5IiwgInByb2dyZXNzIiwgalF1ZXJ5LkNh
bGxiYWNrcygibWVtb3J5IikgXQotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlID0gInBlbmRpbmciLAotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvbWlzZSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWx3YXlzOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWls
KCBhcmd1bWVudHMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWls
LCBmblByb2dyZXNzICovICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBmbnMgPSBhcmd1bWVudHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5jdGlvbiggbmV3RGVmZXIgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFj
aCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb24gPSB0dXBsZVsgMCBd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZuID0gZm5zWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmVkWyBkb25lIHwgZmFpbCB8IHByb2dy
ZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZlcgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVb
MV0gXSggalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgPwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHJldHVybmVkID0gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJu
ZWQucHJvbWlzZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC5wcm9taXNl
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSggbmV3RGVmZXIucmVzb2x2
ZSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZhaWwoIG5ld0RlZmVyLnJlamVj
dCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb2dyZXNzKCBuZXdEZWZlci5u
b3RpZnkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0RlZmVyWyBhY3Rpb24gKyAiV2l0aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBuZXdEZWZl
ciA6IHRoaXMsIFsgcmV0dXJuZWQgXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0RlZmVyWyBhY3Rpb24gXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbnMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pLnByb21pc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGEgcHJvbWlzZSBm
b3IgdGhpcyBkZWZlcnJlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBv
YmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IGZ1bmN0aW9uKCBvYmog
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAh
PSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQgPSB7fTsKLQotICAgICAgICAgICAgICAg
IC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXQKLSAgICAgICAgICAgICAgICBwcm9taXNlLnBp
cGUgPSBwcm9taXNlLnRoZW47Ci0KLSAgICAgICAgICAgICAgICAvLyBBZGQgbGlzdC1zcGVjaWZp
YyBtZXRob2RzCi0gICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24o
IGksIHR1cGxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSB0dXBsZVsg
MiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVN0cmluZyA9IHR1cGxl
WyAzIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb21pc2VbIGRvbmUgfCBmYWls
IHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNl
WyB0dXBsZVsxXSBdID0gbGlzdC5hZGQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhh
bmRsZSBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZVN0cmluZyApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgPSBbIHJlc29s
dmVkIHwgcmVqZWN0ZWQgXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlID0gc3RhdGVTdHJpbmc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gWyByZWplY3RfbGlzdCB8IHJlc29sdmVfbGlzdCBdLmRpc2FibGU7IHByb2dyZXNzX2xpc3Qu
bG9jawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0dXBsZXNbIGkgXiAxIF1b
IDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmZXJyZWRbIHJlc29sdmUg
fCByZWplY3QgfCBub3RpZnkgXSA9IGxpc3QuZmlyZQotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWRbIHR1cGxlWzBdIF0gPSBsaXN0LmZpcmU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZFsgdHVwbGVbMF0gKyAiV2l0aCIgXSA9IGxpc3QuZmlyZVdpdGg7Ci0gICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHBy
b21pc2UKLSAgICAgICAgICAgICAgICBwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55Ci0gICAgICAgICAgICAgICAg
aWYgKCBmdW5jICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJl
ZCwgZGVmZXJyZWQgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBB
bGwgZG9uZSEKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgLy8gRGVmZXJyZWQgaGVscGVyCi0gICAgICAgIHdoZW46IGZ1bmN0aW9uKCBzdWJv
cmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkgewotICAgICAgICAgICAgICAgIHZh
ciBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVWYWx1ZXMgPSBjb3JlX3Ns
aWNlLmNhbGwoIGFyZ3VtZW50cyApLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0g
cmVzb2x2ZVZhbHVlcy5sZW5ndGgsCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBj
b3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlbWFpbmluZyA9IGxlbmd0aCAhPT0gMSB8fCAoIHN1Ym9yZGluYXRlICYmIGpRdWVyeS5pc0Z1
bmN0aW9uKCBzdWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/IGxlbmd0aCA6IDAsCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQuIElmIHJlc29sdmVWYWx1ZXMg
Y29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBqdXN0IHVzZSB0aGF0LgotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQgPSByZW1haW5pbmcgPT09IDEgPyBzdWJvcmRpbmF0
ZSA6IGpRdWVyeS5EZWZlcnJlZCgpLAotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRh
dGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJvZ3Jlc3MgdmFsdWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGksIGNvbnRleHRzLCB2YWx1
ZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigg
dmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dHNbIGkgXSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGNvcmVfc2xpY2UuY2FsbCggYXJn
dW1lbnRzICkgOiB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRz
LCB2YWx1ZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1
ZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc1ZhbHVlcywgcHJvZ3Jlc3NDb250ZXh0
cywgcmVzb2x2ZUNvbnRleHRzOwotCi0gICAgICAgICAgICAgICAgLy8gYWRkIGxpc3RlbmVycyB0
byBEZWZlcnJlZCBzdWJvcmRpbmF0ZXM7IHRyZWF0IG90aGVycyBhcyByZXNvbHZlZAotICAgICAg
ICAgICAgICAgIGlmICggbGVuZ3RoID4gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiBqUXVlcnku
aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSgg
dXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZhaWwoIGRlZmVycmVk
LnJlamVjdCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFs
dWVzICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmluZzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIG5vdCB3YWl0aW5n
IG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXIKLSAgICAgICAgICAgICAgICBpZiAoICFy
ZW1haW5pbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0
aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTsKLSAgICAgICAgfQot
fSk7Ci1qUXVlcnkuc3VwcG9ydCA9IChmdW5jdGlvbigpIHsKLQotICAgICAgICB2YXIgc3VwcG9y
dCwKLSAgICAgICAgICAgICAgICBhbGwsCi0gICAgICAgICAgICAgICAgYSwKLSAgICAgICAgICAg
ICAgICBzZWxlY3QsCi0gICAgICAgICAgICAgICAgb3B0LAotICAgICAgICAgICAgICAgIGlucHV0
LAotICAgICAgICAgICAgICAgIGZyYWdtZW50LAotICAgICAgICAgICAgICAgIGV2ZW50TmFtZSwK
LSAgICAgICAgICAgICAgICBpLAotICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVkLAotICAgICAg
ICAgICAgICAgIGNsaWNrRm4sCi0gICAgICAgICAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0KLSAgICAgICAgLy8gU2V0dXAKLSAgICAgICAgZGl2LnNldEF0dHJp
YnV0ZSggImNsYXNzTmFtZSIsICJ0IiApOwotICAgICAgICBkaXYuaW5uZXJIVE1MID0gIiAgPGxp
bmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2Jv
eCcvPiI7Ci0KLSAgICAgICAgLy8gU3VwcG9ydCB0ZXN0cyB3b24ndCBydW4gaW4gc29tZSBsaW1p
dGVkIG9yIG5vbi1icm93c2VyIGVudmlyb25tZW50cwotICAgICAgICBhbGwgPSBkaXYuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICAgICAgYSA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiYSIpWyAwIF07Ci0gICAgICAgIGlmICggIWFsbCB8fCAhYSB8fCAhYWxsLmxlbmd0aCApIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4ge307Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGaXJz
dCBiYXRjaCBvZiB0ZXN0cwotICAgICAgICBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzZWxlY3QiKTsKLSAgICAgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwotICAgICAgICBpbnB1dCA9IGRpdi5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiaW5wdXQiKVsgMCBdOwotCi0gICAgICAgIGEuc3R5bGUuY3NzVGV4dCA9ICJ0
b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSI7Ci0gICAgICAgIHN1cHBvcnQgPSB7Ci0gICAg
ICAgICAgICAgICAgLy8gSUUgc3RyaXBzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIC5pbm5lckhU
TUwgaXMgdXNlZAotICAgICAgICAgICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlOiAoIGRpdi5maXJz
dENoaWxkLm5vZGVUeXBlID09PSAzICksCi0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0Ym9keSBlbGVtZW50cyBhcmVuJ3QgYXV0b21hdGljYWxseSBpbnNlcnRlZAotICAgICAg
ICAgICAgICAgIC8vIElFIHdpbGwgaW5zZXJ0IHRoZW0gaW50byBlbXB0eSB0YWJsZXMKLSAgICAg
ICAgICAgICAgICB0Ym9keTogIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5n
dGgsCi0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1lbnRzIGdl
dCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFCi0gICAgICAgICAgICAgICAgaHRt
bFNlcmlhbGl6ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsCi0K
LSAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0
cmlidXRlCi0gICAgICAgICAgICAgICAgLy8gKElFIHVzZXMgLmNzc1RleHQgaW5zdGVhZCkKLSAg
ICAgICAgICAgICAgICBzdHlsZTogL3RvcC8udGVzdCggYS5nZXRBdHRyaWJ1dGUoInN0eWxlIikg
KSwKLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFVSTHMgYXJlbid0IG1hbmlw
dWxhdGVkCi0gICAgICAgICAgICAgICAgLy8gKElFIG5vcm1hbGl6ZXMgaXQgYnkgZGVmYXVsdCkK
LSAgICAgICAgICAgICAgICBocmVmTm9ybWFsaXplZDogKCBhLmdldEF0dHJpYnV0ZSgiaHJlZiIp
ID09PSAiL2EiICksCi0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50
IG9wYWNpdHkgZXhpc3RzCi0gICAgICAgICAgICAgICAgLy8gKElFIHVzZXMgZmlsdGVyIGluc3Rl
YWQpCi0gICAgICAgICAgICAgICAgLy8gVXNlIGEgcmVnZXggdG8gd29yayBhcm91bmQgYSBXZWJL
aXQgaXNzdWUuIFNlZSAjNTE0NQotICAgICAgICAgICAgICAgIG9wYWNpdHk6IC9eMC41Ly50ZXN0
KCBhLnN0eWxlLm9wYWNpdHkgKSwKLQotICAgICAgICAgICAgICAgIC8vIFZlcmlmeSBzdHlsZSBm
bG9hdCBleGlzdGVuY2UKLSAgICAgICAgICAgICAgICAvLyAoSUUgdXNlcyBzdHlsZUZsb2F0IGlu
c3RlYWQgb2YgY3NzRmxvYXQpCi0gICAgICAgICAgICAgICAgY3NzRmxvYXQ6ICEhYS5zdHlsZS5j
c3NGbG9hdCwKLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIG5vIHZhbHVl
IGlzIHNwZWNpZmllZCBmb3IgYSBjaGVja2JveAotICAgICAgICAgICAgICAgIC8vIHRoYXQgaXQg
ZGVmYXVsdHMgdG8gIm9uIi4KLSAgICAgICAgICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRv
ICIiIGluc3RlYWQpCi0gICAgICAgICAgICAgICAgY2hlY2tPbjogKCBpbnB1dC52YWx1ZSA9PT0g
Im9uIiApLAotCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1i
eS1kZWZhdWx0IG9wdGlvbiBoYXMgYSB3b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgotICAgICAg
ICAgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBvZiB0cnVlLCBJ
RSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCi0gICAgICAgICAgICAgICAgb3B0U2VsZWN0
ZWQ6IG9wdC5zZWxlY3RlZCwKLQotICAgICAgICAgICAgICAgIC8vIFRlc3Qgc2V0QXR0cmlidXRl
IG9uIGNhbWVsQ2FzZSBjbGFzcy4gSWYgaXQgd29ya3MsIHdlIG5lZWQgYXR0ckZpeGVzIHdoZW4g
ZG9pbmcgZ2V0L3NldEF0dHJpYnV0ZSAoaWU2LzcpCi0gICAgICAgICAgICAgICAgZ2V0U2V0QXR0
cmlidXRlOiBkaXYuY2xhc3NOYW1lICE9PSAidCIsCi0KLSAgICAgICAgICAgICAgICAvLyBUZXN0
cyBmb3IgZW5jdHlwZSBzdXBwb3J0IG9uIGEgZm9ybSAoIzY3NDMpCi0gICAgICAgICAgICAgICAg
ZW5jdHlwZTogISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSwKLQotICAg
ICAgICAgICAgICAgIC8vIE1ha2VzIHN1cmUgY2xvbmluZyBhbiBodG1sNSBlbGVtZW50IGRvZXMg
bm90IGNhdXNlIHByb2JsZW1zCi0gICAgICAgICAgICAgICAgLy8gV2hlcmUgb3V0ZXJIVE1MIGlz
IHVuZGVmaW5lZCwgdGhpcyBzdGlsbCB3b3JrcwotICAgICAgICAgICAgICAgIGh0bWw1Q2xvbmU6
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSggdHJ1ZSApLm91dGVySFRN
TCAhPT0gIjw6bmF2PjwvOm5hdj4iLAotCi0gICAgICAgICAgICAgICAgLy8galF1ZXJ5LnN1cHBv
cnQuYm94TW9kZWwgREVQUkVDQVRFRCBpbiAxLjggc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBRdWly
a3MgTW9kZQotICAgICAgICAgICAgICAgIGJveE1vZGVsOiAoIGRvY3VtZW50LmNvbXBhdE1vZGUg
PT09ICJDU1MxQ29tcGF0IiApLAotCi0gICAgICAgICAgICAgICAgLy8gV2lsbCBiZSBkZWZpbmVk
IGxhdGVyCi0gICAgICAgICAgICAgICAgc3VibWl0QnViYmxlczogdHJ1ZSwKLSAgICAgICAgICAg
ICAgICBjaGFuZ2VCdWJibGVzOiB0cnVlLAotICAgICAgICAgICAgICAgIGZvY3VzaW5CdWJibGVz
OiBmYWxzZSwKLSAgICAgICAgICAgICAgICBkZWxldGVFeHBhbmRvOiB0cnVlLAotICAgICAgICAg
ICAgICAgIG5vQ2xvbmVFdmVudDogdHJ1ZSwKLSAgICAgICAgICAgICAgICBpbmxpbmVCbG9ja05l
ZWRzTGF5b3V0OiBmYWxzZSwKLSAgICAgICAgICAgICAgICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxz
ZSwKLSAgICAgICAgICAgICAgICByZWxpYWJsZU1hcmdpblJpZ2h0OiB0cnVlLAotICAgICAgICAg
ICAgICAgIGJveFNpemluZ1JlbGlhYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgIHBpeGVsUG9z
aXRpb246IGZhbHNlCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIGNoZWNrZWQg
c3RhdHVzIGlzIHByb3Blcmx5IGNsb25lZAotICAgICAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTsK
LSAgICAgICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0LmNsb25lTm9kZSggdHJ1ZSAp
LmNoZWNrZWQ7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIG9wdGlvbnMgaW5zaWRl
IGRpc2FibGVkIHNlbGVjdHMgYXJlbid0IG1hcmtlZCBhcyBkaXNhYmxlZAotICAgICAgICAvLyAo
V2ViS2l0IG1hcmtzIHRoZW0gYXMgZGlzYWJsZWQpCi0gICAgICAgIHNlbGVjdC5kaXNhYmxlZCA9
IHRydWU7Ci0gICAgICAgIHN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRpc2FibGVkOwotCi0g
ICAgICAgIC8vIFRlc3QgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZGVsZXRlIGFuIGV4cGFu
ZG8gZnJvbSBhbiBlbGVtZW50Ci0gICAgICAgIC8vIEZhaWxzIGluIEludGVybmV0IEV4cGxvcmVy
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGRpdi50ZXN0OwotICAgICAg
ICB9IGNhdGNoKCBlICkgewotICAgICAgICAgICAgICAgIHN1cHBvcnQuZGVsZXRlRXhwYW5kbyA9
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVuZXIg
JiYgZGl2LmF0dGFjaEV2ZW50ICYmIGRpdi5maXJlRXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAg
ZGl2LmF0dGFjaEV2ZW50KCAib25jbGljayIsIGNsaWNrRm4gPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENsb25pbmcgYSBub2RlIHNob3VsZG4ndCBjb3B5IG92ZXIg
YW55Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBib3VuZCBldmVudCBoYW5kbGVycyAoSUUg
ZG9lcyB0aGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5ub0Nsb25lRXZlbnQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBkaXYuY2xvbmVO
b2RlKCB0cnVlICkuZmlyZUV2ZW50KCJvbmNsaWNrIik7Ci0gICAgICAgICAgICAgICAgZGl2LmRl
dGFjaEV2ZW50KCAib25jbGljayIsIGNsaWNrRm4gKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IENoZWNrIGlmIGEgcmFkaW8gbWFpbnRhaW5zIGl0cyB2YWx1ZQotICAgICAgICAvLyBhZnRlciBi
ZWluZyBhcHBlbmRlZCB0byB0aGUgRE9NCi0gICAgICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgaW5wdXQudmFsdWUgPSAidCI7Ci0gICAgICAgIGlu
cHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAicmFkaW8iICk7Ci0gICAgICAgIHN1cHBvcnQucmFk
aW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7Ci0KLSAgICAgICAgaW5wdXQuc2V0QXR0cmli
dXRlKCAiY2hlY2tlZCIsICJjaGVja2VkIiApOwotCi0gICAgICAgIC8vICMxMTIxNyAtIFdlYktp
dCBsb3NlcyBjaGVjayB3aGVuIHRoZSBuYW1lIGlzIGFmdGVyIHRoZSBjaGVja2VkIGF0dHJpYnV0
ZQotICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7Ci0KLSAgICAgICAg
ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApOwotICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRp
di5sYXN0Q2hpbGQgKTsKLQotICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2Vk
IHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMKLSAgICAgICAgc3VwcG9ydC5jaGVja0Nsb25l
ID0gZnJhZ21lbnQuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxk
LmNoZWNrZWQ7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3gg
d2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKLSAgICAgICAgLy8gdmFsdWUgb2YgdHJ1ZSBhZnRlciBh
cHBlbmRlZCB0byB0aGUgRE9NIChJRTYvNykKLSAgICAgICAgc3VwcG9ydC5hcHBlbmRDaGVja2Vk
ID0gaW5wdXQuY2hlY2tlZDsKLQotICAgICAgICBmcmFnbWVudC5yZW1vdmVDaGlsZCggaW5wdXQg
KTsKLSAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdiApOwotCi0gICAgICAgIC8vIFRl
Y2huaXF1ZSBmcm9tIEp1cml5IFpheXRzZXYKLSAgICAgICAgLy8gaHR0cDovL3BlcmZlY3Rpb25r
aWxscy5jb20vZGV0ZWN0aW5nLWV2ZW50LXN1cHBvcnQtd2l0aG91dC1icm93c2VyLXNuaWZmaW5n
LwotICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgbm9uLXN0YW5k
YXJkIGV2ZW50IHN5c3RlbXMKLSAgICAgICAgLy8gYXJlIHVzZWQsIG5hbWVseSBpbiBJRS4gU2hv
cnQtY2lyY3VpdGluZyBoZXJlIGhlbHBzIHVzIHRvCi0gICAgICAgIC8vIGF2b2lkIGFuIGV2YWwg
Y2FsbCAoaW4gc2V0QXR0cmlidXRlKSB3aGljaCBjYW4gY2F1c2UgQ1NQCi0gICAgICAgIC8vIHRv
IGdvIGhheXdpcmUuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vU2VjdXJp
dHkvQ1NQCi0gICAgICAgIGlmICggZGl2LmF0dGFjaEV2ZW50ICkgewotICAgICAgICAgICAgICAg
IGZvciAoIGkgaW4gewotICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0OiB0cnVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9jdXNpbjogdHJ1ZQotICAgICAgICAgICAgICAgIH0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50TmFtZSA9ICJvbiIgKyBpOwotICAgICAgICAgICAgICAgICAgICAgICAgaXNT
dXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBkaXYgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWlzU3VwcG9ydGVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXYuc2V0QXR0cmlidXRlKCBldmVudE5hbWUsICJyZXR1cm47IiApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggdHlwZW9mIGRpdlsgZXZlbnROYW1lIF0g
PT09ICJmdW5jdGlvbiIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN1cHBvcnRbIGkgKyAiQnViYmxlcyIgXSA9IGlzU3VwcG9ydGVkOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJ1biB0ZXN0cyB0aGF0IG5l
ZWQgYSBib2R5IGF0IGRvYyByZWFkeQotICAgICAgICBqUXVlcnkoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGNvbnRhaW5lciwgZGl2LCB0ZHMsIG1hcmdpbkRpdiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRpdlJlc2V0ID0gInBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtk
aXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjsiLAotICAgICAgICAgICAgICAgICAgICAgICAg
Ym9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoICFib2R5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0
dXJuIGZvciBmcmFtZXNldCBkb2NzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJvZHkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAg
ICAgICBjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9ICJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6
MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOjFweCI7
Ci0gICAgICAgICAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUoIGNvbnRhaW5lciwgYm9keS5maXJz
dENoaWxkICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIHRlc3QgZWxlbWVu
dAotICAgICAgICAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwot
ICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBDaGVjayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hl
aWdodCB3aGVuIHRoZXkgYXJlIHNldAotICAgICAgICAgICAgICAgIC8vIHRvIGRpc3BsYXk6bm9u
ZSBhbmQgdGhlcmUgYXJlIHN0aWxsIG90aGVyIHZpc2libGUgdGFibGUgY2VsbHMgaW4gYQotICAg
ICAgICAgICAgICAgIC8vIHRhYmxlIHJvdzsgaWYgc28sIG9mZnNldFdpZHRoL0hlaWdodCBhcmUg
bm90IHJlbGlhYmxlIGZvciB1c2Ugd2hlbgotICAgICAgICAgICAgICAgIC8vIGRldGVybWluaW5n
IGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5IHVzaW5nCi0gICAgICAgICAg
ICAgICAgLy8gZGlzcGxheTpub25lIChpdCBpcyBzdGlsbCBzYWZlIHRvIHVzZSBvZmZzZXRzIGlm
IGEgcGFyZW50IGVsZW1lbnQgaXMKLSAgICAgICAgICAgICAgICAvLyBoaWRkZW47IGRvbiBzYWZl
dHkgZ29nZ2xlcyBhbmQgc2VlIGJ1ZyAjNDUxMiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCi0gICAg
ICAgICAgICAgICAgLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRlc3QpCi0gICAgICAgICAgICAg
ICAgZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwv
dGFibGU+IjsKLSAgICAgICAgICAgICAgICB0ZHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
InRkIik7Ci0gICAgICAgICAgICAgICAgdGRzWyAwIF0uc3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5n
OjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIjsKLSAgICAgICAgICAgICAgICBpc1N1
cHBvcnRlZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7Ci0KLSAgICAgICAgICAg
ICAgICB0ZHNbIDAgXS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0gICAgICAgICAgICAgICAgdGRzWyAx
IF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLQotICAgICAgICAgICAgICAgIC8vIENoZWNrIGlm
IGVtcHR5IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0V2lkdGgvSGVpZ2h0Ci0gICAgICAg
ICAgICAgICAgLy8gKElFIDw9IDggZmFpbCB0aGlzIHRlc3QpCi0gICAgICAgICAgICAgICAgc3Vw
cG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgPSBpc1N1cHBvcnRlZCAmJiAoIHRkc1sgMCBdLm9m
ZnNldEhlaWdodCA9PT0gMCApOwotCi0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgYm94LXNpemlu
ZyBhbmQgbWFyZ2luIGJlaGF2aW9yCi0gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICIi
OwotICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gImJveC1zaXppbmc6Ym9yZGVy
LWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVy
LWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21hcmdp
bi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7Ci0gICAgICAgICAgICAgICAgc3Vw
cG9ydC5ib3hTaXppbmcgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0gNCApOwotICAgICAgICAgICAg
ICAgIHN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgPSAoIGJvZHkub2Zm
c2V0VG9wICE9PSAxICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBOT1RFOiBUbyBhbnkgZnV0dXJl
IG1haW50YWluZXIsIHdlJ3ZlIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlCi0gICAgICAgICAgICAg
ICAgLy8gYmVjYXVzZSBqc2RvbSBvbiBub2RlLmpzIHdpbGwgYnJlYWsgd2l0aG91dCBpdC4KLSAg
ICAgICAgICAgICAgICBpZiAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc3VwcG9ydC5waXhlbFBvc2l0aW9uID0gKCB3aW5kb3cuZ2V0Q29tcHV0
ZWRTdHlsZSggZGl2LCBudWxsICkgfHwge30gKS50b3AgIT09ICIxJSI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlID0gKCB3aW5kb3cuZ2V0Q29tcHV0
ZWRTdHlsZSggZGl2LCBudWxsICkgfHwgeyB3aWR0aDogIjRweCIgfSApLndpZHRoID09PSAiNHB4
IjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGl2IHdpdGggZXhwbGlj
aXQgd2lkdGggYW5kIG5vIG1hcmdpbi1yaWdodCBpbmNvcnJlY3RseQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2Yg
Y29udGFpbmVyLiBGb3IgbW9yZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5mbyBzZWUg
YnVnICMzMzMzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWlscyBpbiBXZWJLaXQgYmVm
b3JlIEZlYiAyMDExIG5pZ2h0bGllcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2ViS2l0
IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFy
Z2luLXJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5EaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkRpdi5z
dHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPSBkaXZSZXNldDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IG1hcmdpbkRpdi5zdHls
ZS53aWR0aCA9ICIwIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5zdHlsZS53aWR0aCA9
ICIxcHgiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBtYXJnaW5E
aXYgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdo
dCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwYXJzZUZsb2F0KCAoIHdpbmRv
dy5nZXRDb21wdXRlZFN0eWxlKCBtYXJnaW5EaXYsIG51bGwgKSB8fCB7fSApLm1hcmdpblJpZ2h0
ICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZGl2
LnN0eWxlLnpvb20gIT09ICJ1bmRlZmluZWQiICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5l
LWJsb2NrCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50cyB3aGVuIHNldHRpbmcg
dGhlaXIgZGlzcGxheSB0byAnaW5saW5lJyBhbmQgZ2l2aW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGVtIGxheW91dAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gKElFIDwgOCBk
b2VzIHRoaXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIiI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IGRpdlJlc2V0ICsgIndp
ZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gKCBkaXYub2Zmc2V0
V2lkdGggPT09IDMgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZWxl
bWVudHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdyYXAgdGhlaXIgY2hpbGRyZW4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIChJRSA2IGRvZXMgdGhpcykKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRp
di5zdHlsZS5vdmVyZmxvdyA9ICJ2aXNpYmxlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRp
di5pbm5lckhUTUwgPSAiPGRpdj48L2Rpdj4iOwotICAgICAgICAgICAgICAgICAgICAgICAgZGl2
LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiNXB4IjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdpZHRoICE9PSAzICk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56b29tID0gMTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBOdWxsIGVsZW1lbnRzIHRvIGF2b2lk
IGxlYWtzIGluIElFCi0gICAgICAgICAgICAgICAgYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVy
ICk7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyID0gZGl2ID0gdGRzID0gbWFyZ2luRGl2ID0g
bnVsbDsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gTnVsbCBlbGVtZW50cyB0byBhdm9pZCBs
ZWFrcyBpbiBJRQotICAgICAgICBmcmFnbWVudC5yZW1vdmVDaGlsZCggZGl2ICk7Ci0gICAgICAg
IGFsbCA9IGEgPSBzZWxlY3QgPSBvcHQgPSBpbnB1dCA9IGZyYWdtZW50ID0gZGl2ID0gbnVsbDsK
LQotICAgICAgICByZXR1cm4gc3VwcG9ydDsKLX0pKCk7Ci12YXIgcmJyYWNlID0gLyg/Olx7W1xz
XFNdKlx9fFxbW1xzXFNdKlxdKSQvLAotICAgICAgICBybXVsdGlEYXNoID0gLyhbQS1aXSkvZzsK
LQotalF1ZXJ5LmV4dGVuZCh7Ci0gICAgICAgIGNhY2hlOiB7fSwKLQotICAgICAgICBkZWxldGVk
SWRzOiBbXSwKLQotICAgICAgICAvLyBSZW1vdmUgYXQgbmV4dCBtYWpvciByZWxlYXNlICgxLjkv
Mi4wKQotICAgICAgICB1dWlkOiAwLAotCi0gICAgICAgIC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5
IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQotICAgICAgICAvLyBOb24tZGlnaXRzIHJlbW92ZWQgdG8g
bWF0Y2ggcmlubGluZWpRdWVyeQotICAgICAgICBleHBhbmRvOiAialF1ZXJ5IiArICggalF1ZXJ5
LmZuLmpxdWVyeSArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKLQotICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIGVsZW1lbnRzIHRocm93IHVuY2F0Y2hhYmxlIGV4Y2VwdGlv
bnMgaWYgeW91Ci0gICAgICAgIC8vIGF0dGVtcHQgdG8gYWRkIGV4cGFuZG8gcHJvcGVydGllcyB0
byB0aGVtLgotICAgICAgICBub0RhdGE6IHsKLSAgICAgICAgICAgICAgICAiZW1iZWQiOiB0cnVl
LAotICAgICAgICAgICAgICAgIC8vIEJhbiBhbGwgb2JqZWN0cyBleGNlcHQgZm9yIEZsYXNoICh3
aGljaCBoYW5kbGUgZXhwYW5kb3MpCi0gICAgICAgICAgICAgICAgIm9iamVjdCI6ICJjbHNpZDpE
MjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLAotICAgICAgICAgICAgICAgICJh
cHBsZXQiOiB0cnVlCi0gICAgICAgIH0sCi0KLSAgICAgICAgaGFzRGF0YTogZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2Fj
aGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwotICAg
ICAgICAgICAgICAgIHJldHVybiAhIWVsZW0gJiYgIWlzRW1wdHlEYXRhT2JqZWN0KCBlbGVtICk7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEs
IHB2dCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKLSAgICAgICAgICAgICAgICBpZiAoICFq
UXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciB0aGlzQ2FjaGUs
IHJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFu
ZG8sCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRCeU5hbWUgPSB0eXBlb2YgbmFtZSA9PT0g
InN0cmluZyIsCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaGFuZGxl
IERPTSBub2RlcyBhbmQgSlMgb2JqZWN0cyBkaWZmZXJlbnRseSBiZWNhdXNlIElFNi03Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjYW4ndCBHQyBvYmplY3QgcmVmZXJlbmNlcyBwcm9wZXJs
eSBhY3Jvc3MgdGhlIERPTS1KUyBib3VuZGFyeQotICAgICAgICAgICAgICAgICAgICAgICAgaXNO
b2RlID0gZWxlbS5ub2RlVHlwZSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBE
T00gbm9kZXMgbmVlZCB0aGUgZ2xvYmFsIGpRdWVyeSBjYWNoZTsgSlMgb2JqZWN0IGRhdGEgaXMK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBvYmpl
Y3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT25seSBkZWZpbmluZyBhbiBJRCBmb3IgSlMgb2JqZWN0cyBpZiBpdHMgY2Fj
aGUgYWxyZWFkeSBleGlzdHMgYWxsb3dzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
Y29kZSB0byBzaG9ydGN1dCBvbiB0aGUgc2FtZSBwYXRoIGFzIGEgRE9NIG5vZGUgd2l0aCBubyBj
YWNoZQotICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBpbnRlcm5h
bEtleSBdIDogZWxlbVsgaW50ZXJuYWxLZXkgXSAmJiBpbnRlcm5hbEtleTsKLQotICAgICAgICAg
ICAgICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRvIHdoZW4g
dHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCi0gICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRoYXQg
aGFzIG5vIGRhdGEgYXQgYWxsCi0gICAgICAgICAgICAgICAgaWYgKCAoIWlkIHx8ICFjYWNoZVtp
ZF0gfHwgKCFwdnQgJiYgIWNhY2hlW2lkXS5kYXRhKSkgJiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09
IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoICFpZCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgYSBuZXcgdW5pcXVlIElEIGZvciBlYWNo
IGVsZW1lbnQgc2luY2UgdGhlaXIgZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5k
cyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlz
Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgaW50ZXJuYWxL
ZXkgXSA9IGlkID0galF1ZXJ5LmRlbGV0ZWRJZHMucG9wKCkgfHwgalF1ZXJ5Lmd1aWQrKzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlkID0gaW50ZXJuYWxLZXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCAhY2FjaGVbIGlkIF0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9IHt9OwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5IG1ldGFkYXRhIG9uIHBsYWluIEpT
IG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBz
ZXJpYWxpemVkIHVzaW5nIEpTT04uc3RyaW5naWZ5Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFpc05vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBp
ZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFuIG9iamVjdCBjYW4gYmUgcGFz
c2VkIHRvIGpRdWVyeS5kYXRhIGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFpcjsgdGhpcyBnZXRz
Ci0gICAgICAgICAgICAgICAgLy8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGlu
ZyBjYWNoZQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIG5hbWUgPT09ICJvYmplY3QiIHx8
IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBwdnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBd
ID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0sIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBp
ZCBdLmRhdGEgPSBqUXVlcnkuZXh0ZW5kKCBjYWNoZVsgaWQgXS5kYXRhLCBuYW1lICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGhpc0NhY2hlID0gY2FjaGVbIGlkIF07Ci0KLSAgICAgICAgICAgICAgICAvLyBqUXVlcnkg
ZGF0YSgpIGlzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVjdCBpbnNpZGUgdGhlIG9iamVjdCdz
IGludGVybmFsIGRhdGEKLSAgICAgICAgICAgICAgICAvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9p
ZCBrZXkgY29sbGlzaW9ucyBiZXR3ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAot
ICAgICAgICAgICAgICAgIC8vIGRhdGEuCi0gICAgICAgICAgICAgICAgaWYgKCAhcHZ0ICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGhpc0NhY2hlLmRhdGEgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNDYWNoZS5kYXRhID0ge307Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNDYWNoZSA9IHRo
aXNDYWNoZS5kYXRhOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgg
ZGF0YSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hl
WyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGJvdGggY29udmVydGVkLXRvLWNhbWVsIGFu
ZCBub24tY29udmVydGVkIGRhdGEgcHJvcGVydHkgbmFtZXMKLSAgICAgICAgICAgICAgICAvLyBJ
ZiBhIGRhdGEgcHJvcGVydHkgd2FzIHNwZWNpZmllZAotICAgICAgICAgICAgICAgIGlmICggZ2V0
QnlOYW1lICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBUcnkgdG8gZmlu
ZCBhcy1pcyBwcm9wZXJ0eSBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlz
Q2FjaGVbIG5hbWUgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVzdCBmb3IgbnVs
bHx1bmRlZmluZWQgcHJvcGVydHkgZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBy
ZXQgPT0gbnVsbCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkg
dG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfSwKLQotICAgICAgICByZW1vdmVE
YXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkg
ewotICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdmFyIHRoaXNDYWNoZSwgaSwgbCwKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBqUXVlcnku
ZXhwYW5kbzsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgbm8gY2Fj
aGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0LCB0aGVyZSBpcyBubwotICAgICAgICAgICAgICAgIC8v
IHB1cnBvc2UgaW4gY29udGludWluZwotICAgICAgICAgICAgICAgIGlmICggIWNhY2hlWyBpZCBd
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICggbmFtZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF0gOiBjYWNoZVsgaWQgXS5kYXRhOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNDYWNoZSApIHsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBz
dHJpbmcgbmFtZXMgZm9yIGRhdGEga2V5cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFqUXVlcnkuaXNBcnJheSggbmFtZSApICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBzdHJpbmcgYXMgYSBrZXkgYmVmb3JlIGFu
eSBtYW5pcHVsYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5hbWUgaW4gdGhpc0NhY2hlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9IFsgbmFtZSBdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBjYW1lbCBjYXNlZCB2ZXJzaW9uIGJ5
IHNwYWNlcyB1bmxlc3MgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENh
c2UoIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBbIG5hbWUgXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBu
YW1lLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBuYW1lLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc0NhY2hlWyBu
YW1lW2ldIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIGxlZnQgaW4gdGhl
IGNhY2hlLCB3ZSB3YW50IHRvIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIHB2dCA/IGlzRW1wdHlEYXRhT2Jq
ZWN0IDogalF1ZXJ5LmlzRW1wdHlPYmplY3QgKSggdGhpc0NhY2hlICkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9y
bWF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKCAhcHZ0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdLmRhdGE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGludGVybmFsIGRh
dGEgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYWQgYmVlbiB0aGUgb25seSB0
aGluZyBsZWZ0IGluIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0
YU9iamVjdCggY2FjaGVbIGlkIF0gKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIERlc3Ryb3kgdGhlIGNhY2hlCi0gICAgICAgICAgICAgICAg
aWYgKCBpc05vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRh
KCBbIGVsZW0gXSwgdHJ1ZSApOwotCi0gICAgICAgICAgICAgICAgLy8gVXNlIGRlbGV0ZSB3aGVu
IHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3IgYGNhY2hlYCBpcyBub3QgYSB3aW5kb3cgcGVyIGlz
V2luZG93ICgjMTAwODApCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LnN1cHBv
cnQuZGVsZXRlRXhwYW5kbyB8fCBjYWNoZSAhPSBjYWNoZS53aW5kb3cgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbIGlkIF07Ci0KLSAgICAgICAgICAgICAgICAvLyBX
aGVuIGFsbCBlbHNlIGZhaWxzLCBudWxsCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgotICAgICAg
ICBfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5kYXRhKCBlbGVtLCBuYW1lLCBkYXRhLCB0cnVlICk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUgY2Fu
IGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCi0gICAgICAgIGFjY2VwdERhdGE6IGZ1bmN0aW9uKCBl
bGVtICkgewotICAgICAgICAgICAgICAgIHZhciBub0RhdGEgPSBlbGVtLm5vZGVOYW1lICYmIGpR
dWVyeS5ub0RhdGFbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwotCi0gICAgICAgICAg
ICAgICAgLy8gbm9kZXMgYWNjZXB0IGRhdGEgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQ7IHJl
amVjdGlvbiBjYW4gYmUgY29uZGl0aW9uYWwKLSAgICAgICAgICAgICAgICByZXR1cm4gIW5vRGF0
YSB8fCBub0RhdGEgIT09IHRydWUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKSA9PT0g
bm9EYXRhOwotICAgICAgICB9Ci19KTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgICAgIGRh
dGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewotICAgICAgICAgICAgICAgIHZhciBwYXJ0cywg
cGFydCwgYXR0ciwgbmFtZSwgbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlz
WzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIC8vIEdldHMgYWxsIHZhbHVlcwot
ICAgICAgICAgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhID0galF1ZXJ5LmRhdGEoIGVsZW0gKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWpRdWVyeS5fZGF0YSgg
ZWxlbSwgInBhcnNlZEF0dHJzIiApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dHIgPSBlbGVtLmF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggbCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsgaSsrICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0
dHJbaV0ubmFtZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2Ft
ZWxDYXNlKCBuYW1lLnN1YnN0cmluZyg1KSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRh
WyBuYW1lIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFy
c2VkQXR0cnMiLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2V0cyBtdWx0
aXBsZSB2YWx1ZXMKLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmplY3Qi
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIHRoaXMsIGtl
eSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcGFydHMgPSBrZXkuc3BsaXQoICIuIiwgMiApOwotICAgICAgICAgICAg
ICAgIHBhcnRzWzFdID0gcGFydHNbMV0gPyAiLiIgKyBwYXJ0c1sxXSA6ICIiOwotICAgICAgICAg
ICAgICAgIHBhcnQgPSBwYXJ0c1sxXSArICIhIjsKLQotICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMudHJpZ2dlckhhbmRsZXIoICJnZXREYXRhIiArIHBh
cnQsIFsgcGFydHNbMF0gXSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRyeSB0byBmZXRjaCBhbnkgaW50ZXJuYWxseSBzdG9yZWQgZGF0YSBmaXJzdAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnku
ZGF0YSggZWxlbSwga2V5ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSggcGFydHNbMF0gKSA6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNbMV0gPSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJIYW5kbGVyKCAic2V0RGF0YSIgKyBwYXJ0
LCBwYXJ0cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSgg
dGhpcywga2V5LCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnRyaWdnZXJIYW5kbGVyKCAiY2hhbmdlRGF0YSIgKyBwYXJ0LCBwYXJ0cyApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3Vt
ZW50cy5sZW5ndGggPiAxLCBudWxsLCBmYWxzZSApOwotICAgICAgICB9LAotCi0gICAgICAgIHJl
bW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVE
YXRhKCB0aGlzLCBrZXkgKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotfSk7Ci0K
LWZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7Ci0gICAgICAgIC8vIElmIG5v
dGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkKLSAgICAgICAgLy8g
ZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlCi0gICAgICAgIGlmICggZGF0YSA9
PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0KLSAgICAgICAgICAgICAg
ICB2YXIgbmFtZSA9ICJkYXRhLSIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0kMSIgKS50
b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgICAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRl
KCBuYW1lICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5n
IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAidHJ1ZSIgPyB0cnVlIDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gIm51bGwiID8gbnVsbCA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBp
dCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICtkYXRhICsgIiIgPT09IGRhdGEgPyArZGF0YSA6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJicmFjZS50ZXN0KCBkYXRhICkgPyBqUXVlcnkucGFyc2VKU09OKCBkYXRhICkg
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoKCBlICkge30KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVy
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggZWxlbSwga2V5LCBkYXRhICk7
Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gZGF0YTsKLX0KLQotLy8gY2hlY2tzIGEgY2FjaGUgb2JqZWN0IGZvciBlbXB0aW5lc3MK
LWZ1bmN0aW9uIGlzRW1wdHlEYXRhT2JqZWN0KCBvYmogKSB7Ci0gICAgICAgIHZhciBuYW1lOwot
ICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLQotICAgICAgICAgICAgICAgIC8vIGlmIHRo
ZSBwdWJsaWMgZGF0YSBvYmplY3QgaXMgZW1wdHksIHRoZSBwcml2YXRlIGlzIHN0aWxsIGVtcHR5
Ci0gICAgICAgICAgICAgICAgaWYgKCBuYW1lID09PSAiZGF0YSIgJiYgalF1ZXJ5LmlzRW1wdHlP
YmplY3QoIG9ialtuYW1lXSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggbmFtZSAhPT0gInRvSlNP
TiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci19Ci1qUXVlcnkuZXh0
ZW5kKHsKLSAgICAgICAgcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgewotICAg
ICAgICAgICAgICAgIHZhciBxdWV1ZTsKLQotICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAoIHR5cGUgfHwgImZ4IiApICsgInF1ZXVl
IjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCB0
eXBlICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWVkIHVwIGRlcXVldWUgYnkg
Z2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZGF0YSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoZGF0YSkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5
cGUsIGpRdWVyeS5tYWtlQXJyYXkoZGF0YSkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBx
dWV1ZS5wdXNoKCBkYXRhICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBx
dWV1ZSB8fCBbXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGVx
dWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgdHlwZSA9IHR5
cGUgfHwgImZ4IjsKLQotICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSgg
ZWxlbSwgdHlwZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMZW5ndGggPSBxdWV1
ZS5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwg
dHlwZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGlu
ZWwKLSAgICAgICAgICAgICAgICBpZiAoIGZuID09PSAiaW5wcm9ncmVzcyIgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydExlbmd0aC0tOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICggZm4gKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIHByb2dyZXNz
IHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcXVldWUudW5zaGlmdCggImlucHJvZ3Jlc3MiICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIHVwIHRoZSBsYXN0IHF1
ZXVlIHN0b3AgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBob29rcy5z
dG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgZm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3Mg
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoICFzdGFydExlbmd0
aCAmJiBob29rcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzLmVtcHR5LmZpcmUo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gbm90IGludGVu
ZGVkIGZvciBwdWJsaWMgY29uc3VtcHRpb24gLSBnZW5lcmF0ZXMgYSBxdWV1ZUhvb2tzIG9iamVj
dCwgb3IgcmV0dXJucyB0aGUgY3VycmVudCBvbmUKLSAgICAgICAgX3F1ZXVlSG9va3M6IGZ1bmN0
aW9uKCBlbGVtLCB0eXBlICkgewotICAgICAgICAgICAgICAgIHZhciBrZXkgPSB0eXBlICsgInF1
ZXVlSG9va3MiOwotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuX2RhdGEoIGVsZW0sIGtl
eSApIHx8IGpRdWVyeS5fZGF0YSggZWxlbSwga2V5LCB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVt
LCB0eXBlICsgInF1ZXVlIiwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9KQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci19KTsKLQotalF1ZXJ5
LmZuLmV4dGVuZCh7Ci0gICAgICAgIHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKLSAg
ICAgICAgICAgICAgICB2YXIgc2V0dGVyID0gMjsKLQotICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9
IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gImZ4IjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNldHRlci0tOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbMF0sIHR5cGUgKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID8KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMgOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
cXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5
cGUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJm
eCIgJiYgcXVldWVbMF0gIT09ICJpbnByb2dyZXNzIiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgfSwKLSAgICAgICAgZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0sCi0gICAgICAgIC8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50
IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi4KLSAgICAgICAgLy8gaHR0cDovL2JsaW5kc2lnbmFs
cy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LwotICAgICAgICBkZWxheTogZnVu
Y3Rpb24oIHRpbWUsIHR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgdGltZSA9IGpRdWVyeS5meCA/
IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKLSAgICAgICAgICAgICAg
ICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVl
dWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dCggbmV4dCwgdGltZSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0gICAgICAgIGNsZWFy
UXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1
ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7Ci0gICAgICAgIH0sCi0gICAgICAgIC8vIEdldCBhIHBy
b21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKLSAgICAgICAgLy8g
YXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpCi0gICAgICAgIHByb21pc2U6
IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRtcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVyID0galF1ZXJ5LkRlZmVycmVkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50
cyA9IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gdGhpcy5sZW5ndGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXNvbHZlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggISggLS1jb3VudCApICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBl
bGVtZW50cyBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9
PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IHR5cGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0gICAgICAgICAgICAgICAg
d2hpbGUoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGpRdWVyeS5fZGF0
YSggZWxlbWVudHNbIGkgXSwgdHlwZSArICJxdWV1ZUhvb2tzIiApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAu
ZW1wdHkuYWRkKCByZXNvbHZlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7Ci0gICAgICAgIH0KLX0pOwotdmFyIG5vZGVIb29r
LCBib29sSG9vaywgZml4U3BlY2lmaWVkLAotICAgICAgICByY2xhc3MgPSAvW1x0XHJcbl0vZywK
LSAgICAgICAgcnJldHVybiA9IC9cci9nLAotICAgICAgICBydHlwZSA9IC9eKD86YnV0dG9ufGlu
cHV0KSQvaSwKLSAgICAgICAgcmZvY3VzYWJsZSA9IC9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxz
ZWxlY3R8dGV4dGFyZWEpJC9pLAotICAgICAgICByY2xpY2thYmxlID0gL15hKD86cmVhfCkkL2ks
Ci0gICAgICAgIHJib29sZWFuID0gL14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tl
ZHxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRv
bmx5fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3RlZCkkL2ksCi0gICAgICAgIGdldFNldEF0dHJpYnV0
ZSA9IGpRdWVyeS5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7
Ci0gICAgICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBh
cmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgICAgICB9LAotCi0gICAgICAgIHJlbW92ZUF0dHI6
IGZ1bmN0aW9uKCBuYW1lICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggdGhp
cywgbmFtZSApOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAgIHBy
b3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVu
Z3RoID4gMSApOwotICAgICAgICB9LAotCi0gICAgICAgIHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBu
YW1lICkgewotICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8
IG5hbWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeS9jYXRjaCBoYW5kbGVzIGNhc2VzIHdoZXJlIElF
IGJhbGtzIChzdWNoIGFzIHJlbW92aW5nIGEgcHJvcGVydHkgb24gd2luZG93KQotICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
c1sgbmFtZSBdID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpc1sgbmFtZSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSAp
IHt9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYWRkQ2xhc3M6
IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lcywgaSwg
bCwgZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldENsYXNzLCBjLCBjbDsKLQotICAg
ICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUu
Y2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggdmFsdWUgJiYg
dHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzTmFtZXMgPSB2YWx1ZS5zcGxpdCggY29yZV9yc3BhY2UgKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbIGkgXTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxlbS5jbGFzc05h
bWUgJiYgY2xhc3NOYW1lcy5sZW5ndGggPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IHZhbHVlOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENsYXNzID0gIiAiICsgZWxl
bS5jbGFzc05hbWUgKyAiICI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7
IGMrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBzZXRDbGFzcy5pbmRleE9mKCAiICIgKyBjbGFzc05hbWVzWyBjIF0gKyAi
ICIgKSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgIiAiOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFt
ZSA9IGpRdWVyeS50cmltKCBzZXRDbGFzcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlv
biggdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlbW92ZXMsIGNsYXNzTmFtZSwgZWxl
bSwgYywgY2wsIGksIGw7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbiggaiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0
aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKCAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgfHwgdmFs
dWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZXMgPSAo
IHZhbHVlIHx8ICIiICkuc3BsaXQoIGNvcmVfcnNwYWNlICk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVtLmNs
YXNzTmFtZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzTmFtZSA9ICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSggcmNsYXNzLCAi
ICIgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvb3Ag
b3ZlciBlYWNoIGl0ZW0gaW4gdGhlIHJlbW92YWwgbGlzdAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IHJlbW92ZXMubGVuZ3RoOyBjIDwg
Y2w7IGMrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlbW92ZSB1bnRpbCB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbW92ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggY2xhc3NOYW1l
LmluZGV4T2YoIiAiICsgcmVtb3Zlc1sgYyBdICsgIiAiKSA+PSAwICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBj
bGFzc05hbWUucmVwbGFjZSggIiAiICsgcmVtb3Zlc1sgYyBdICsgIiAiICwgIiAiICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWUgPyBqUXVlcnkudHJpbSggY2xh
c3NOYW1lICkgOiAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlv
biggdmFsdWUsIHN0YXRlVmFsICkgewotICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9m
IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgaXNCb29sID0gdHlwZW9mIHN0YXRlVmFs
ID09PSAiYm9vbGVhbiI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbiggaSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0
aGlzICkudG9nZ2xlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5jbGFzc05hbWUsIHN0
YXRlVmFsKSwgc3RhdGVWYWwgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFz
cyBuYW1lcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xhc3NOYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlVmFsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1
ZS5zcGxpdCggY29yZV9yc3BhY2UgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2
ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05h
bWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmWyBzdGF0
ZSA/ICJhZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiIF0oIGNsYXNzTmFtZSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09ICJib29sZWFuIiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmNsYXNzTmFtZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZSBjbGFzc05hbWUg
aWYgc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9k
YXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMuY2xhc3NOYW1lICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0b2dnbGUgd2hvbGUgY2xhc3NOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID8g
IiIgOiBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiApIHx8ICIiOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0g
ICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsgIiAiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGg7Ci0g
ICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYmICgiICIgKyB0aGlzW2ldLmNsYXNz
TmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5kZXhPZiggY2xhc3NOYW1lICkgPj0g
MCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9LAotCi0gICAgICAgIHZhbDogZnVuY3Rpb24oIHZh
bHVlICkgewotICAgICAgICAgICAgICAgIHZhciBob29rcywgcmV0LCBpc0Z1bmN0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbMF07Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoICFhcmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS52
YWxIb29rc1sgZWxlbS50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhv
b2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIg
KSkgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldCA9PT0gInN0cmluZyIg
PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBtb3N0
IGNvbW1vbiBzdHJpbmcgY2FzZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXQucmVwbGFjZShycmV0dXJuLCAiIikgOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVm
IG9yIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
PSBudWxsID8gIiIgOiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiA9
IGpRdWVyeSh0aGlzKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVU
eXBlICE9PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
aXNGdW5jdGlvbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFs
dWUuY2FsbCggdGhpcywgaSwgc2VsZi52YWwoKSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRy
ZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbCA9PSBudWxsICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWwgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWwgKz0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCA9IGpRdWVyeS5tYXAodmFsLCBmdW5jdGlvbiAoIHZhbHVlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIg
OiB2YWx1ZSArICIiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBq
UXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHNl
dCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tzKSB8fCBob29r
cy5zZXQoIHRoaXMsIHZhbCwgInZhbHVlIiApID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWw7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLX0pOwotCi1qUXVlcnku
ZXh0ZW5kKHsKLSAgICAgICAgdmFsSG9va3M6IHsKLSAgICAgICAgICAgICAgICBvcHRpb246IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMudmFsdWUgaXMgdW5kZWZpbmVk
IGluIEJsYWNrYmVycnkgNC43IGJ1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB1c2VzIC52YWx1ZS4gU2VlICM2OTMyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB2YWwgPSBlbGVtLmF0dHJpYnV0ZXMudmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhdmFsIHx8IHZhbC5zcGVjaWZpZWQgPyBlbGVtLnZhbHVlIDogZWxl
bS50ZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sCi0g
ICAgICAgICAgICAgICAgc2VsZWN0OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFs
dWUsIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25zID0gZWxlbS5vcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9uZSA9IGVsZW0udHlwZSA9PT0gInNlbGVjdC1vbmUiIHx8IGluZGV4
IDwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBv
bmUgPyBudWxsIDogW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGluZGV4IDwgMCA/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXggOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lID8gaW5kZXggOiAwOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVk
IG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbWF4
OyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
ID0gb3B0aW9uc1sgaSBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gb2xkSUUgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1
NTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIG9wdGlv
bi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJldHVybiBvcHRpb25zIHRo
YXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9y
dC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJk
aXNhYmxlZCIpID09PSBudWxsICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwg
IWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQg
dGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aS1TZWxl
Y3RzIHJldHVybiBhbiBhcnJheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rp
b24oIGVsZW0sIHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkoZWxlbSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVk
ID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSh0aGlzKS52YWwoKSwgdmFsdWVzICkgPj0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBVbnVzZWQgaW4gMS44LCBsZWZ0IGluIHNvIGF0
dHJGbi1zdGFiYmVycyB3b24ndCBkaWU7IHJlbW92ZSBpbiAxLjkKLSAgICAgICAgYXR0ckZuOiB7
fSwKLQotICAgICAgICBhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIHBhc3MgKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHJldCwgaG9va3MsIG5vdHhtbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgICAgICAgICAgICAgIC8vIGRv
bid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9k
ZXMKLSAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09
PSA4IHx8IG5UeXBlID09PSAyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggcGFzcyAmJiBqUXVlcnku
aXNGdW5jdGlvbiggalF1ZXJ5LmZuWyBuYW1lIF0gKSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkoIGVsZW0gKVsgbmFtZSBdKCB2YWx1ZSApOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1
dGVzIGFyZSBub3Qgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS5n
ZXRBdHRyaWJ1dGUgPT09ICJ1bmRlZmluZWQiICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIG5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNY
TUxEb2MoIGVsZW0gKTsKLQotICAgICAgICAgICAgICAgIC8vIEFsbCBhdHRyaWJ1dGVzIGFyZSBs
b3dlcmNhc2UKLSAgICAgICAgICAgICAgICAvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBp
cyBkZWZpbmVkCi0gICAgICAgICAgICAgICAgaWYgKCBub3R4bWwgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gfHwgKCByYm9vbGVhbi50ZXN0
KCBuYW1lICkgPyBib29sSG9vayA6IG5vZGVIb29rICk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSBudWxsICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmIG5vdHhtbCAmJiAocmV0ID0g
aG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNl
dEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyAiIiApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiBub3R4bWwg
JiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSAp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyBy
ZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuZGVmaW5lZCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcmVtb3ZlQXR0cjogZnVuY3Rp
b24oIGVsZW0sIHZhbHVlICkgewotICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSwgYXR0ck5h
bWVzLCBuYW1lLCBpc0Jvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKLQotICAg
ICAgICAgICAgICAgIGlmICggdmFsdWUgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWVzID0gdmFsdWUuc3BsaXQoIGNvcmVfcnNwYWNl
ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGF0dHJOYW1lcy5sZW5n
dGg7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJO
YW1lc1sgaSBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmFtZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IGpR
dWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc0Jvb2wgPSByYm9vbGVhbi50ZXN0KCBuYW1lICk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWUgIzk2OTkgZm9yIGV4cGxhbmF0
aW9uIG9mIHRoaXMgYXBwcm9hY2ggKHNldHRpbmcgZmlyc3QsIHRoZW4gcmVtb3ZhbCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgZG8gdGhpcyBmb3Ig
Ym9vbGVhbiBhdHRyaWJ1dGVzIChzZWUgIzEwODcwKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWlzQm9vbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRyKCBlbGVtLCBuYW1lLCAiIiApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggZ2V0U2V0QXR0
cmlidXRlID8gbmFtZSA6IHByb3BOYW1lICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBmYWxzZSBmb3Ig
Ym9vbGVhbiBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBpc0Jvb2wgJiYgcHJvcE5hbWUgaW4gZWxlbSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYXR0ckhvb2tzOiB7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0
IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJlIGNoYW5nZWQgKHNpbmNlIGl0IGNhdXNlcyBw
cm9ibGVtcyBpbiBJRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBydHlw
ZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5wYXJlbnROb2RlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggInR5cGUgcHJvcGVy
dHkgY2FuJ3QgYmUgY2hhbmdlZCIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRp
byIgJiYgalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIHR5cGUgb24gYSByYWRpbyBi
dXR0b24gYWZ0ZXIgdGhlIHZhbHVlIHJlc2V0cyB0aGUgdmFsdWUgaW4gSUU2LTkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB2YWx1ZSB0byBpdCdzIGRl
ZmF1bHQgaW4gY2FzZSB0eXBlIGlzIHNldCBhZnRlciB2YWx1ZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGVsZW1lbnQgY3JlYXRpb24KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gZWxlbS52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJp
YnV0ZSggInR5cGUiLCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdmFsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAv
LyBVc2UgdGhlIHZhbHVlIHByb3BlcnR5IGZvciBiYWNrIGNvbXBhdAotICAgICAgICAgICAgICAg
IC8vIFVzZSB0aGUgbm9kZUhvb2sgZm9yIGJ1dHRvbiBlbGVtZW50cyBpbiBJRTYvNyAoIzE5NTQp
Ci0gICAgICAgICAgICAgICAgdmFsdWU6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldDog
ZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSG9vay5n
ZXQoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSBpbiBlbGVtID8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlIDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZh
bHVlLCBuYW1lICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGVI
b29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUhvb2suc2V0KCBlbGVtLCB2
YWx1ZSwgbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0IHNldEF0
dHJpYnV0ZSBpcyBhbHNvIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS52YWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBwcm9wRml4OiB7Ci0gICAgICAgICAgICAgICAg
dGFiaW5kZXg6ICJ0YWJJbmRleCIsCi0gICAgICAgICAgICAgICAgcmVhZG9ubHk6ICJyZWFkT25s
eSIsCi0gICAgICAgICAgICAgICAgImZvciI6ICJodG1sRm9yIiwKLSAgICAgICAgICAgICAgICAi
Y2xhc3MiOiAiY2xhc3NOYW1lIiwKLSAgICAgICAgICAgICAgICBtYXhsZW5ndGg6ICJtYXhMZW5n
dGgiLAotICAgICAgICAgICAgICAgIGNlbGxzcGFjaW5nOiAiY2VsbFNwYWNpbmciLAotICAgICAg
ICAgICAgICAgIGNlbGxwYWRkaW5nOiAiY2VsbFBhZGRpbmciLAotICAgICAgICAgICAgICAgIHJv
d3NwYW46ICJyb3dTcGFuIiwKLSAgICAgICAgICAgICAgICBjb2xzcGFuOiAiY29sU3BhbiIsCi0g
ICAgICAgICAgICAgICAgdXNlbWFwOiAidXNlTWFwIiwKLSAgICAgICAgICAgICAgICBmcmFtZWJv
cmRlcjogImZyYW1lQm9yZGVyIiwKLSAgICAgICAgICAgICAgICBjb250ZW50ZWRpdGFibGU6ICJj
b250ZW50RWRpdGFibGUiCi0gICAgICAgIH0sCi0KLSAgICAgICAgcHJvcDogZnVuY3Rpb24oIGVs
ZW0sIG5hbWUsIHZhbHVlICkgewotICAgICAgICAgICAgICAgIHZhciByZXQsIGhvb2tzLCBub3R4
bWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBkb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVu
dCBhbmQgYXR0cmlidXRlIG5vZGVzCi0gICAgICAgICAgICAgICAgaWYgKCAhZWxlbSB8fCBuVHlw
ZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBu
b3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIG5vdHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZp
eCBuYW1lIGFuZCBhdHRhY2ggaG9va3MKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBq
UXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBo
b29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5z
ZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoIGVsZW1b
IG5hbWUgXSA9IHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAi
Z2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxs
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbVsgbmFtZSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBwcm9wSG9va3M6IHsKLSAgICAg
ICAgICAgICAgICB0YWJJbmRleDogewotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5j
dGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxlbS50
YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBo
YXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0
aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlTm9kZSA9IGVsZW0uZ2V0QXR0
cmlidXRlTm9kZSgidGFiaW5kZXgiKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoIGF0dHJpYnV0ZU5v
ZGUudmFsdWUsIDEwICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8IHJjbGlja2FibGUudGVzdCggZWxl
bS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLX0pOwotCi0vLyBIb29rIGZvciBib29sZWFuIGF0
dHJpYnV0ZXMKLWJvb2xIb29rID0gewotICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1l
ICkgewotICAgICAgICAgICAgICAgIC8vIEFsaWduIGJvb2xlYW4gYXR0cmlidXRlcyB3aXRoIGNv
cnJlc3BvbmRpbmcgcHJvcGVydGllcwotICAgICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBh
dHRyaWJ1dGUgcHJlc2VuY2Ugd2hlcmUgc29tZSBib29sZWFucyBhcmUgbm90IHN1cHBvcnRlZAot
ICAgICAgICAgICAgICAgIHZhciBhdHRyTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5ID0galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gcHJvcGVydHkgPT09IHRydWUgfHwgdHlwZW9mIHByb3BlcnR5ICE9PSAiYm9vbGVhbiIgJiYg
KCBhdHRyTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSApICYmIGF0dHJOb2RlLm5v
ZGVWYWx1ZSAhPT0gZmFsc2UgPwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS50b0xvd2Vy
Q2FzZSgpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKLSAgICAgICAgfSwK
LSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHByb3BOYW1lOwotICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IGZhbHNl
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRl
cyB3aGVuIHNldCB0byBmYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92
ZUF0dHIoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgdHJ1ZSBzaW5jZSB3ZSBrbm93IGF0IHRoaXMgcG9p
bnQgaXQncyB0eXBlIGJvb2xlYW4gYW5kIG5vdCBmYWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gU2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUgc2FtZSBuYW1lIGFuZCBzZXQgdGhl
IERPTSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBqUXVlcnku
cHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBy
b3BOYW1lIGluIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9u
bHkgc2V0IHRoZSBJREwgc3BlY2lmaWNhbGx5IGlmIGl0IGFscmVhZHkgZXhpc3RzIG9uIHRoZSBl
bGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1lIF0g
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBuYW1lOwotICAgICAgICB9Ci19
OwotCi0vLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcgc29tZSBhdHRyaWJ1
dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQotaWYgKCAhZ2V0U2V0QXR0cmlidXRlICkgewotCi0g
ICAgICAgIGZpeFNwZWNpZmllZCA9IHsKLSAgICAgICAgICAgICAgICBuYW1lOiB0cnVlLAotICAg
ICAgICAgICAgICAgIGlkOiB0cnVlLAotICAgICAgICAgICAgICAgIGNvb3JkczogdHJ1ZQotICAg
ICAgICB9OwotCi0gICAgICAgIC8vIFVzZSB0aGlzIGZvciBhbnkgYXR0cmlidXRlIGluIElFNi83
Ci0gICAgICAgIC8vIFRoaXMgZml4ZXMgYWxtb3N0IGV2ZXJ5IElFNi83IGlzc3VlCi0gICAgICAg
IG5vZGVIb29rID0galF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsKLSAgICAgICAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9k
ZSggbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCAmJiAoIGZpeFNw
ZWNpZmllZFsgbmFtZSBdID8gcmV0LnZhbHVlICE9PSAiIiA6IHJldC5zcGVjaWZpZWQgKSA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC52YWx1ZSA6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBleGlzdGluZyBvciBjcmVhdGUgYSBuZXcgYXR0cmli
dXRlIG5vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJp
YnV0ZU5vZGUoIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJldCApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZG9jdW1lbnQuY3JlYXRlQXR0
cmlidXRlKCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0
QXR0cmlidXRlTm9kZSggcmV0ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKCByZXQudmFsdWUgPSB2YWx1ZSArICIiICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8vIFNldCB3aWR0aCBhbmQgaGVp
Z2h0IHRvIGF1dG8gaW5zdGVhZCBvZiAwIG9uIGVtcHR5IHN0cmluZyggQnVnICM4MTUwICkKLSAg
ICAgICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKLSAgICAgICAgalF1ZXJ5LmVhY2goWyAid2lk
dGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLSAgICAgICAgICAgICAgICBq
UXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tz
WyBuYW1lIF0sIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0s
IHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09
PSAiIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNl
dEF0dHJpYnV0ZSggbmFtZSwgImF1dG8iICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIC8vIFNldCBjb250ZW50ZWRpdGFibGUgdG8gZmFsc2Ugb24gcmVt
b3ZhbHMoIzEwNDI5KQotICAgICAgICAvLyBTZXR0aW5nIHRvIGVtcHR5IHN0cmluZyB0aHJvd3Mg
YW4gZXJyb3IgYXMgYW4gaW52YWxpZCB2YWx1ZQotICAgICAgICBqUXVlcnkuYXR0ckhvb2tzLmNv
bnRlbnRlZGl0YWJsZSA9IHsKLSAgICAgICAgICAgICAgICBnZXQ6IG5vZGVIb29rLmdldCwKLSAg
ICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICIiICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9ICJmYWxzZSI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBu
YW1lICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotfQotCi0KLS8vIFNvbWUgYXR0
cmlidXRlcyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElFCi1pZiAoICFqUXVlcnkuc3VwcG9y
dC5ocmVmTm9ybWFsaXplZCApIHsKLSAgICAgICAgalF1ZXJ5LmVhY2goWyAiaHJlZiIsICJzcmMi
LCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLSAgICAgICAgICAg
ICAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0
ckhvb2tzWyBuYW1lIF0sIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24o
IGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBlbGVt
LmdldEF0dHJpYnV0ZSggbmFtZSwgMiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLX0KLQotaWYgKCAh
alF1ZXJ5LnN1cHBvcnQuc3R5bGUgKSB7Ci0gICAgICAgIGpRdWVyeS5hdHRySG9va3Muc3R5bGUg
PSB7Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJldHVybiB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2YgZW1wdHkgc3Ry
aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gbG93ZXJjYXNlIHNp
bmNlIElFIHVwcGVyY2FzZXMgY3NzIHByb3BlcnR5IG5hbWVzCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCkgfHwgdW5kZWZpbmVk
OwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLnN0eWxl
LmNzc1RleHQgPSB2YWx1ZSArICIiICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Owot
fQotCi0vLyBTYWZhcmkgbWlzLXJlcG9ydHMgdGhlIGRlZmF1bHQgc2VsZWN0ZWQgcHJvcGVydHkg
b2YgYW4gb3B0aW9uCi0vLyBBY2Nlc3NpbmcgdGhlIHBhcmVudCdzIHNlbGVjdGVkSW5kZXggcHJv
cGVydHkgZml4ZXMgaXQKLWlmICggIWpRdWVyeS5zdXBwb3J0Lm9wdFNlbGVjdGVkICkgewotICAg
ICAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnBy
b3BIb29rcy5zZWxlY3RlZCwgewotICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2Rl
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnNlbGVjdGVkSW5kZXg7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaXQgYWxzbyB3b3JrcyB3aXRo
IG9wdGdyb3Vwcywgc2VlICM1NzAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggcGFyZW50LnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9
KTsKLX0KLQotLy8gSUU2LzcgY2FsbCBlbmN0eXBlIGVuY29kaW5nCi1pZiAoICFqUXVlcnkuc3Vw
cG9ydC5lbmN0eXBlICkgewotICAgICAgICBqUXVlcnkucHJvcEZpeC5lbmN0eXBlID0gImVuY29k
aW5nIjsKLX0KLQotLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKLWlmICgg
IWpRdWVyeS5zdXBwb3J0LmNoZWNrT24gKSB7Ci0gICAgICAgIGpRdWVyeS5lYWNoKFsgInJhZGlv
IiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkudmFs
SG9va3NbIHRoaXMgXSA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24o
IGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiAib24iIGlmIGEg
dmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLmdldEF0dHJpYnV0ZSgidmFsdWUiKSA9PT0gbnVsbCA/ICJvbiIgOiBlbGVtLnZh
bHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0pOwotfQotalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1bmN0aW9u
KCkgewotICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpRdWVyeS5leHRlbmQoIGpR
dWVyeS52YWxIb29rc1sgdGhpcyBdLCB7Ci0gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigg
ZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Fy
cmF5KCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1
ZSApID49IDAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH0pOwotfSk7Ci12YXIgcmZvcm1FbGVtcyA9IC9eKD86dGV4dGFyZWF8aW5wdXR8
c2VsZWN0KSQvaSwKLSAgICAgICAgcnR5cGVuYW1lc3BhY2UgPSAvXihbXlwuXSp8KSg/OlwuKC4r
KXwpJC8sCi0gICAgICAgIHJob3ZlckhhY2sgPSAvKD86Xnxccylob3ZlcihcLlxTK3wpXGIvLAot
ICAgICAgICBya2V5RXZlbnQgPSAvXmtleS8sCi0gICAgICAgIHJtb3VzZUV2ZW50ID0gL14oPzpt
b3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLAotICAgICAgICByZm9jdXNNb3JwaCA9IC9eKD86Zm9j
dXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLywKLSAgICAgICAgaG92ZXJIYWNrID0gZnVuY3Rpb24o
IGV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmV2ZW50LnNwZWNpYWwu
aG92ZXIgPyBldmVudHMgOiBldmVudHMucmVwbGFjZSggcmhvdmVySGFjaywgIm1vdXNlZW50ZXIk
MSBtb3VzZWxlYXZlJDEiICk7Ci0gICAgICAgIH07Ci0KLS8qCi0gKiBIZWxwZXIgZnVuY3Rpb25z
IGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2Uu
Ci0gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2Yg
dGhlIGlkZWFzLgotICovCi1qUXVlcnkuZXZlbnQgPSB7Ci0KLSAgICAgICAgYWRkOiBmdW5jdGlv
biggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkgewotCi0gICAgICAgICAg
ICAgICAgdmFyIGVsZW1EYXRhLCBldmVudEhhbmRsZSwgZXZlbnRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdCwgdG5zLCB0eXBlLCBuYW1lc3BhY2VzLCBoYW5kbGVPYmosCi0gICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPYmpJbiwgaGFuZGxlcnMsIHNwZWNpYWw7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQg
bm9kZXMgKGFsbG93IHBsYWluIG9iamVjdHMgdGhvKQotICAgICAgICAgICAgICAgIGlmICggZWxl
bS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICF0eXBlcyB8fCAhaGFu
ZGxlciB8fCAhKGVsZW1EYXRhID0galF1ZXJ5Ll9kYXRhKCBlbGVtICkpICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGll
dSBvZiB0aGUgaGFuZGxlcgotICAgICAgICAgICAgICAgIGlmICggaGFuZGxlci5oYW5kbGVyICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqSW4gPSBoYW5kbGVyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5k
bGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlcgotICAgICAg
ICAgICAgICAgIGlmICggIWhhbmRsZXIuZ3VpZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFp
biBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdAotICAgICAgICAgICAgICAgIGV2ZW50cyA9
IGVsZW1EYXRhLmV2ZW50czsKLSAgICAgICAgICAgICAgICBpZiAoICFldmVudHMgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtRGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5k
bGU7Ci0gICAgICAgICAgICAgICAgaWYgKCAhZXZlbnRIYW5kbGUgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtRGF0YS5oYW5kbGUgPSBldmVudEhhbmRsZSA9IGZ1bmN0aW9uKCBlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIHRoZSBzZWNvbmQg
ZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFz
IHVubG9hZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Yg
alF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAoIWUgfHwgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAh
PT0gZS50eXBlKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBldmVudEhhbmRsZS5lbGVtLCBhcmd1bWVudHMgKSA6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBl
bGVtIGFzIGEgcHJvcGVydHkgb2YgdGhlIGhhbmRsZSBmbiB0byBwcmV2ZW50IGEgbWVtb3J5IGxl
YWsgd2l0aCBJRSBub24tbmF0aXZlIGV2ZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnRIYW5kbGUuZWxlbSA9IGVsZW07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgLy8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZQotICAgICAg
ICAgICAgICAgIC8vIGpRdWVyeSguLi4pLmJpbmQoIm1vdXNlb3ZlciBtb3VzZW91dCIsIGZuKTsK
LSAgICAgICAgICAgICAgICB0eXBlcyA9IGpRdWVyeS50cmltKCBob3ZlckhhY2sodHlwZXMpICku
c3BsaXQoICIgIiApOwotICAgICAgICAgICAgICAgIGZvciAoIHQgPSAwOyB0IDwgdHlwZXMubGVu
Z3RoOyB0KysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRucyA9IHJ0eXBlbmFtZXNw
YWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gdG5zWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9ICggdG5zWzJd
IHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRs
ZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFs
ID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQg
YXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICB0
eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlw
ZSApIHx8IHR5cGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBzcGVjaWFs
IGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNp
YWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVycwot
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCh7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9yaWdUeXBlOiB0bnNbMV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGE6IGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZXI6IGhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWQ6IGhh
bmRsZXIuZ3VpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6IHNl
bGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkc0NvbnRleHQ6IHNl
bGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciAp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZXMu
am9pbigiLiIpCi0gICAgICAgICAgICAgICAgICAgICAgICB9LCBoYW5kbGVPYmpJbiApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlm
IHdlJ3JlIHRoZSBmaXJzdAotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVu
dHNbIHR5cGUgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhhbmRsZXJzICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBd
ID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGVnYXRl
Q291bnQgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNl
IGFkZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZlbnQgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRs
ZXIgcmV0dXJucyBmYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFz
cGVjaWFsLnNldHVwIHx8IHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNl
cywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQmluZCB0aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVs
ZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0u
YWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZh
bHNlICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBlbGVtLmF0dGFjaEV2ZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5hdHRhY2hFdmVudCggIm9uIiArIHR5cGUsIGV2ZW50SGFu
ZGxlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbC5hZGQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiAp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhhbmRsZU9iai5oYW5k
bGVyLmd1aWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRl
cyBpbiBmcm9udAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxlY3RvciApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5k
ZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMucHVzaCgg
aGFuZGxlT2JqICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVz
ZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gTnVsbGlmeSBlbGVtIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGluIElF
Ci0gICAgICAgICAgICAgICAgZWxlbSA9IG51bGw7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZ2xv
YmFsOiB7fSwKLQotICAgICAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBm
cm9tIGFuIGVsZW1lbnQKLSAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhh
bmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHsKLQotICAgICAgICAgICAgICAgIHZhciB0
LCB0bnMsIHR5cGUsIG9yaWdUeXBlLCBuYW1lc3BhY2VzLCBvcmlnQ291bnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBqLCBldmVudHMsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxlT2JqLAot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURhdGEgPSBqUXVlcnkuaGFzRGF0YSggZWxlbSAp
ICYmIGpRdWVyeS5fZGF0YSggZWxlbSApOwotCi0gICAgICAgICAgICAgICAgaWYgKCAhZWxlbURh
dGEgfHwgIShldmVudHMgPSBlbGVtRGF0YS5ldmVudHMpICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE9u
Y2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWQK
LSAgICAgICAgICAgICAgICB0eXBlcyA9IGpRdWVyeS50cmltKCBob3ZlckhhY2soIHR5cGVzIHx8
ICIiICkgKS5zcGxpdCgiICIpOwotICAgICAgICAgICAgICAgIGZvciAoIHQgPSAwOyB0IDwgdHlw
ZXMubGVuZ3RoOyB0KysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0bnMgPSBydHlwZW5h
bWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IG9yaWdUeXBlID0gdG5zWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNw
YWNlcyA9IHRuc1syXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5iaW5kIGFsbCBl
dmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF0eXBlICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsg
dHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlID0gKCBzZWxlY3Rvcj8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBz
cGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50
VHlwZSA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgb3Jp
Z0NvdW50ID0gZXZlbnRUeXBlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVz
cGFjZXMgPSBuYW1lc3BhY2VzID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2VzLnNw
bGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxs
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7
IGorKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gZXZl
bnRUeXBlWyBqIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoIG1h
cHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFoYW5kbGVyIHx8IGhhbmRsZXIu
Z3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoICFuYW1lc3BhY2VzIHx8IG5hbWVzcGFjZXMudGVzdCggaGFuZGxlT2Jq
Lm5hbWVzcGFjZSApICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fCBzZWxl
Y3RvciA9PT0gIioqIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUuc3BsaWNlKCBqLS0sIDEgKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlT2JqLnNl
bGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnRUeXBlLmRlbGVnYXRlQ291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJl
bW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVy
aW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZXZlbnRUeXBlLmxlbmd0aCA9PT0gMCAmJiBvcmlnQ291bnQgIT09IGV2ZW50
VHlwZS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNw
ZWNpYWwudGVhcmRvd24gfHwgc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2Vz
LCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0
YS5oYW5kbGUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbIHR5cGUgXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAotICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3IgZW1wdGluZXNzIGFuZCBjbGVhcnMg
dGhlIGV4cGFuZG8gaWYgZW1wdHkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHVzZSBp
dCBpbnN0ZWFkIG9mIGRlbGV0ZQotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92
ZURhdGEoIGVsZW0sICJldmVudHMiLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICB9LAotCi0gICAgICAgIC8vIEV2ZW50cyB0aGF0IGFyZSBzYWZlIHRvIHNob3J0LWNpcmN1aXQg
aWYgbm8gaGFuZGxlcnMgYXJlIGF0dGFjaGVkLgotICAgICAgICAvLyBOYXRpdmUgRE9NIGV2ZW50
cyBzaG91bGQgbm90IGJlIGFkZGVkLCB0aGV5IG1heSBoYXZlIGlubGluZSBoYW5kbGVycy4KLSAg
ICAgICAgY3VzdG9tRXZlbnQ6IHsKLSAgICAgICAgICAgICAgICAiZ2V0RGF0YSI6IHRydWUsCi0g
ICAgICAgICAgICAgICAgInNldERhdGEiOiB0cnVlLAotICAgICAgICAgICAgICAgICJjaGFuZ2VE
YXRhIjogdHJ1ZQotICAgICAgICB9LAotCi0gICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVu
dCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgewotICAgICAgICAgICAgICAgIC8vIERvbid0
IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCi0gICAgICAgICAgICAgICAgaWYg
KCBlbGVtICYmIChlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDgpICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIEV2ZW50IG9iamVjdCBvciBldmVudCB0eXBlCi0gICAgICAgICAg
ICAgICAgdmFyIGNhY2hlLCBleGNsdXNpdmUsIGksIGN1ciwgb2xkLCBvbnR5cGUsIHNwZWNpYWws
IGhhbmRsZSwgZXZlbnRQYXRoLCBidWJibGVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1l
c3BhY2VzID0gW107Ci0KLSAgICAgICAgICAgICAgICAvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBm
b2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKLSAgICAg
ICAgICAgICAgICBpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJp
Z2dlcmVkICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoICIhIiApID49IDAg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGNsdXNpdmUgZXZlbnRzIHRyaWdnZXIg
b25seSBmb3IgdGhlIGV4YWN0IGV2ZW50IChubyBuYW1lc3BhY2VzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IHR5cGUuc2xpY2UoMCwgLTEpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjbHVzaXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIHR5cGUuaW5kZXhPZiggIi4iICkgPj0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50
IHR5cGUgaW4gaGFuZGxlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSB0
eXBlLnNwbGl0KCIuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNl
cy5zaGlmdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCAoIWVsZW0gfHwgalF1ZXJ5
LmV2ZW50LmN1c3RvbUV2ZW50WyB0eXBlIF0pICYmICFqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBl
IF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBqUXVlcnkgaGFuZGxlcnMgZm9y
IHRoaXMgZXZlbnQgdHlwZSwgYW5kIGl0IGNhbid0IGhhdmUgaW5saW5lIGhhbmRsZXJzCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIEV2ZW50LCBPYmplY3QsIG9yIGp1c3Qg
YW4gZXZlbnQgdHlwZSBzdHJpbmcKLSAgICAgICAgICAgICAgICBldmVudCA9IHR5cGVvZiBldmVu
dCA9PT0gIm9iamVjdCIgPwotICAgICAgICAgICAgICAgICAgICAgICAgLy8galF1ZXJ5LkV2ZW50
IG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0g
PyBldmVudCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3QgbGl0ZXJhbAotICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgZXZlbnQgKSA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHRoZSBldmVudCB0eXBlIChzdHJpbmcpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlICk7Ci0KLSAgICAg
ICAgICAgICAgICBldmVudC50eXBlID0gdHlwZTsKLSAgICAgICAgICAgICAgICBldmVudC5pc1Ry
aWdnZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGV2ZW50LmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2
ZTsKLSAgICAgICAgICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIu
IiApOwotICAgICAgICAgICAgICAgIGV2ZW50Lm5hbWVzcGFjZV9yZSA9IGV2ZW50Lm5hbWVzcGFj
ZT8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwufCki
KSArICIoXFwufCQpIikgOiBudWxsOwotICAgICAgICAgICAgICAgIG9udHlwZSA9IHR5cGUuaW5k
ZXhPZiggIjoiICkgPCAwID8gIm9uIiArIHR5cGUgOiAiIjsKLQotICAgICAgICAgICAgICAgIC8v
IEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCi0gICAgICAgICAgICAgICAgaWYgKCAhZWxlbSApIHsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogU3RvcCB0YXVudGluZyB0aGUgZGF0
YSBjYWNoZTsgcmVtb3ZlIGdsb2JhbCBldmVudHMgYW5kIGFsd2F5cyBhdHRhY2ggdG8gZG9jdW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0galF1ZXJ5LmNhY2hlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBjYWNoZSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaSBdLmV2ZW50cyAmJiBjYWNoZVsgaSBdLmV2ZW50
c1sgdHlwZSBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5ldmVudC50cmlnZ2VyKCBldmVudCwgZGF0YSwgY2FjaGVbIGkgXS5oYW5kbGUuZWxlbSwg
dHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2Ug
aXQgaXMgYmVpbmcgcmV1c2VkCi0gICAgICAgICAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZp
bmVkOwotICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnRhcmdldCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGVsZW07Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhl
IGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAotICAgICAgICAgICAgICAgIGRh
dGEgPSBkYXRhICE9IG51bGwgPyBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgOiBbXTsKLSAgICAg
ICAgICAgICAgICBkYXRhLnVuc2hpZnQoIGV2ZW50ICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
bGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCi0gICAgICAgICAg
ICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307Ci0gICAg
ICAgICAgICAgICAgaWYgKCBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5
KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIERldGVybWluZSBl
dmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5
OTUxKQotICAgICAgICAgICAgICAgIC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3
aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpCi0gICAg
ICAgICAgICAgICAgZXZlbnRQYXRoID0gW1sgZWxlbSwgc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBl
IF1dOwotICAgICAgICAgICAgICAgIGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1
YmJsZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyID0gcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5
cGUgKSA/IGVsZW0gOiBlbGVtLnBhcmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBvbGQgPSBlbGVtOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBldmVudFBhdGgucHVzaChbIGN1ciwgYnViYmxlVHlwZSBd
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkID0gY3VyOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCB3
aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFj
aGVkIERPTSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2xkID09PSAoZWxlbS5vd25l
ckRvY3VtZW50IHx8IGRvY3VtZW50KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXZlbnRQYXRoLnB1c2goWyBvbGQuZGVmYXVsdFZpZXcgfHwgb2xkLnBhcmVudFdpbmRvdyB8
fCB3aW5kb3csIGJ1YmJsZVR5cGUgXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRmlyZSBoYW5kbGVycyBvbiB0aGUg
ZXZlbnQgcGF0aAotICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZXZlbnRQYXRoLmxl
bmd0aCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTsgaSsrICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXIgPSBldmVudFBhdGhbaV1bMF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBldmVudC50eXBlID0gZXZlbnRQYXRoW2ldWzFdOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGUgPSAoIGpRdWVyeS5fZGF0YSggY3VyLCAiZXZlbnRzIiApIHx8IHt9IClb
IGV2ZW50LnR5cGUgXSAmJiBqUXVlcnkuX2RhdGEoIGN1ciwgImhhbmRsZSIgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaGFuZGxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgYSBiYXJl
IEpTIGZ1bmN0aW9uIGFuZCBub3QgYSBqUXVlcnkgaGFuZGxlcgotICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGhhbmRsZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgJiYgaGFuZGxl
LmFwcGx5ICYmIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
dmVudC50eXBlID0gdHlwZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIG5vYm9keSBwcmV2ZW50
ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKLSAgICAgICAgICAgICAgICBpZiAoICFv
bmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZh
dWx0LmFwcGx5KCBlbGVtLm93bmVyRG9jdW1lbnQsIGRhdGEgKSA9PT0gZmFsc2UpICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICEodHlwZSA9PT0gImNsaWNrIiAmJiBqUXVlcnku
bm9kZU5hbWUoIGVsZW0sICJhIiApKSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYSBuYXRpdmUgRE9NIG1l
dGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBuYW1lIGFzIHRoZSBldmVudC4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIGFuIC5pc0Z1bmN0
aW9uKCkgY2hlY2sgaGVyZSBiZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdp
bmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTw5IGRpZXMgb24gZm9jdXMvYmx1ciB0byBoaWRk
ZW4gZWxlbWVudCAoIzE0ODYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
b250eXBlICYmIGVsZW1bIHR5cGUgXSAmJiAoKHR5cGUgIT09ICJmb2N1cyIgJiYgdHlwZSAhPT0g
ImJsdXIiKSB8fCBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggIT09IDApICYmICFqUXVlcnkuaXNX
aW5kb3coIGVsZW0gKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBG
T08oKSBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQg
PSBlbGVtWyBvbnR5cGUgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggb2xkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2Ug
YWxyZWFkeSBidWJibGVkIGl0IGFib3ZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgdHlwZSBdKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5l
ZDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2xkICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsg
b250eXBlIF0gPSBvbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50
LnJlc3VsdDsKLSAgICAgICAgfSwKLQotICAgICAgICBkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50
ICkgewotCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBm
cm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0Ci0gICAgICAgICAgICAgICAgZXZlbnQgPSBqUXVl
cnkuZXZlbnQuZml4KCBldmVudCB8fCB3aW5kb3cuZXZlbnQgKTsKLQotICAgICAgICAgICAgICAg
IHZhciBpLCBqLCBjdXIsIHJldCwgc2VsTWF0Y2gsIG1hdGNoZWQsIG1hdGNoZXMsIGhhbmRsZU9i
aiwgc2VsLCByZWxhdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSAoIChq
UXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdIHx8IFtd
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxl
Z2F0ZUNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGNvcmVfc2xpY2UuY2Fs
bCggYXJndW1lbnRzICksCi0gICAgICAgICAgICAgICAgICAgICAgICBydW5fYWxsID0gIWV2ZW50
LmV4Y2x1c2l2ZSAmJiAhZXZlbnQubmFtZXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge30sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUXVldWUgPSBbXTsKLQotICAgICAgICAgICAgICAg
IC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25s
eSkgbmF0aXZlIGV2ZW50Ci0gICAgICAgICAgICAgICAgYXJnc1swXSA9IGV2ZW50OwotICAgICAg
ICAgICAgICAgIGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpczsKLQotICAgICAgICAgICAgICAg
IC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxl
dCBpdCBiYWlsIGlmIGRlc2lyZWQKLSAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucHJlRGlz
cGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxz
ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaGFuZGxlcnMgdGhhdCBzaG91bGQgcnVu
IGlmIHRoZXJlIGFyZSBkZWxlZ2F0ZWQgZXZlbnRzCi0gICAgICAgICAgICAgICAgLy8gQXZvaWQg
bm9uLWxlZnQtY2xpY2sgYnViYmxpbmcgaW4gRmlyZWZveCAoIzM4NjEpCi0gICAgICAgICAgICAg
ICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYmICEoZXZlbnQuYnV0dG9uICYmIGV2ZW50LnR5cGUgPT09
ICJjbGljayIpICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBjdXIgPSBldmVu
dC50YXJnZXQ7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHByb2Nlc3MgY2xpY2tz
IChPTkxZKSBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2
NCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIuZGlzYWJsZWQgIT09
IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gImNsaWNrIiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxNYXRjaCA9IHt9OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9i
aiA9IGhhbmRsZXJzWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3I7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBdID09PSB1
bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbE1hdGNoWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgPwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID49IDAgOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNlbE1hdGNoWyBzZWwgXSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlcy5wdXNoKCBoYW5kbGVPYmogKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRj
aGVzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogY3VyLCBtYXRjaGVzOiBtYXRjaGVzIH0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJl
Y3RseS1ib3VuZCkgaGFuZGxlcnMKLSAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZXJzLmxlbmd0
aCA+IGRlbGVnYXRlQ291bnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUXVl
dWUucHVzaCh7IGVsZW06IHRoaXMsIG1hdGNoZXM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNv
dW50ICkgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gUnVuIGRl
bGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGgg
dXMKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGhhbmRsZXJRdWV1ZS5sZW5ndGgg
JiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkgXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbWF0Y2hlZC5tYXRjaGVzLmxlbmd0aCAmJiAh
ZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTsgaisrICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBtYXRjaGVkLm1hdGNoZXNbIGogXTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyZWQgZXZlbnQgbXVz
dCBlaXRoZXIgMSkgYmUgbm9uLWV4Y2x1c2l2ZSBhbmQgaGF2ZSBubyBuYW1lc3BhY2UsIG9yCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEg
c3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2
ZSBubyBuYW1lc3BhY2UpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJ1
bl9hbGwgfHwgKCFldmVudC5uYW1lc3BhY2UgJiYgIWhhbmRsZU9iai5uYW1lc3BhY2UpIHx8IGV2
ZW50Lm5hbWVzcGFjZV9yZSAmJiBldmVudC5uYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2JqLm5h
bWVzcGFjZSApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9ICggKGpRdWVyeS5ldmVudC5zcGVjaWFs
WyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSkuaGFuZGxlIHx8IGhhbmRsZU9iai5oYW5kbGVy
ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSByZXQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJl
dCA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBo
b29rIGZvciB0aGUgbWFwcGVkIHR5cGUKLSAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucG9z
dERpc3BhdGNoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC5wb3N0RGlzcGF0
Y2guY2FsbCggdGhpcywgZXZlbnQgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXZlbnQucmVzdWx0OwotICAgICAgICB9LAotCi0gICAgICAgIC8vIEluY2x1
ZGVzIHNvbWUgZXZlbnQgcHJvcHMgc2hhcmVkIGJ5IEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50Ci0g
ICAgICAgIC8vICoqKiBhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQg
IGFyZSBub3Qgbm9ybWFsaXplZCwgbm9uLVczQywgZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVk
IGluIDEuOCAqKioKLSAgICAgICAgcHJvcHM6ICJhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWRO
b2RlIHNyY0VsZW1lbnQgYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRU
YXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRp
bWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLAotCi0gICAgICAgIGZpeEhvb2tzOiB7fSwK
LQotICAgICAgICBrZXlIb29rczogewotICAgICAgICAgICAgICAgIHByb3BzOiAiY2hhciBjaGFy
Q29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSwKLSAgICAgICAgICAgICAgICBmaWx0ZXI6IGZ1
bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
dmVudC53aGljaCA9PSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
dmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51bGwgPyBvcmlnaW5hbC5jaGFyQ29k
ZSA6IG9yaWdpbmFsLmtleUNvZGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgbW91c2VIb29rczogewotICAgICAgICAgICAgICAgIHByb3BzOiAi
YnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0
WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLAotICAg
ICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBldmVudERvYywgZG9jLCBib2R5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidXR0b24gPSBvcmlnaW5hbC5idXR0b24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyb21FbGVtZW50ID0gb3JpZ2luYWwuZnJvbUVsZW1lbnQ7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlWC9ZIGlmIG1pc3Np
bmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZXZlbnQucGFnZVggPT0gbnVsbCAmJiBvcmlnaW5hbC5jbGllbnRYICE9IG51bGwgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50RG9jID0gZXZlbnQudGFyZ2V0Lm93bmVy
RG9jdW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
YyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9keSA9IGV2ZW50RG9jLmJvZHk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnQucGFnZVggPSBvcmlnaW5hbC5jbGllbnRYICsgKCBkb2MgJiYgZG9jLnNjcm9s
bExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNs
aWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgKyAoIGRv
YyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLSAo
IGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEFkZCByZWxhdGVkVGFyZ2V0LCBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVsZW1lbnQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tRWxlbWVudCA9
PT0gZXZlbnQudGFyZ2V0ID8gb3JpZ2luYWwudG9FbGVtZW50IDogZnJvbUVsZW1lbnQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB3
aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwg
c28gZG9uJ3QgdXNlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFldmVudC53aGlj
aCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnQud2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8gMyA6
ICggYnV0dG9uICYgNCA/IDIgOiAwICkgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICB9LAotCi0gICAgICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgewotICAgICAg
ICAgICAgICAgIGlmICggZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXZlbnQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2JqZWN0IGFuZCBu
b3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgdmFyIGksIHByb3AsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50ID0gZXZlbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmaXhIb29rID0galF1ZXJ5LmV2ZW50LmZpeEhvb2tzWyBldmVudC50eXBl
IF0gfHwge30sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gZml4SG9vay5wcm9wcyA/
IHRoaXMucHJvcHMuY29uY2F0KCBmaXhIb29rLnByb3BzICkgOiB0aGlzLnByb3BzOwotCi0gICAg
ICAgICAgICAgICAgZXZlbnQgPSBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKLQotICAg
ICAgICAgICAgICAgIGZvciAoIGkgPSBjb3B5Lmxlbmd0aDsgaTsgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wID0gY29weVsgLS1pIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
dmVudFsgcHJvcCBdID0gb3JpZ2luYWxFdmVudFsgcHJvcCBdOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIEZpeCB0YXJnZXQgcHJvcGVydHksIGlmIG5lY2Vzc2FyeSAo
IzE5MjUsIElFIDYvNy84ICYgU2FmYXJpMikKLSAgICAgICAgICAgICAgICBpZiAoICFldmVudC50
YXJnZXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgPSBvcmlnaW5h
bEV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsIFNh
ZmFyaSkKLSAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5w
YXJlbnROb2RlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZvciBt
b3VzZS9rZXkgZXZlbnRzLCBtZXRhS2V5PT1mYWxzZSBpZiBpdCdzIHVuZGVmaW5lZCAoIzMzNjgs
ICMxMTMyODsgSUU2LzcvOCkKLSAgICAgICAgICAgICAgICBldmVudC5tZXRhS2V5ID0gISFldmVu
dC5tZXRhS2V5OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZpeEhvb2suZmlsdGVyPyBmaXhI
b29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6IGV2ZW50OwotICAgICAgICB9LAot
Ci0gICAgICAgIHNwZWNpYWw6IHsKLSAgICAgICAgICAgICAgICBsb2FkOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9t
IGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCi0gICAgICAgICAgICAgICAgICAgICAgICBub0J1YmJs
ZTogdHJ1ZQotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBmb2N1czogewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIKLSAgICAgICAg
ICAgICAgICB9LAotICAgICAgICAgICAgICAgIGJsdXI6IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IgotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgICAgICBiZWZvcmV1bmxvYWQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHVw
OiBmdW5jdGlvbiggZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIHNwZWNpYWwg
Y2FzZSBvbiB3aW5kb3dzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5LmlzV2luZG93KCB0aGlzICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5vbmJlZm9yZXVubG9hZCA9IGV2ZW50SGFuZGxlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oIG5hbWVzcGFjZXMsIGV2ZW50
SGFuZGxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMub25i
ZWZvcmV1bmxvYWQgPT09IGV2ZW50SGFuZGxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxvYWQgPSBudWxsOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIHNpbXVsYXRlOiBmdW5jdGlvbiggdHlw
ZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHsKLSAgICAgICAgICAgICAgICAvLyBQaWdneWJhY2sg
b24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUuCi0gICAgICAgICAg
ICAgICAgLy8gRmFrZSBvcmlnaW5hbEV2ZW50IHRvIGF2b2lkIGRvbm9yJ3Mgc3RvcFByb3BhZ2F0
aW9uLCBidXQgaWYgdGhlCi0gICAgICAgICAgICAgICAgLy8gc2ltdWxhdGVkIGV2ZW50IHByZXZl
bnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0aGUgZG9ub3IuCi0gICAgICAgICAg
ICAgICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3
IGpRdWVyeS5FdmVudCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7IHR5cGU6IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzU2ltdWxhdGVkOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW5hbEV2ZW50OiB7fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICk7Ci0gICAgICAgICAgICAgICAgaWYgKCBidWJibGUgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
ZGlzcGF0Y2guY2FsbCggZWxlbSwgZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIGUuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
fQotfTsKLQotLy8gU29tZSBwbHVnaW5zIGFyZSB1c2luZywgYnV0IGl0J3MgdW5kb2N1bWVudGVk
L2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KLS8vIFRoZSAxLjcgc3BlY2lhbCBldmVu
dCBpbnRlcmZhY2Ugc2hvdWxkIHByb3ZpZGUgYWxsIHRoZSBob29rcyBuZWVkZWQgbm93LgotalF1
ZXJ5LmV2ZW50LmhhbmRsZSA9IGpRdWVyeS5ldmVudC5kaXNwYXRjaDsKLQotalF1ZXJ5LnJlbW92
ZUV2ZW50ID0gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciA/Ci0gICAgICAgIGZ1bmN0aW9u
KCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBlbGVtLnJlbW92
ZUV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUV2
ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSwgZmFsc2UgKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0gOgotICAgICAgICBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgewotICAg
ICAgICAgICAgICAgIHZhciBuYW1lID0gIm9uIiArIHR5cGU7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIGVsZW0uZGV0YWNoRXZlbnQgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICM4
NTQ1LCAjNzA1NCwgcHJldmVudGluZyBtZW1vcnkgbGVha3MgZm9yIGN1c3RvbSBldmVudHMgaW4g
SUU2LTgKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRldGFjaEV2ZW50IG5lZWRlZCBwcm9w
ZXJ0eSBvbiBlbGVtZW50LCBieSBuYW1lIG9mIHRoYXQgZXZlbnQsIHRvIHByb3Blcmx5IGV4cG9z
ZSBpdCB0byBHQwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbVsgbmFt
ZSBdID09PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbVsgbmFtZSBdID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS5kZXRhY2hFdmVudCggbmFtZSwgaGFuZGxlICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICB9OwotCi1qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3Jj
LCBwcm9wcyApIHsKLSAgICAgICAgLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAn
bmV3JyBrZXl3b3JkCi0gICAgICAgIGlmICggISh0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50
KSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9w
cyApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRXZlbnQgb2JqZWN0Ci0gICAgICAgIGlmICgg
c3JjICYmIHNyYy50eXBlICkgewotICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9
IHNyYzsKLSAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTsKLQotICAgICAgICAg
ICAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBt
YXJrZWQgYXMgcHJldmVudGVkCi0gICAgICAgICAgICAgICAgLy8gYnkgYSBoYW5kbGVyIGxvd2Vy
IGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCi0gICAgICAgICAgICAg
ICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoIHNyYy5kZWZhdWx0UHJldmVudGVkIHx8IHNy
Yy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5n
ZXRQcmV2ZW50RGVmYXVsdCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSApID8gcmV0dXJuVHJ1
ZSA6IHJldHVybkZhbHNlOwotCi0gICAgICAgIC8vIEV2ZW50IHR5cGUKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzcmM7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9i
amVjdAotICAgICAgICBpZiAoIHByb3BzICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5leHRl
bmQoIHRoaXMsIHByb3BzICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDcmVhdGUgYSB0aW1l
c3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZQotICAgICAgICB0aGlzLnRp
bWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpRdWVyeS5ub3coKTsKLQotICAgICAg
ICAvLyBNYXJrIGl0IGFzIGZpeGVkCi0gICAgICAgIHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0
cnVlOwotfTsKLQotZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLX0KLWZ1bmN0aW9uIHJldHVyblRydWUoKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotfQot
Ci0vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5
IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RS
LzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcu
aHRtbAotalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKLSAgICAgICAgcHJldmVudERlZmF1bHQ6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0g
cmV0dXJuVHJ1ZTsKLQotICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50
OwotICAgICAgICAgICAgICAgIGlmICggIWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gaWYgcHJldmVu
dERlZmF1bHQgZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKLSAgICAgICAgICAg
ICAgICBpZiAoIGUucHJldmVudERlZmF1bHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
LnByZXZlbnREZWZhdWx0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IHRo
ZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UgKElF
KQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlLnJl
dHVyblZhbHVlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotICAgICAg
ICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuaXNQ
cm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwotCi0gICAgICAgICAgICAgICAgdmFyIGUg
PSB0aGlzLm9yaWdpbmFsRXZlbnQ7Ci0gICAgICAgICAgICAgICAgaWYgKCAhZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFs
IGV2ZW50Ci0gICAgICAgICAgICAgICAgaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQgdGhlIGNhbmNlbEJ1YmJsZSBwcm9w
ZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gdHJ1ZSAoSUUpCi0gICAgICAgICAgICAgICAg
ZS5jYW5jZWxCdWJibGUgPSB0cnVlOwotICAgICAgICB9LAotICAgICAgICBzdG9wSW1tZWRpYXRl
UHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMuaXNJbW1lZGlh
dGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwotICAgICAgICAgICAgICAgIHRoaXMu
c3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIH0sCi0gICAgICAgIGlzRGVmYXVsdFByZXZlbnRl
ZDogcmV0dXJuRmFsc2UsCi0gICAgICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxz
ZSwKLSAgICAgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlCi19
OwotCi0vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291
dCBhbmQgZXZlbnQtdGltZSBjaGVja3MKLWpRdWVyeS5lYWNoKHsKLSAgICAgICAgbW91c2VlbnRl
cjogIm1vdXNlb3ZlciIsCi0gICAgICAgIG1vdXNlbGVhdmU6ICJtb3VzZW91dCIKLX0sIGZ1bmN0
aW9uKCBvcmlnLCBmaXggKSB7Ci0gICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0g
PSB7Ci0gICAgICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiBmaXgsCi0gICAgICAgICAgICAgICAg
YmluZFR5cGU6IGZpeCwKLQotICAgICAgICAgICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iaiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBoYW5kbGVPYmouc2VsZWN0b3I7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZvciBtb3VzZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxl
ciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhl
IGJyb3dzZXIgd2luZG93Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZWxhdGVkIHx8
IChyZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVk
ICkpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFu
ZGxlT2JqLm9yaWdUeXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBo
YW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBmaXg7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgfTsKLX0pOwotCi0vLyBJRSBzdWJtaXQgZGVsZWdhdGlvbgotaWYgKCAh
alF1ZXJ5LnN1cHBvcnQuc3VibWl0QnViYmxlcyApIHsKLQotICAgICAgICBqUXVlcnkuZXZlbnQu
c3BlY2lhbC5zdWJtaXQgPSB7Ci0gICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBm
b3JtIHN1Ym1pdCBldmVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5v
ZGVOYW1lKCB0aGlzLCAiZm9ybSIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBMYXp5LWFkZCBhIHN1Ym1pdCBoYW5kbGVyIHdoZW4gYSBkZXNjZW5k
YW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRlZAotICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1
Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBOb2RlIG5hbWUgY2hlY2sgYXZvaWRzIGEgVk1MLXJlbGF0ZWQgY3Jhc2ggaW4gSUUgKCM5ODA3
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gPSBqUXVlcnkubm9k
ZU5hbWUoIGVsZW0sICJpbnB1dCIgKSB8fCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24i
ICkgPyBlbGVtLmZvcm0gOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZm9ybSAmJiAhalF1ZXJ5Ll9kYXRhKCBmb3JtLCAiX3N1Ym1pdF9hdHRhY2hlZCIg
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQuYWRkKCBmb3JtLCAic3VibWl0Ll9zdWJtaXQiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fc3VibWl0
X2J1YmJsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRh
KCBmb3JtLCAiX3N1Ym1pdF9hdHRhY2hlZCIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyByZXR1cm4gdW5kZWZpbmVkIHNpbmNlIHdlIGRvbid0IG5lZWQgYW4gZXZl
bnQgbGlzdGVuZXIKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgcG9zdERp
c3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBmb3JtIHdhcyBzdWJtaXR0ZWQgYnkgdGhlIHVzZXIsIGJ1YmJsZSB0aGUgZXZlbnQgdXAgdGhl
IHRyZWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXZlbnQuX3N1Ym1pdF9idWJibGUg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudC5fc3VibWl0
X2J1YmJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnBhcmVu
dE5vZGUgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJzdWJtaXQiLCB0aGlzLnBhcmVu
dE5vZGUsIGV2ZW50LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBmb3JtIHN1Ym1pdCBldmVudHMKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiZm9ybSIgKSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUg
ZGVsZWdhdGVkIGhhbmRsZXJzOyBjbGVhbkRhdGEgZXZlbnR1YWxseSByZWFwcyBzdWJtaXQgaGFu
ZGxlcnMgYXR0YWNoZWQgYWJvdmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC5yZW1vdmUoIHRoaXMsICIuX3N1Ym1pdCIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
IH07Ci19Ci0KLS8vIElFIGNoYW5nZSBkZWxlZ2F0aW9uIGFuZCBjaGVja2JveC9yYWRpbyBmaXgK
LWlmICggIWpRdWVyeS5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMgKSB7Ci0KLSAgICAgICAgalF1ZXJ5
LmV2ZW50LnNwZWNpYWwuY2hhbmdlID0gewotCi0gICAgICAgICAgICAgICAgc2V0dXA6IGZ1bmN0
aW9uKCkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJmb3JtRWxlbXMudGVzdCgg
dGhpcy5ub2RlTmFtZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
RSBkb2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dl
ciBpdCBvbiBjbGljawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciBh
IHByb3BlcnR5Y2hhbmdlLiBFYXQgdGhlIGJsdXItY2hhbmdlIGluIHNwZWNpYWwuY2hhbmdlLmhh
bmRsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdGlsbCBmaXJl
cyBvbmNoYW5nZSBhIHNlY29uZCB0aW1lIGZvciBjaGVjay9yYWRpbyBhZnRlciBibHVyLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94
IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgInByb3BlcnR5Y2hhbmdlLl9j
aGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGV2ZW50Lm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1l
ID09PSAiY2hlY2tlZCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9jaGFuZ2UiLCBmdW5j
dGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRoaXMuX2p1c3RfY2hhbmdlZCAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9qdXN0X2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFsbG93IHRyaWdnZXJlZCwgc2ltdWxhdGVkIGNoYW5nZSBldmVudHMg
KCMxMTUwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC5zaW11bGF0ZSggImNoYW5nZSIsIHRoaXMsIGV2ZW50LCB0cnVlICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRGVsZWdhdGVkIGV2ZW50OyBsYXp5LWFkZCBhIGNoYW5nZSBoYW5kbGVyIG9uIGRl
c2NlbmRhbnQgaW5wdXRzCi0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRk
KCB0aGlzLCAiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uKCBlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0OwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmZvcm1FbGVtcy50ZXN0KCBlbGVtLm5vZGVO
YW1lICkgJiYgIWpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfYXR0YWNoZWQiICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCgg
ZWxlbSwgImNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2ZW50ICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnBhcmVudE5vZGUg
JiYgIWV2ZW50LmlzU2ltdWxhdGVkICYmICFldmVudC5pc1RyaWdnZXIgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC5zaW11bGF0ZSggImNoYW5nZSIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2F0dGFjaGVk
IiwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAg
aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
ZWxlbSA9IGV2ZW50LnRhcmdldDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3dhbGxv
dyBuYXRpdmUgY2hhbmdlIGV2ZW50cyBmcm9tIGNoZWNrYm94L3JhZGlvLCB3ZSBhbHJlYWR5IHRy
aWdnZXJlZCB0aGVtIGFib3ZlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMgIT09
IGVsZW0gfHwgZXZlbnQuaXNTaW11bGF0ZWQgfHwgZXZlbnQuaXNUcmlnZ2VyIHx8IChlbGVtLnR5
cGUgIT09ICJyYWRpbyIgJiYgZWxlbS50eXBlICE9PSAiY2hlY2tib3giKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFw
cGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5fY2hh
bmdlIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJmb3JtRWxlbXMudGVz
dCggdGhpcy5ub2RlTmFtZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLX0KLQot
Ly8gQ3JlYXRlICJidWJibGluZyIgZm9jdXMgYW5kIGJsdXIgZXZlbnRzCi1pZiAoICFqUXVlcnku
c3VwcG9ydC5mb2N1c2luQnViYmxlcyApIHsKLSAgICAgICAgalF1ZXJ5LmVhY2goeyBmb2N1czog
ImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7Ci0K
LSAgICAgICAgICAgICAgICAvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgd2hp
bGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0Ci0gICAgICAgICAgICAgICAgdmFyIGF0
dGFjaGVzID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbigg
ZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5z
aW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICksIHRy
dWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBqUXVl
cnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXR1
cDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXR0
YWNoZXMrKyA9PT0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggLS1hdHRhY2hlcyA9PT0gMCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExp
c3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Owot
ICAgICAgICB9KTsKLX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0KLSAgICAgICAgb246IGZ1bmN0
aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklOVEVSTkFMKi8gb25lICkgewotICAg
ICAgICAgICAgICAgIHZhciBvcmlnRm4sIHR5cGU7Ci0KLSAgICAgICAgICAgICAgICAvLyBUeXBl
cyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnMKLSAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAo
IHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeyAvLyAmJiBzZWxlY3RvciAhPSBu
dWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICggdHlwZXMtT2JqZWN0LCBk
YXRhICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgfHwgc2Vs
ZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZp
bmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdHlwZSBpbiB0eXBlcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5vbiggdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBkYXRhID09IG51
bGwgJiYgZm4gPT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICggdHlwZXMs
IGZuICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gc2VsZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gKCB0eXBlcywgc2VsZWN0b3IsIGZuICkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm4gPSBkYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCB0eXBlcywgZGF0YSwgZm4gKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGRhdGE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggZm4gPT09IGZhbHNlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCAhZm4gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG9uZSA9PT0g
MSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdGbiA9IGZuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlu
cyB0aGUgaW5mbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoKS5vZmYo
IGV2ZW50ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnRm4u
YXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1v
dmUgdXNpbmcgb3JpZ0ZuCi0gICAgICAgICAgICAgICAgICAgICAgICBmbi5ndWlkID0gb3JpZ0Zu
Lmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRh
dGEsIHNlbGVjdG9yICk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0gICAgICAg
IG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTsKLSAg
ICAgICAgfSwKLSAgICAgICAgb2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsK
LSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlT2JqLCB0eXBlOwotICAgICAgICAgICAgICAgIGlm
ICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5F
dmVudAotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2Jq
OwotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCAp
Lm9mZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLm5hbWVzcGFj
ZSA/IGhhbmRsZU9iai5vcmlnVHlwZSArICIuIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOiBoYW5k
bGVPYmoub3JpZ1R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9i
ai5zZWxlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmhh
bmRsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
KCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIHR5cGUgaW4gdHlwZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5
cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vICggdHlwZXMgWywgZm5dICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gc2VsZWN0
b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBmbiA9PT0gZmFsc2UgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmbiA9IHJldHVybkZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxl
Y3RvciApOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAgIGJpbmQ6
IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOwotICAgICAgICB9LAotICAgICAgICB1bmJp
bmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
b2ZmKCB0eXBlcywgbnVsbCwgZm4gKTsKLSAgICAgICAgfSwKLQotICAgICAgICBsaXZlOiBmdW5j
dGlvbiggdHlwZXMsIGRhdGEsIGZuICkgewotICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcy5j
b250ZXh0ICkub24oIHR5cGVzLCB0aGlzLnNlbGVjdG9yLCBkYXRhLCBmbiApOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotICAgICAgICBkaWU6IGZ1bmN0aW9uKCB0
eXBlcywgZm4gKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzLmNvbnRleHQgKS5vZmYo
IHR5cGVzLCB0aGlzLnNlbGVjdG9yIHx8ICIqKiIsIGZuICk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxl
Y3RvciwgdHlwZXMsIGRhdGEsIGZuICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9u
KCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7Ci0gICAgICAgIH0sCi0gICAgICAgIHVuZGVs
ZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkgewotICAgICAgICAgICAgICAg
IC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dICkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHRoaXMub2ZmKCBzZWxlY3Rv
ciwgIioqIiApIDogdGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCAiKioiLCBmbiApOwotICAg
ICAgICB9LAotCi0gICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApOwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotICAgICAgICB0cmlnZ2VySGFuZGxlcjogZnVu
Y3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBl
LCBkYXRhLCB0aGlzWzBdLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAot
Ci0gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oIGZuICkgewotICAgICAgICAgICAgICAgIC8vIFNh
dmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNzIGluIGNsb3N1cmUKLSAgICAgICAg
ICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGd1
aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKyssCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZXIgPSBmdW5jdGlvbiggZXZlbnQg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2gg
ZnVuY3Rpb24gdG8gZXhlY3V0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
bGFzdFRvZ2dsZSA9ICggalF1ZXJ5Ll9kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlk
ICkgfHwgMCApICUgaTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9k
YXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlkLCBsYXN0VG9nZ2xlICsgMSApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGNsaWNrcyBz
dG9wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGV4ZWN1dGUgdGhl
IGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWyBs
YXN0VG9nZ2xlIF0uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIHx8IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIGxpbmsgYWxsIHRoZSBmdW5j
dGlvbnMsIHNvIGFueSBvZiB0aGVtIGNhbiB1bmJpbmQgdGhpcyBjbGljayBoYW5kbGVyCi0gICAg
ICAgICAgICAgICAgdG9nZ2xlci5ndWlkID0gZ3VpZDsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
IGkgPCBhcmdzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbIGkrKyBd
Lmd1aWQgPSBndWlkOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmNsaWNrKCB0b2dnbGVyICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaG92ZXI6IGZ1
bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1v
dXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApOwotICAgICAg
ICB9Ci19KTsKLQotalF1ZXJ5LmVhY2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxv
YWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCi0gICAgICAgICJtb3Vz
ZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91
c2VsZWF2ZSAiICsKLSAgICAgICAgImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJl
c3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiKS5zcGxpdCgiICIpLCBmdW5jdGlvbiggaSwgbmFt
ZSApIHsKLQotICAgICAgICAvLyBIYW5kbGUgZXZlbnQgYmluZGluZwotICAgICAgICBqUXVlcnku
Zm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHsKLSAgICAgICAgICAgICAgICBpZiAo
IGZuID09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGRhdGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgPwotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoIG5hbWUgKTsKLSAgICAgICAgfTsKLQotICAgICAg
ICBpZiAoIHJrZXlFdmVudC50ZXN0KCBuYW1lICkgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5
LmV2ZW50LmZpeEhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXZlbnQua2V5SG9va3M7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIHJtb3VzZUV2ZW50LnRlc3QoIG5hbWUgKSApIHsKLSAgICAgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbIG5hbWUgXSA9IGpRdWVyeS5ldmVudC5tb3Vz
ZUhvb2tzOwotICAgICAgICB9Ci19KTsKLS8qIQotICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdp
bmUKLSAqIENvcHlyaWdodCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmli
dXRvcnMKLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQotICogaHR0cDovL3Npenps
ZWpzLmNvbS8KLSAqLwotKGZ1bmN0aW9uKCB3aW5kb3csIHVuZGVmaW5lZCApIHsKLQotdmFyIGNh
Y2hlZHJ1bnMsCi0gICAgICAgIGFzc2VydEdldElkTm90TmFtZSwKLSAgICAgICAgRXhwciwKLSAg
ICAgICAgZ2V0VGV4dCwKLSAgICAgICAgaXNYTUwsCi0gICAgICAgIGNvbnRhaW5zLAotICAgICAg
ICBjb21waWxlLAotICAgICAgICBzb3J0T3JkZXIsCi0gICAgICAgIGhhc0R1cGxpY2F0ZSwKLSAg
ICAgICAgb3V0ZXJtb3N0Q29udGV4dCwKLQotICAgICAgICBiYXNlSGFzRHVwbGljYXRlID0gdHJ1
ZSwKLSAgICAgICAgc3RydW5kZWZpbmVkID0gInVuZGVmaW5lZCIsCi0KLSAgICAgICAgZXhwYW5k
byA9ICggInNpemNhY2hlIiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAiLiIsICIiICksCi0K
LSAgICAgICAgVG9rZW4gPSBTdHJpbmcsCi0gICAgICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3Vt
ZW50LAotICAgICAgICBkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAotICAgICAg
ICBkaXJydW5zID0gMCwKLSAgICAgICAgZG9uZSA9IDAsCi0gICAgICAgIHBvcCA9IFtdLnBvcCwK
LSAgICAgICAgcHVzaCA9IFtdLnB1c2gsCi0gICAgICAgIHNsaWNlID0gW10uc2xpY2UsCi0gICAg
ICAgIC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBpZiBhIG5hdGl2ZSBvbmUgaXMgdW5h
dmFpbGFibGUKLSAgICAgICAgaW5kZXhPZiA9IFtdLmluZGV4T2YgfHwgZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGkgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
bGVuID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNbaV0gPT09IGVsZW0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQXVnbWVudCBhIGZ1bmN0aW9uIGZvciBzcGVjaWFs
IHVzZSBieSBTaXp6bGUKLSAgICAgICAgbWFya0Z1bmN0aW9uID0gZnVuY3Rpb24oIGZuLCB2YWx1
ZSApIHsKLSAgICAgICAgICAgICAgICBmblsgZXhwYW5kbyBdID0gdmFsdWUgPT0gbnVsbCB8fCB2
YWx1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZm47Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
Y3JlYXRlQ2FjaGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSB7
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSBbXTsKLQotICAgICAgICAgICAgICAg
IHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgga2V5cy5wdXNoKCBrZXkgKSA+IEV4cHIuY2FjaGVMZW5n
dGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsga2V5
cy5zaGlmdCgpIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJldHJpZXZlIHdpdGggKGtleSArICIgIikgdG8gYXZvaWQgY29sbGlzaW9u
IHdpdGggbmF0aXZlIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNhY2hlWyBrZXkgKyAiICIgXSA9IHZh
bHVlKTsKLSAgICAgICAgICAgICAgICB9LCBjYWNoZSApOwotICAgICAgICB9LAotCi0gICAgICAg
IGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotICAgICAgICB0b2tlbkNhY2hlID0gY3JlYXRl
Q2FjaGUoKSwKLSAgICAgICAgY29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCi0KLSAgICAg
ICAgLy8gUmVnZXgKLQotICAgICAgICAvLyBXaGl0ZXNwYWNlIGNoYXJhY3RlcnMgaHR0cDovL3d3
dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UKLSAgICAgICAgd2hpdGVzcGFj
ZSA9ICJbXFx4MjBcXHRcXHJcXG5cXGZdIiwKLSAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvY3NzMy1zeW50YXgvI2NoYXJhY3RlcnMKLSAgICAgICAgY2hhcmFjdGVyRW5jb2RpbmcgPSAi
KD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLAotCi0gICAgICAgIC8vIExvb3NlbHkg
bW9kZWxlZCBvbiBDU1MgaWRlbnRpZmllciBjaGFyYWN0ZXJzCi0gICAgICAgIC8vIEFuIHVucXVv
dGVkIHZhbHVlIHNob3VsZCBiZSBhIENTUyBpZGVudGlmaWVyIChodHRwOi8vd3d3LnczLm9yZy9U
Ui9jc3MzLXNlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9ycykKLSAgICAgICAgLy8gUHJvcGVy
IHN5bnRheDogaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRl
Zi1pZGVudGlmaWVyCi0gICAgICAgIGlkZW50aWZpZXIgPSBjaGFyYWN0ZXJFbmNvZGluZy5yZXBs
YWNlKCAidyIsICJ3IyIgKSwKLQotICAgICAgICAvLyBBY2NlcHRhYmxlIG9wZXJhdG9ycyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnMKLSAgICAgICAg
b3BlcmF0b3JzID0gIihbKl4kfCF+XT89KSIsCi0gICAgICAgIGF0dHJpYnV0ZXMgPSAiXFxbIiAr
IHdoaXRlc3BhY2UgKyAiKigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKyB3aGl0ZXNwYWNl
ICsKLSAgICAgICAgICAgICAgICAiKig/OiIgKyBvcGVyYXRvcnMgKyB3aGl0ZXNwYWNlICsgIioo
PzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgiICsgaWRlbnRpZmllciArICIpfCl8
KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLAotCi0gICAgICAgIC8vIFByZWZlciBhcmd1bWVudHMg
bm90IGluIHBhcmVucy9icmFja2V0cywKLSAgICAgICAgLy8gICB0aGVuIGF0dHJpYnV0ZSBzZWxl
Y3RvcnMgYW5kIG5vbi1wc2V1ZG9zIChkZW5vdGVkIGJ5IDopLAotICAgICAgICAvLyAgIHRoZW4g
YW55dGhpbmcgZWxzZQotICAgICAgICAvLyBUaGVzZSBwcmVmZXJlbmNlcyBhcmUgaGVyZSB0byBy
ZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMKLSAgICAgICAgLy8gICBuZWVkaW5nIHRva2Vu
aXplIGluIHRoZSBQU0VVRE8gcHJlRmlsdGVyCi0gICAgICAgIHBzZXVkb3MgPSAiOigiICsgY2hh
cmFjdGVyRW5jb2RpbmcgKyAiKSg/OlxcKCg/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylc
XDJ8KFteKClbXFxdXSp8KD86KD86IiArIGF0dHJpYnV0ZXMgKyAiKXxbXjpdfFxcXFwuKSp8Liop
KVxcKXwpIiwKLQotICAgICAgICAvLyBGb3IgbWF0Y2hFeHByLlBPUyBhbmQgbWF0Y2hFeHByLm5l
ZWRzQ29udGV4dAotICAgICAgICBwb3MgPSAiOihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8
bGFzdCkoPzpcXCgiICsgd2hpdGVzcGFjZSArCi0gICAgICAgICAgICAgICAgIiooKD86LVxcZCk/
XFxkKikiICsgd2hpdGVzcGFjZSArICIqXFwpfCkoPz1bXi1dfCQpIiwKLQotICAgICAgICAvLyBM
ZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29t
ZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyCi0gICAgICAg
IHJ0cmltID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIrfCgoPzpefFteXFxcXF0p
KD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsICJnIiApLAotCi0gICAgICAgIHJjb21t
YSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKiwiICsgd2hpdGVzcGFjZSArICIq
IiApLAotICAgICAgICByY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNl
ICsgIiooW1xceDIwXFx0XFxyXFxuXFxmPit+XSkiICsgd2hpdGVzcGFjZSArICIqIiApLAotICAg
ICAgICBycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLAotCi0gICAgICAgIC8vIEVhc2ls
eS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9ycwotICAg
ICAgICBycXVpY2tFeHByID0gL14oPzojKFtcd1wtXSspfChcdyspfFwuKFtcd1wtXSspKSQvLAot
Ci0gICAgICAgIHJub3QgPSAvXjpub3QvLAotICAgICAgICByc2libGluZyA9IC9bXHgyMFx0XHJc
blxmXSpbK35dLywKLSAgICAgICAgcmVuZHNXaXRoTm90ID0gLzpub3RcKCQvLAotCi0gICAgICAg
IHJoZWFkZXIgPSAvaFxkL2ksCi0gICAgICAgIHJpbnB1dHMgPSAvaW5wdXR8c2VsZWN0fHRleHRh
cmVhfGJ1dHRvbi9pLAotCi0gICAgICAgIHJiYWNrc2xhc2ggPSAvXFwoPyFcXCkvZywKLQotICAg
ICAgICBtYXRjaEV4cHIgPSB7Ci0gICAgICAgICAgICAgICAgIklEIjogbmV3IFJlZ0V4cCggIl4j
KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiApLAotICAgICAgICAgICAgICAgICJDTEFTUyI6
IG5ldyBSZWdFeHAoICJeXFwuKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiApLAotICAgICAg
ICAgICAgICAgICJOQU1FIjogbmV3IFJlZ0V4cCggIl5cXFtuYW1lPVsnXCJdPygiICsgY2hhcmFj
dGVyRW5jb2RpbmcgKyAiKVsnXCJdP1xcXSIgKSwKLSAgICAgICAgICAgICAgICAiVEFHIjogbmV3
IFJlZ0V4cCggIl4oIiArIGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncqIiApICsg
IikiICksCi0gICAgICAgICAgICAgICAgIkFUVFIiOiBuZXcgUmVnRXhwKCAiXiIgKyBhdHRyaWJ1
dGVzICksCi0gICAgICAgICAgICAgICAgIlBTRVVETyI6IG5ldyBSZWdFeHAoICJeIiArIHBzZXVk
b3MgKSwKLSAgICAgICAgICAgICAgICAiUE9TIjogbmV3IFJlZ0V4cCggcG9zLCAiaSIgKSwKLSAg
ICAgICAgICAgICAgICAiQ0hJTEQiOiBuZXcgUmVnRXhwKCAiXjoob25seXxudGh8Zmlyc3R8bGFz
dCktY2hpbGQoPzpcXCgiICsgd2hpdGVzcGFjZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAi
KihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyB3aGl0ZXNwYWNlICsgIiooPzooWystXXwp
IiArIHdoaXRlc3BhY2UgKwotICAgICAgICAgICAgICAgICAgICAgICAgIiooXFxkKyl8KSkiICsg
d2hpdGVzcGFjZSArICIqXFwpfCkiLCAiaSIgKSwKLSAgICAgICAgICAgICAgICAvLyBGb3IgdXNl
IGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKCkKLSAgICAgICAgICAgICAgICAibmVlZHND
b250ZXh0IjogbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqWz4rfl18IiArIHBvcywg
ImkiICkKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBTdXBwb3J0Ci0KLSAgICAgICAgLy8gVXNl
ZCBmb3IgdGVzdGluZyBzb21ldGhpbmcgb24gYW4gZWxlbWVudAotICAgICAgICBhc3NlcnQgPSBm
dW5jdGlvbiggZm4gKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwotCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmbiggZGl2ICk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlIG1lbW9yeSBp
biBJRQotICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05h
bWUoIioiKSByZXR1cm5zIG9ubHkgZWxlbWVudHMKLSAgICAgICAgYXNzZXJ0VGFnTmFtZU5vQ29t
bWVudHMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICAgICAgICAgICAgICBkaXYuYXBw
ZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg7Ci0gICAgICAgIH0p
LAotCi0gICAgICAgIC8vIENoZWNrIGlmIGdldEF0dHJpYnV0ZSByZXR1cm5zIG5vcm1hbGl6ZWQg
aHJlZiBhdHRyaWJ1dGVzCi0gICAgICAgIGFzc2VydEhyZWZOb3ROb3JtYWxpemVkID0gYXNzZXJ0
KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8YSBo
cmVmPScjJz48L2E+IjsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGl2LmZpcnN0Q2hpbGQgJiYg
dHlwZW9mIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSAhPT0gc3RydW5kZWZpbmVkICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYi
KSA9PT0gIiMiOwotICAgICAgICB9KSwKLQotICAgICAgICAvLyBDaGVjayBpZiBhdHRyaWJ1dGVz
IHNob3VsZCBiZSByZXRyaWV2ZWQgYnkgYXR0cmlidXRlIG5vZGVzCi0gICAgICAgIGFzc2VydEF0
dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICAgICAgICAgICAgICBkaXYu
aW5uZXJIVE1MID0gIjxzZWxlY3Q+PC9zZWxlY3Q+IjsKLSAgICAgICAgICAgICAgICB2YXIgdHlw
ZSA9IHR5cGVvZiBkaXYubGFzdENoaWxkLmdldEF0dHJpYnV0ZSgibXVsdGlwbGUiKTsKLSAgICAg
ICAgICAgICAgICAvLyBJRTggcmV0dXJucyBhIHN0cmluZyBmb3Igc29tZSBhdHRyaWJ1dGVzIGV2
ZW4gd2hlbiBub3QgcHJlc2VudAotICAgICAgICAgICAgICAgIHJldHVybiB0eXBlICE9PSAiYm9v
bGVhbiIgJiYgdHlwZSAhPT0gInN0cmluZyI7Ci0gICAgICAgIH0pLAotCi0gICAgICAgIC8vIENo
ZWNrIGlmIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgY2FuIGJlIHRydXN0ZWQKLSAgICAgICAgYXNz
ZXJ0VXNhYmxlQ2xhc3NOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gT3BlcmEgY2FuJ3QgZmluZCBhIHNlY29uZCBjbGFzc25hbWUgKGluIDkuNikKLSAg
ICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rp
dj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiI7Ci0gICAgICAgICAgICAgICAgaWYgKCAhZGl2
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJl
IikubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFNhZmFyaSAzLjIgY2FjaGVzIGNs
YXNzIGF0dHJpYnV0ZXMgYW5kIGRvZXNuJ3QgY2F0Y2ggY2hhbmdlcwotICAgICAgICAgICAgICAg
IGRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOwotICAgICAgICAgICAgICAgIHJldHVybiBk
aXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMjsKLSAgICAgICAgfSks
Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBi
eSBuYW1lCi0gICAgICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlOYW1lIHByaXZpbGVnZXMg
Zm9ybSBjb250cm9scyBvciByZXR1cm5zIGVsZW1lbnRzIGJ5IElECi0gICAgICAgIGFzc2VydFVz
YWJsZU5hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICAgICAgICAgICAgICAvLyBJ
bmplY3QgY29udGVudAotICAgICAgICAgICAgICAgIGRpdi5pZCA9IGV4cGFuZG8gKyAwOwotICAg
ICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGV4cGFuZG8gKyAiJz48
L2E+PGRpdiBuYW1lPSciICsgZXhwYW5kbyArICInPjwvZGl2PiI7Ci0gICAgICAgICAgICAgICAg
ZG9jRWxlbS5pbnNlcnRCZWZvcmUoIGRpdiwgZG9jRWxlbS5maXJzdENoaWxkICk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBUZXN0Ci0gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5TmFtZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVnZ3kgYnJv
d3NlcnMgd2lsbCByZXR1cm4gZmV3ZXIgdGhhbiB0aGUgY29ycmVjdCAyCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aCA9
PT0gMiArCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBidWdneSBicm93c2VycyB3aWxsIHJl
dHVybiBtb3JlIHRoYW4gdGhlIGNvcnJlY3QgMAotICAgICAgICAgICAgICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKyAwICkubGVuZ3RoOwotICAgICAgICAg
ICAgICAgIGFzc2VydEdldElkTm90TmFtZSA9ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggZXhw
YW5kbyApOwotCi0gICAgICAgICAgICAgICAgLy8gQ2xlYW51cAotICAgICAgICAgICAgICAgIGRv
Y0VsZW0ucmVtb3ZlQ2hpbGQoIGRpdiApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhc3M7
Ci0gICAgICAgIH0pOwotCi0vLyBJZiBzbGljZSBpcyBub3QgYXZhaWxhYmxlLCBwcm92aWRlIGEg
YmFja3VwCi10cnkgewotICAgICAgICBzbGljZS5jYWxsKCBkb2NFbGVtLmNoaWxkTm9kZXMsIDAg
KVswXS5ub2RlVHlwZTsKLX0gY2F0Y2ggKCBlICkgewotICAgICAgICBzbGljZSA9IGZ1bmN0aW9u
KCBpICkgewotICAgICAgICAgICAgICAgIHZhciBlbGVtLAotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0cyA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ld
KTsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAg
ICAgICB9OwotfQotCi1mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRz
LCBzZWVkICkgewotICAgICAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKLSAgICAgICAgY29u
dGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0gICAgICAgIHZhciBtYXRjaCwgZWxlbSwgeG1s
LCBtLAotICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gY29udGV4dC5ub2RlVHlwZTsKLQotICAg
ICAgICBpZiAoICFzZWxlY3RvciB8fCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewot
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCBub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gW107Ci0gICAgICAgIH0KLQotICAgICAgICB4bWwgPSBpc1hNTCggY29udGV4dCApOwot
Ci0gICAgICAgIGlmICggIXhtbCAmJiAhc2VlZCApIHsKLSAgICAgICAgICAgICAgICBpZiAoICht
YXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAobSA9IG1hdGNoWzFdKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBub2RlVHlwZSA9PT0gOSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0
Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVu
dCAjNjk2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUsIE9wZXJhLCBhbmQg
V2Via2l0IHJldHVybiBpdGVtcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgPT09IG0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHMucHVzaCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHQgaXMgbm90
IGEgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGNvbnRleHQub3duZXJEb2N1bWVudCAmJiAoZWxlbSA9IGNvbnRleHQub3duZXJEb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCggbSApKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJiBlbGVtLmlkID09PSBt
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenpsZSgiVEFHIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGNoWzJdICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKGNvbnRleHQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICksIDApICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBTcGVlZC11cDogU2l6emxlKCIuQ0xBU1MiKQotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgYXNzZXJ0VXNhYmxlQ2xhc3NOYW1lICYmIGNvbnRl
eHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbChjb250ZXh0LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUoIG0gKSwgMCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWxsIG90aGVycwotICAgICAgICByZXR1cm4g
c2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApLCBjb250ZXh0LCByZXN1bHRz
LCBzZWVkLCB4bWwgKTsKLX0KLQotU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxl
bWVudHMgKSB7Ci0gICAgICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1l
bnRzICk7Ci19OwotCi1TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4
cHIgKSB7Ci0gICAgICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIFsgZWxlbSBd
ICkubGVuZ3RoID4gMDsKLX07Ci0KLS8vIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNl
dWRvcyBmb3IgaW5wdXQgdHlwZXMKLWZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkg
ewotICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09PSB0eXBlOwotICAgICAgICB9Owot
fQotCi0vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMK
LWZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHsKLSAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiAobmFtZSA9PT0gImlucHV0
IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBlID09PSB0eXBlOwotICAgICAgICB9
OwotfQotCi0vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0
aW9uYWxzCi1mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHsKLSAgICAgICAg
cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7Ci0gICAgICAgICAgICAg
ICAgYXJndW1lbnQgPSArYXJndW1lbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtGdW5j
dGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMgPSBm
biggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzCi0gICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkW2pdID0gIShtYXRjaGVzW2pd
ID0gc2VlZFtqXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci19Ci0K
LS8qKgotICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBv
ZiBhbiBhcnJheSBvZiBET00gbm9kZXMKLSAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbQot
ICovCi1nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAg
ICAgdmFyIG5vZGUsCi0gICAgICAgICAgICAgICAgcmV0ID0gIiIsCi0gICAgICAgICAgICAgICAg
aSA9IDAsCi0gICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlOwotCi0gICAg
ICAgIGlmICggbm9kZVR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBub2RlVHlwZSA9PT0g
MSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2Yg
bmV3IGxpbmVzIChzZWUgIzExMTUzKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBl
b2YgZWxlbS50ZXh0Q29udGVudCA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtLnRleHRDb250ZW50OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJhdmVy
c2UgaXRzIGNoaWxkcmVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGVs
ZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBl
bGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8
fCBub2RlVHlwZSA9PT0gNCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
Lm5vZGVWYWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gRG8gbm90
IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzCi0gICAgICAg
IH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBl
eHBlY3RlZCB0byBiZSBhbiBhcnJheQotICAgICAgICAgICAgICAgIGZvciAoIDsgKG5vZGUgPSBl
bGVtW2ldKTsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IHRyYXZl
cnNlIGNvbW1lbnQgbm9kZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBnZXRUZXh0
KCBub2RlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBy
ZXQ7Ci19OwotCi1pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAg
ICAgICAvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRv
ZXNuJ3QgeWV0IGV4aXN0Ci0gICAgICAgIC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJ
RSAtICM0ODMzKQotICAgICAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5v
d25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDsKLSAgICAgICAgcmV0dXJuIGRv
Y3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gIkhUTUwiIDogZmFs
c2U7Ci19OwotCi0vLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXIKLWNvbnRhaW5zID0gU2l6emxl
LmNvbnRhaW5zID0gZG9jRWxlbS5jb250YWlucyA/Ci0gICAgICAgIGZ1bmN0aW9uKCBhLCBiICkg
ewotICAgICAgICAgICAgICAgIHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3Vt
ZW50RWxlbWVudCA6IGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBidXAgPSBiICYmIGIucGFy
ZW50Tm9kZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYg
YnVwLm5vZGVUeXBlID09PSAxICYmIGFkb3duLmNvbnRhaW5zICYmIGFkb3duLmNvbnRhaW5zKGJ1
cCkgKTsKLSAgICAgICAgfSA6Ci0gICAgICAgIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRp
b24gPwotICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
YiAmJiAhISggYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApICYgMTYgKTsKLSAgICAgICAg
fSA6Ci0gICAgICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAgICAgICAgICAgICAgIHdoaWxlICgg
KGIgPSBiLnBhcmVudE5vZGUpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBiID09
PSBhICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OwotCi1TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBl
bGVtLCBuYW1lICkgewotICAgICAgICB2YXIgdmFsLAotICAgICAgICAgICAgICAgIHhtbCA9IGlz
WE1MKCBlbGVtICk7Ci0KLSAgICAgICAgaWYgKCAheG1sICkgewotICAgICAgICAgICAgICAgIG5h
bWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCAodmFsID0g
RXhwci5hdHRySGFuZGxlWyBuYW1lIF0pICkgewotICAgICAgICAgICAgICAgIHJldHVybiB2YWwo
IGVsZW0gKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIHhtbCB8fCBhc3NlcnRBdHRyaWJ1dGVz
ICkgewotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOwot
ICAgICAgICB9Ci0gICAgICAgIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwot
ICAgICAgICByZXR1cm4gdmFsID8KLSAgICAgICAgICAgICAgICB0eXBlb2YgZWxlbVsgbmFtZSBd
ID09PSAiYm9vbGVhbiIgPwotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgbmFtZSBdID8g
bmFtZSA6IG51bGwgOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsLnNwZWNpZmllZCA/IHZh
bC52YWx1ZSA6IG51bGwgOgotICAgICAgICAgICAgICAgIG51bGw7Ci19OwotCi1FeHByID0gU2l6
emxlLnNlbGVjdG9ycyA9IHsKLQotICAgICAgICAvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVz
ZXIKLSAgICAgICAgY2FjaGVMZW5ndGg6IDUwLAotCi0gICAgICAgIGNyZWF0ZVBzZXVkbzogbWFy
a0Z1bmN0aW9uLAotCi0gICAgICAgIG1hdGNoOiBtYXRjaEV4cHIsCi0KLSAgICAgICAgLy8gSUU2
LzcgcmV0dXJuIGEgbW9kaWZpZWQgaHJlZgotICAgICAgICBhdHRySGFuZGxlOiBhc3NlcnRIcmVm
Tm90Tm9ybWFsaXplZCA/Ci0gICAgICAgICAgICAgICAge30gOgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICJocmVmIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhy
ZWYiLCAyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAg
ICAgICAgInR5cGUiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICBmaW5kOiB7Ci0gICAg
ICAgICAgICAgICAgIklEIjogYXNzZXJ0R2V0SWROb3ROYW1lID8KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBzdHJ1
bmRlZmluZWQgJiYgIXhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3
aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2
OTYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gJiYg
bS5wYXJlbnROb2RlID8gW21dIDogW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gOgotICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24oIGlkLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVuZGVmaW5l
ZCAmJiAheG1sICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtID8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQgPT09IGlkIHx8IHR5cGVvZiBtLmdldEF0dHJp
YnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBtLmdldEF0dHJpYnV0ZU5vZGUoImlkIikudmFs
dWUgPT09IGlkID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgW21dIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgIlRBRyI6
IGFzc2VydFRhZ05hbWVOb0NvbW1lbnRzID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKCB0YWcsIGNvbnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IHN0cnVuZGVmaW5lZCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gOgotICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcg
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHBvc3Np
YmxlIGNvbW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGFnID09
PSAiKiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVs
ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAg
PSBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkg
PSAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyAo
ZWxlbSA9IHJlc3VsdHNbaV0pOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNo
KCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
ICAgICAiTkFNRSI6IGFzc2VydFVzYWJsZU5hbWUgJiYgZnVuY3Rpb24oIHRhZywgY29udGV4dCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVu
dHNCeU5hbWUgIT09IHN0cnVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIG5hbWUgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAg
IkNMQVNTIjogYXNzZXJ0VXNhYmxlQ2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNv
bnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRl
eHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gc3RydW5kZWZpbmVkICYmICF4bWwgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUoIGNsYXNzTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICByZWxhdGl2ZTogewotICAgICAg
ICAgICAgICAgICI+IjogeyBkaXI6ICJwYXJlbnROb2RlIiwgZmlyc3Q6IHRydWUgfSwKLSAgICAg
ICAgICAgICAgICAiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwKLSAgICAgICAgICAgICAgICAi
KyI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiwgZmlyc3Q6IHRydWUgfSwKLSAgICAgICAgICAg
ICAgICAifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgcHJlRmlsdGVyOiB7Ci0gICAgICAgICAgICAgICAgIkFUVFIiOiBmdW5jdGlvbiggbWF0Y2gg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2Uo
IHJiYWNrc2xhc2gsICIiICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhl
IGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICggbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwg
IiIgKS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hdGNoWzJdID09PSAifj0iICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaFszXSA9ICIgIiArIG1hdGNoWzNdICsgIiAiOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoIDAs
IDQgKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgIkNISUxEIjogZnVu
Y3Rpb24oIG1hdGNoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogbWF0Y2hlcyBmcm9t
IG1hdGNoRXhwclsiQ0hJTEQiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHR5
cGUgKG9ubHl8bnRofC4uLikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBhcmd1
bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4uLikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMyB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cZCpu
fCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCBzaWduIG9mIHhuLWNvbXBvbmVu
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IHggb2YgeG4tY29tcG9uZW50Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgc2lnbiBvZiB5LWNvbXBvbmVudAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IHkgb2YgeS1jb21wb25lbnQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IG1h
dGNoWzFdLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0
Y2hbMV0gPT09ICJudGgiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBu
dGgtY2hpbGQgcmVxdWlyZXMgYXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhbWF0Y2hbMl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbnVtZXJpYyB4
IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxECi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3Rp
dmVseSB0byAwLzEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbM10gPSAr
KCBtYXRjaFszXSA/IG1hdGNoWzRdICsgKG1hdGNoWzVdIHx8IDEpIDogMiAqICggbWF0Y2hbMl0g
PT09ICJldmVuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIgKSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaFs0XSA9ICsoICggbWF0Y2hbNl0gKyBtYXRjaFs3XSApIHx8IG1h
dGNoWzJdID09PSAib2RkIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciB0
eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIG1hdGNoWzJdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUu
ZXJyb3IoIG1hdGNoWzBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciB1bnF1b3RlZCwgZXhjZXNzOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCggbWF0Y2hbMF0gKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hbM10gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gbWF0Y2hbM107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAodW5xdW90ZWQgPSBtYXRjaFs0XSkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgY2hlY2sgYXJndW1lbnRzIHRoYXQg
Y29udGFpbiBhIHBzZXVkbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJw
c2V1ZG8udGVzdCh1bnF1b3RlZCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleGNlc3MgPSB0b2tlbml6ZSggdW5x
dW90ZWQsIHRydWUgKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZigg
IikiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCkgKSB7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGNlc3MgaXMgYSBu
ZWdhdGl2ZSBpbmRleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
cXVvdGVkID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2Vz
cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gdW5xdW90ZWQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IGNhcHR1cmVz
IG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIGZpbHRlcjogewotICAgICAgICAg
ICAgICAgICJJRCI6IGFzc2VydEdldElkTm90TmFtZSA/Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiggaWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0g
aWQucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gaWQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0
eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRB
dHRyaWJ1dGVOb2RlKCJpZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgICAgICJUQUciOiBmdW5jdGlvbiggbm9kZU5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG5vZGVOYW1lID09PSAiKiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1l
LnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICkudG9Mb3dlckNhc2UoKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgPT09IG5vZGVOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgIkNMQVNTIjogZnVuY3Rpb24oIGNsYXNz
TmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gY2xhc3NDYWNo
ZVsgZXhwYW5kbyBdWyBjbGFzc05hbWUgKyAiICIgXTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBhdHRlcm4gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBh
dHRlcm4gPSBuZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUg
KyAiKCIgKyB3aGl0ZXNwYWNlICsgInwkKSIgKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KCBl
bGVtLmNsYXNzTmFtZSB8fCAodHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBzdHJ1bmRlZmlu
ZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpIHx8ICIiICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
ICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxl
bSwgbmFtZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0
ID09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdG9yID09PSAiIT0iOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW9wZXJhdG9yICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9ICIiOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRvciA9PT0gIj0iID8gcmVzdWx0ID09PSBjaGVjayA6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICIhPSIgPyByZXN1bHQgIT09
IGNoZWNrIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRv
ciA9PT0gIl49IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIio9IiA/
IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiJD0iID8gY2hlY2sgJiYgcmVz
dWx0LnN1YnN0ciggcmVzdWx0Lmxlbmd0aCAtIGNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICJ+PSIg
PyAoICIgIiArIHJlc3VsdCArICIgIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICJ8PSIgPyByZXN1
bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zdWJzdHIoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0g
Y2hlY2sgKyAiLSIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAgICAgIkNISUxEIjogZnVuY3Rpb24oIHR5cGUsIGFyZ3VtZW50LCBmaXJzdCwg
bGFzdCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAibnRoIiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlLCBk
aWZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50ID0gZWxlbS5wYXJlbnROb2RlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5vZGUgPSBwYXJlbnQuZmlyc3RD
aGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlw
ZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWZmKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBub2RlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCAob3IgY2FzdCB0byBOYU4pLCB0aGVuIGNoZWNr
IGFnYWluc3QgY3ljbGUgc2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRpZmYgLT0gbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAv
IGZpcnN0ID49IDAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9k
ZSA9IGVsZW07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggdHlw
ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJvbmx5
IjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJmaXJzdCI6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
IChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09
IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZpcnN0IiApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVt
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBm
YWxscyB0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAibGFzdCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5uZXh0U2libGluZykgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2Rl
VHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJQU0VVRE8iOiBmdW5jdGlvbiggcHNldWRvLCBh
cmd1bWVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBzZXVkby1jbGFzcyBuYW1l
cyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3NlcwotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9t
IHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnMKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVk
b3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0
ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgcHNl
dWRvICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB1c2VyIG1heSB1c2UgY3Jl
YXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFy
Z3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBqdXN0IGFzIFNpenpsZSBkb2VzCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGZuWyBleHBhbmRvIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmbiggYXJndW1lbnQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9s
ZCBzaWduYXR1cmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZuLmxlbmd0aCA+IDEg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBzZXVkbywgcHNl
dWRvLCAiIiwgYXJndW1lbnQgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkg
KSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9u
KGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVu
dCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpID0gbWF0Y2hlZC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXhPZi5jYWxsKCBzZWVk
LCBtYXRjaGVkW2ldICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVk
W2ldICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBlbGVt
LCAwLCBhcmdzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBwc2V1ZG9z
OiB7Ci0gICAgICAgICAgICAgICAgIm5vdCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0
b3IgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNz
ZWQgdG8gY29tcGlsZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgdHJlYXRp
bmcgbGVhZGluZyBhbmQgdHJhaWxpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwYWNl
cyBhcyBjb21iaW5hdG9ycwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gW10s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxh
Y2UoIHJ0cmltLCAiJDEiICkgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
dGNoZXJbIGV4cGFuZG8gXSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtG
dW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gbWF0Y2hlcigg
c2VlZCwgbnVsbCwgeG1sLCBbXSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaSA9IHNlZWQubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVy
YAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAo
ZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dFswXSA9IGVsZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhcmVzdWx0cy5wb3AoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9KSwK
LQotICAgICAgICAgICAgICAgICJoYXMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9y
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2l6emxlKCBzZWxlY3Rvciwg
ZWxlbSApLmxlbmd0aCA+IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAgImNvbnRhaW5zIjogbWFya0Z1bmN0aW9uKGZ1
bmN0aW9uKCB0ZXh0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVt
LnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4
T2YoIHRleHQgKSA+IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICB9KSwKLQotICAgICAgICAgICAgICAgICJlbmFibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJkaXNhYmxlZCI6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJs
ZWQgPT09IHRydWU7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJjaGVj
a2VkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBD
U1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxl
bWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5vZGVOYW1lID09PSAiaW5wdXQiICYmICEhZWxl
bS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09ICJvcHRpb24iICYmICEhZWxlbS5zZWxlY3RlZCk7
Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJzZWxlY3RlZCI6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWNjZXNzaW5nIHRoaXMg
cHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3RlZCA9
PT0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgInBhcmVudCI6
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFFeHBy
LnBzZXVkb3NbImVtcHR5Il0oIGVsZW0gKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAgICAgImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkbwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gOmVtcHR5IGlzIG9ubHkgYWZmZWN0ZWQgYnkgZWxlbWVu
dCBub2RlcyBhbmQgY29udGVudCBub2RlcyhpbmNsdWRpbmcgdGV4dCgzKSwgY2RhdGEoNCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBub3QgY29tbWVudCwgcHJvY2Vzc2luZyBpbnN0
cnVjdGlvbnMsIG9yIG90aGVycwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhhbmtzIHRv
IERpZWdvIFBlcmluaSBmb3IgdGhlIG5vZGVOYW1lIHNob3J0Y3V0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgIEdyZWF0ZXIgdGhhbiAiQCIgbWVhbnMgYWxwaGEgY2hhcmFjdGVycyAoc3Bl
Y2lmaWNhbGx5IG5vdCBzdGFydGluZyB3aXRoICIjIiBvciAiPyIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgbm9kZVR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxl
bS5maXJzdENoaWxkOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5hbWUgPiAiQCIg
fHwgKG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZSkgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgICAgICJoZWFkZXIiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUg
KTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgInRleHQiOiBmdW5jdGlv
biggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlLCBhdHRyOwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSUU2IGFuZCA3IHdpbGwgbWFwIGVsZW0udHlwZSB0byAn
dGV4dCcgZm9yIG5ldyBIVE1MNSB0eXBlcyAoc2VhcmNoLCBldGMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyB1c2UgZ2V0QXR0cmlidXRlIGluc3RlYWQgdG8gdGVzdCB0aGlzIGNhc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkg
PT09ICJpbnB1dCIgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgPSBl
bGVtLnR5cGUpID09PSAidGV4dCIgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIikpID09IG51bGwgfHwgYXR0ci50b0xv
d2VyQ2FzZSgpID09PSB0eXBlICk7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
ICAgIC8vIElucHV0IHR5cGVzCi0gICAgICAgICAgICAgICAgInJhZGlvIjogY3JlYXRlSW5wdXRQ
c2V1ZG8oInJhZGlvIiksCi0gICAgICAgICAgICAgICAgImNoZWNrYm94IjogY3JlYXRlSW5wdXRQ
c2V1ZG8oImNoZWNrYm94IiksCi0gICAgICAgICAgICAgICAgImZpbGUiOiBjcmVhdGVJbnB1dFBz
ZXVkbygiZmlsZSIpLAotICAgICAgICAgICAgICAgICJwYXNzd29yZCI6IGNyZWF0ZUlucHV0UHNl
dWRvKCJwYXNzd29yZCIpLAotICAgICAgICAgICAgICAgICJpbWFnZSI6IGNyZWF0ZUlucHV0UHNl
dWRvKCJpbWFnZSIpLAotCi0gICAgICAgICAgICAgICAgInN1Ym1pdCI6IGNyZWF0ZUJ1dHRvblBz
ZXVkbygic3VibWl0IiksCi0gICAgICAgICAgICAgICAgInJlc2V0IjogY3JlYXRlQnV0dG9uUHNl
dWRvKCJyZXNldCIpLAotCi0gICAgICAgICAgICAgICAgImJ1dHRvbiI6IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gImlu
cHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8IG5hbWUgPT09ICJidXR0b24iOwotICAg
ICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiaW5wdXQiOiBmdW5jdGlvbiggZWxl
bSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0u
bm9kZU5hbWUgKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgImZvY3Vz
IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9jID0g
ZWxlbS5vd25lckRvY3VtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0g
PT09IGRvYy5hY3RpdmVFbGVtZW50ICYmICghZG9jLmhhc0ZvY3VzIHx8IGRvYy5oYXNGb2N1cygp
KSAmJiAhIShlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTsKLSAgICAg
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgImFjdGl2ZSI6IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGVsZW0ub3duZXJE
b2N1bWVudC5hY3RpdmVFbGVtZW50OwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAg
ICAgICAvLyBQb3NpdGlvbmFsIHR5cGVzCi0gICAgICAgICAgICAgICAgImZpcnN0IjogY3JlYXRl
UG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBbIDAgXTsKLSAgICAgICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgICAgICJsYXN0
IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyBsZW5ndGggLSAxIF07Ci0gICAg
ICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgICAgICAiZXEiOiBjcmVhdGVQb3NpdGlvbmFs
UHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxl
bmd0aCA6IGFyZ3VtZW50IF07Ci0gICAgICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgICAg
ICAiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywg
bGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpICs9IDIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
SW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgICAgICAgICAgICAgIH0pLAot
Ci0gICAgICAgICAgICAgICAgIm9kZCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24o
IG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgICAg
ICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAgImx0IjogY3JlYXRlUG9zaXRpb25hbFBz
ZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCAr
IGxlbmd0aCA6IGFyZ3VtZW50OyAtLWkgPj0gMDsgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgICAg
ICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAgImd0IjogY3JlYXRlUG9zaXRpb25hbFBz
ZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCAr
IGxlbmd0aCA6IGFyZ3VtZW50OyArK2kgPCBsZW5ndGg7ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKLSAg
ICAgICAgICAgICAgICB9KQotICAgICAgICB9Ci19OwotCi1mdW5jdGlvbiBzaWJsaW5nQ2hlY2so
IGEsIGIsIHJldCApIHsKLSAgICAgICAgaWYgKCBhID09PSBiICkgewotICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY3VyID0gYS5uZXh0U2libGlu
ZzsKLQotICAgICAgICB3aGlsZSAoIGN1ciApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGN1ciA9
PT0gYiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjdXIgPSBjdXIubmV4dFNpYmxpbmc7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gMTsKLX0KLQotc29ydE9yZGVyID0gZG9jRWxlbS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbiA/Ci0gICAgICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAgICAgICAg
ICAgICAgIGlmICggYSA9PT0gYiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0R1cGxp
Y2F0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gKCAhYS5jb21wYXJlRG9jdW1lbnRQ
b3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0Ci0gICAgICAgICAgICAgICAgKSA/
IC0xIDogMTsKLSAgICAgICAgfSA6Ci0gICAgICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAgICAg
ICAgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgaWRlbnRpY2FsLCB3ZSBjYW4gZXhpdCBlYXJseQot
ICAgICAgICAgICAgICAgIGlmICggYSA9PT0gYiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGhhc0R1cGxpY2F0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LQotICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHVzaW5nIHNvdXJjZUluZGV4IChpbiBJ
RSkgaWYgaXQncyBhdmFpbGFibGUgb24gYm90aCBub2RlcwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIGEuc291cmNlSW5kZXggJiYgYi5zb3VyY2VJbmRleCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgYWwsIGJsLAotICAgICAgICAgICAgICAg
ICAgICAgICAgYXAgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJwID0gW10sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhdXAgPSBhLnBhcmVudE5vZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBidXAgPSBiLnBhcmVudE5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXIg
PSBhdXA7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzIChv
ciBpZGVudGljYWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCi0gICAgICAgICAgICAgICAgaWYg
KCBhdXAgPT09IGJ1cCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWJsaW5n
Q2hlY2soIGEsIGIgKTsKLQotICAgICAgICAgICAgICAgIC8vIElmIG5vIHBhcmVudHMgd2VyZSBm
b3VuZCB0aGVuIHRoZSBub2RlcyBhcmUgZGlzY29ubmVjdGVkCi0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggIWF1cCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFidXAgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBP
dGhlcndpc2UgdGhleSdyZSBzb21ld2hlcmUgZWxzZSBpbiB0aGUgdHJlZSBzbyB3ZSBuZWVkCi0g
ICAgICAgICAgICAgICAgLy8gdG8gYnVpbGQgdXAgYSBmdWxsIGxpc3Qgb2YgdGhlIHBhcmVudE5v
ZGVzIGZvciBjb21wYXJpc29uCi0gICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBhcC51bnNoaWZ0KCBjdXIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGN1ciA9IGJ1cDsKLQotICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgYnAudW5zaGlmdCggY3VyICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBhbCA9IGFwLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBibCA9IGJwLmxl
bmd0aDsKLQotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHdhbGtpbmcgZG93biB0aGUgdHJlZSBs
b29raW5nIGZvciBhIGRpc2NyZXBhbmN5Ci0gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAw
OyBpIDwgYWwgJiYgaSA8IGJsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGFwW2ldICE9PSBicFtpXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2UgZW5kZWQgc29t
ZXBsYWNlIHVwIHRoZSB0cmVlIHNvIGRvIGEgc2libGluZyBjaGVjawotICAgICAgICAgICAgICAg
IHJldHVybiBpID09PSBhbCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5nQ2hlY2so
IGEsIGJwW2ldLCAtMSApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdDaGVjaygg
YXBbaV0sIGIsIDEgKTsKLSAgICAgICAgfTsKLQotLy8gQWx3YXlzIGFzc3VtZSB0aGUgcHJlc2Vu
Y2Ugb2YgZHVwbGljYXRlcyBpZiBzb3J0IGRvZXNuJ3QKLS8vIHBhc3MgdGhlbSB0byBvdXIgY29t
cGFyaXNvbiBmdW5jdGlvbiAoYXMgaW4gR29vZ2xlIENocm9tZSkuCi1bMCwgMF0uc29ydCggc29y
dE9yZGVyICk7Ci1iYXNlSGFzRHVwbGljYXRlID0gIWhhc0R1cGxpY2F0ZTsKLQotLy8gRG9jdW1l
bnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcwotU2l6emxlLnVuaXF1ZVNvcnQgPSBm
dW5jdGlvbiggcmVzdWx0cyApIHsKLSAgICAgICAgdmFyIGVsZW0sCi0gICAgICAgICAgICAgICAg
ZHVwbGljYXRlcyA9IFtdLAotICAgICAgICAgICAgICAgIGkgPSAxLAotICAgICAgICAgICAgICAg
IGogPSAwOwotCi0gICAgICAgIGhhc0R1cGxpY2F0ZSA9IGJhc2VIYXNEdXBsaWNhdGU7Ci0gICAg
ICAgIHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7Ci0KLSAgICAgICAgaWYgKCBoYXNEdXBsaWNh
dGUgKSB7Ci0gICAgICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IHJlc3VsdHNbaV0pOyBpKysg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgLSAx
IF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBkdXBsaWNhdGVzLnB1
c2goIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgd2hpbGUgKCBqLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci19OwotCi1TaXp6bGUuZXJyb3Ig
PSBmdW5jdGlvbiggbXNnICkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICJTeW50YXggZXJy
b3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgbXNnICk7Ci19OwotCi1mdW5jdGlvbiB0
b2tlbml6ZSggc2VsZWN0b3IsIHBhcnNlT25seSApIHsKLSAgICAgICAgdmFyIG1hdGNoZWQsIG1h
dGNoLCB0b2tlbnMsIHR5cGUsCi0gICAgICAgICAgICAgICAgc29GYXIsIGdyb3VwcywgcHJlRmls
dGVycywKLSAgICAgICAgICAgICAgICBjYWNoZWQgPSB0b2tlbkNhY2hlWyBleHBhbmRvIF1bIHNl
bGVjdG9yICsgIiAiIF07Ci0KLSAgICAgICAgaWYgKCBjYWNoZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHNvRmFyID0gc2VsZWN0b3I7Ci0gICAgICAgIGdyb3VwcyA9IFtdOwotICAgICAg
ICBwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7Ci0KLSAgICAgICAgd2hpbGUgKCBzb0ZhciAp
IHsKLQotICAgICAgICAgICAgICAgIC8vIENvbW1hIGFuZCBmaXJzdCBydW4KLSAgICAgICAgICAg
ICAgICBpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2ggKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlk
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1h
dGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2goIHRva2VucyA9IFtdICk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IGZhbHNlOwotCi0gICAgICAg
ICAgICAgICAgLy8gQ29tYmluYXRvcnMKLSAgICAgICAgICAgICAgICBpZiAoIChtYXRjaCA9IHJj
b21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2Vucy5wdXNoKCBtYXRjaGVkID0gbmV3IFRva2VuKCBtYXRjaC5zaGlmdCgpICkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9y
cyB0byBzcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC50eXBlID0gbWF0Y2hb
MF0ucmVwbGFjZSggcnRyaW0sICIgIiApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIEZpbHRlcnMKLSAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIEV4cHIuZmls
dGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJb
IHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1h
dGNoICkpKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVz
aCggbWF0Y2hlZCA9IG5ldyBUb2tlbiggbWF0Y2guc2hpZnQoKSApICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQudHlwZSA9IHR5cGU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQubWF0Y2hlcyA9IG1hdGNoOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICggIW1hdGNoZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1cm4gdGhlIGxl
bmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKLSAgICAgICAgLy8gaWYgd2UncmUganVzdCBwYXJz
aW5nCi0gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vu
cwotICAgICAgICByZXR1cm4gcGFyc2VPbmx5ID8KLSAgICAgICAgICAgICAgICBzb0Zhci5sZW5n
dGggOgotICAgICAgICAgICAgICAgIHNvRmFyID8KLSAgICAgICAgICAgICAgICAgICAgICAgIFNp
enpsZS5lcnJvciggc2VsZWN0b3IgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNo
ZSB0aGUgdG9rZW5zCi0gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkNhY2hlKCBzZWxlY3Rv
ciwgZ3JvdXBzICkuc2xpY2UoIDAgKTsKLX0KLQotZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0
Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHsKLSAgICAgICAgdmFyIGRpciA9IGNvbWJpbmF0b3Iu
ZGlyLAotICAgICAgICAgICAgICAgIGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGNvbWJpbmF0
b3IuZGlyID09PSAicGFyZW50Tm9kZSIsCi0gICAgICAgICAgICAgICAgZG9uZU5hbWUgPSBkb25l
Kys7Ci0KLSAgICAgICAgcmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgPwotICAgICAgICAgICAgICAg
IC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAotICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5ub2Rl
VHlwZSA9PT0gMSAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSA6Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9w
cmVjZWRpbmcgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4
dCwgeG1sICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGFyYml0
cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gZGlyIGNh
Y2hpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXhtbCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpcmtleSA9IGRpcnJ1bnMgKyAiICIgKyBkb25lTmFtZSArICIgIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRrZXkgPSBkaXJr
ZXkgKyBjYWNoZWRydW5zOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
IChlbGVtID0gZWxlbVsgZGlyIF0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggY2hlY2tOb25FbGVtZW50cyB8fCBlbGVtLm5vZGVUeXBlID09PSAxICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAo
Y2FjaGUgPSBlbGVtWyBleHBhbmRvIF0pID09PSBjYWNoZWRrZXkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNp
enNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIHR5cGVvZiBjYWNoZSA9PT0gInN0cmluZyIgJiYgY2FjaGUuaW5kZXhPZihkaXJr
ZXkpID09PSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0uc2l6c2V0ICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtWyBleHBhbmRvIF0gPSBjYWNoZWRrZXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4
dCwgeG1sICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpzZXQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0uc2l6c2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY2hlY2tOb25FbGVtZW50cyB8fCBlbGVtLm5vZGVUeXBlID09PSAx
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLX0K
LQotZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgewotICAgICAgICByZXR1cm4g
bWF0Y2hlcnMubGVuZ3RoID4gMSA/Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNv
bnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gbWF0Y2hlcnMu
bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW1hdGNoZXJzW2ldKCBlbGVtLCBjb250ZXh0
LCB4bWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgIH0gOgotICAgICAgICAgICAgICAgIG1hdGNoZXJzWzBdOwotfQotCi1mdW5j
dGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkgewot
ICAgICAgICB2YXIgZWxlbSwKLSAgICAgICAgICAgICAgICBuZXdVbm1hdGNoZWQgPSBbXSwKLSAg
ICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICBsZW4gPSB1bm1hdGNoZWQubGVu
Z3RoLAotICAgICAgICAgICAgICAgIG1hcHBlZCA9IG1hcCAhPSBudWxsOwotCi0gICAgICAgIGZv
ciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSB1bm1h
dGNoZWRbaV0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZmlsdGVyIHx8IGZp
bHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbWFwcGVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcC5wdXNoKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gbmV3VW5tYXRjaGVkOwotfQotCi1mdW5jdGlvbiBzZXRNYXRj
aGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVy
LCBwb3N0U2VsZWN0b3IgKSB7Ci0gICAgICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRl
clsgZXhwYW5kbyBdICkgewotICAgICAgICAgICAgICAgIHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVy
KCBwb3N0RmlsdGVyICk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBwb3N0RmluZGVyICYmICFw
b3N0RmluZGVyWyBleHBhbmRvIF0gKSB7Ci0gICAgICAgICAgICAgICAgcG9zdEZpbmRlciA9IHNl
dE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHht
bCApIHsKLSAgICAgICAgICAgICAgICB2YXIgdGVtcCwgaSwgZWxlbSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHByZU1hcCA9IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1hcCA9
IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0
aCwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJv
bSBzZWVkIG9yIGNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zID0gc2VlZCB8
fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCAiKiIsIGNvbnRleHQubm9kZVR5cGUgPyBb
IGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2Vl
ZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNv
bnRleHQsIHhtbCApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXMsCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZp
bHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEZpbmRlciB8fCAoIHNlZWQg
PyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgPwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3Np
bmcgaXMgbmVjZXNzYXJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
W10gOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4ub3Ro
ZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0cyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZXJJbjsKLQotICAgICAgICAgICAgICAgIC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzCi0gICAg
ICAgICAgICAgICAgaWYgKCBtYXRjaGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBcHBseSBwb3N0RmlsdGVyCi0gICAgICAgICAg
ICAgICAgaWYgKCBwb3N0RmlsdGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9
IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFj
ayB0byBtYXRjaGVySW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0ZW1wLmxlbmd0aDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gISht
YXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCBzZWVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRo
aXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0cwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gbWF0Y2hlck91
dFtpXSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZp
bmFsIG1hdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVz
dWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9m
LmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFt0ZW1wXSA9ICEocmVzdWx0
c1t0ZW1wXSA9IGVsZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRo
cm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBjb25kZW5zZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0
aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVyT3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotfQotCi1m
dW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkgewotICAgICAgICB2YXIgY2hlY2tD
b250ZXh0LCBtYXRjaGVyLCBqLAotICAgICAgICAgICAgICAgIGxlbiA9IHRva2Vucy5sZW5ndGgs
Ci0gICAgICAgICAgICAgICAgbGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5z
WzBdLnR5cGUgXSwKLSAgICAgICAgICAgICAgICBpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1Jl
bGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIiAiXSwKLSAgICAgICAgICAgICAgICBpID0gbGVhZGlu
Z1JlbGF0aXZlID8gMSA6IDAsCi0KLSAgICAgICAgICAgICAgICAvLyBUaGUgZm91bmRhdGlvbmFs
IG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2
ZWwgY29udGV4dChzKQotICAgICAgICAgICAgICAgIG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0
b3IoIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVs
ZW0gPT09IGNoZWNrQ29udGV4dDsKLSAgICAgICAgICAgICAgICB9LCBpbXBsaWNpdFJlbGF0aXZl
LCB0cnVlICksCi0gICAgICAgICAgICAgICAgbWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRv
ciggZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5k
ZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOwotICAgICAgICAgICAgICAgIH0s
IGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKLSAgICAgICAgICAgICAgICBtYXRjaGVycyA9IFsg
ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJt
b3N0Q29udGV4dCApICkgfHwgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hl
Y2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoQW55Q29udGV4dCggZWxl
bSwgY29udGV4dCwgeG1sICkgKTsKLSAgICAgICAgICAgICAgICB9IF07Ci0KLSAgICAgICAgZm9y
ICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAobWF0Y2hlciA9IEV4
cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyAp
LCBtYXRjaGVyICkgXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBu
dWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlcgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlm
IGFueSkgZm9yIHByb3BlciBoYW5kbGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqID0gKytpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGogPCBs
ZW47IGorKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldE1hdGNoZXIoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA+IDEgJiYgZWxlbWVudE1hdGNo
ZXIoIG1hdGNoZXJzICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aSA+IDEgJiYgdG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmpvaW4oIiIpLnJlcGxhY2UoIHJ0cmlt
LCAiJDEiICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpIDwgaiAmJiBtYXRj
aGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9r
ZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaiA8IGxlbiAmJiB0b2tlbnMuam9pbigiIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7
Ci19Ci0KLWZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJz
LCBzZXRNYXRjaGVycyApIHsKLSAgICAgICAgdmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3Ro
ID4gMCwKLSAgICAgICAgICAgICAgICBieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3Ro
ID4gMCwKLSAgICAgICAgICAgICAgICBzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29u
dGV4dCwgeG1sLCByZXN1bHRzLCBleHBhbmRDb250ZXh0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGVsZW0sIGosIG1hdGNoZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldE1hdGNoZWQgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlZENvdW50ID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9ICIwIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gc2VlZCAmJiBbXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJtb3N0ID0gZXhwYW5kQ29udGV4
dCAhPSBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0QmFja3Vw
ID0gb3V0ZXJtb3N0Q29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBjb250ZXh0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYg
RXhwci5maW5kWyJUQUciXSggIioiLCBleHBhbmRDb250ZXh0ICYmIGNvbnRleHQucGFyZW50Tm9k
ZSB8fCBjb250ZXh0ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lc3Rl
ZCBtYXRjaGVycyBzaG91bGQgdXNlIG5vbi1pbnRlZ2VyIGRpcnJ1bnMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlycnVuc1VuaXF1ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNr
dXAgPT0gbnVsbCA/IDEgOiBNYXRoLkUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG91dGVybW9zdCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJtb3N0
Q29udGV4dCA9IGNvbnRleHQgIT09IGRvY3VtZW50ICYmIGNvbnRleHQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlZHJ1bnMgPSBzdXBlck1hdGNoZXIuZWw7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBlbGVt
ZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzCi0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBieUVsZW1lbnQgJiYgZWxl
bSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0g
MDsgKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbal0pOyBqKysgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNv
bnRleHQsIHhtbCApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRydW5zID0gKytzdXBl
ck1hdGNoZXIuZWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVycwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGJ5U2V0ICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhy
b3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQtLTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5
IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBzZWVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVkQ291bnQgKz0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBqID0gMDsgKG1hdGNoZXIgPSBzZXRNYXRjaGVyc1tqXSk7IGorKyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyKCB1bm1h
dGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWVk
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlaW50ZWdy
YXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmcKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZWRDb3VudCA+
IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBv
bmx5IGFjdHVhbCBtYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBB
ZGQgbWF0Y2hlcyB0byByZXN1bHRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1
Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmcKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGgg
PiAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBtYXRjaGVk
Q291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBn
bG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVycwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBv
dXRlcm1vc3QgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnJ1bnMgPSBk
aXJydW5zVW5pcXVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlcm1vc3RD
b250ZXh0ID0gY29udGV4dEJhY2t1cDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hlZDsKLSAgICAgICAgICAgICAgICB9
OwotCi0gICAgICAgIHN1cGVyTWF0Y2hlci5lbCA9IDA7Ci0gICAgICAgIHJldHVybiBieVNldCA/
Ci0gICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6Ci0gICAgICAg
ICAgICAgICAgc3VwZXJNYXRjaGVyOwotfQotCi1jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBm
dW5jdGlvbiggc2VsZWN0b3IsIGdyb3VwIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgewotICAg
ICAgICB2YXIgaSwKLSAgICAgICAgICAgICAgICBzZXRNYXRjaGVycyA9IFtdLAotICAgICAgICAg
ICAgICAgIGVsZW1lbnRNYXRjaGVycyA9IFtdLAotICAgICAgICAgICAgICAgIGNhY2hlZCA9IGNv
bXBpbGVyQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAiICIgXTsKLQotICAgICAgICBpZiAo
ICFjYWNoZWQgKSB7Ci0gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiBy
ZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50
Ci0gICAgICAgICAgICAgICAgaWYgKCAhZ3JvdXAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBncm91cCA9IHRva2VuaXplKCBzZWxlY3RvciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpID0gZ3JvdXAubGVuZ3RoOwotICAgICAgICAgICAgICAgIHdoaWxlICggaS0t
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMo
IGdyb3VwW2ldICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhY2hlZFsgZXhwYW5k
byBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaGVycy5wdXNo
KCBjYWNoZWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICBjYWNo
ZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBl
bGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gY2FjaGVkOwotfTsKLQotZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNv
bnRleHRzLCByZXN1bHRzICkgewotICAgICAgICB2YXIgaSA9IDAsCi0gICAgICAgICAgICAgICAg
bGVuID0gY29udGV4dHMubGVuZ3RoOwotICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsK
LSAgICAgICAgICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyAp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHRzOwotfQotCi1mdW5jdGlvbiBzZWxl
Y3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKSB7Ci0gICAgICAgIHZh
ciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLAotICAgICAgICAgICAgICAgIG1hdGNoID0g
dG9rZW5pemUoIHNlbGVjdG9yICksCi0gICAgICAgICAgICAgICAgaiA9IG1hdGNoLmxlbmd0aDsK
LQotICAgICAgICBpZiAoICFzZWVkICkgewotICAgICAgICAgICAgICAgIC8vIFRyeSB0byBtaW5p
bWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIGdyb3VwCi0gICAgICAgICAgICAg
ICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSByb290IHNlbGVj
dG9yIGlzIGFuIElECi0gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSBtYXRjaFswXSA9
IG1hdGNoWzBdLnNsaWNlKCAwICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRva2Vu
cy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gIklEIiAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubm9kZVR5cGUgPT09
IDkgJiYgIXhtbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4
cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dCA9IEV4cHIuZmluZFsiSUQiXSggdG9rZW4ubWF0Y2hlc1swXS5y
ZXBsYWNlKCByYmFja3NsYXNoLCAiIiApLCBjb250ZXh0LCB4bWwgKVswXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29udGV4dCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVj
dG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLmxlbmd0aCApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGZXRjaCBhIHNl
ZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBpID0gbWF0Y2hFeHByWyJQT1MiXS50ZXN0KCBzZWxlY3RvciApID8gLTEgOiB0b2tl
bnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3IKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBs
ZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIChzZWVkID0gZmluZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFz
aCwgIiIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgY29udGV4dC5wYXJlbnROb2RlIHx8
IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4bWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSApIHsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2Vl
ZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMuc3BsaWNl
KCBpLCAxICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRva2Vucy5qb2luKCIiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNlbGVjdG9yICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKCBzZWVkLCAwICkgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBm
aWx0ZXJpbmcgZnVuY3Rpb24KLSAgICAgICAgLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJl
dG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQotICAgICAgICBj
b21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSgKLSAgICAgICAgICAgICAgICBzZWVkLAotICAgICAg
ICAgICAgICAgIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgeG1sLAotICAgICAgICAgICAgICAg
IHJlc3VsdHMsCi0gICAgICAgICAgICAgICAgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKQotICAg
ICAgICApOwotICAgICAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotaWYgKCBkb2N1bWVudC5xdWVy
eVNlbGVjdG9yQWxsICkgewotICAgICAgICAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGRpc2Nvbm5lY3RlZE1hdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgb2xkU2VsZWN0
ID0gc2VsZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzY2FwZSA9IC8nfFxcL2csCi0g
ICAgICAgICAgICAgICAgICAgICAgICByYXR0cmlidXRlUXVvdGVzID0gL1w9W1x4MjBcdFxyXG5c
Zl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxdL2csCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpLCBu
byBuZWVkIHRvIGFsc28gYWRkIHRvIGJ1Z2d5TWF0Y2hlcyBzaW5jZSBtYXRjaGVzIGNoZWNrcyBi
dWdneVFTQQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBzdXBwb3J0IHRlc3Qgd291bGQg
cmVxdWlyZSB0b28gbXVjaCBjb2RlICh3b3VsZCBpbmNsdWRlIGRvY3VtZW50IHJlYWR5KQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBID0gWyAiOmZvY3VzIiBdLAotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxz
ZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QSBzdXBwb3J0IHRlc3Qgd291bGQgcmVxdWlyZSB0b28gbXVjaCBjb2RlICh3b3VsZCBpbmNsdWRl
IGRvY3VtZW50IHJlYWR5KQotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBza2lwIG1h
dGNoZXNTZWxlY3RvciBmb3IgOmFjdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5
TWF0Y2hlcyA9IFsgIjphY3RpdmUiIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVz
ID0gZG9jRWxlbS5tYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3I7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBCdWlsZCBRU0EgcmVnZXgKLSAgICAgICAgICAgICAgICAvLyBSZWdl
eCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pCi0gICAgICAgICAgICAgICAgYXNz
ZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3Qg
aXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY3RseQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1
dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxk
IGJlIGVub3VnaAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2J1Z3MuanF1ZXJ5
LmNvbS90aWNrZXQvMTIzNTkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwg
PSAiPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiI7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElFOCAtIFNvbWUgYm9vbGVhbiBhdHRyaWJ1dGVzIGFy
ZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWRp
di5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlxcWyIgKyB3aGl0ZXNwYWNlICsg
IiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZh
bHVlKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBv
cHRpb24gZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgKGRvIG5vdCBwdXQgdGVz
dHMgYWZ0ZXIgdGhpcyBvbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFkaXYucXVl
cnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCI6Y2hlY2tlZCIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgYXNzZXJ0
KGZ1bmN0aW9uKCBkaXYgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhIDEw
LTEyL0lFOSAtIF49ICQ9ICo9IGFuZCBlbXB0eSB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFNob3VsZCBub3Qgc2VsZWN0IGFueXRoaW5nCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkaXYuaW5uZXJIVE1MID0gIjxwIHRlc3Q9Jyc+PC9wPiI7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbdGVzdF49JyddIikubGVuZ3RoICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlsqXiRdPSIg
KyB3aGl0ZXNwYWNlICsgIiooPzpcIlwifCcnKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2Fi
bGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxl
ZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSAoZG8g
bm90IHB1dCB0ZXN0cyBhZnRlciB0aGlzIG9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRp
di5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2hpZGRlbicvPiI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGggKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCI6ZW5hYmxl
ZCIsICI6ZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9KTsKLQotICAgICAgICAgICAgICAgIC8vIHJidWdneVFTQSBhbHdheXMgY29udGFpbnMg
OmZvY3VzLCBzbyBubyBuZWVkIGZvciBhIGxlbmd0aCBjaGVjawotICAgICAgICAgICAgICAgIHJi
dWdneVFTQSA9IC8qIHJidWdneVFTQS5sZW5ndGggJiYgKi8gbmV3IFJlZ0V4cCggcmJ1Z2d5UVNB
LmpvaW4oInwiKSApOwotCi0gICAgICAgICAgICAgICAgc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVj
dG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPbmx5IHVzZSBxdWVyeVNlbGVjdG9yQWxsIHdoZW4gbm90IGZpbHRlcmluZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhpcyBpcyBub3QgeG1sLAotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYW5kIHdoZW4gbm8gUVNBIGJ1Z3MgYXBwbHkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIXNlZWQgJiYgIXhtbCAmJiAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVj
dG9yICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cHMsIGks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkID0gdHJ1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWQgPSBleHBhbmRvLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQgPSBjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdG9yID0g
Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBzZWxlY3RvcjsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBxU0Egd29ya3Mgc3RyYW5nZWx5IG9uIEVsZW1lbnQtcm9vdGVkIHF1
ZXJpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHdvcmsgYXJv
dW5kIHRoaXMgYnkgc3BlY2lmeWluZyBhbiBleHRyYSBJRCBvbiB0aGUgcm9vdAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFu
a3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhlIHRlY2huaXF1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSUUgOCBkb2Vzbid0IHdvcmsgb24gb2JqZWN0IGVsZW1lbnRzCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0g
MSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9IHRva2VuaXplKCBz
ZWxlY3RvciApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoImlkIikpICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gb2xkLnJlcGxhY2UoIHJlc2Nh
cGUsICJcXCQmIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnNldEF0dHJpYnV0ZSggImlkIiwgbmlkICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5pZCA9ICJbaWQ9JyIgKyBuaWQgKyAiJ10gIjsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGkgPSBncm91cHMubGVuZ3RoOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW2ldID0gbmlkICsgZ3JvdXBzW2ld
LmpvaW4oIiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0ID0gcnNpYmxp
bmcudGVzdCggc2VsZWN0b3IgKSAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwgY29udGV4dDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RvciA9IGdyb3Vw
cy5qb2luKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5ld1NlbGVjdG9yICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5j
YWxsKCBuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdG9yCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAwICkgKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gocXNhRXJyb3Ip
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb2xk
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9s
ZFNlbGVjdCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQsIHhtbCApOwotICAgICAg
ICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXMgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8g
bWF0Y2hlc1NlbGVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIGEg
ZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYiICk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4
Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZWNrbyBkb2VzIG5v
dCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlcy5jYWxsKCBkaXYsICJbdGVzdCE9JyddOnNpenpsZSIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYnVnZ3lNYXRjaGVzLnB1c2goICIhPSIsIHBzZXVkb3Mg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7fQotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJi
dWdneU1hdGNoZXMgYWx3YXlzIGNvbnRhaW5zIDphY3RpdmUgYW5kIDpmb2N1cywgc28gbm8gbmVl
ZCBmb3IgYSBsZW5ndGggY2hlY2sKLSAgICAgICAgICAgICAgICAgICAgICAgIHJidWdneU1hdGNo
ZXMgPSAvKiByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiAqLyBuZXcgUmVnRXhwKCByYnVnZ3lNYXRj
aGVzLmpvaW4oInwiKSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUubWF0Y2hl
c1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBzZWxlY3RvcnMgYXJlIHF1
b3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gZXhwci5yZXBsYWNl
KCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSddIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHJidWdneU1hdGNoZXMgYWx3YXlzIGNvbnRhaW5zIDphY3RpdmUsIHNvIG5v
IG5lZWQgZm9yIGFuIGV4aXN0ZW5jZSBjaGVjawotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFpc1hNTCggZWxlbSApICYmICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSAm
JiAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSA5J3MgbWF0
Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCB8fCBkaXNj
b25uZWN0ZWRNYXRjaCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBh
cmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChl
KSB7fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgWyBlbGVt
IF0gKS5sZW5ndGggPiAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0pKCk7Ci19Ci0KLS8vIERlcHJlY2F0ZWQKLUV4cHIucHNldWRvc1si
bnRoIl0gPSBFeHByLnBzZXVkb3NbImVxIl07Ci0KLS8vIEJhY2stY29tcGF0Ci1mdW5jdGlvbiBz
ZXRGaWx0ZXJzKCkge30KLUV4cHIuZmlsdGVycyA9IHNldEZpbHRlcnMucHJvdG90eXBlID0gRXhw
ci5wc2V1ZG9zOwotRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTsKLQotLy8gT3Zl
cnJpZGUgc2l6emxlIGF0dHJpYnV0ZSByZXRyaWV2YWwKLVNpenpsZS5hdHRyID0galF1ZXJ5LmF0
dHI7Ci1qUXVlcnkuZmluZCA9IFNpenpsZTsKLWpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9y
czsKLWpRdWVyeS5leHByWyI6Il0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOwotalF1ZXJ5LnVuaXF1
ZSA9IFNpenpsZS51bmlxdWVTb3J0OwotalF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDsKLWpR
dWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDsKLWpRdWVyeS5jb250YWlucyA9IFNpenpsZS5j
b250YWluczsKLQotCi19KSggd2luZG93ICk7Ci12YXIgcnVudGlsID0gL1VudGlsJC8sCi0gICAg
ICAgIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLAotICAg
ICAgICBpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC8sCi0gICAgICAgIHJuZWVkc0NvbnRleHQg
PSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsCi0gICAgICAgIC8vIG1ldGhvZHMgZ3Vh
cmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlx
dWUgc2V0Ci0gICAgICAgIGd1YXJhbnRlZWRVbmlxdWUgPSB7Ci0gICAgICAgICAgICAgICAgY2hp
bGRyZW46IHRydWUsCi0gICAgICAgICAgICAgICAgY29udGVudHM6IHRydWUsCi0gICAgICAgICAg
ICAgICAgbmV4dDogdHJ1ZSwKLSAgICAgICAgICAgICAgICBwcmV2OiB0cnVlCi0gICAgICAgIH07
Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgICAgICBmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3Ig
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGksIGwsIGxlbmd0aCwgbiwgciwgcmV0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZiA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4galF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlcihmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8IGw7
IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCAiIiwgImZpbmQiLCBzZWxlY3Rv
ciApOwotCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJldC5sZW5ndGg7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZCggc2VsZWN0b3IsIHRoaXNbaV0s
IHJldCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGkgPiAwICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyBh
cmUgdW5pcXVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG4gPSBsZW5n
dGg7IG4gPCByZXQubGVuZ3RoOyBuKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggciA9IDA7IHIgPCBsZW5ndGg7IHIrKyApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0W3JdID09PSByZXRb
bl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldC5zcGxpY2Uobi0tLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHJldDsKLSAgICAgICAgfSwKLQotICAgICAgICBoYXM6IGZ1bmN0aW9uKCB0YXJnZXQg
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGksCi0gICAgICAgICAgICAgICAgICAgICAgICB0YXJn
ZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxl
biA9IHRhcmdldHMubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVy
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBs
ZW47IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
Y29udGFpbnMoIHRoaXMsIHRhcmdldHNbaV0gKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICB9LAotCi0gICAgICAgIG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCBm
YWxzZSksICJub3QiLCBzZWxlY3Rvcik7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmlsdGVyOiBm
dW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0
YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIHRydWUpLCAiZmlsdGVyIiwgc2VsZWN0b3IgKTsK
LSAgICAgICAgfSwKLQotICAgICAgICBpczogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmICgKLSAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hl
Y2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHNvICQoInA6Zmlyc3QiKS5pcygicDpsYXN0Iikgd29uJ3QgcmV0dXJuIHRy
dWUgZm9yIGEgZG9jIHdpdGggdHdvICJwIi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9yLCB0aGlzLmNvbnRleHQgKS5pbmRl
eCggdGhpc1swXSApID49IDAgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCB0aGlzICkubGVuZ3RoID4gMCA6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyKCBzZWxlY3RvciApLmxlbmd0aCA+
IDAgKTsKLSAgICAgICAgfSwKLQotICAgICAgICBjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3Jz
LCBjb250ZXh0ICkgewotICAgICAgICAgICAgICAgIHZhciBjdXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFtdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgcG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0
b3JzICE9PSAic3RyaW5nIiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMDsKLQotICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkr
KyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IHRoaXNbaV07Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICYmIGN1ci5vd25lckRvY3VtZW50ICYmIGN1ciAh
PT0gY29udGV4dCAmJiBjdXIubm9kZVR5cGUgIT09IDExICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHBvcyA/IHBvcy5pbmRleChjdXIpID4gLTEgOiBqUXVlcnkuZmlu
ZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3RvcnMpICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBjdXIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50
Tm9kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICByZXQgPSByZXQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCAp
IDogcmV0OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsICJj
bG9zZXN0Iiwgc2VsZWN0b3JzICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gRGV0ZXJtaW5l
IHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbgotICAgICAgICAvLyB0aGUgbWF0Y2hl
ZCBzZXQgb2YgZWxlbWVudHMKLSAgICAgICAgaW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkgewotCi0g
ICAgICAgICAgICAgICAgLy8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnQKLSAg
ICAgICAgICAgICAgICBpZiAoICFlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSA/IHRoaXMucHJldkFsbCgpLmxl
bmd0aCA6IC0xOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGluZGV4
IGluIHNlbGVjdG9yCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmlu
ZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIHRo
aXNbMF0sIGpRdWVyeSggZWxlbSApICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBp
cyB1c2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmpxdWVyeSA/IGVsZW1bMF0gOiBl
bGVtLCB0aGlzICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYWRkOiBmdW5jdGlvbiggc2VsZWN0
b3IsIGNvbnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHNldCA9IHR5cGVvZiBzZWxlY3Rv
ciA9PT0gInN0cmluZyIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnko
IHNlbGVjdG9yLCBjb250ZXh0ICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciAmJiBzZWxlY3Rvci5ub2RlVHlwZSA/IFsgc2VsZWN0
b3IgXSA6IHNlbGVjdG9yICksCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGwgPSBqUXVlcnku
bWVyZ2UoIHRoaXMuZ2V0KCksIHNldCApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKCBpc0Rpc2Nvbm5lY3RlZCggc2V0WzBdICkgfHwgaXNEaXNjb25uZWN0ZWQoIGFs
bFswXSApID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbCA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkudW5pcXVlKCBhbGwgKSApOwotICAgICAgICB9LAotCi0gICAgICAgIGFk
ZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5hZGQoIHNlbGVjdG9yID09IG51bGwgPwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5w
cmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihzZWxlY3RvcikKLSAgICAgICAgICAg
ICAgICApOwotICAgICAgICB9Ci19KTsKLQotalF1ZXJ5LmZuLmFuZFNlbGYgPSBqUXVlcnkuZm4u
YWRkQmFjazsKLQotLy8gQSBwYWluZnVsbHkgc2ltcGxlIGNoZWNrIHRvIHNlZSBpZiBhbiBlbGVt
ZW50IGlzIGRpc2Nvbm5lY3RlZAotLy8gZnJvbSBhIGRvY3VtZW50IChzaG91bGQgYmUgaW1wcm92
ZWQsIHdoZXJlIGZlYXNpYmxlKS4KLWZ1bmN0aW9uIGlzRGlzY29ubmVjdGVkKCBub2RlICkgewot
ICAgICAgICByZXR1cm4gIW5vZGUgfHwgIW5vZGUucGFyZW50Tm9kZSB8fCBub2RlLnBhcmVudE5v
ZGUubm9kZVR5cGUgPT09IDExOwotfQotCi1mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHsK
LSAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGN1ciA9IGN1clsgZGlyIF07Ci0gICAgICAg
IH0gd2hpbGUgKCBjdXIgJiYgY3VyLm5vZGVUeXBlICE9PSAxICk7Ci0KLSAgICAgICAgcmV0dXJu
IGN1cjsKLX0KLQotalF1ZXJ5LmVhY2goewotICAgICAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFy
ZW50IDogbnVsbDsKLSAgICAgICAgfSwKLSAgICAgICAgcGFyZW50czogZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2Rl
IiApOwotICAgICAgICB9LAotICAgICAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBp
LCB1bnRpbCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBh
cmVudE5vZGUiLCB1bnRpbCApOwotICAgICAgICB9LAotICAgICAgICBuZXh0OiBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJs
aW5nIiApOwotICAgICAgICB9LAotICAgICAgICBwcmV2OiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc2libGluZyggZWxlbSwgInByZXZpb3VzU2libGluZyIgKTsK
LSAgICAgICAgfSwKLSAgICAgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKLSAgICAg
ICAgfSwKLSAgICAgICAgcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7Ci0gICAgICAg
IH0sCi0gICAgICAgIG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRp
bCApOwotICAgICAgICB9LAotICAgICAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1
bnRpbCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZp
b3VzU2libGluZyIsIHVudGlsICk7Ci0gICAgICAgIH0sCi0gICAgICAgIHNpYmxpbmdzOiBmdW5j
dGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoICgg
ZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApOwotICAgICAgICB9LAot
ICAgICAgICBjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLmZpcnN0Q2hpbGQgKTsKLSAgICAgICAgfSwKLSAgICAg
ICAgY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkubm9kZU5hbWUoIGVsZW0sICJpZnJhbWUiICkgPwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbS5jb250ZW50RG9jdW1lbnQgfHwgZWxlbS5jb250ZW50V2luZG93LmRvY3VtZW50IDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2Rl
cyApOwotICAgICAgICB9Ci19LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7Ci0gICAgICAgIGpRdWVy
eS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHsKLSAgICAgICAgICAg
ICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoICFydW50aWwudGVzdCggbmFtZSApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZWN0b3IgPSB1bnRpbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0
ICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5sZW5n
dGggPiAxICYmICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gPyBqUXVlcnkudW5pcXVlKCByZXQg
KSA6IHJldDsKLQotICAgICAgICAgICAgICAgIGlmICggdGhpcy5sZW5ndGggPiAxICYmIHJwYXJl
bnRzcHJldi50ZXN0KCBuYW1lICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBy
ZXQucmV2ZXJzZSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyAp
LmpvaW4oIiwiKSApOwotICAgICAgICB9OwotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotICAgICAg
ICBmaWx0ZXI6IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkgewotICAgICAgICAgICAgICAg
IGlmICggbm90ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9ICI6bm90KCIgKyBl
eHByICsgIikiOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtcy5sZW5ndGggPT09IDEgPwotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbmQu
bWF0Y2hlc1NlbGVjdG9yKGVsZW1zWzBdLCBleHByKSA/IFsgZWxlbXNbMF0gXSA6IFtdIDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXMoZXhwciwgZWxlbXMpOwot
ICAgICAgICB9LAotCi0gICAgICAgIGRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGN1ciA9IGVsZW1bIGRpciBdOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIgJiYg
Y3VyLm5vZGVUeXBlICE9PSA5ICYmICh1bnRpbCA9PT0gdW5kZWZpbmVkIHx8IGN1ci5ub2RlVHlw
ZSAhPT0gMSB8fCAhalF1ZXJ5KCBjdXIgKS5pcyggdW50aWwgKSkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBjdXIgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1cltkaXJdOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlZDsKLSAgICAgICAgfSwKLQot
ICAgICAgICBzaWJsaW5nOiBmdW5jdGlvbiggbiwgZWxlbSApIHsKLSAgICAgICAgICAgICAgICB2
YXIgciA9IFtdOwotCi0gICAgICAgICAgICAgICAgZm9yICggOyBuOyBuID0gbi5uZXh0U2libGlu
ZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBu
ICE9PSBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnB1c2goIG4g
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgfQotfSk7Ci0KLS8vIEltcGxlbWVudCB0aGUg
aWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90Ci1mdW5jdGlvbiB3aW5u
b3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIGtlZXAgKSB7Ci0KLSAgICAgICAgLy8gQ2FuJ3QgcGFz
cyBudWxsIG9yIHVuZGVmaW5lZCB0byBpbmRleE9mIGluIEZpcmVmb3ggNAotICAgICAgICAvLyBT
ZXQgdG8gMCB0byBza2lwIHN0cmluZyBjaGVjawotICAgICAgICBxdWFsaWZpZXIgPSBxdWFsaWZp
ZXIgfHwgMDsKLQotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9u
KCBlbGVtLCBpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldFZhbCA9ICEhcXVh
bGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXRWYWwgPT09IGtlZXA7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgfSBl
bHNlIGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkgewotICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSA9PT0ga2VlcDsKLSAgICAg
ICAgICAgICAgICB9KTsKLQotICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgcXVhbGlmaWVyID09
PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBqUXVlcnkuZ3Jl
cChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgICAgIGlmICggaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIsIGZpbHRlcmVkLCAh
a2VlcCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZmlsdGVyZWQgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxl
bWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewotICAgICAgICAgICAgICAgIHJldHVybiAoIGpR
dWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwICkgPT09IGtlZXA7Ci0gICAgICAg
IH0pOwotfQotZnVuY3Rpb24gY3JlYXRlU2FmZUZyYWdtZW50KCBkb2N1bWVudCApIHsKLSAgICAg
ICAgdmFyIGxpc3QgPSBub2RlTmFtZXMuc3BsaXQoICJ8IiApLAotICAgICAgICBzYWZlRnJhZyA9
IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgICAgICBpZiAoIHNhZmVG
cmFnLmNyZWF0ZUVsZW1lbnQgKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBsaXN0Lmxlbmd0
aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QucG9wKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBzYWZlRnJhZzsKLX0KLQotdmFyIG5vZGVOYW1lcyA9ICJhYmJyfGFydGljbGV8YXNpZGV8YXVk
aW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9v
dGVyfCIgKwotICAgICAgICAgICAgICAgICJoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91
dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsCi0gICAgICAgIHJpbmxp
bmVqUXVlcnkgPSAvIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLAotICAgICAgICBybGVhZGlu
Z1doaXRlc3BhY2UgPSAvXlxzKy8sCi0gICAgICAgIHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxj
b2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4v
Z2ksCi0gICAgICAgIHJ0YWdOYW1lID0gLzwoW1x3Ol0rKS8sCi0gICAgICAgIHJ0Ym9keSA9IC88
dGJvZHkvaSwKLSAgICAgICAgcmh0bWwgPSAvPHwmIz9cdys7LywKLSAgICAgICAgcm5vSW5uZXJo
dG1sID0gLzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSwKLSAgICAgICAgcm5vY2FjaGUgPSAvPCg/
OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLAotICAgICAgICBybm9zaGltY2Fj
aGUgPSBuZXcgUmVnRXhwKCI8KD86IiArIG5vZGVOYW1lcyArICIpW1xccy8+XSIsICJpIiksCi0g
ICAgICAgIHJjaGVja2FibGVUeXBlID0gL14oPzpjaGVja2JveHxyYWRpbykkLywKLSAgICAgICAg
Ly8gY2hlY2tlZD0iY2hlY2tlZCIgb3IgY2hlY2tlZAotICAgICAgICByY2hlY2tlZCA9IC9jaGVj
a2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAotICAgICAgICByc2NyaXB0VHlwZSA9IC9c
LyhqYXZhfGVjbWEpc2NyaXB0L2ksCi0gICAgICAgIHJjbGVhblNjcmlwdCA9IC9eXHMqPCEoPzpc
W0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9PlxzKiQvZywKLSAgICAgICAgd3JhcE1hcCA9IHsKLSAg
ICAgICAgICAgICAgICBvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4i
LCAiPC9zZWxlY3Q+IiBdLAotICAgICAgICAgICAgICAgIGxlZ2VuZDogWyAxLCAiPGZpZWxkc2V0
PiIsICI8L2ZpZWxkc2V0PiIgXSwKLSAgICAgICAgICAgICAgICB0aGVhZDogWyAxLCAiPHRhYmxl
PiIsICI8L3RhYmxlPiIgXSwKLSAgICAgICAgICAgICAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9k
eT4iLCAiPC90Ym9keT48L3RhYmxlPiIgXSwKLSAgICAgICAgICAgICAgICB0ZDogWyAzLCAiPHRh
YmxlPjx0Ym9keT48dHI+IiwgIjwvdHI+PC90Ym9keT48L3RhYmxlPiIgXSwKLSAgICAgICAgICAg
ICAgICBjb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwvY29s
Z3JvdXA+PC90YWJsZT4iIF0sCi0gICAgICAgICAgICAgICAgYXJlYTogWyAxLCAiPG1hcD4iLCAi
PC9tYXA+IiBdLAotICAgICAgICAgICAgICAgIF9kZWZhdWx0OiBbIDAsICIiLCAiIiBdCi0gICAg
ICAgIH0sCi0gICAgICAgIHNhZmVGcmFnbWVudCA9IGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1l
bnQgKSwKLSAgICAgICAgZnJhZ21lbnREaXYgPSBzYWZlRnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpICk7Ci0KLXdyYXBNYXAub3B0Z3JvdXAgPSB3cmFw
TWFwLm9wdGlvbjsKLXdyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xn
cm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7Ci13cmFwTWFwLnRoID0gd3Jh
cE1hcC50ZDsKLQotLy8gSUU2LTggY2FuJ3Qgc2VyaWFsaXplIGxpbmssIHNjcmlwdCwgc3R5bGUs
IG9yIGFueSBodG1sNSAoTm9TY29wZSkgdGFncywKLS8vIHVubGVzcyB3cmFwcGVkIGluIGEgZGl2
IHdpdGggbm9uLWJyZWFraW5nIGNoYXJhY3RlcnMgaW4gZnJvbnQgb2YgaXQuCi1pZiAoICFqUXVl
cnkuc3VwcG9ydC5odG1sU2VyaWFsaXplICkgewotICAgICAgICB3cmFwTWFwLl9kZWZhdWx0ID0g
WyAxLCAiWDxkaXY+IiwgIjwvZGl2PiIgXTsKLX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAg
ICAgIHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkudGV4dCggdGhpcyApIDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5lbXB0eSgpLmFwcGVuZCggKCB0aGlzWzBdICYmIHRoaXNbMF0ub3duZXJE
b2N1bWVudCB8fCBkb2N1bWVudCApLmNyZWF0ZVRleHROb2RlKCB2YWx1ZSApICk7Ci0gICAgICAg
ICAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKLSAgICAgICAgfSwK
LQotICAgICAgICB3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKCB0aGlzWzBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVs
ZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQgKS5lcSgwKS5j
bG9uZSh0cnVlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdLnBhcmVu
dE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAuaW5zZXJ0QmVm
b3JlKCB0aGlzWzBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdyYXAubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgJiYgZWxlbS5maXJzdENoaWxkLm5vZGVUeXBl
ID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0g
PSBlbGVtLmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0pLmFwcGVuZCggdGhpcyApOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIHdyYXBJbm5l
cjogZnVuY3Rpb24oIGh0bWwgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggaHRtbCApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbihpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0
aGlzKS53cmFwSW5uZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0g
alF1ZXJ5KCB0aGlzICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRz
ID0gc2VsZi5jb250ZW50cygpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnRl
bnRzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMu
d3JhcEFsbCggaHRtbCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCggaHRtbCApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0g
ICAgICAgIHdyYXA6IGZ1bmN0aW9uKCBodG1sICkgewotICAgICAgICAgICAgICAgIHZhciBpc0Z1
bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKLQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5KCB0aGlzICkud3JhcEFsbCggaXNGdW5jdGlvbiA/IGh0bWwuY2FsbCh0aGlzLCBpKSA6IGh0
bWwgKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLQotICAgICAgICB1bndyYXA6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2go
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkubm9kZU5h
bWUoIHRoaXMsICJib2R5IiApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSkuZW5kKCk7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgYXBwZW5kOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUg
PT09IDExICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENo
aWxkKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcHJlcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0g
MSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMuZmlyc3RDaGlsZCApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0g
ICAgICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhaXNEaXNj
b25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBl
bGVtLCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc2V0ID0galF1ZXJ5LmNsZWFuKCBhcmd1bWVudHMgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1lcmdl
KCBzZXQsIHRoaXMgKSwgImJlZm9yZSIsIHRoaXMuc2VsZWN0b3IgKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYWZ0ZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIGlmICggIWlzRGlzY29ubmVjdGVkKCB0aGlzWzBdICkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlv
biggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRO
b2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KCBhcmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNldCA9
IGpRdWVyeS5jbGVhbiggYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tZXJnZSggdGhpcywgc2V0ICksICJhZnRlciIsIHRo
aXMuc2VsZWN0b3IgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
Ly8ga2VlcERhdGEgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LS1kbyBub3QgZG9jdW1lbnQKLSAg
ICAgICAgcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhICkgewotICAgICAgICAg
ICAgICAgIHZhciBlbGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2Vs
ZWN0b3IsIFsgZWxlbSBdICkubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFrZWVwRGF0YSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGVsZW0ucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0g
ICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgZWxlbSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAgICAgICAgICAgZm9yICggOyAo
ZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCIqIikgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKCBlbGVtLmZpcnN0Q2hpbGQgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBjbG9uZTogZnVuY3Rpb24o
IGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgewotICAgICAgICAgICAgICAgIGRh
dGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVu
dHM7Ci0gICAgICAgICAgICAgICAgZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50
cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzOwotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0
YUFuZEV2ZW50cyApOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAg
IGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5
LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGVsZW0gPSB0aGlzWzBdIHx8IHt9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHRoaXMubGVu
Z3RoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBl
ID09PSAxID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlu
bmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAiIiApIDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNo
b3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVl
ICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9ydC5o
dG1sU2VyaWFsaXplIHx8ICFybm9zaGltY2FjaGUudGVzdCggdmFsdWUgKSAgKSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoIGpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNw
YWNlIHx8ICFybGVhZGluZ1doaXRlc3BhY2UudGVzdCggdmFsdWUgKSApICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkg
fHwgWyIiLCAiIl0gKVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCByeGh0bWxUYWcsICI8JDE+PC8k
Mj4iICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBl
bGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbaV0gfHwge307Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05h
bWUoICIqIiApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdXNp
bmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2
YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sIG51
bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcmVw
bGFjZVdpdGg6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICBpZiAoICFpc0Rp
c2Nvbm5lY3RlZCggdGhpc1swXSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERPTSBiZWZvcmUg
dGhleSBhcmUgaW5zZXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhl
bHAgZml4IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRzCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVy
eSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5yZXBsYWNlV2l0aCggdmFsdWUuY2FsbCggdGhpcywgaSwgb2xkICkg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVlICE9
PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBq
UXVlcnkoIHZhbHVlICkuZGV0YWNoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5uZXh0U2libGluZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSB0aGlzLnBh
cmVudE5vZGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlz
ICkucmVtb3ZlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuZXh0
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShuZXh0
KS5iZWZvcmUoIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHBhcmVu
dCkuYXBwZW5kKCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPwotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5wdXNoU3RhY2soIGpRdWVyeShqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZSgpIDog
dmFsdWUpLCAicmVwbGFjZVdpdGgiLCB2YWx1ZSApIDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3Ig
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlKCBzZWxlY3RvciwgdHJ1ZSAp
OwotICAgICAgICB9LAotCi0gICAgICAgIGRvbU1hbmlwOiBmdW5jdGlvbiggYXJncywgdGFibGUs
IGNhbGxiYWNrICkgewotCi0gICAgICAgICAgICAgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFy
cmF5cwotICAgICAgICAgICAgICAgIGFyZ3MgPSBbXS5jb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7
Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cywgZmlyc3QsIGZyYWdtZW50LCBpTm9DbG9u
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBhcmdzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cyA9IFtd
LAotICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoOwotCi0gICAgICAgICAg
ICAgICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tl
ZCwgaW4gV2ViS2l0Ci0gICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tD
bG9uZSAmJiBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHJjaGVja2VkLnRl
c3QoIHZhbHVlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhp
cykuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbih2YWx1ZSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHNlbGYgPSBqUXVlcnkodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCB0YWJsZSA/IHNlbGYuaHRtbCgpIDogdW5k
ZWZpbmVkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9tTWFuaXAo
IGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBhcmdz
LCB0aGlzLCBzY3JpcHRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IHJl
c3VsdHMuZnJhZ21lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZyYWdtZW50
LmZpcnN0Q2hpbGQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZnJhZ21lbnQuY2hp
bGROb2Rlcy5sZW5ndGggPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZyYWdtZW50ID0gZmlyc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZmlyc3QgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRhYmxlID0gdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBmaXJzdCwgInRyIiApOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJh
Z21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBj
YW4gZW5kIHVwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlaW5nIGVtcHRp
ZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZyYWdtZW50cyBmcm9tIHRoZSBmcmFnbWVudCBjYWNo
ZSBtdXN0IGFsd2F5cyBiZSBjbG9uZWQgYW5kIG5ldmVyIHVzZWQgaW4gcGxhY2UuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGlOb0Nsb25lID0gcmVzdWx0cy5jYWNoZWFi
bGUgfHwgbCAtIDE7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2suY2FsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSggdGhpc1tpXSwgInRh
YmxlIiApID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmluZE9yQXBwZW5kKCB0aGlzW2ldLCAidGJvZHkiICkgOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gaU5vQ2xv
bmUgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFnbWVudCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5jbG9uZSggZnJhZ21lbnQsIHRydWUsIHRydWUgKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRml4ICMxMTgwOTogQXZvaWQgbGVha2luZyBtZW1vcnkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3QgPSBudWxsOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHNjcmlwdHMubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggc2NyaXB0cywgZnVuY3Rpb24oIGksIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNyYyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmFqYXggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGVsZW0uc3JjLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGU6ICJHRVQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3lu
YzogZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xvYmFsOiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyb3dzIjogdHJ1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5lcnJvcigibm8gYWpheCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggKCBlbGVtLnRleHQgfHwgZWxlbS50ZXh0Q29udGVu
dCB8fCBlbGVtLmlubmVySFRNTCB8fCAiIiApLnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgIiIgKSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotfSk7Ci0KLWZ1bmN0aW9uIGZpbmRPckFwcGVuZCgg
ZWxlbSwgdGFnICkgewotICAgICAgICByZXR1cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgg
dGFnIClbMF0gfHwgZWxlbS5hcHBlbmRDaGlsZCggZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoIHRhZyApICk7Ci19Ci0KLWZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3Qg
KSB7Ci0KLSAgICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0
YSggc3JjICkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmFyIHR5cGUsIGksIGwsCi0gICAgICAgICAgICAgICAgb2xkRGF0YSA9IGpRdWVyeS5fZGF0
YSggc3JjICksCi0gICAgICAgICAgICAgICAgY3VyRGF0YSA9IGpRdWVyeS5fZGF0YSggZGVzdCwg
b2xkRGF0YSApLAotICAgICAgICAgICAgICAgIGV2ZW50cyA9IG9sZERhdGEuZXZlbnRzOwotCi0g
ICAgICAgIGlmICggZXZlbnRzICkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJEYXRhLmhh
bmRsZTsKLSAgICAgICAgICAgICAgICBjdXJEYXRhLmV2ZW50cyA9IHt9OwotCi0gICAgICAgICAg
ICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlw
ZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1ha2UgdGhlIGNsb25lZCBw
dWJsaWMgZGF0YSBvYmplY3QgYSBjb3B5IGZyb20gdGhlIG9yaWdpbmFsCi0gICAgICAgIGlmICgg
Y3VyRGF0YS5kYXRhICkgewotICAgICAgICAgICAgICAgIGN1ckRhdGEuZGF0YSA9IGpRdWVyeS5l
eHRlbmQoIHt9LCBjdXJEYXRhLmRhdGEgKTsKLSAgICAgICAgfQotfQotCi1mdW5jdGlvbiBjbG9u
ZUZpeEF0dHJpYnV0ZXMoIHNyYywgZGVzdCApIHsKLSAgICAgICAgdmFyIG5vZGVOYW1lOwotCi0g
ICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBub24tRWxlbWVudHMK
LSAgICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkgewotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNsZWFyQXR0cmlidXRlcyByZW1vdmVzIHRo
ZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50LAotICAgICAgICAvLyBidXQgYWxzbyBy
ZW1vdmVzIHRoZSBhdHRhY2hFdmVudCBldmVudHMsIHdoaWNoIHdlICpkbyogd2FudAotICAgICAg
ICBpZiAoIGRlc3QuY2xlYXJBdHRyaWJ1dGVzICkgewotICAgICAgICAgICAgICAgIGRlc3QuY2xl
YXJBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtZXJnZUF0dHJpYnV0ZXMs
IGluIGNvbnRyYXN0LCBvbmx5IG1lcmdlcyBiYWNrIG9uIHRoZQotICAgICAgICAvLyBvcmlnaW5h
bCBhdHRyaWJ1dGVzLCBub3QgdGhlIGV2ZW50cwotICAgICAgICBpZiAoIGRlc3QubWVyZ2VBdHRy
aWJ1dGVzICkgewotICAgICAgICAgICAgICAgIGRlc3QubWVyZ2VBdHRyaWJ1dGVzKCBzcmMgKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpOwotCi0gICAgICAgIGlmICggbm9kZU5hbWUgPT09ICJvYmplY3QiICkgewotICAgICAgICAg
ICAgICAgIC8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxl
bWVudHMgdXNpbmcgY2xhc3NpZC4KLSAgICAgICAgICAgICAgICAvLyBJRTEwIHRocm93cyBOb01v
ZGlmaWNhdGlvbkFsbG93ZWRFcnJvciBpZiBwYXJlbnQgaXMgbnVsbCwgIzEyMTMyLgotICAgICAg
ICAgICAgICAgIGlmICggZGVzdC5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdC5vdXRlckhUTUwgPSBzcmMub3V0ZXJIVE1MOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIFRoaXMgcGF0aCBhcHBlYXJzIHVuYXZvaWRhYmxlIGZvciBJRTku
IFdoZW4gY2xvbmluZyBhbiBvYmplY3QKLSAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGluIElF
OSwgdGhlIG91dGVySFRNTCBzdHJhdGVneSBhYm92ZSBpcyBub3Qgc3VmZmljaWVudC4KLSAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgc3JjIGhhcyBpbm5lckhUTUwgYW5kIHRoZSBkZXN0aW5hdGlv
biBkb2VzIG5vdCwKLSAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSBzcmMuaW5uZXJIVE1MIGlu
dG8gdGhlIGRlc3QuaW5uZXJIVE1MLiAjMTAzMjQKLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5zdXBwb3J0Lmh0bWw1Q2xvbmUgJiYgKHNyYy5pbm5lckhUTUwgJiYgIWpRdWVyeS50cmltKGRl
c3QuaW5uZXJIVE1MKSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0LmlubmVySFRN
TCA9IHNyYy5pbm5lckhUTUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSBp
ZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBl
ICkgKSB7Ci0gICAgICAgICAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hl
Y2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAotICAgICAgICAgICAgICAgIC8vIG9yIHJh
ZGlvIGJ1dHRvbi4gV29yc2UsIElFNi03IGZhaWwgdG8gZ2l2ZSB0aGUgY2xvbmVkIGVsZW1lbnQK
LSAgICAgICAgICAgICAgICAvLyBhIGNoZWNrZWQgYXBwZWFyYW5jZSBpZiB0aGUgZGVmYXVsdENo
ZWNrZWQgdmFsdWUgaXNuJ3QgYWxzbyBzZXQKLQotICAgICAgICAgICAgICAgIGRlc3QuZGVmYXVs
dENoZWNrZWQgPSBkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDsKLQotICAgICAgICAgICAgICAg
IC8vIElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNldHRpbmcgdGhlIHZhbHVlIG9mIGEg
Y2xvbmVkCi0gICAgICAgICAgICAgICAgLy8gY2hlY2tib3gvcmFkaW8gYnV0dG9uIHRvIGFuIGVt
cHR5IHN0cmluZyBpbnN0ZWFkIG9mICJvbiIKLSAgICAgICAgICAgICAgICBpZiAoIGRlc3QudmFs
dWUgIT09IHNyYy52YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QudmFsdWUg
PSBzcmMudmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgIC8vIElFNi04IGZhaWxz
IHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCi0g
ICAgICAgIC8vIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zCi0gICAgICAgIH0gZWxzZSBpZiAo
IG5vZGVOYW1lID09PSAib3B0aW9uIiApIHsKLSAgICAgICAgICAgICAgICBkZXN0LnNlbGVjdGVk
ID0gc3JjLmRlZmF1bHRTZWxlY3RlZDsKLQotICAgICAgICAvLyBJRTYtOCBmYWlscyB0byBzZXQg
dGhlIGRlZmF1bHRWYWx1ZSB0byB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuCi0gICAgICAgIC8vIGNs
b25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCi0gICAgICAgIH0gZWxzZSBpZiAoIG5v
ZGVOYW1lID09PSAiaW5wdXQiIHx8IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgewotICAgICAg
ICAgICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTsKLQotICAgICAg
ICAvLyBJRSBibGFua3MgY29udGVudHMgd2hlbiBjbG9uaW5nIHNjcmlwdHMKLSAgICAgICAgfSBl
bHNlIGlmICggbm9kZU5hbWUgPT09ICJzY3JpcHQiICYmIGRlc3QudGV4dCAhPT0gc3JjLnRleHQg
KSB7Ci0gICAgICAgICAgICAgICAgZGVzdC50ZXh0ID0gc3JjLnRleHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBFdmVudCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBp
ZiB0aGUgZXhwYW5kbwotICAgICAgICAvLyBnZXRzIGNvcGllZCB0b28KLSAgICAgICAgZGVzdC5y
ZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7Ci19Ci0KLWpRdWVyeS5idWlsZEZyYWdt
ZW50ID0gZnVuY3Rpb24oIGFyZ3MsIGNvbnRleHQsIHNjcmlwdHMgKSB7Ci0gICAgICAgIHZhciBm
cmFnbWVudCwgY2FjaGVhYmxlLCBjYWNoZWhpdCwKLSAgICAgICAgICAgICAgICBmaXJzdCA9IGFy
Z3NbIDAgXTsKLQotICAgICAgICAvLyBTZXQgY29udGV4dCBmcm9tIHdoYXQgbWF5IGNvbWUgaW4g
YXMgdW5kZWZpbmVkIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24gb3IgYSBub2RlCi0gICAgICAgIC8v
IFVwZGF0ZWQgdG8gZml4ICMxMjI2NiB3aGVyZSBhY2Nlc3NpbmcgY29udGV4dFswXSBjb3VsZCB0
aHJvdyBhbiBleGNlcHRpb24gaW4gSUU5LzEwICYKLSAgICAgICAgLy8gYWxzbyBkb3VibGVzIGFz
IGZpeCBmb3IgIzg5NTAgd2hlcmUgcGxhaW4gb2JqZWN0cyBjYXVzZWQgY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCBleGNlcHRpb24KLSAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7
Ci0gICAgICAgIGNvbnRleHQgPSAhY29udGV4dC5ub2RlVHlwZSAmJiBjb250ZXh0WzBdIHx8IGNv
bnRleHQ7Ci0gICAgICAgIGNvbnRleHQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4
dDsKLQotICAgICAgICAvLyBPbmx5IGNhY2hlICJzbWFsbCIgKDEvMiBLQikgSFRNTCBzdHJpbmdz
IHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBkb2N1bWVudAotICAgICAgICAvLyBD
bG9uaW5nIG9wdGlvbnMgbG9zZXMgdGhlIHNlbGVjdGVkIHN0YXRlLCBzbyBkb24ndCBjYWNoZSB0
aGVtCi0gICAgICAgIC8vIElFIDYgZG9lc24ndCBsaWtlIGl0IHdoZW4geW91IHB1dCA8b2JqZWN0
PiBvciA8ZW1iZWQ+IGVsZW1lbnRzIGluIGEgZnJhZ21lbnQKLSAgICAgICAgLy8gQWxzbywgV2Vi
S2l0IGRvZXMgbm90IGNsb25lICdjaGVja2VkJyBhdHRyaWJ1dGVzIG9uIGNsb25lTm9kZSwgc28g
ZG9uJ3QgY2FjaGUKLSAgICAgICAgLy8gTGFzdGx5LCBJRTYsNyw4IHdpbGwgbm90IGNvcnJlY3Rs
eSByZXVzZSBjYWNoZWQgZnJhZ21lbnRzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gdW5rbm93biBl
bGVtcyAjMTA1MDEKLSAgICAgICAgaWYgKCBhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgZmly
c3QgPT09ICJzdHJpbmciICYmIGZpcnN0Lmxlbmd0aCA8IDUxMiAmJiBjb250ZXh0ID09PSBkb2N1
bWVudCAmJgotICAgICAgICAgICAgICAgIGZpcnN0LmNoYXJBdCgwKSA9PT0gIjwiICYmICFybm9j
YWNoZS50ZXN0KCBmaXJzdCApICYmCi0gICAgICAgICAgICAgICAgKGpRdWVyeS5zdXBwb3J0LmNo
ZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGZpcnN0ICkpICYmCi0gICAgICAgICAgICAgICAg
KGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCBmaXJzdCAp
KSApIHsKLQotICAgICAgICAgICAgICAgIC8vIE1hcmsgY2FjaGVhYmxlIGFuZCBsb29rIGZvciBh
IGhpdAotICAgICAgICAgICAgICAgIGNhY2hlYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ZnJhZ21lbnQgPSBqUXVlcnkuZnJhZ21lbnRzWyBmaXJzdCBdOwotICAgICAgICAgICAgICAgIGNh
Y2hlaGl0ID0gZnJhZ21lbnQgIT09IHVuZGVmaW5lZDsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICggIWZyYWdtZW50ICkgewotICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY29udGV4dC5jcmVh
dGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuKCBhcmdz
LCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApOwotCi0gICAgICAgICAgICAgICAgLy8gVXBk
YXRlIHRoZSBjYWNoZSwgYnV0IG9ubHkgc3RvcmUgZmFsc2UKLSAgICAgICAgICAgICAgICAvLyB1
bmxlc3MgdGhpcyBpcyBhIHNlY29uZCBwYXJzaW5nIG9mIHRoZSBzYW1lIGNvbnRlbnQKLSAgICAg
ICAgICAgICAgICBpZiAoIGNhY2hlYWJsZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5mcmFnbWVudHNbIGZpcnN0IF0gPSBjYWNoZWhpdCAmJiBmcmFnbWVudDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4geyBmcmFnbWVudDogZnJhZ21l
bnQsIGNhY2hlYWJsZTogY2FjaGVhYmxlIH07Ci19OwotCi1qUXVlcnkuZnJhZ21lbnRzID0ge307
Ci0KLWpRdWVyeS5lYWNoKHsKLSAgICAgICAgYXBwZW5kVG86ICJhcHBlbmQiLAotICAgICAgICBw
cmVwZW5kVG86ICJwcmVwZW5kIiwKLSAgICAgICAgaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwKLSAg
ICAgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCi0gICAgICAgIHJlcGxhY2VBbGw6ICJyZXBsYWNl
V2l0aCIKLX0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHsKLSAgICAgICAgalF1ZXJ5LmZu
WyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVs
ZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXQgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCA9IGpRdWVyeSgg
c2VsZWN0b3IgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBpbnNlcnQubGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5sZW5ndGggPT09IDEgJiYgdGhp
c1swXS5wYXJlbnROb2RlOwotCi0gICAgICAgICAgICAgICAgaWYgKCAocGFyZW50ID09IG51bGwg
fHwgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMu
bGVuZ3RoID09PSAxKSAmJiBsID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0WyBvcmlnaW5hbCBdKCB0aGlzWzBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtcyA9ICggaSA+IDAgPyB0aGlzLmNsb25lKHRydWUpIDogdGhpcyApLmdldCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGluc2VydFtpXSApWyBvcmlnaW5h
bCBdKCBlbGVtcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSByZXQu
Y29uY2F0KCBlbGVtcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwgaW5zZXJ0LnNl
bGVjdG9yICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotfSk7Ci0KLWZ1bmN0aW9u
IGdldEFsbCggZWxlbSApIHsKLSAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5
VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0u
Z2V0RWxlbWVudHNCeVRhZ05hbWUoICIqIiApOwotCi0gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVv
ZiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoICIqIiApOwotCi0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtdOwotICAgICAgICB9Ci19Ci0KLS8vIFVzZWQg
aW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wZXJ0eQotZnVuY3Rpb24gZml4
RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7Ci0gICAgICAgIGlmICggcmNoZWNrYWJsZVR5cGUudGVz
dCggZWxlbS50eXBlICkgKSB7Ci0gICAgICAgICAgICAgICAgZWxlbS5kZWZhdWx0Q2hlY2tlZCA9
IGVsZW0uY2hlY2tlZDsKLSAgICAgICAgfQotfQotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICAgICAg
Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyAp
IHsKLSAgICAgICAgICAgICAgICB2YXIgc3JjRWxlbWVudHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0RWxlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvbmU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5zdXBw
b3J0Lmh0bWw1Q2xvbmUgfHwgalF1ZXJ5LmlzWE1MRG9jKGVsZW0pIHx8ICFybm9zaGltY2FjaGUu
dGVzdCggIjwiICsgZWxlbS5ub2RlTmFtZSArICI+IiApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApOwotCi0gICAgICAgICAgICAgICAg
Ly8gSUU8PTggZG9lcyBub3QgcHJvcGVybHkgY2xvbmUgZGV0YWNoZWQsIHVua25vd24gZWxlbWVu
dCBub2RlcwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmcmFnbWVudERpdi5pbm5lckhUTUwgPSBlbGVtLm91dGVySFRNTDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYWdtZW50RGl2LnJlbW92ZUNoaWxkKCBjbG9uZSA9IGZyYWdtZW50RGl2LmZp
cnN0Q2hpbGQgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoICgh
alF1ZXJ5LnN1cHBvcnQubm9DbG9uZUV2ZW50IHx8ICFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lQ2hl
Y2tlZCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsZW0ubm9kZVR5cGUg
PT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEpICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBjb3BpZXMgZXZlbnRzIGJvdW5kIHZp
YSBhdHRhY2hFdmVudCB3aGVuIHVzaW5nIGNsb25lTm9kZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENhbGxpbmcgZGV0YWNoRXZlbnQgb24gdGhlIGNsb25lIHdpbGwgYWxzbyByZW1vdmUg
dGhlIGV2ZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwu
IEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNlIHNvbWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHByb3ByaWV0YXJ5IG1ldGhvZHMgdG8gY2xlYXIgdGhlIGV2ZW50cy4gVGhh
bmtzIHRvIE1vb1Rvb2xzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBndXlzIGZvciB0aGlz
IGhvdG5lc3MuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcygg
ZWxlbSwgY2xvbmUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNpbmcgU2l6emxl
IGhlcmUgaXMgY3Jhenkgc2xvdywgc28gd2UgdXNlIGdldEVsZW1lbnRzQnlUYWdOYW1lIGluc3Rl
YWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlvbiBiZWNhdXNlIElF
IHdpbGwgcmVwbGFjZSB0aGUgbGVuZ3RoIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFyZSBjbG9uaW5nIHRoZSBib2R5IGFuZCBvbmUg
b2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbGVtZW50cyBvbiB0aGUgcGFnZSBo
YXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgbm90IG51bGw7
IEZpeGVzICM5NTg3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGVzdEVs
ZW1lbnRzW2ldICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
b25lRml4QXR0cmlidXRlcyggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgZXZlbnRz
IGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQotICAgICAgICAgICAgICAgIGlmICggZGF0
YUFuZEV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBl
bGVtLCBjbG9uZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZXBEYXRhQW5k
RXZlbnRzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9
IGdldEFsbCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxl
bWVudHMgPSBnZXRBbGwoIGNsb25lICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzW2ldLCBk
ZXN0RWxlbWVudHNbaV0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHNyY0VsZW1lbnRzID0gZGVzdEVsZW1lbnRzID0gbnVsbDsKLQotICAgICAgICAgICAgICAg
IC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAotICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTsK
LSAgICAgICAgfSwKLQotICAgICAgICBjbGVhbjogZnVuY3Rpb24oIGVsZW1zLCBjb250ZXh0LCBm
cmFnbWVudCwgc2NyaXB0cyApIHsKLSAgICAgICAgICAgICAgICB2YXIgaSwgaiwgZWxlbSwgdGFn
LCB3cmFwLCBkZXB0aCwgZGl2LCBoYXNCb2R5LCB0Ym9keSwgbGVuLCBoYW5kbGVTY3JpcHQsIGpz
VGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNhZmUgPSBjb250ZXh0ID09PSBkb2N1bWVu
dCAmJiBzYWZlRnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBbXTsKLQot
ICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGNvbnRleHQgaXMgYSBkb2N1bWVudAotICAg
ICAgICAgICAgICAgIGlmICggIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQuY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCA9PT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0ID0gZG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgc2FmZSBmcmFnbWVudCBpZiBjb250ZXh0IHBlcm1p
dHMKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVs
bDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0g
Im51bWJlciIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gKz0gIiI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBD
b252ZXJ0IGh0bWwgc3RyaW5nIGludG8gRE9NIG5vZGVzCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBl
bGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGEgc2FmZSBjb250YWlu
ZXIgaW4gd2hpY2ggdG8gcmVuZGVyIHRoZSBodG1sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2FmZSA9IHNhZmUgfHwgY3JlYXRlU2FmZUZyYWdtZW50KCBjb250ZXh0
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gY29udGV4
dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzYWZlLmFwcGVuZENoaWxkKCBkaXYgKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZpeCAiWEhUTUwiLXN0eWxlIHRhZ3MgaW4gYWxsIGJyb3dz
ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0u
cmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEdvIHRvIGh0bWwgYW5kIGJhY2ssIHRoZW4gcGVlbCBvZmYg
ZXh0cmEgd3JhcHBlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIiIsICIiXSApWzFdLnRvTG93ZXJDYXNl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcCA9IHdyYXBN
YXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVwdGggPSB3cmFwWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB3cmFwWzFdICsgZWxlbSArIHdyYXBbMl07
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRvIHRo
ZSByaWdodCBkZXB0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICggZGVwdGgtLSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2luc2VydGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVu
dHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnku
c3VwcG9ydC50Ym9keSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhIDx0YWJsZT4sICptYXkqIGhhdmUgc3B1cmlvdXMg
PHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFzQm9keSA9IHJ0Ym9keS50ZXN0KGVsZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ym9keSA9IHRhZyA9PT0gInRhYmxlIiAmJiAh
aGFzQm9keSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hpbGQuY2hpbGRO
b2RlcyA6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgd2FzIGEgYmFyZSA8dGhlYWQ+IG9yIDx0Zm9vdD4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIWhhc0JvZHkgPwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGl2LmNoaWxkTm9kZXMgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW107Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSB0Ym9keS5sZW5ndGgg
LSAxOyBqID49IDAgOyAtLWogKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0Ym9keVsgaiBdLCAi
dGJvZHkiICkgJiYgIXRib2R5WyBqIF0uY2hpbGROb2Rlcy5sZW5ndGggKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJv
ZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0Ym9keVsgaiBdICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJRSBjb21wbGV0ZWx5IGtpbGxzIGxlYWRpbmcgd2hpdGVzcGFjZSB3
aGVuIGlubmVySFRNTCBpcyB1c2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgJiYgcmxlYWRpbmdX
aGl0ZXNwYWNlLnRlc3QoIGVsZW0gKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoIGNvbnRleHQuY3JlYXRlVGV4dE5v
ZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKGVsZW0pWzBdICksIGRpdi5maXJzdENoaWxkICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRpdi5jaGlsZE5vZGVzOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFrZSBvdXQgb2YgZnJh
Z21lbnQgY29udGFpbmVyICh3ZSBuZWVkIGEgZnJlc2ggZGl2IGVhY2ggdGltZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZCggZGl2ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVU
eXBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggZWxlbSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBGaXggIzEx
MzU2OiBDbGVhciBlbGVtZW50cyBmcm9tIHNhZmVGcmFnbWVudAotICAgICAgICAgICAgICAgIGlm
ICggZGl2ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRpdiA9IHNhZmUgPSBu
dWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRlZmF1
bHRDaGVja2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2JveGVzCi0gICAgICAgICAgICAgICAg
Ly8gYWJvdXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQotICAg
ICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmFwcGVuZENoZWNrZWQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSByZXRbaV0pICE9IG51bGw7
IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9k
ZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmdyZXAoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IiksIGZp
eERlZmF1bHRDaGVja2VkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBBcHBlbmQgZWxlbWVudHMgdG8gYSBwcm92aWRlZCBkb2N1bWVudCBmcmFnbWVudAot
ICAgICAgICAgICAgICAgIGlmICggZnJhZ21lbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIGVhY2ggc2NyaXB0IGVsZW1lbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZVNjcmlwdCA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBjb25zaWRlciBpdCBleGVjdXRh
YmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWVsZW0udHlwZSB8fCBy
c2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEZXRhY2ggdGhlIHNjcmlwdCBhbmQgc3RvcmUgaXQgaW4gdGhl
IHNjcmlwdHMgYXJyYXkgKGlmIHByb3ZpZGVkKSBvciB0aGUgZnJhZ21lbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdHJ1dGh5IHRvIGluZGljYXRl
IHRoYXQgaXQgaGFzIGJlZW4gaGFuZGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzY3JpcHRzID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjcmlwdHMucHVzaCggZWxlbS5wYXJlbnROb2RlID8gZWxlbS5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICkgOiBlbGVtICkgOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVs
ZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IChlbGVt
ID0gcmV0W2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRvbmUgYWZ0ZXIgaGFuZGxpbmcgYW4gZXhlY3V0YWJsZSBz
Y3JpcHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCBqUXVlcnkubm9k
ZU5hbWUoIGVsZW0sICJzY3JpcHQiICkgJiYgaGFuZGxlU2NyaXB0KCBlbGVtICkgKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdG8gZnJhZ21l
bnQgYW5kIGhhbmRsZSBlbWJlZGRlZCBzY3JpcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEVsZW1lbnRz
QnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZVNjcmlwdCBhbHRlcnMgdGhlIERPTSwgc28g
dXNlIGpRdWVyeS5tZXJnZSB0byBlbnN1cmUgc25hcHNob3QgaXRlcmF0aW9uCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc1RhZ3MgPSBqUXVlcnkuZ3Jl
cCggalF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iikg
KSwgaGFuZGxlU2NyaXB0ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNwbGljZSB0aGUgc2NyaXB0cyBpbnRvIHJldCBhZnRlciB0aGVpciBm
b3JtZXIgYW5jZXN0b3IgYW5kIGFkdmFuY2Ugb3VyIGluZGV4IGJleW9uZCB0aGVtCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuc3BsaWNlLmFwcGx5
KCByZXQsIFtpICsgMSwgMF0uY29uY2F0KCBqc1RhZ3MgKSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBqc1RhZ3MubGVuZ3RoOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMsIC8qIGludGVybmFsICovIGFjY2VwdERhdGEgKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGEsIGlkLCBlbGVtLCB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEtleSA9
IGpRdWVyeS5leHBhbmRvLAotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBqUXVlcnku
Y2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVFeHBhbmRvID0galF1ZXJ5LnN1
cHBvcnQuZGVsZXRlRXhwYW5kbywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBq
UXVlcnkuZXZlbnQuc3BlY2lhbDsKLQotICAgICAgICAgICAgICAgIGZvciAoIDsgKGVsZW0gPSBl
bGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGFjY2VwdERhdGEgfHwgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGVsZW1bIGludGVybmFsS2V5IF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpZCAmJiBjYWNoZVsgaWQgXTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLmV2ZW50cyApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gZGF0
YS5ldmVudHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVu
dC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQg
alF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJl
bW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gUmVtb3ZlIGNhY2hlIG9ubHkgaWYgaXQgd2FzIG5vdCBhbHJlYWR5IHJlbW92ZWQg
YnkgalF1ZXJ5LmV2ZW50LnJlbW92ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggY2FjaGVbIGlkIF0gKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgZG9lcyBub3QgYWxsb3cg
dXMgdG8gZGVsZXRlIGV4cGFuZG8gcHJvcGVydGllcyBmcm9tIG5vZGVzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9yIGRvZXMgaXQgaGF2ZSBh
IHJlbW92ZUF0dHJpYnV0ZSBmdW5jdGlvbiBvbiBEb2N1bWVudCBub2RlczsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG11c3QgaGFuZGxlIGFs
bCBvZiB0aGVzZSBjYXNlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBkZWxldGVFeHBhbmRvICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZWxlbVsgaW50ZXJuYWxLZXkg
XTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBp
bnRlcm5hbEtleSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtWyBpbnRlcm5hbEtleSBdID0gbnVsbDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlbGV0ZWRJZHMucHVzaCgg
aWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLX0pOwotLy8gTGltaXQgc2NvcGUgcG9sbHV0aW9u
IGZyb20gYW55IGRlcHJlY2F0ZWQgQVBJCi0oZnVuY3Rpb24oKSB7Ci0KLXZhciBtYXRjaGVkLCBi
cm93c2VyOwotCi0vLyBVc2Ugb2YgalF1ZXJ5LmJyb3dzZXIgaXMgZnJvd25lZCB1cG9uLgotLy8g
TW9yZSBkZXRhaWxzOiBodHRwOi8vYXBpLmpxdWVyeS5jb20valF1ZXJ5LmJyb3dzZXIKLS8vIGpR
dWVyeS51YU1hdGNoIG1haW50YWluZWQgZm9yIGJhY2stY29tcGF0Ci1qUXVlcnkudWFNYXRjaCA9
IGZ1bmN0aW9uKCB1YSApIHsKLSAgICAgICAgdWEgPSB1YS50b0xvd2VyQ2FzZSgpOwotCi0gICAg
ICAgIHZhciBtYXRjaCA9IC8oY2hyb21lKVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKLSAg
ICAgICAgICAgICAgICAvKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKCB1YSApIHx8Ci0gICAg
ICAgICAgICAgICAgLyhvcGVyYSkoPzouKnZlcnNpb258KVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVh
ICkgfHwKLSAgICAgICAgICAgICAgICAvKG1zaWUpIChbXHcuXSspLy5leGVjKCB1YSApIHx8Ci0g
ICAgICAgICAgICAgICAgdWEuaW5kZXhPZigiY29tcGF0aWJsZSIpIDwgMCAmJiAvKG1vemlsbGEp
KD86Lio/IHJ2OihbXHcuXSspfCkvLmV4ZWMoIHVhICkgfHwKLSAgICAgICAgICAgICAgICBbXTsK
LQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGJyb3dzZXI6IG1hdGNoWyAxIF0g
fHwgIiIsCi0gICAgICAgICAgICAgICAgdmVyc2lvbjogbWF0Y2hbIDIgXSB8fCAiMCIKLSAgICAg
ICAgfTsKLX07Ci0KLW1hdGNoZWQgPSBqUXVlcnkudWFNYXRjaCggbmF2aWdhdG9yLnVzZXJBZ2Vu
dCApOwotYnJvd3NlciA9IHt9OwotCi1pZiAoIG1hdGNoZWQuYnJvd3NlciApIHsKLSAgICAgICAg
YnJvd3NlclsgbWF0Y2hlZC5icm93c2VyIF0gPSB0cnVlOwotICAgICAgICBicm93c2VyLnZlcnNp
b24gPSBtYXRjaGVkLnZlcnNpb247Ci19Ci0KLS8vIENocm9tZSBpcyBXZWJraXQsIGJ1dCBXZWJr
aXQgaXMgYWxzbyBTYWZhcmkuCi1pZiAoIGJyb3dzZXIuY2hyb21lICkgewotICAgICAgICBicm93
c2VyLndlYmtpdCA9IHRydWU7Ci19IGVsc2UgaWYgKCBicm93c2VyLndlYmtpdCApIHsKLSAgICAg
ICAgYnJvd3Nlci5zYWZhcmkgPSB0cnVlOwotfQotCi1qUXVlcnkuYnJvd3NlciA9IGJyb3dzZXI7
Ci0KLWpRdWVyeS5zdWIgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgZnVuY3Rpb24galF1ZXJ5U3Vi
KCBzZWxlY3RvciwgY29udGV4dCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGpRdWVy
eVN1Yi5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApOwotICAgICAgICB9Ci0gICAgICAgIGpR
dWVyeS5leHRlbmQoIHRydWUsIGpRdWVyeVN1YiwgdGhpcyApOwotICAgICAgICBqUXVlcnlTdWIu
c3VwZXJjbGFzcyA9IHRoaXM7Ci0gICAgICAgIGpRdWVyeVN1Yi5mbiA9IGpRdWVyeVN1Yi5wcm90
b3R5cGUgPSB0aGlzKCk7Ci0gICAgICAgIGpRdWVyeVN1Yi5mbi5jb25zdHJ1Y3RvciA9IGpRdWVy
eVN1YjsKLSAgICAgICAgalF1ZXJ5U3ViLnN1YiA9IHRoaXMuc3ViOwotICAgICAgICBqUXVlcnlT
dWIuZm4uaW5pdCA9IGZ1bmN0aW9uIGluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICkgewotICAgICAg
ICAgICAgICAgIGlmICggY29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICYmICEo
Y29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeVN1YikgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0ID0galF1ZXJ5U3ViKCBjb250ZXh0ICk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5mbi5pbml0LmNhbGwoIHRoaXMsIHNlbGVjdG9y
LCBjb250ZXh0LCByb290alF1ZXJ5U3ViICk7Ci0gICAgICAgIH07Ci0gICAgICAgIGpRdWVyeVN1
Yi5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeVN1Yi5mbjsKLSAgICAgICAgdmFyIHJvb3RqUXVl
cnlTdWIgPSBqUXVlcnlTdWIoZG9jdW1lbnQpOwotICAgICAgICByZXR1cm4galF1ZXJ5U3ViOwot
fTsKLQotfSkoKTsKLXZhciBjdXJDU1MsIGlmcmFtZSwgaWZyYW1lRG9jLAotICAgICAgICByYWxw
aGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKLSAgICAgICAgcm9wYWNpdHkgPSAvb3BhY2l0eT0oW14p
XSopLywKLSAgICAgICAgcnBvc2l0aW9uID0gL14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLAot
ICAgICAgICAvLyBzd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRh
YmxlIGV4Y2VwdCAidGFibGUiLCAidGFibGUtY2VsbCIsIG9yICJ0YWJsZS1jYXB0aW9uIgotICAg
ICAgICAvLyBzZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKLSAgICAgICAgcmRpc3BsYXlzd2FwID0g
L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLAotICAgICAgICBybWFyZ2luID0gL15tYXJnaW4v
LAotICAgICAgICBybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCAiXigiICsgY29yZV9wbnVtICsgIiko
LiopJCIsICJpIiApLAotICAgICAgICBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCAiXigiICsgY29y
ZV9wbnVtICsgIikoPyFweClbYS16JV0rJCIsICJpIiApLAotICAgICAgICBycmVsTnVtID0gbmV3
IFJlZ0V4cCggIl4oWy0rXSk9KCIgKyBjb3JlX3BudW0gKyAiKSIsICJpIiApLAotICAgICAgICBl
bGVtZGlzcGxheSA9IHsgQk9EWTogImJsb2NrIiB9LAotCi0gICAgICAgIGNzc1Nob3cgPSB7IHBv
c2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiwgZGlzcGxheTogImJsb2Nr
IiB9LAotICAgICAgICBjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7Ci0gICAgICAgICAgICAgICAgbGV0
dGVyU3BhY2luZzogMCwKLSAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA0MDAKLSAgICAgICAg
fSwKLQotICAgICAgICBjc3NFeHBhbmQgPSBbICJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxl
ZnQiIF0sCi0gICAgICAgIGNzc1ByZWZpeGVzID0gWyAiV2Via2l0IiwgIk8iLCAiTW96IiwgIm1z
IiBdLAotCi0gICAgICAgIGV2ZW50c1RvZ2dsZSA9IGpRdWVyeS5mbi50b2dnbGU7Ci0KLS8vIHJl
dHVybiBhIGNzcyBwcm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3RlbnRpYWxseSB2ZW5kb3IgcHJlZml4
ZWQgcHJvcGVydHkKLWZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBzdHlsZSwgbmFtZSApIHsKLQot
ICAgICAgICAvLyBzaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBhcmUgbm90IHZlbmRvciBwcmVmaXhl
ZAotICAgICAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayBmb3IgdmVuZG9yIHByZWZpeGVk
IG5hbWVzCi0gICAgICAgIHZhciBjYXBOYW1lID0gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2Uo
KSArIG5hbWUuc2xpY2UoMSksCi0gICAgICAgICAgICAgICAgb3JpZ05hbWUgPSBuYW1lLAotICAg
ICAgICAgICAgICAgIGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7Ci0KLSAgICAgICAgd2hpbGUgKCBp
LS0gKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1l
OwotICAgICAgICAgICAgICAgIGlmICggbmFtZSBpbiBzdHlsZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuYW1lOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBvcmlnTmFtZTsKLX0KLQotZnVuY3Rpb24gaXNIaWRkZW4oIGVsZW0sIGVs
ICkgewotICAgICAgICBlbGVtID0gZWwgfHwgZWxlbTsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS5j
c3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSIgfHwgIWpRdWVyeS5jb250YWlucyggZWxl
bS5vd25lckRvY3VtZW50LCBlbGVtICk7Ci19Ci0KLWZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50
cywgc2hvdyApIHsKLSAgICAgICAgdmFyIGVsZW0sIGRpc3BsYXksCi0gICAgICAgICAgICAgICAg
dmFsdWVzID0gW10sCi0gICAgICAgICAgICAgICAgaW5kZXggPSAwLAotICAgICAgICAgICAgICAg
IGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKLQotICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXgg
XTsKLSAgICAgICAgICAgICAgICBpZiAoICFlbGVtLnN0eWxlICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZh
bHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCBzaG93ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVz
ZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBpcwot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgaGlkZGVuIGJ5IGNhc2NhZGVkIHJ1bGVz
IG9yIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzWyBpbmRleCBdICYm
IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhh
dmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIg
c3R5bGUgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBzdWNoIGFuIGVsZW1lbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAm
JiBpc0hpZGRlbiggZWxlbSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiwgY3NzX2Rl
ZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bs
YXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSAhPT0gIm5vbmUiICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5
IiwgZGlzcGxheSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRo
ZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wCi0gICAgICAgIC8vIHRvIGF2b2lkIHRoZSBjb25z
dGFudCByZWZsb3cKLSAgICAgICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5k
ZXgrKyApIHsKLSAgICAgICAgICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07Ci0gICAg
ICAgICAgICAgICAgaWYgKCAhZWxlbS5zdHlsZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoICFzaG93
IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9
PT0gIiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSBz
aG93ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbGVtZW50czsKLX0KLQotalF1ZXJ5LmZuLmV4
dGVuZCh7Ci0gICAgICAgIGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwg
dmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVm
aW5lZCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxl
bSwgbmFtZSwgdmFsdWUgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5jc3MoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAgICB9LCBuYW1lLCB2YWx1ZSwgYXJn
dW1lbnRzLmxlbmd0aCA+IDEgKTsKLSAgICAgICAgfSwKLSAgICAgICAgc2hvdzogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7Ci0gICAg
ICAgIH0sCi0gICAgICAgIGhpZGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVy
biBzaG93SGlkZSggdGhpcyApOwotICAgICAgICB9LAotICAgICAgICB0b2dnbGU6IGZ1bmN0aW9u
KCBzdGF0ZSwgZm4yICkgewotICAgICAgICAgICAgICAgIHZhciBib29sID0gdHlwZW9mIHN0YXRl
ID09PSAiYm9vbGVhbiI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCBzdGF0ZSApICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBmbjIgKSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBldmVudHNUb2dnbGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGJvb2wgPyBzdGF0ZSA6IGlz
SGlkZGVuKCB0aGlzICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eSggdGhpcyApLnNob3coKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLmhpZGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotfSk7
Ci0KLWpRdWVyeS5leHRlbmQoewotICAgICAgICAvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9v
a3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKLSAgICAgICAgLy8gYmVoYXZpb3Igb2YgZ2V0
dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5Ci0gICAgICAgIGNzc0hvb2tzOiB7Ci0g
ICAgICAgICAgICAgICAgb3BhY2l0eTogewotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NT
KCBlbGVtLCAib3BhY2l0eSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICB9LAotCi0gICAgICAgIC8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2luZyBjc3Mg
cHJvcGVydGllcyB0byBhZGQgcHgKLSAgICAgICAgY3NzTnVtYmVyOiB7Ci0gICAgICAgICAgICAg
ICAgImZpbGxPcGFjaXR5IjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAiZm9udFdlaWdodCI6IHRy
dWUsCi0gICAgICAgICAgICAgICAgImxpbmVIZWlnaHQiOiB0cnVlLAotICAgICAgICAgICAgICAg
ICJvcGFjaXR5IjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAib3JwaGFucyI6IHRydWUsCi0gICAg
ICAgICAgICAgICAgIndpZG93cyI6IHRydWUsCi0gICAgICAgICAgICAgICAgInpJbmRleCI6IHRy
dWUsCi0gICAgICAgICAgICAgICAgInpvb20iOiB0cnVlCi0gICAgICAgIH0sCi0KLSAgICAgICAg
Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZQot
ICAgICAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlCi0gICAgICAgIGNzc1Byb3Bz
OiB7Ci0gICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIGZsb2F0IGNzcyBwcm9wZXJ0eQotICAg
ICAgICAgICAgICAgICJmbG9hdCI6IGpRdWVyeS5zdXBwb3J0LmNzc0Zsb2F0ID8gImNzc0Zsb2F0
IiA6ICJzdHlsZUZsb2F0IgotICAgICAgICB9LAotCi0gICAgICAgIC8vIEdldCBhbmQgc2V0IHRo
ZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCi0gICAgICAgIHN0eWxlOiBmdW5jdGlvbigg
ZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgewotICAgICAgICAgICAgICAgIC8vIERvbid0IHNl
dCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwotICAgICAgICAgICAgICAgIGlmICgg
IWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFl
bGVtLnN0eWxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtp
bmcgd2l0aCB0aGUgcmlnaHQgbmFtZQotICAgICAgICAgICAgICAgIHZhciByZXQsIHR5cGUsIGhv
b2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNl
KCBuYW1lICksCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7Ci0K
LSAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8ICgg
alF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBvcmln
TmFtZSApICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhl
ZCB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQg
dmVyc2lvbgotICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0g
fHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwotCi0gICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAh
PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB2
YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCByZWxhdGl2ZSBudW1i
ZXIgc3RyaW5ncyAoKz0gb3IgLT0pIHRvIHJlbGF0aXZlIG51bWJlcnMuICM3MzQ1Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmIChyZXQgPSBycmVsTnVt
LmV4ZWMoIHZhbHVlICkpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9ICggcmV0WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxl
bSwgbmFtZSApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1
ZyAjOTIzNwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gIm51bWJlciI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IE5hTiBhbmQgbnVsbCB2YWx1ZXMgYXJlbid0IHNldC4gU2VlOiAjNzEx
NgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PSBudWxsIHx8IHR5cGUgPT09
ICJudW1iZXIiICYmIGlzTmFOKCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRo
ZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAhalF1ZXJ5LmNzc051bWJlclsgb3JpZ05h
bWUgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gInB4IjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNl
dCB0aGUgc3BlY2lmaWVkIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFob29r
cyB8fCAhKCJzZXQiIGluIGhvb2tzKSB8fCAodmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVl
LCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXcmFwcGVkIHRvIHByZXZlbnQgSUUgZnJvbSB0aHJvd2luZyBlcnJvcnMgd2hlbiAn
aW52YWxpZCcgdmFsdWVzIGFyZSBwcm92aWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGaXhlcyBidWcgIzU1MDkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVsgbmFt
ZSBdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkg
e30KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0
aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwg
ZmFsc2UsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0
aGUgc3R5bGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVbIG5h
bWUgXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY3NzOiBmdW5j
dGlvbiggZWxlbSwgbmFtZSwgbnVtZXJpYywgZXh0cmEgKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHZhbCwgbnVtLCBob29rcywKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdOYW1lID0galF1
ZXJ5LmNhbWVsQ2FzZSggbmFtZSApOwotCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCi0gICAgICAgICAgICAgICAgbmFt
ZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCAoIGpRdWVyeS5jc3NQcm9wc1sgb3Jp
Z05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBlbGVtLnN0eWxlLCBvcmlnTmFtZSApICk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uCi0gICAg
ICAgICAgICAgICAgLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgotICAgICAg
ICAgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hv
b2tzWyBvcmlnTmFtZSBdOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92
aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKLSAgICAgICAgICAgICAgICBp
ZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21w
dXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0Ci0gICAgICAgICAgICAgICAgaWYgKCB2YWwgPT09
IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGN1ckNTUyggZWxl
bSwgbmFtZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vY29udmVy
dCAibm9ybWFsIiB0byBjb21wdXRlZCB2YWx1ZQotICAgICAgICAgICAgICAgIGlmICggdmFsID09
PSAibm9ybWFsIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFJldHVybiwgY29udmVydGluZyB0byBudW1i
ZXIgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51
bWVyaWMKLSAgICAgICAgICAgICAgICBpZiAoIG51bWVyaWMgfHwgZXh0cmEgIT09IHVuZGVmaW5l
ZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IHBhcnNlRmxvYXQoIHZhbCApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWVyaWMgfHwgalF1ZXJ5LmlzTnVtZXJp
YyggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbDsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBBIG1ldGhvZCBmb3Ig
cXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NTIHByb3BlcnRpZXMgdG8gZ2V0IGNvcnJlY3QgY2Fs
Y3VsYXRpb25zCi0gICAgICAgIHN3YXA6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFj
ayApIHsKLSAgICAgICAgICAgICAgICB2YXIgcmV0LCBuYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgb2xkID0ge307Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb2xkIHZh
bHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKLSAgICAgICAgICAgICAgICBmb3IgKCBuYW1l
IGluIG9wdGlvbnMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGRbIG5hbWUgXSA9IGVs
ZW0uc3R5bGVbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGVbIG5h
bWUgXSA9IG9wdGlvbnNbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBS
ZXZlcnQgdGhlIG9sZCB2YWx1ZXMKLSAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlv
bnMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRb
IG5hbWUgXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OwotICAgICAgICB9Ci19KTsKLQotLy8gTk9URTogVG8gYW55IGZ1dHVyZSBtYWludGFpbmVyLCB3
ZSd2ZSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZQotLy8gYmVjYXVzZSBqc2RvbSBvbiBub2RlLmpz
IHdpbGwgYnJlYWsgd2l0aG91dCBpdC4KLWlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7
Ci0gICAgICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICAgICAg
ICAgIHZhciByZXQsIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb21wdXRlZCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIGNvbXB1dGVkICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBn
ZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSBpbiBJRTks
IHNlZSAjMTI1MzcKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1dGVkLmdldFBy
b3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25l
ckRvY3VtZW50LCBlbGVtICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHRyaWJ1dGUgdG8gdGhlICJhd2Vzb21l
IGhhY2sgYnkgRGVhbiBFZHdhcmRzIgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21l
IDwgMTcgYW5kIFNhZmFyaSA1LjAgdXNlcyAiY29tcHV0ZWQgdmFsdWUiIGluc3RlYWQgb2YgInVz
ZWQgdmFsdWUiIGZvciBtYXJnaW4tcmlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNh
ZmFyaSA1LjEuNyAoYXQgbGVhc3QpIHJldHVybnMgcGVyY2VudGFnZSBmb3IgYSBsYXJnZXIgc2V0
IG9mIHZhbHVlcywgYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscwotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVj
OiBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiBybWFyZ2luLnRl
c3QoIG5hbWUgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBz
dHlsZS53aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGggPSBz
dHlsZS5taW5XaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGgg
PSBzdHlsZS5tYXhXaWR0aDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1dGVkLndpZHRoOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJldDsKLSAgICAgICAgfTsKLX0gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7Ci0gICAgICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lICkgewotICAgICAgICAgICAgICAgIHZhciBsZWZ0LCByc0xlZnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJlbnRTdHls
ZVsgbmFtZSBdLAotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOwot
Ci0gICAgICAgICAgICAgICAgLy8gQXZvaWQgc2V0dGluZyByZXQgdG8gZW1wdHkgc3RyaW5nIGhl
cmUKLSAgICAgICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBkZWZhdWx0IHRvIGF1dG8KLSAgICAg
ICAgICAgICAgICBpZiAoIHJldCA9PSBudWxsICYmIHN0eWxlICYmIHN0eWxlWyBuYW1lIF0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzdHlsZVsgbmFtZSBdOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZyb20gdGhlIGF3ZXNvbWUgaGFjayBieSBE
ZWFuIEVkd2FyZHMKLSAgICAgICAgICAgICAgICAvLyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hp
dmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCi0KLSAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBwaXhlbCBudW1iZXIKLSAg
ICAgICAgICAgICAgICAvLyBidXQgYSBudW1iZXIgdGhhdCBoYXMgYSB3ZWlyZCBlbmRpbmcsIHdl
IG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKLSAgICAgICAgICAgICAgICAvLyBidXQgbm90
IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9zZSBhcmUgcHJvcG9ydGlvbmFsIHRvIHRo
ZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGNhbid0
IG1lYXN1cmUgdGhlIHBhcmVudCBpbnN0ZWFkIGJlY2F1c2UgaXQgbWlnaHQgdHJpZ2dlciBhICJz
dGFja2luZyBkb2xscyIgcHJvYmxlbQotICAgICAgICAgICAgICAgIGlmICggcm51bW5vbnB4LnRl
c3QoIHJldCApICYmICFycG9zaXRpb24udGVzdCggbmFtZSApICkgewotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzCi0gICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0ID0gc3R5bGUubGVmdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJz
TGVmdCA9IGVsZW0ucnVudGltZVN0eWxlICYmIGVsZW0ucnVudGltZVN0eWxlLmxlZnQ7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBj
b21wdXRlZCB2YWx1ZSBvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcnNMZWZ0ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0
ID0gZWxlbS5jdXJyZW50U3R5bGUubGVmdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBuYW1lID09PSAiZm9udFNpemUiID8g
IjFlbSIgOiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzdHlsZS5waXhlbExl
ZnQgKyAicHgiOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhlIGNoYW5n
ZWQgdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5sZWZ0ID0gbGVmdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggcnNMZWZ0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gcnNMZWZ0OwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJl
dHVybiByZXQgPT09ICIiID8gImF1dG8iIDogcmV0OwotICAgICAgICB9OwotfQotCi1mdW5jdGlv
biBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkgewotICAgICAgICB2
YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5leGVjKCB2YWx1ZSApOwotICAgICAgICByZXR1cm4gbWF0
Y2hlcyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCggMCwgbWF0Y2hlc1sgMSBd
IC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMiBdIHx8ICJweCIgKSA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZTsKLX0KLQotZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JI
ZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRlckJveCApIHsKLSAgICAgICAgdmFyIGkg
PSBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICkgPwotICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQs
IGF2b2lkIGF1Z21lbnRhdGlvbgotICAgICAgICAgICAgICAgIDQgOgotICAgICAgICAgICAgICAg
IC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHByb3Bl
cnRpZXMKLSAgICAgICAgICAgICAgICBuYW1lID09PSAid2lkdGgiID8gMSA6IDAsCi0KLSAgICAg
ICAgICAgICAgICB2YWwgPSAwOwotCi0gICAgICAgIGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHsK
LSAgICAgICAgICAgICAgICAvLyBib3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW4sIHNvIGFk
ZCBpdCBpZiB3ZSB3YW50IGl0Ci0gICAgICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gIm1hcmdp
biIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSB1c2UgalF1ZXJ5LmNzcyBpbnN0
ZWFkIG9mIGN1ckNTUyBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9m
IHRoZSByZWxpYWJsZU1hcmdpblJpZ2h0IENTUyBob29rIQotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsgY3NzRXhwYW5kWyBpIF0sIHRydWUg
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBGcm9tIHRoaXMgcG9p
bnQgb24gd2UgdXNlIGN1ckNTUyBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZSAocmVsZXZhbnQgaW4g
YW5pbWF0aW9ucykKLSAgICAgICAgICAgICAgICBpZiAoIGlzQm9yZGVyQm94ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyLWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1v
dmUgaXQgaWYgd2Ugd2FudCBjb250ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV4
dHJhID09PSAiY29udGVudCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBd
ICkgKSB8fCAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwg
c28gcmVtb3ZlIGJvcmRlcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0g
Im1hcmdpbiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCAtPSBwYXJz
ZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgi
ICkgKSB8fCAwOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBp
c24ndCBjb250ZW50LCBzbyBhZGQgcGFkZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgdmFs
ICs9IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0g
KSApIHx8IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIGV4
dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFkZCBib3JkZXIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgImJvcmRl
ciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIgKSApIHx8IDA7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHZhbDsKLX0KLQotZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEg
KSB7Ci0KLSAgICAgICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHksIHdoaWNoIGlzIGVx
dWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKLSAgICAgICAgdmFyIHZhbCA9IG5hbWUg
PT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsCi0gICAg
ICAgICAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCi0gICAgICAgICAgICAgICAgaXNC
b3JkZXJCb3ggPSBqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmcgJiYgalF1ZXJ5LmNzcyggZWxlbSwg
ImJveFNpemluZyIgKSA9PT0gImJvcmRlci1ib3giOwotCi0gICAgICAgIC8vIHNvbWUgbm9uLWh0
bWwgZWxlbWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZv
ciBudWxsL3VuZGVmaW5lZAotICAgICAgICAvLyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemls
bGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODUKLSAgICAgICAgLy8gTWF0aE1MIC0gaHR0cHM6
Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkxNjY4Ci0gICAgICAgIGlm
ICggdmFsIDw9IDAgfHwgdmFsID09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmFsbCBi
YWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBjc3MgaWYgbmVjZXNzYXJ5Ci0gICAgICAg
ICAgICAgICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgaWYg
KCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFs
ID0gZWxlbS5zdHlsZVsgbmFtZSBdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCByZXR1cm4u
Ci0gICAgICAgICAgICAgICAgaWYgKCBybnVtbm9ucHgudGVzdCh2YWwpICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyB3ZSBuZWVkIHRoZSBjaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIg
d2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlcwotICAgICAgICAgICAgICAgIC8vIGZvciBn
ZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0u
c3R5bGUKLSAgICAgICAgICAgICAgICB2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3ggJiYg
KCBqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSB8fCB2YWwgPT09IGVsZW0uc3R5bGVb
IG5hbWUgXSApOwotCi0gICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplICIiLCBhdXRvLCBhbmQg
cHJlcGFyZSBmb3IgZXh0cmEKLSAgICAgICAgICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwg
KSB8fCAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdXNlIHRoZSBhY3RpdmUgYm94LXNpemlu
ZyBtb2RlbCB0byBhZGQvc3VidHJhY3QgaXJyZWxldmFudCBzdHlsZXMKLSAgICAgICAgcmV0dXJu
ICggdmFsICsKLSAgICAgICAgICAgICAgICBhdWdtZW50V2lkdGhPckhlaWdodCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDog
ImNvbnRlbnQiICksCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUlzQm9yZGVyQm94Ci0g
ICAgICAgICAgICAgICAgKQotICAgICAgICApICsgInB4IjsKLX0KLQotCi0vLyBUcnkgdG8gZGV0
ZXJtaW5lIHRoZSBkZWZhdWx0IGRpc3BsYXkgdmFsdWUgb2YgYW4gZWxlbWVudAotZnVuY3Rpb24g
Y3NzX2RlZmF1bHREaXNwbGF5KCBub2RlTmFtZSApIHsKLSAgICAgICAgaWYgKCBlbGVtZGlzcGxh
eVsgbm9kZU5hbWUgXSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWRpc3BsYXlbIG5v
ZGVOYW1lIF07Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZWxlbSA9IGpRdWVyeSggIjwiICsg
bm9kZU5hbWUgKyAiPiIgKS5hcHBlbmRUbyggZG9jdW1lbnQuYm9keSApLAotICAgICAgICAgICAg
ICAgIGRpc3BsYXkgPSBlbGVtLmNzcygiZGlzcGxheSIpOwotICAgICAgICBlbGVtLnJlbW92ZSgp
OwotCi0gICAgICAgIC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLAotICAgICAgICAvLyBnZXQg
ZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5IGJ5IGF0dGFjaGluZyBpdCB0byBhIHRlbXAg
aWZyYW1lCi0gICAgICAgIGlmICggZGlzcGxheSA9PT0gIm5vbmUiIHx8IGRpc3BsYXkgPT09ICIi
ICkgewotICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYWxyZWFkeS1jcmVhdGVkIGlmcmFtZSBp
ZiBwb3NzaWJsZQotICAgICAgICAgICAgICAgIGlmcmFtZSA9IGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoCi0gICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUgfHwgalF1ZXJ5LmV4dGVuZCgg
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhbWVCb3JkZXI6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAg
ICAgICAgICAgIC8vIENyZWF0ZSBhIGNhY2hlYWJsZSBjb3B5IG9mIHRoZSBpZnJhbWUgZG9jdW1l
bnQgb24gZmlyc3QgY2FsbC4KLSAgICAgICAgICAgICAgICAvLyBJRSBhbmQgT3BlcmEgd2lsbCBh
bGxvdyB1cyB0byByZXVzZSB0aGUgaWZyYW1lRG9jIHdpdGhvdXQgcmUtd3JpdGluZyB0aGUgZmFr
ZSBIVE1MCi0gICAgICAgICAgICAgICAgLy8gZG9jdW1lbnQgdG8gaXQ7IFdlYktpdCAmIEZpcmVm
b3ggd29uJ3QgYWxsb3cgcmV1c2luZyB0aGUgaWZyYW1lIGRvY3VtZW50LgotICAgICAgICAgICAg
ICAgIGlmICggIWlmcmFtZURvYyB8fCAhaWZyYW1lLmNyZWF0ZUVsZW1lbnQgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlm
cmFtZS5jb250ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmcmFtZURvYy53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+Iik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZnJhbWVEb2MuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBlbGVtID0gaWZyYW1lRG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGlmcmFt
ZURvYy5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKSApOwotCi0gICAgICAgICAgICAgICAgZGlzcGxh
eSA9IGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICk7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQu
Ym9keS5yZW1vdmVDaGlsZCggaWZyYW1lICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTdG9y
ZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKLSAgICAgICAgZWxlbWRpc3BsYXlbIG5vZGVO
YW1lIF0gPSBkaXNwbGF5OwotCi0gICAgICAgIHJldHVybiBkaXNwbGF5OwotfQotCi1qUXVlcnku
ZWFjaChbICJoZWlnaHQiLCAid2lkdGgiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgICAg
ICBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKLSAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGNvbXB1dGVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjZXJ0
YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93
IHRoZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaG93ZXZlciwgaXQgbXVz
dCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIHRo
aXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm9mZnNldFdpZHRo
ID09PSAwICYmIHJkaXNwbGF5c3dhcC50ZXN0KCBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5zd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVt
LCBuYW1lLCBleHRyYSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBl
bGVtLCBuYW1lLCBleHRyYSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAg
ICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4dHJh
ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVnbWVudFdpZHRoT3JIZWlnaHQo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBlbGVt
LCAiYm94U2l6aW5nIiApID09PSAiYm9yZGVyLWJveCIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKSA6IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICB9OwotfSk7Ci0KLWlmICggIWpRdWVyeS5zdXBwb3J0Lm9wYWNpdHkgKSB7
Ci0gICAgICAgIGpRdWVyeS5jc3NIb29rcy5vcGFjaXR5ID0gewotICAgICAgICAgICAgICAgIGdl
dDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgdXNlcyBmaWx0ZXJzIGZvciBvcGFjaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcm9wYWNpdHkudGVzdCggKGNvbXB1dGVkICYmIGVsZW0uY3VycmVudFN0eWxlID8gZWxl
bS5jdXJyZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHlsZS5maWx0ZXIpIHx8ICIiICkgPwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAuMDEgKiBwYXJzZUZsb2F0KCBSZWdFeHAu
JDEgKSApICsgIiIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCA/
ICIxIiA6ICIiOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHls
ZSA9IGVsZW0uc3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
dHlsZSA9IGVsZW0uY3VycmVudFN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5PSIg
KyB2YWx1ZSAqIDEwMCArICIpIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWx0ZXIgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLmZpbHRlciB8fCBzdHlsZS5m
aWx0ZXIgfHwgIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGhhcyB0cm91Ymxl
IHdpdGggb3BhY2l0eSBpZiBpdCBkb2VzIG5vdCBoYXZlIGxheW91dAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRm9yY2UgaXQgYnkgc2V0dGluZyB0aGUgem9vbSBsZXZlbAotICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGUuem9vbSA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGlmIHNldHRpbmcgb3BhY2l0eSB0byAxLCBhbmQgbm8gb3RoZXIgZmlsdGVycyBleGlzdCAt
IGF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBhdHRyaWJ1dGUgIzY2NTIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdmFsdWUgPj0gMSAmJiBqUXVlcnkudHJpbSggZmlsdGVyLnJlcGxhY2Uo
IHJhbHBoYSwgIiIgKSApID09PSAiIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIgc3RpbGwgbGVh
dmUgImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGlmICJmaWx0ZXI6IiBpcyBwcmVzZW50IGF0IGFsbCwgY2xlYXJUeXBlIGlzIGRpc2Fi
bGVkLCB3ZSB3YW50IHRvIGF2b2lkIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlzIElFIE9ubHksIGJ1dCBzbyBhcHBhcmVudGx5
IGlzIHRoaXMgY29kZSBwYXRoLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBpZiB0aGVyZSB0aGVyZSBpcyBubyBmaWx0ZXIgc3R5bGUgYXBwbGllZCBp
biBhIGNzcyBydWxlLCB3ZSBhcmUgZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxlLmZpbHRlciApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZpbHRlciB2YWx1ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlLmZpbHRlciA9IHJhbHBoYS50ZXN0KCBmaWx0ZXIgKSA/
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZXBsYWNlKCByYWxwaGEs
IG9wYWNpdHkgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciArICIg
IiArIG9wYWNpdHk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotfQotCi0vLyBUaGVz
ZSBob29rcyBjYW5ub3QgYmUgYWRkZWQgdW50aWwgRE9NIHJlYWR5IGJlY2F1c2UgdGhlIHN1cHBv
cnQgdGVzdAotLy8gZm9yIGl0IGlzIG5vdCBydW4gdW50aWwgYWZ0ZXIgRE9NIHJlYWR5Ci1qUXVl
cnkoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlTWFy
Z2luUmlnaHQgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmNzc0hvb2tzLm1hcmdpblJpZ2h0
ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlYktpdCBCdWcgMTMz
NDMgLSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3JvbmcgdmFsdWUgZm9yIG1hcmdpbi1yaWdo
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBieSB0ZW1w
b3JhcmlseSBzZXR0aW5nIGVsZW1lbnQgZGlzcGxheSB0byBpbmxpbmUtYmxvY2sKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCB7ICJkaXNw
bGF5IjogImlubGluZS1ibG9jayIgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJDU1MoIGVsZW0sICJtYXJn
aW5SaWdodCIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZWJraXQg
YnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODQKLSAgICAg
ICAgLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9y
IHRvcC9sZWZ0L2JvdHRvbS9yaWdodAotICAgICAgICAvLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBj
c3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwgd2UganVzdCBjaGVjayBmb3Ig
aXQgaGVyZQotICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5waXhlbFBvc2l0aW9uICYmIGpR
dWVyeS5mbi5wb3NpdGlvbiApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggWyAidG9w
IiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVt
LCBwcm9wICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBybnVt
bm9ucHgudGVzdCggcmV0ICkgPyBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyAi
cHgiIDogcmV0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi19KTsKLQotaWYgKCBqUXVlcnku
ZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewotICAgICAgICBqUXVlcnkuZXhwci5maWx0
ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHJldHVybiAo
IGVsZW0ub2Zmc2V0V2lkdGggPT09IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPT09IDAgKSB8fCAo
IWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoKGVsZW0uc3R5bGUgJiYg
ZWxlbS5zdHlsZS5kaXNwbGF5KSB8fCBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApKSA9PT0gIm5v
bmUiKTsKLSAgICAgICAgfTsKLQotICAgICAgICBqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUg
PSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIWpRdWVyeS5leHBy
LmZpbHRlcnMuaGlkZGVuKCBlbGVtICk7Ci0gICAgICAgIH07Ci19Ci0KLS8vIFRoZXNlIGhvb2tz
IGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXMKLWpRdWVyeS5lYWNoKHsK
LSAgICAgICAgbWFyZ2luOiAiIiwKLSAgICAgICAgcGFkZGluZzogIiIsCi0gICAgICAgIGJvcmRl
cjogIldpZHRoIgotfSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkgewotICAgICAgICBqUXVl
cnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0gewotICAgICAgICAgICAgICAgIGV4cGFu
ZDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lcyBhIHNpbmdsZSBudW1i
ZXIgaWYgbm90IGEgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRz
ID0gdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiA/IHZhbHVlLnNwbGl0KCIgIikgOiBbIHZhbHVl
IF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkID0ge307Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgNDsgaSsrICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBp
IF0gKyBzdWZmaXggXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGlmICggIXJtYXJnaW4u
dGVzdCggcHJlZml4ICkgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVm
aXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsKLSAgICAgICAgfQotfSk7Ci12
YXIgcjIwID0gLyUyMC9nLAotICAgICAgICByYnJhY2tldCA9IC9cW1xdJC8sCi0gICAgICAgIHJD
UkxGID0gL1xyP1xuL2csCi0gICAgICAgIHJpbnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRldGlt
ZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdl
fHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSwKLSAgICAgICAgcnNlbGVjdFRleHRh
cmVhID0gL14oPzpzZWxlY3R8dGV4dGFyZWEpL2k7Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAg
ICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOwotICAgICAgICB9LAotICAgICAgICBz
ZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bWFwKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVt
ZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIHRoaXMuZWxlbWVudHMgKSA6IHRoaXM7Ci0gICAgICAg
ICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdGhpcy5jaGVja2VkIHx8IHJzZWxlY3RU
ZXh0YXJlYS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByaW5wdXQudGVzdCggdGhpcy50eXBlICkgKTsKLSAgICAgICAgICAg
ICAgICB9KQotICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oIGksIGVsZW0gKXsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSBudWxsID8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnVsbCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsLCBpICl7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBuYW1lOiBlbGVt
Lm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2Uo
IHJDUkxGLCAiXHJcbiIgKSB9OwotICAgICAgICAgICAgICAgIH0pLmdldCgpOwotICAgICAgICB9
Ci19KTsKLQotLy9TZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBv
ZgotLy9rZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKLWpRdWVyeS5wYXJhbSA9IGZ1bmN0
aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKLSAgICAgICAgdmFyIHByZWZpeCwKLSAgICAgICAgICAg
ICAgICBzID0gW10sCi0gICAgICAgICAgICAgICAgYWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBp
bnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogKCB2YWx1ZSA9PSBu
dWxsID8gIiIgOiB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgc1sgcy5sZW5ndGgg
XSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQo
IHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAvLyBTZXQgdHJhZGl0aW9u
YWwgdG8gdHJ1ZSBmb3IgalF1ZXJ5IDw9IDEuMy4yIGJlaGF2aW9yLgotICAgICAgICBpZiAoIHRy
YWRpdGlvbmFsID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgdHJhZGl0aW9uYWwg
PSBqUXVlcnkuYWpheFNldHRpbmdzICYmIGpRdWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1
bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgotICAgICAgICBpZiAoIGpR
dWVyeS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3Qo
IGEgKSApICkgewotICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50
cwotICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0cmFk
aXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXIKLSAg
ICAgICAgICAgICAgICAvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNp
dmVseS4KLSAgICAgICAgICAgICAgICBmb3IgKCBwcmVmaXggaW4gYSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25h
bCwgYWRkICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0
dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvbgotICAgICAgICByZXR1cm4gcy5qb2luKCAi
JiIgKS5yZXBsYWNlKCByMjAsICIrIiApOwotfTsKLQotZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHBy
ZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgewotICAgICAgICB2YXIgbmFtZTsKLQotICAg
ICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsKLSAgICAgICAgICAgICAgICAvLyBT
ZXJpYWxpemUgYXJyYXkgaXRlbS4KLSAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggb2JqLCBm
dW5jdGlvbiggaSwgdiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHJhZGl0aW9u
YWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkKCBwcmVmaXgsIHYgKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SWYgYXJyYXkgaXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgaW5kZXggdG8gcmVz
b2x2ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHJhY2sgKGFzIG9mIDEuMC4wKSBjYW4ndCBjdXJy
ZW50bHkgZGVzZXJpYWxpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVz
dGVkIGFycmF5cyBwcm9wZXJseSwgYW5kIGF0dGVtcHRpbmcgdG8gZG8gc28gbWF5IGNhdXNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgc2VydmVyIGVycm9yLiBQb3NzaWJs
ZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBkZXNlcmlhbGl6YXRpb24gYWxnb3JpdGhtIG9yIHRvIHByb3ZpZGUgYW4gb3B0aW9u
IG9yIGZsYWcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gZm9yY2UgYXJy
YXkgc2VyaWFsaXphdGlvbiB0byBiZSBzaGFsbG93LgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVj
dCIgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgIH0gZWxzZSBpZiAo
ICF0cmFkaXRpb25hbCAmJiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJvYmplY3QiICkgewotICAg
ICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS4KLSAgICAgICAgICAgICAgICBm
b3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1z
KCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFk
ZCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KLSAgICAgICAgICAgICAgICBhZGQoIHByZWZp
eCwgb2JqICk7Ci0gICAgICAgIH0KLX0KLXZhcgotICAgICAgICAvLyBEb2N1bWVudCBsb2NhdGlv
bgotICAgICAgICBhamF4TG9jUGFydHMsCi0gICAgICAgIGFqYXhMb2NhdGlvbiwKLQotICAgICAg
ICByaGFzaCA9IC8jLiokLywKLSAgICAgICAgcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxy
XG5dKilccj8kL21nLCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hhcmFjdGVyIGF0IEVPTAotICAgICAg
ICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb24KLSAgICAg
ICAgcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVu
c2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLAotICAgICAgICBybm9Db250ZW50ID0gL14oPzpHRVR8
SEVBRCkkLywKLSAgICAgICAgcnByb3RvY29sID0gL15cL1wvLywKLSAgICAgICAgcnF1ZXJ5ID0g
L1w/LywKLSAgICAgICAgcnNjcmlwdCA9IC88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4p
PFtePF0qKSo8XC9zY3JpcHQ+L2dpLAotICAgICAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCi0g
ICAgICAgIHJ1cmwgPSAvXihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCsp
fCl8KS8sCi0KLSAgICAgICAgLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZAot
ICAgICAgICBfbG9hZCA9IGpRdWVyeS5mbi5sb2FkLAotCi0gICAgICAgIC8qIFByZWZpbHRlcnMK
LSAgICAgICAgICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5
cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSkKLSAgICAgICAgICogMikgVGhl
c2UgYXJlIGNhbGxlZDoKLSAgICAgICAgICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5z
cG9ydAotICAgICAgICAgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBp
cyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpCi0gICAgICAgICAqIDMpIGtleSBp
cyB0aGUgZGF0YVR5cGUKLSAgICAgICAgICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2Fu
IGJlIHVzZWQKLSAgICAgICAgICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3Bv
cnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byAiKiIgaWYgbmVlZGVkCi0gICAg
ICAgICAqLwotICAgICAgICBwcmVmaWx0ZXJzID0ge30sCi0KLSAgICAgICAgLyogVHJhbnNwb3J0
cyBiaW5kaW5ncwotICAgICAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCi0gICAgICAgICAq
IDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCi0gICAgICAgICAqIDMpIHNl
bGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRv
ICIqIiBpZiBuZWVkZWQKLSAgICAgICAgICovCi0gICAgICAgIHRyYW5zcG9ydHMgPSB7fSwKLQot
ICAgICAgICAvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBt
dXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KLSAgICAgICAgYWxsVHlwZXMg
PSBbIiovIl0gKyBbIioiXTsKLQotLy8gIzgxMzgsIElFIG1heSB0aHJvdyBhbiBleGNlcHRpb24g
d2hlbiBhY2Nlc3NpbmcKLS8vIGEgZmllbGQgZnJvbSB3aW5kb3cubG9jYXRpb24gaWYgZG9jdW1l
bnQuZG9tYWluIGhhcyBiZWVuIHNldAotdHJ5IHsKLSAgICAgICAgYWpheExvY2F0aW9uID0gbG9j
YXRpb24uaHJlZjsKLX0gY2F0Y2goIGUgKSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgaHJlZiBhdHRy
aWJ1dGUgb2YgYW4gQSBlbGVtZW50Ci0gICAgICAgIC8vIHNpbmNlIElFIHdpbGwgbW9kaWZ5IGl0
IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCi0gICAgICAgIGFqYXhMb2NhdGlvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoICJhIiApOwotICAgICAgICBhamF4TG9jYXRpb24uaHJlZiA9ICIiOwot
ICAgICAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24uaHJlZjsKLX0KLQotLy8gU2VnbWVu
dCBsb2NhdGlvbiBpbnRvIHBhcnRzCi1hamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhMb2Nh
dGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107Ci0KLS8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3Ig
alF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0Ci1mdW5jdGlvbiBh
ZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKLQotICAgICAgICAvLyBk
YXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvICIqIgotICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHsKLQotICAgICAg
ICAgICAgICAgIGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gInN0cmluZyIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVFeHByZXNzaW9uID0gIioiOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBkYXRhVHlwZSwgbGlzdCwgcGxhY2VCZWZv
cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Np
b24udG9Mb3dlckNhc2UoKS5zcGxpdCggY29yZV9yc3BhY2UgKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGkgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZGF0YVR5cGVz
Lmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMg
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRo
ZSBkYXRhVHlwZUV4cHJlc3Npb24KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8
IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlw
ZSA9IGRhdGFUeXBlc1sgaSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBjb250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBiZWZvcmUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYW55IGV4aXN0aW5nIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGxhY2VCZWZvcmUgPSAvXlwrLy50ZXN0KCBkYXRhVHlwZSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBsYWNlQmVmb3JlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gZGF0YVR5cGUuc3Vi
c3RyKCAxICkgfHwgIioiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0g
PSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoZW4gd2UgYWRkIHRvIHRoZSBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFsgcGxhY2VCZWZvcmUgPyAidW5zaGlmdCIg
OiAicHVzaCIgXSggZnVuYyApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLX0KLQotLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZv
ciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCi1mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09y
VHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLAot
ICAgICAgICAgICAgICAgIGRhdGFUeXBlIC8qIGludGVybmFsICovLCBpbnNwZWN0ZWQgLyogaW50
ZXJuYWwgKi8gKSB7Ci0KLSAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZSB8fCBvcHRpb25zLmRh
dGFUeXBlc1sgMCBdOwotICAgICAgICBpbnNwZWN0ZWQgPSBpbnNwZWN0ZWQgfHwge307Ci0KLSAg
ICAgICAgaW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTsKLQotICAgICAgICB2YXIgc2VsZWN0
aW9uLAotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0sCi0gICAg
ICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gbGlzdCA/IGxpc3Qu
bGVuZ3RoIDogMCwKLSAgICAgICAgICAgICAgICBleGVjdXRlT25seSA9ICggc3RydWN0dXJlID09
PSBwcmVmaWx0ZXJzICk7Ci0KLSAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoICYmICggZXhlY3V0
ZU9ubHkgfHwgIXNlbGVjdGlvbiApOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9u
ID0gbGlzdFsgaSBdKCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7Ci0gICAgICAg
ICAgICAgICAgLy8gSWYgd2UgZ290IHJlZGlyZWN0ZWQgdG8gYW5vdGhlciBkYXRhVHlwZQotICAg
ICAgICAgICAgICAgIC8vIHdlIHRyeSB0aGVyZSBpZiBleGVjdXRpbmcgb25seSBhbmQgbm90IGRv
bmUgYWxyZWFkeQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdGlvbiA9PT0gInN0
cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFleGVjdXRlT25seSB8fCBp
bnNwZWN0ZWRbIHNlbGVjdGlvbiBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb24gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFUeXBlcy51bnNo
aWZ0KCBzZWxlY3Rpb24gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFs
T3B0aW9ucywganFYSFIsIHNlbGVjdGlvbiwgaW5zcGVjdGVkICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHdl
J3JlIG9ubHkgZXhlY3V0aW5nIG9yIG5vdGhpbmcgd2FzIHNlbGVjdGVkCi0gICAgICAgIC8vIHdl
IHRyeSB0aGUgY2F0Y2hhbGwgZGF0YVR5cGUgaWYgbm90IGRvbmUgYWxyZWFkeQotICAgICAgICBp
ZiAoICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApICYmICFpbnNwZWN0ZWRbICIqIiBdICkg
ewotICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3Bv
cnRzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIG9wdGlvbnMs
IG9yaWdpbmFsT3B0aW9ucywganFYSFIsICIqIiwgaW5zcGVjdGVkICk7Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gdW5uZWNlc3Nhcnkgd2hlbiBvbmx5IGV4ZWN1dGluZyAocHJlZmlsdGVycykKLSAg
ICAgICAgLy8gYnV0IGl0J2xsIGJlIGlnbm9yZWQgYnkgdGhlIGNhbGxlciBpbiB0aGF0IGNhc2UK
LSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjsKLX0KLQotLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3Ig
YWpheCBvcHRpb25zCi0vLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVl
cCBleHRlbmRlZCkKLS8vIEZpeGVzICM5ODg3Ci1mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQs
IHNyYyApIHsKLSAgICAgICAgdmFyIGtleSwgZGVlcCwKLSAgICAgICAgICAgICAgICBmbGF0T3B0
aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307Ci0gICAgICAgIGZv
ciAoIGtleSBpbiBzcmMgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBzcmNbIGtleSBdICE9PSB1
bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoIGZsYXRPcHRpb25zWyBrZXkg
XSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtl
eSBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIGRlZXAgKSB7
Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7Ci0g
ICAgICAgIH0KLX0KLQotalF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNh
bGxiYWNrICkgewotICAgICAgICBpZiAoIHR5cGVvZiB1cmwgIT09ICJzdHJpbmciICYmIF9sb2Fk
ICkgewotICAgICAgICAgICAgICAgIHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRz
ICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEb24ndCBkbyBhIHJlcXVlc3QgaWYgbm8gZWxl
bWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAotICAgICAgICBpZiAoICF0aGlzLmxlbmd0aCApIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBz
ZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsCi0gICAgICAgICAgICAgICAgc2VsZiA9IHRoaXMsCi0g
ICAgICAgICAgICAgICAgb2ZmID0gdXJsLmluZGV4T2YoIiAiKTsKLQotICAgICAgICBpZiAoIG9m
ZiA+PSAwICkgewotICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdXJsLnNsaWNlKCBvZmYsIHVy
bC5sZW5ndGggKTsKLSAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uCi0gICAgICAgIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgewotCi0gICAgICAgICAgICAgICAgLy8gV2Ug
YXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgICBjYWxsYmFjayA9
IHBhcmFtczsKLSAgICAgICAgICAgICAgICBwYXJhbXMgPSB1bmRlZmluZWQ7Ci0KLSAgICAgICAg
Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZwotICAgICAgICB9IGVsc2UgaWYgKCBw
YXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gIm9iamVjdCIgKSB7Ci0gICAgICAgICAgICAgICAg
dHlwZSA9ICJQT1NUIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlcXVlc3QgdGhlIHJlbW90
ZSBkb2N1bWVudAotICAgICAgICBqUXVlcnkuYWpheCh7Ci0gICAgICAgICAgICAgICAgdXJsOiB1
cmwsCi0KLSAgICAgICAgICAgICAgICAvLyBpZiAidHlwZSIgdmFyaWFibGUgaXMgdW5kZWZpbmVk
LCB0aGVuICJHRVQiIG1ldGhvZCB3aWxsIGJlIHVzZWQKLSAgICAgICAgICAgICAgICB0eXBlOiB0
eXBlLAotICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAiaHRtbCIsCi0gICAgICAgICAgICAgICAg
ZGF0YTogcGFyYW1zLAotICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigganFYSFIs
IHN0YXR1cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWFjaCggY2FsbGJhY2ssIHJlc3Bv
bnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0pLmRvbmUoZnVu
Y3Rpb24oIHJlc3BvbnNlVGV4dCApIHsKLQotICAgICAgICAgICAgICAgIC8vIFNhdmUgcmVzcG9u
c2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFjawotICAgICAgICAgICAgICAgIHJlc3BvbnNl
ID0gYXJndW1lbnRzOwotCi0gICAgICAgICAgICAgICAgLy8gU2VlIGlmIGEgc2VsZWN0b3Igd2Fz
IHNwZWNpZmllZAotICAgICAgICAgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgPwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBkdW1teSBkaXYgdG8gaG9sZCB0aGUgcmVz
dWx0cwotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCI8ZGl2PiIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5qZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZG9j
dW1lbnQgaW4sIHJlbW92aW5nIHRoZSBzY3JpcHRzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRvIGF2b2lkIGFueSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9ycyBpbiBJRQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCByZXNwb25zZVRleHQucmVw
bGFjZSggcnNjcmlwdCwgIiIgKSApCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTG9jYXRlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmZpbmQoIHNlbGVjdG9yICkgOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiBub3QsIGp1c3QgaW5qZWN0IHRoZSBmdWxsIHJlc3VsdAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzcG9uc2VUZXh0ICk7Ci0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIHRo
aXM7Ci19OwotCi0vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNv
bW1vbiBBSkFYIGV2ZW50cwotalF1ZXJ5LmVhY2goICJhamF4U3RhcnQgYWpheFN0b3AgYWpheENv
bXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoICIgIiApLCBmdW5j
dGlvbiggaSwgbyApewotICAgICAgICBqUXVlcnkuZm5bIG8gXSA9IGZ1bmN0aW9uKCBmICl7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oIG8sIGYgKTsKLSAgICAgICAgfTsKLX0pOwot
Ci1qUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7
Ci0gICAgICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFj
aywgdHlwZSApIHsKLSAgICAgICAgICAgICAgICAvLyBzaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBh
cmd1bWVudCB3YXMgb21pdHRlZAotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIGRhdGEgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8IGNh
bGxiYWNrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBkYXRhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFqYXgoewotICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZTogbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3VjY2VzczogY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTog
dHlwZQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotfSk7Ci0KLWpRdWVyeS5leHRl
bmQoewotCi0gICAgICAgIGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFj
aywgInNjcmlwdCIgKTsKLSAgICAgICAgfSwKLQotICAgICAgICBnZXRKU09OOiBmdW5jdGlvbigg
dXJsLCBkYXRhLCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lmdl
dCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXQKLSAg
ICAgICAgLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgotICAg
ICAgICAvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLgot
ICAgICAgICBhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkgewotICAgICAg
ICAgICAgICAgIGlmICggc2V0dGluZ3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBC
dWlsZGluZyBhIHNldHRpbmdzIG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgYWpheEV4
dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3MK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzID0gdGFyZ2V0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgdGFyZ2V0ID0galF1ZXJ5LmFqYXhTZXR0aW5nczsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYWpheEV4dGVuZCggdGFyZ2V0LCBzZXR0aW5ncyApOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYWpheFNl
dHRpbmdzOiB7Ci0gICAgICAgICAgICAgICAgdXJsOiBhamF4TG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwK
LSAgICAgICAgICAgICAgICBnbG9iYWw6IHRydWUsCi0gICAgICAgICAgICAgICAgdHlwZTogIkdF
VCIsCi0gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAotICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRh
OiB0cnVlLAotICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLAotICAgICAgICAgICAgICAgIC8q
Ci0gICAgICAgICAgICAgICAgdGltZW91dDogMCwKLSAgICAgICAgICAgICAgICBkYXRhOiBudWxs
LAotICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBudWxsLAotICAgICAgICAgICAgICAgIHVzZXJu
YW1lOiBudWxsLAotICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBudWxsLAotICAgICAgICAgICAg
ICAgIGNhY2hlOiBudWxsLAotICAgICAgICAgICAgICAgIHRocm93czogZmFsc2UsCi0gICAgICAg
ICAgICAgICAgdHJhZGl0aW9uYWw6IGZhbHNlLAotICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9
LAotICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICBhY2NlcHRzOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAganNv
bjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAiKiI6IGFsbFR5cGVzCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
ICAgIGNvbnRlbnRzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4bWw6IC94bWwvLAotICAg
ICAgICAgICAgICAgICAgICAgICAgaHRtbDogL2h0bWwvLAotICAgICAgICAgICAgICAgICAgICAg
ICAganNvbjogL2pzb24vCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHJl
c3BvbnNlRmllbGRzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhN
TCIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IgotICAgICAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBMaXN0IG9mIGRhdGEgY29udmVydGVy
cwotICAgICAgICAgICAgICAgIC8vIDEpIGtleSBmb3JtYXQgaXMgInNvdXJjZV90eXBlIGRlc3Rp
bmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1iZXR3ZWVuKQotICAgICAgICAgICAgICAg
IC8vIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkIGZvciBzb3VyY2VfdHlw
ZQotICAgICAgICAgICAgICAgIGNvbnZlcnRlcnM6IHsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAi
KiB0ZXh0Ijogd2luZG93LlN0cmluZywKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4
dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pCi0gICAgICAgICAgICAgICAgICAg
ICAgICAidGV4dCBodG1sIjogdHJ1ZSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZh
bHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAg
InRleHQganNvbiI6IGpRdWVyeS5wYXJzZUpTT04sCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFBhcnNlIHRleHQgYXMgeG1sCi0gICAgICAgICAgICAgICAgICAgICAgICAidGV4dCB4bWwi
OiBqUXVlcnkucGFyc2VYTUwKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAg
Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDoKLSAgICAgICAg
ICAgICAgICAvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmCi0g
ICAgICAgICAgICAgICAgLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3Qg
YmUKLSAgICAgICAgICAgICAgICAvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZCkKLSAg
ICAgICAgICAgICAgICBmbGF0T3B0aW9uczogewotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdHJ1ZQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZp
bHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKLSAgICAgICAgYWpheFRyYW5zcG9ydDog
YWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCi0KLSAgICAgICAgLy8g
TWFpbiBtZXRob2QKLSAgICAgICAgYWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHsKLQot
ICAgICAgICAgICAgICAgIC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUg
c2lnbmF0dXJlCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdXJsID09PSAib2JqZWN0IiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB1cmw7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB1cmwgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3QKLSAgICAgICAgICAgICAg
ICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgICAgICAgICAgIHZhciAvLyBpZk1v
ZGlmaWVkIGtleQotICAgICAgICAgICAgICAgICAgICAgICAgaWZNb2RpZmllZEtleSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJlc3BvbnNlIGhlYWRlcnMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlSGVhZGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zcG9ydAotICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGltZW91dCBoYW5kbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRUaW1lciwK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyb3NzLWRvbWFpbiBkZXRlY3Rpb24gdmFycwot
ICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcmVHbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
TG9vcCB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLAotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2tzIGNvbnRleHQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cwotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSXQncyB0aGUgY2FsbGJhY2tDb250ZXh0IGlmIG9uZSB3YXMgcHJvdmlkZWQgaW4g
dGhlIG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpZiBpdCdzIGEgRE9N
IG5vZGUgb3IgYSBqUXVlcnkgY29sbGVjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgZ2xv
YmFsRXZlbnRDb250ZXh0ID0gY2FsbGJhY2tDb250ZXh0ICE9PSBzICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNr
Q29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOiBqUXVlcnku
ZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlcnJlZHMKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVt
b3J5IiApLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxs
YmFja3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUg
fHwge30sCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50
IGFsbCBhdCBvbmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBh
Ym9ydCBtZXNzYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJBYm9ydCA9ICJjYW5jZWxl
ZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWtlIHhocgotICAgICAgICAgICAgICAg
ICAgICAgICAganFYSFIgPSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVh
ZHlTdGF0ZTogMCwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZXMg
dGhlIGhlYWRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXF1ZXN0SGVh
ZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcmVx
dWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0g
fHwgbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3IHN0cmluZwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZSA9PT0g
MiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGRz
IGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2g7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNlSGVhZGVycyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VIZWFkZXJzID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYygg
cmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNbIG1h
dGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9M
b3dlckNhc2UoKSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2ggPT09
IHVuZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdmVycmlkZXMgcmVz
cG9uc2UgY29udGVudC10eXBlIGhlYWRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0ZSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMubWltZVR5cGUgPSB0eXBlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW5jZWwg
dGhlIHJlcXVlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0
aW9uKCBzdGF0dXNUZXh0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHJhbnNwb3J0ICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LmFib3J0KCBzdGF0
dXNUZXh0ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoIDAsIHN0YXR1c1RleHQg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcg
aXMgZG9uZQotICAgICAgICAgICAgICAgIC8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIGpz
bGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKLSAgICAgICAgICAgICAgICAvLyBhdCB0
aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiAod2hpY2ggd291bGQgYmUgbW9yZSBsb2dpY2FsIGFuZCBy
ZWFkYWJsZSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0
YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZWQgb25jZQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZSA9IDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRpbWVv
dXQgaWYgaXQgZXhpc3RzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1l
ciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCB0aW1l
b3V0VGltZXIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxl
Y3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhl
IGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cmFu
c3BvcnQgPSB1bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHJl
c3BvbnNlIGhlYWRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0
cmluZyA9IGhlYWRlcnMgfHwgIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBy
ZWFkeVN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gc3Rh
dHVzID4gMCA/IDQgOiAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgcmVzcG9u
c2UgZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZXMgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNl
cyggcywganFYSFIsIHJlc3BvbnNlcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFp
bmluZwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPj0gMjAwICYmIHN0YXR1
cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNo
IGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3Qt
TW9kaWZpZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG1vZGlmaWVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdID0gbW9kaWZpZWQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFk
ZXIoIkV0YWciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG1vZGlmaWVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSA9IG1vZGlmaWVkOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCBt
b2RpZmllZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA9PT0g
MzA0ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVz
VGV4dCA9ICJub3Rtb2RpZmllZCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNTdWNjZXNzID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VjY2Vz
cyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBpc1N1Y2Nlc3Muc3RhdGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGlzU3VjY2Vzcy5kYXRhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gaXNTdWNjZXNz
LmVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VjY2Vz
cyA9ICFlcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgZXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlbiBub3JtYWxpemUgc3RhdHVzVGV4dCBhbmQgc3RhdHVzIGZvciBu
b24tYWJvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gc3RhdHVz
VGV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdHVzVGV4dCB8
fCBzdGF0dXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dHVzVGV4dCA9ICJlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzdGF0dXMgPCAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGRhdGEg
Zm9yIHRoZSBmYWtlIHhociBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnN0
YXR1cyA9IHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLnN0YXR1c1RleHQg
PSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgIiI7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFN1Y2Nlc3MvRXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggaXNTdWNjZXNzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpx
WEhSIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwg
WyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNr
cwotICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoICJhamF4IiArICgg
aXNTdWNjZXNzID8gIlN1Y2Nlc3MiIDogIkVycm9yIiApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2Vz
cyA6IGVycm9yIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ29tcGxldGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRl
RGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBd
ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAi
YWpheENvbXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlcgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWph
eFN0b3AiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBB
dHRhY2ggZGVmZXJyZWRzCi0gICAgICAgICAgICAgICAgZGVmZXJyZWQucHJvbWlzZSgganFYSFIg
KTsKLSAgICAgICAgICAgICAgICBqcVhIUi5zdWNjZXNzID0ganFYSFIuZG9uZTsKLSAgICAgICAg
ICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7Ci0gICAgICAgICAgICAgICAganFYSFIu
Y29tcGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmFkZDsKLQotICAgICAgICAgICAgICAgIC8vIFN0
YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCi0gICAgICAgICAgICAgICAganFYSFIuc3RhdHVzQ29k
ZSA9IGZ1bmN0aW9uKCBtYXAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hcCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdG1wIGluIG1hcCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGVbIHRtcCBdID0g
WyBzdGF0dXNDb2RlW3RtcF0sIG1hcFt0bXBdIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IG1hcFsganFY
SFIuc3RhdHVzIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFY
SFIuYWx3YXlzKCB0bXAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBoYXNo
IGNoYXJhY3RlciAoIzc1MzE6IGFuZCBzdHJpbmcgcHJvbW90aW9uKQotICAgICAgICAgICAgICAg
IC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUgd2l0aCBw
cm90b2NvbC1sZXNzIHVybHMpCi0gICAgICAgICAgICAgICAgLy8gV2UgYWxzbyB1c2UgdGhlIHVy
bCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgcy51cmwgPSAoICggdXJs
IHx8IHMudXJsICkgKyAiIiApLnJlcGxhY2UoIHJoYXNoLCAiIiApLnJlcGxhY2UoIHJwcm90b2Nv
bCwgYWpheExvY1BhcnRzWyAxIF0gKyAiLy8iICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBFeHRy
YWN0IGRhdGFUeXBlcyBsaXN0Ci0gICAgICAgICAgICAgICAgcy5kYXRhVHlwZXMgPSBqUXVlcnku
dHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCBjb3JlX3JzcGFj
ZSApOwotCi0gICAgICAgICAgICAgICAgLy8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBv
cmRlciB3aGVuIHdlIGhhdmUgYSBwcm90b2NvbDpob3N0OnBvcnQgbWlzbWF0Y2gKLSAgICAgICAg
ICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICggcGFydHNbIDEgXSAhPT0gYWpheExvY1BhcnRzWyAxIF0g
fHwgcGFydHNbIDIgXSAhPT0gYWpheExvY1BhcnRzWyAyIF0gfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09PSAi
aHR0cDoiID8gODAgOiA0NDMgKSApICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoIGFqYXhMb2NQYXJ0c1sgMyBdIHx8ICggYWpheExvY1BhcnRzWyAx
IF0gPT09ICJodHRwOiIgPyA4MCA6IDQ0MyApICkgKQotICAgICAgICAgICAgICAgICAgICAgICAg
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEg
aWYgbm90IGFscmVhZHkgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICBpZiAoIHMuZGF0YSAmJiBz
LnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9u
YWwgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBcHBseSBwcmVm
aWx0ZXJzCi0gICAgICAgICAgICAgICAgaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHBy
ZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBy
ZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZQotICAgICAg
ICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4ganFYSFI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG8KLSAgICAgICAgICAg
ICAgICBmaXJlR2xvYmFscyA9IHMuZ2xvYmFsOwotCi0gICAgICAgICAgICAgICAgLy8gVXBwZXJj
YXNlIHRoZSB0eXBlCi0gICAgICAgICAgICAgICAgcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNl
KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVu
dAotICAgICAgICAgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlw
ZSApOwotCi0gICAgICAgICAgICAgICAgLy8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0
cwotICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09
PSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJh
amF4U3RhcnQiICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTW9y
ZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnQKLSAgICAgICAg
ICAgICAgICBpZiAoICFzLmhhc0NvbnRlbnQgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcy5kYXRhICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyBzLmRh
dGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICM5NjgyOiByZW1vdmUgZGF0
YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMuZGF0YTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGlmTW9kaWZpZWRLZXkgYmVm
b3JlIGFkZGluZyB0aGUgYW50aS1jYWNoZSBwYXJhbWV0ZXIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmTW9kaWZpZWRLZXkgPSBzLnVybDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgdHMgPSBqUXVlcnkubm93KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdHJ5IHJlcGxhY2luZyBfPSBpZiBpdCBpcyB0aGVyZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHMudXJsLnJlcGxhY2UoIHJ0cywg
IiQxXz0iICsgdHMgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBu
b3RoaW5nIHdhcyByZXBsYWNlZCwgYWRkIHRpbWVzdGFtcCB0byB0aGUgZW5kCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHMudXJsID0gcmV0ICsgKCAoIHJldCA9PT0gcy51cmwgKSA/
ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyB0cyA6ICIiICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50
Ci0gICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVu
dFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250
ZW50VHlwZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFNldCB0
aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBp
Zk1vZGlmaWVkIG1vZGUuCi0gICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5ID0gaWZNb2RpZmllZEtleSB8fCBz
LnVybDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsg
aWZNb2RpZmllZEtleSBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhI
Ui5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlm
aWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigg
IklmLU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRo
ZSBkYXRhVHlwZQotICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHMu
ZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdID8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdICsgKCBz
LmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxsVHlwZXMgKyAiOyBxPTAuMDEiIDog
IiIgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0K
LSAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGhlYWRl
cnMgb3B0aW9uCi0gICAgICAgICAgICAgICAgZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNb
IGkgXSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFsbG93IGN1
c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnQKLSAgICAgICAgICAgICAgICBp
ZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQs
IGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVy
bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTsK
LQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGFib3J0aW5nIGlzIG5v
IGxvbmdlciBhIGNhbmNlbGxhdGlvbgotICAgICAgICAgICAgICAgIHN0ckFib3J0ID0gImFib3J0
IjsKLQotICAgICAgICAgICAgICAgIC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkcwot
ICAgICAgICAgICAgICAgIGZvciAoIGkgaW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29tcGxl
dGU6IDEgfSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSWyBpIF0oIHNbIGkgXSAp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEdldCB0cmFuc3BvcnQK
LSAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0
cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKLQotICAgICAgICAgICAgICAgIC8v
IElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAotICAgICAgICAgICAgICAgIGlmICggIXRy
YW5zcG9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoIC0xLCAiTm8gVHJhbnNw
b3J0IiApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBqcVhIUi5yZWFkeVN0YXRlID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlbmQg
Z2xvYmFsIGV2ZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJp
Z2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1lb3V0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5hYm9ydCggInRp
bWVvdXQiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHMudGltZW91dCAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywg
ZG9uZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlm
IG5vdCBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAy
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoIC0xLCBl
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbXBseSByZXRocm93IG90
aGVyd2lzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVy
aWVzCi0gICAgICAgIGFjdGl2ZTogMCwKLQotICAgICAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRl
ciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0Ci0gICAgICAgIGxhc3RNb2RpZmllZDoge30sCi0gICAg
ICAgIGV0YWc6IHt9Ci0KLX0pOwotCi0vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJl
cXVlc3Q6Ci0gKiAtIHNldHMgYWxsIHJlc3BvbnNlWFhYIGZpZWxkcyBhY2NvcmRpbmdseQotICog
LSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBl
IGFuZCBleHBlY3RlZCBkYXRhVHlwZSkKLSAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBy
ZXNwb25zZQotICovCi1mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVz
cG9uc2VzICkgewotCi0gICAgICAgIHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3RE
YXRhVHlwZSwKLSAgICAgICAgICAgICAgICBjb250ZW50cyA9IHMuY29udGVudHMsCi0gICAgICAg
ICAgICAgICAgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMsCi0gICAgICAgICAgICAgICAgcmVzcG9u
c2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzOwotCi0gICAgICAgIC8vIEZpbGwgcmVzcG9uc2VY
WFggZmllbGRzCi0gICAgICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VGaWVsZHMgKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGpxWEhSWyByZXNwb25zZUZpZWxkc1t0eXBlXSBdID0gcmVzcG9uc2VzWyB0eXBlIF07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVtb3ZlIGF1dG8g
ZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3MKLSAgICAgICAgd2hp
bGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7Ci0gICAgICAgICAgICAgICAgZGF0YVR5cGVz
LnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBjdCA9PT0gdW5kZWZpbmVkICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgY3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNl
SGVhZGVyKCAiY29udGVudC10eXBlIiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQt
dHlwZQotICAgICAgICBpZiAoIGN0ICkgewotICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4g
Y29udGVudHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnRlbnRzWyB0eXBl
IF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2Ug
aGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKLSAgICAgICAgaWYgKCBk
YXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7Ci0gICAgICAgICAgICAgICAgZmluYWxEYXRh
VHlwZSA9IGRhdGFUeXBlc1sgMCBdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKLSAgICAgICAgICAgICAgICBmb3IgKCB0eXBl
IGluIHJlc3BvbnNlcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWRhdGFUeXBl
c1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArICIgIiArIGRhdGFUeXBlc1swXSBdICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbERhdGFUeXBlID0gdHlwZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFmaXJzdERhdGFUeXBlICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERhdGFUeXBlID0gdHlwZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCi0gICAgICAgICAgICAgICAgZmluYWxEYXRhVHlw
ZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKLSAgICAgICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlw
ZSB0byB0aGUgbGlzdCBpZiBuZWVkZWQKLSAgICAgICAgLy8gYW5kIHJldHVybiB0aGUgY29ycmVz
cG9uZGluZyByZXNwb25zZQotICAgICAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFs
RGF0YVR5cGUgXTsKLSAgICAgICAgfQotfQotCi0vLyBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0
aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCi1mdW5jdGlvbiBhamF4Q29udmVy
dCggcywgcmVzcG9uc2UgKSB7Ci0KLSAgICAgICAgdmFyIGNvbnYsIGNvbnYyLCBjdXJyZW50LCB0
bXAsCi0gICAgICAgICAgICAgICAgLy8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4g
Y2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvbgotICAgICAgICAgICAgICAg
IGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCksCi0gICAgICAgICAgICAgICAgcHJldiA9
IGRhdGFUeXBlc1sgMCBdLAotICAgICAgICAgICAgICAgIGNvbnZlcnRlcnMgPSB7fSwKLSAgICAg
ICAgICAgICAgICBpID0gMDsKLQotICAgICAgICAvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBw
cm92aWRlZAotICAgICAgICBpZiAoIHMuZGF0YUZpbHRlciApIHsKLSAgICAgICAgICAgICAgICBy
ZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5
cwotICAgICAgICBpZiAoIGRhdGFUeXBlc1sgMSBdICkgewotICAgICAgICAgICAgICAgIGZvciAo
IGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udmVy
dGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb252ZXJ0IHRvIGVhY2ggc2Vx
dWVudGlhbCBkYXRhVHlwZSwgdG9sZXJhdGluZyBsaXN0IG1vZGlmaWNhdGlvbgotICAgICAgICBm
b3IgKCA7IChjdXJyZW50ID0gZGF0YVR5cGVzWysraV0pOyApIHsKLQotICAgICAgICAgICAgICAg
IC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1
dG8KLSAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnQgIT09ICIqIiApIHsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5v
bi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBwcmV2ICE9PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1
cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNvbnYgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggY29udjIgaW4gY29udmVydGVycyApIHsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgY29u
djIgb3V0cHV0cyBjdXJyZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0bXAgPSBjb252Mi5zcGxpdCgiICIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNv
bnZlcnRlcnNbIHByZXYgKyAiICIgKyB0bXBbIDAgXSBdIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyc1sg
IiogIiArIHRtcFsgMCBdIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggY29udiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25kZW5zZSBlcXVp
dmFsZW5jZSBjb252ZXJ0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ID09PSB0cnVlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndp
c2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
Y29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQg
PSB0bXBbIDAgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlcy5zcGxpY2UoIGktLSwgMCwgY3Vy
cmVudCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgY29udmVydGVyIChpZiBub3Qg
YW4gZXF1aXZhbGVuY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29u
diAhPT0gdHJ1ZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJu
IHRoZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYg
JiYgc1sidGhyb3dzIl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY29udiggcmVzcG9uc2Ug
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geyBzdGF0ZTogInBhcnNlcmVycm9yIiwgZXJyb3I6IGNvbnYgPyBl
IDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQgfTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVXBkYXRlIHByZXYgZm9yIG5leHQgaXRlcmF0aW9uCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcmV2ID0gY3VycmVudDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3MiLCBkYXRhOiByZXNwb25zZSB9Owot
fQotdmFyIG9sZENhbGxiYWNrcyA9IFtdLAotICAgICAgICBycXVlc3Rpb24gPSAvXD8vLAotICAg
ICAgICByanNvbnAgPSAvKD0pXD8oPz0mfCQpfFw/XD8vLAotICAgICAgICBub25jZSA9IGpRdWVy
eS5ub3coKTsKLQotLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5ncwotalF1ZXJ5LmFqYXhTZXR1cCh7
Ci0gICAgICAgIGpzb25wOiAiY2FsbGJhY2siLAotICAgICAgICBqc29ucENhbGxiYWNrOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9w
KCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArICJfIiArICggbm9uY2UrKyApICk7Ci0gICAgICAgICAg
ICAgICAgdGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNh
bGxiYWNrOwotICAgICAgICB9Ci19KTsKLQotLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBh
bmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCi1qUXVlcnkuYWpheFByZWZp
bHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIg
KSB7Ci0KLSAgICAgICAgdmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29u
dGFpbmVyLAotICAgICAgICAgICAgICAgIGRhdGEgPSBzLmRhdGEsCi0gICAgICAgICAgICAgICAg
dXJsID0gcy51cmwsCi0gICAgICAgICAgICAgICAgaGFzQ2FsbGJhY2sgPSBzLmpzb25wICE9PSBm
YWxzZSwKLSAgICAgICAgICAgICAgICByZXBsYWNlSW5VcmwgPSBoYXNDYWxsYmFjayAmJiByanNv
bnAudGVzdCggdXJsICksCi0gICAgICAgICAgICAgICAgcmVwbGFjZUluRGF0YSA9IGhhc0NhbGxi
YWNrICYmICFyZXBsYWNlSW5VcmwgJiYgdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAhKCBzLmNvbnRlbnRUeXBlIHx8ICIiICkuaW5kZXhPZigiYXBw
bGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJqc29ucC50ZXN0KCBkYXRhICk7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGlmZiB0aGUgZXhw
ZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXQK
LSAgICAgICAgaWYgKCBzLmRhdGFUeXBlc1sgMCBdID09PSAianNvbnAiIHx8IHJlcGxhY2VJblVy
bCB8fCByZXBsYWNlSW5EYXRhICkgewotCi0gICAgICAgICAgICAgICAgLy8gR2V0IGNhbGxiYWNr
IG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGpRdWVyeS5p
c0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
Lmpzb25wQ2FsbGJhY2soKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzLmpzb25wQ2FsbGJh
Y2s7Ci0gICAgICAgICAgICAgICAgb3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBd
OwotCi0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0g
ZGF0YQotICAgICAgICAgICAgICAgIGlmICggcmVwbGFjZUluVXJsICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcy51cmwgPSB1cmwucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tO
YW1lICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggcmVwbGFjZUluRGF0YSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YSA9IGRhdGEucmVwbGFjZSggcmpzb25wLCAiJDEi
ICsgY2FsbGJhY2tOYW1lICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaGFzQ2FsbGJh
Y2sgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzLnVybCArPSAoIHJxdWVzdGlvbi50ZXN0
KCB1cmwgKSA/ICImIiA6ICI/IiApICsgcy5qc29ucCArICI9IiArIGNhbGxiYWNrTmFtZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0ZXIg
dG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCi0gICAgICAgICAgICAgICAg
cy5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyAiIHdhcyBub3QgY2Fs
bGVkIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07Ci0gICAgICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgICAgIC8vIGZvcmNlIGpzb24gZGF0YVR5cGUKLSAgICAgICAgICAgICAgICBz
LmRhdGFUeXBlc1sgMCBdID0gImpzb24iOwotCi0gICAgICAgICAgICAgICAgLy8gSW5zdGFsbCBj
YWxsYmFjawotICAgICAgICAgICAgICAgIHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1l
bnRzOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICAvLyBDbGVhbi11cCBm
dW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycykKLSAgICAgICAgICAgICAgICBqcVhIUi5h
bHdheXMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHBy
ZWV4aXN0aW5nIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbIGNhbGxiYWNr
TmFtZSBdID0gb3ZlcndyaXR0ZW47Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUg
YmFjayBhcyBmcmVlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNbIGNhbGxiYWNrTmFt
ZSBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhh
dCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0
aW5ncy5qc29ucENhbGxiYWNrOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGlm
IGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92
ZXJ3cml0dGVuICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0
dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0
ZW4gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBEZWxlZ2F0ZSB0byBzY3JpcHQKLSAgICAgICAgICAgICAgICByZXR1cm4gInNjcmlwdCI7Ci0g
ICAgICAgIH0KLX0pOwotLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGUKLWpRdWVyeS5hamF4U2V0
dXAoewotICAgICAgICBhY2NlcHRzOiB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0OiAidGV4dC9q
YXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0
LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiCi0gICAgICAgIH0sCi0gICAgICAgIGNvbnRlbnRz
OiB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0OiAvamF2YXNjcmlwdHxlY21hc2NyaXB0LwotICAg
ICAgICB9LAotICAgICAgICBjb252ZXJ0ZXJzOiB7Ci0gICAgICAgICAgICAgICAgInRleHQgc2Ny
aXB0IjogZnVuY3Rpb24oIHRleHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
Z2xvYmFsRXZhbCggdGV4dCApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci19KTsKLQotLy8gSGFuZGxlIGNhY2hlJ3Mg
c3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKLWpRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0Iiwg
ZnVuY3Rpb24oIHMgKSB7Ci0gICAgICAgIGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkgewot
ICAgICAgICAgICAgICAgIHMuY2FjaGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
IHMuY3Jvc3NEb21haW4gKSB7Ci0gICAgICAgICAgICAgICAgcy50eXBlID0gIkdFVCI7Ci0gICAg
ICAgICAgICAgICAgcy5nbG9iYWwgPSBmYWxzZTsKLSAgICAgICAgfQotfSk7Ci0KLS8vIEJpbmQg
c2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydAotalF1ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3JpcHQi
LCBmdW5jdGlvbihzKSB7Ci0KLSAgICAgICAgLy8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3
aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0cwotICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7
Ci0KLSAgICAgICAgICAgICAgICB2YXIgc2NyaXB0LAotICAgICAgICAgICAgICAgICAgICAgICAg
aGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJo
ZWFkIiApWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLQotICAgICAgICAgICAgICAg
IHJldHVybiB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBfLCBj
YWxsYmFjayApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9ICJhc3luYyI7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzLnNjcmlwdENoYXJzZXQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JpcHQuc3JjID0gcy51cmw7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQXR0YWNoIGhhbmRsZXJzIGZvciBhbGwgYnJvd3NlcnMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUg
fHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1l
bW9yeSBsZWFrIGluIElFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJl
bW92ZSB0aGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQucmVtb3ZlQ2hp
bGQoIHNjcmlwdCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBEZXJlZmVyZW5jZSB0aGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB1bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrIGlmIG5vdCBhYm9y
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAh
aXNBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soIDIwMCwgInN1Y2Nlc3MiICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgaW5zZXJ0QmVmb3JlIGluc3Rl
YWQgb2YgYXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhcmlzZXMgd2hlbiBhIGJhc2Ugbm9kZSBpcyB1
c2VkICgjMjcwOSBhbmQgIzQzNzgpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWFkLmluc2VydEJlZm9yZSggc2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzY3JpcHQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCggMCwg
MSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgfQotfSk7Ci12YXIgeGhyQ2Fs
bGJhY2tzLAotICAgICAgICAvLyAjNTI4MDogSW50ZXJuZXQgRXhwbG9yZXIgd2lsbCBrZWVwIGNv
bm5lY3Rpb25zIGFsaXZlIGlmIHdlIGRvbid0IGFib3J0IG9uIHVubG9hZAotICAgICAgICB4aHJP
blVubG9hZEFib3J0ID0gd2luZG93LkFjdGl2ZVhPYmplY3QgPyBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAvLyBBYm9ydCBhbGwgcGVuZGluZyByZXF1ZXN0cwotICAgICAgICAgICAgICAg
IGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgeGhyQ2FsbGJhY2tzWyBrZXkgXSggMCwgMSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgfSA6IGZhbHNlLAotICAgICAgICB4aHJJZCA9IDA7Ci0KLS8vIEZ1bmN0aW9ucyB0byBjcmVh
dGUgeGhycwotZnVuY3Rpb24gY3JlYXRlU3RhbmRhcmRYSFIoKSB7Ci0gICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTsKLSAgICAg
ICAgfSBjYXRjaCggZSApIHt9Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUFjdGl2ZVhIUigpIHsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5BY3RpdmVYT2Jq
ZWN0KCAiTWljcm9zb2Z0LlhNTEhUVFAiICk7Ci0gICAgICAgIH0gY2F0Y2goIGUgKSB7fQotfQot
Ci0vLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0Ci0vLyAoVGhpcyBpcyBzdGlsbCBhdHRhY2hl
ZCB0byBhamF4U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpCi1qUXVlcnkuYWph
eFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8KLSAgICAgICAgLyogTWljcm9z
b2Z0IGZhaWxlZCB0byBwcm9wZXJseQotICAgICAgICAgKiBpbXBsZW1lbnQgdGhlIFhNTEh0dHBS
ZXF1ZXN0IGluIElFNyAoY2FuJ3QgcmVxdWVzdCBsb2NhbCBmaWxlcyksCi0gICAgICAgICAqIHNv
IHdlIHVzZSB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQotICAgICAgICAg
KiBBZGRpdGlvbmFsbHkgWE1MSHR0cFJlcXVlc3QgY2FuIGJlIGRpc2FibGVkIGluIElFNy9JRTgg
c28KLSAgICAgICAgICogd2UgbmVlZCBhIGZhbGxiYWNrLgotICAgICAgICAgKi8KLSAgICAgICAg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTG9jYWwgJiYgY3Jl
YXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVhdGVBY3RpdmVYSFIoKTsKLSAgICAgICAgfSA6Ci0gICAg
ICAgIC8vIEZvciBhbGwgb3RoZXIgYnJvd3NlcnMsIHVzZSB0aGUgc3RhbmRhcmQgWE1MSHR0cFJl
cXVlc3Qgb2JqZWN0Ci0gICAgICAgIGNyZWF0ZVN0YW5kYXJkWEhSOwotCi0vLyBEZXRlcm1pbmUg
c3VwcG9ydCBwcm9wZXJ0aWVzCi0oZnVuY3Rpb24oIHhociApIHsKLSAgICAgICAgalF1ZXJ5LmV4
dGVuZCggalF1ZXJ5LnN1cHBvcnQsIHsKLSAgICAgICAgICAgICAgICBhamF4OiAhIXhociwKLSAg
ICAgICAgICAgICAgICBjb3JzOiAhIXhociAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHhociAp
Ci0gICAgICAgIH0pOwotfSkoIGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCkgKTsKLQotLy8gQ3Jl
YXRlIHRyYW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlkZSBhbiB4aHIKLWlmICggalF1
ZXJ5LnN1cHBvcnQuYWpheCApIHsKLQotICAgICAgICBqUXVlcnkuYWpheFRyYW5zcG9ydChmdW5j
dGlvbiggcyApIHsKLSAgICAgICAgICAgICAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2Vk
IGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0Ci0gICAgICAgICAgICAgICAgaWYg
KCAhcy5jcm9zc0RvbWFpbiB8fCBqUXVlcnkuc3VwcG9ydC5jb3JzICkgewotCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgY2FsbGJhY2s7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBo
ZWFkZXJzLCBjb21wbGV0ZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEdldCBhIG5ldyB4aHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgaGFuZGxlLCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeGhyID0gcy54aHIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHNvY2tldAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFBhc3NpbmcgbnVsbCB1c2VybmFtZSwgZ2VuZXJhdGVzIGEg
bG9naW4gcG9wdXAgb24gT3BlcmEgKCMyODY1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggcy51c2VybmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5j
LCBzLnVzZXJuYW1lLCBzLnBhc3N3b3JkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy54aHJGaWVsZHMg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCBpIGluIHMueGhyRmllbGRzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4aHJbIGkgXSA9IHMueGhyRmllbGRzWyBpIF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5taW1lVHlwZSAmJiB4aHIu
b3ZlcnJpZGVNaW1lVHlwZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCBzLm1pbWVUeXBlICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVl
c3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUs
IHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVx
dWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNo
YW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyJYLVJlcXVl
c3RlZC1XaXRoIl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCBhbiBleHRyYSB0cnkvY2F0Y2gg
Zm9yIGNyb3NzIGRvbWFpbiByZXF1ZXN0cyBpbiBGaXJlZm94IDMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBoZWFkZXJzICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVz
dEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBjYXRjaCggXyApIHt9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBEbyBzZW5kIHRoZSByZXF1ZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uIHdoaWNoIGlzIGFj
dHVhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxl
ZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQoICggcy5oYXNDb250ZW50ICYmIHMuZGF0
YSApIHx8IG51bGwgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIExpc3RlbmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2VIZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhtbDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIGFj
Y2Vzc2luZyBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvZiBhbiB4aHIgd2hlbiBhIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9o
ZWxwZnVsLmtub2JzLWRpYWxzLmNvbS9pbmRleC5waHAvQ29tcG9uZW50X3JldHVybmVkX2ZhaWx1
cmVfY29kZTpfMHg4MDA0MDExMV8oTlNfRVJST1JfTk9UX0FWQUlMQUJMRSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FzIG5ldmVy
IGNhbGxlZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICYmICggaXNB
Ym9ydCB8fCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjYWxs
ZWQgb25jZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90
IGtlZXAgYXMgYWN0aXZlIGFueW1vcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBqUXVlcnkubm9vcDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHhockNhbGxiYWNrc1sgaGFuZGxlIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgaXQncyBhbiBhYm9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFib3J0IGl0IG1hbnVhbGx5IGlmIG5lZWRlZAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eGhyLmFib3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRl
cnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZXMgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHhoci5yZXNwb25zZVhNTDsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
eG1sICYmIHhtbC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5NTggKi8gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlcy54bWwgPSB4bWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdoZW4gcmVxdWVzdGluZyBiaW5hcnkgZGF0YSwgSUU2LTkgd2lsbCB0aHJv
dyBhbiBleGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIGFueSBhdHRlbXB0IHRvIGFjY2Vz
cyByZXNwb25zZVRleHQgKCMxMTQyNikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlcy50ZXh0ID0geGhyLnJlc3BvbnNlVGV4dDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2goIGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZpcmVmb3ggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc3RhdHVzVGV4dCBmb3IgZmF1bHR5IGNyb3NzLWRvbWFpbiByZXF1ZXN0cwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHho
ci5zdGF0dXNUZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2Ugbm9ybWFsaXplIHdpdGggV2Via2l0IGdpdmluZyBhbiBlbXB0eSBz
dGF0dXNUZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAiIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlsdGVyIHN0YXR1cyBmb3Igbm9uIHN0
YW5kYXJkIGJlaGF2aW9ycwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpcyBs
b2NhbCBhbmQgd2UgaGF2ZSBkYXRhOiBhc3N1bWUgYSBzdWNjZXNzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyAoc3VjY2VzcyB3aXRoIG5vIGRhdGEgd29uJ3QgZ2V0IG5vdGlmaWVkLCB0aGF0J3MgdGhlIGJl
c3Qgd2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBkbyBnaXZlbiBjdXJyZW50IGltcGxlbWVudGF0
aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXR1cyAmJiBzLmlzTG9jYWwgJiYgIXMuY3Jv
c3NEb21haW4gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3BvbnNlcy50
ZXh0ID8gMjAwIDogNDA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgLSAjMTQ1MDogc29tZXRpbWVz
IHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIHN0YXR1cyA9PT0gMTIyMyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVz
ID0gMjA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZmlyZWZveEFjY2Vzc0V4Y2Vw
dGlvbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhaXNBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggLTEsIGZpcmVmb3hB
Y2Nlc3NFeGNlcHRpb24gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDYWxsIGNvbXBsZXRlIGlmIG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNwb25zZXMgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCBz
dGF0dXMsIHN0YXR1c1RleHQsIHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIXMuYXN5bmMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBzeW5jIG1vZGUgd2UgZmly
ZSB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoSUU2ICYgSUU3KSBpZiBpdCdzIGlu
IGNhY2hlIGFuZCBoYXMgYmVlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcmV0cmlldmVkIGRpcmVjdGx5IHdlIG5lZWQgdG8gZmlyZSB0aGUgY2Fs
bGJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dFRpbWVvdXQoIGNhbGxiYWNrLCAwICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZSA9ICsreGhySWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0
aGUgYWN0aXZlIHhocnMgY2FsbGJhY2tzIGxpc3QgaWYgbmVlZGVkCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBhdHRhY2ggdGhl
IHVubG9hZCBoYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIXhockNhbGxiYWNrcyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFj
a3MgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnVubG9hZCggeGhyT25VbmxvYWRBYm9y
dCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEFkZCB0byBsaXN0IG9mIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFj
a3NbIGhhbmRsZSBdID0gY2FsbGJhY2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gY2FsbGJhY2s7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0OiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNh
bGxiYWNrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2soMCwxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9KTsKLX0KLXZhciBmeE5vdywg
dGltZXJJZCwKLSAgICAgICAgcmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sCi0g
ICAgICAgIHJmeG51bSA9IG5ldyBSZWdFeHAoICJeKD86KFstK10pPXwpKCIgKyBjb3JlX3BudW0g
KyAiKShbYS16JV0qKSQiLCAiaSIgKSwKLSAgICAgICAgcnJ1biA9IC9xdWV1ZUhvb2tzJC8sCi0g
ICAgICAgIGFuaW1hdGlvblByZWZpbHRlcnMgPSBbIGRlZmF1bHRQcmVmaWx0ZXIgXSwKLSAgICAg
ICAgdHdlZW5lcnMgPSB7Ci0gICAgICAgICAgICAgICAgIioiOiBbZnVuY3Rpb24oIHByb3AsIHZh
bHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCwgdW5pdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2
YWx1ZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJmeG51bS5l
eGVjKCB2YWx1ZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0
d2Vlbi5jdXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSArdGFy
Z2V0IHx8IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gMSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SXRlcmF0aW9ucyA9IDIwOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcnRzICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQgPSArcGFydHNbMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDog
InB4IiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y29tcHV0ZSBzdGFydGluZyB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHVuaXQgIT09ICJweCIgJiYgc3RhcnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8g
c3RhcnRpbmcgcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBQcmVmZXIgdGhlIGN1cnJlbnQgcHJvcGVydHksIGJlY2F1c2UgdGhpcyBwcm9jZXNzIHdpbGwg
YmUgdHJpdmlhbCBpZiBpdCB1c2VzIHRoZSBzYW1lIHVuaXRzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gZW5kIG9yIGEgc2ltcGxlIGNvbnN0
YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBqUXVl
cnkuY3NzKCB0d2Vlbi5lbGVtLCBwcm9wLCB0cnVlICkgfHwgZW5kIHx8IDE7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2aW91cyBpdGVyYXRpb24gemVy
b2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5nKgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgc3RyaW5nIGZvciBkb3Vi
bGluZyBmYWN0b3Igc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5n
ZWQgYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjYWxlID0gc2NhbGUgfHwgIi41IjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBseQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCAvIHNjYWxlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxl
KCB0d2Vlbi5lbGVtLCBwcm9wLCBzdGFydCArIHVuaXQgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBzY2FsZSwgdG9sZXJhdGluZyB6ZXJvIG9y
IE5hTiBmcm9tIHR3ZWVuLmN1cigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQW5kIGJyZWFraW5nIHRoZSBsb29wIGlmIHNjYWxlIGlzIHVuY2hhbmdlZCBvciBw
ZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2gKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICggc2NhbGUgIT09IChzY2FsZSA9IHR3ZWVuLmN1
cigpIC8gdGFyZ2V0KSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJhdGlvbnMgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR3ZWVuLnVuaXQgPSB1bml0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0d2Vlbi5zdGFydCA9IHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiBhICs9Ly09IHRva2VuIHdhcyBwcm92aWRlZCwgd2UncmUgZG9pbmcgYSByZWxhdGl2ZSBh
bmltYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW4uZW5kID0gcGFy
dHNbMV0gPyBzdGFydCArICggcGFydHNbMV0gKyAxICkgKiBlbmQgOiBlbmQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW47Ci0g
ICAgICAgICAgICAgICAgfV0KLSAgICAgICAgfTsKLQotLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5
bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQotZnVuY3Rpb24gY3JlYXRlRnhOb3co
KSB7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgZnhO
b3cgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0sIDAgKTsKLSAgICAgICAgcmV0dXJuICggZnhOb3cg
PSBqUXVlcnkubm93KCkgKTsKLX0KLQotZnVuY3Rpb24gY3JlYXRlVHdlZW5zKCBhbmltYXRpb24s
IHByb3BzICkgewotICAgICAgICBqUXVlcnkuZWFjaCggcHJvcHMsIGZ1bmN0aW9uKCBwcm9wLCB2
YWx1ZSApIHsKLSAgICAgICAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9ICggdHdlZW5lcnNbIHBy
b3AgXSB8fCBbXSApLmNvbmNhdCggdHdlZW5lcnNbICIqIiBdICksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleCA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBjb2xs
ZWN0aW9uLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb2xsZWN0aW9uWyBpbmRl
eCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApIHsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9KTsKLX0KLQotZnVuY3Rpb24gQW5pbWF0
aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkgewotICAgICAgICB2YXIgcmVzdWx0LAot
ICAgICAgICAgICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgICAgICAgICB0d2VlbmVySW5kZXgg
PSAwLAotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlvblByZWZpbHRlcnMubGVuZ3Ro
LAotICAgICAgICAgICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IG1hdGNoIGVsZW0g
aW4gdGhlIDphbmltYXRlZCBzZWxlY3RvcgotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHRpY2suZWxlbTsKLSAgICAgICAgICAgICAgICB9KSwKLSAgICAgICAgICAgICAgICB0aWNrID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBm
eE5vdyB8fCBjcmVhdGVGeE5vdygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5k
dXJhdGlvbiAtIGN1cnJlbnRUaW1lICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSAxIC0gKCAwLjUgfHwg
MCApICgjMTI0OTcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSByZW1h
aW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGVyY2VudCA9IDEgLSB0ZW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleCA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9
IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
bm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW1haW5pbmc7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBhbmltYXRpb24gPSBk
ZWZlcnJlZC5wcm9taXNlKHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW06IGVsZW0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRp
ZXMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUs
IHsgc3BlY2lhbEVhc2luZzoge30gfSwgb3B0aW9ucyApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgb3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgb3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICB0d2Vl
bnM6IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBw
cm9wLCBlbmQsIGVhc2luZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9u
Lm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zLnB1c2goIHR3
ZWVuICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0d2VlbjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBm
dW5jdGlvbiggZ290b0VuZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGluZGV4ID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
ZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ug
c2tpcCB0aGlzIHBhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsr
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50
d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHdoZW4gd2Ug
cGxheWVkIHRoZSBsYXN0IGZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG90aGVyd2lzZSwgcmVqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Z290b0VuZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9u
LCBnb3RvRW5kIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSwKLSAgICAgICAgICAgICAgICBwcm9wcyA9IGFu
aW1hdGlvbi5wcm9wczsKLQotICAgICAgICBwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9w
dHMuc3BlY2lhbEVhc2luZyApOwotCi0gICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBp
bmRleCsrICkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFuaW1hdGlvblByZWZpbHRlcnNb
IGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTsK
LSAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Y3JlYXRlVHdlZW5zKCBhbmltYXRpb24sIHByb3BzICk7Ci0KLSAgICAgICAgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHsKLSAgICAgICAgICAgICAgICBh
bmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGpRdWVyeS5meC50aW1lcigKLSAgICAgICAgICAgICAgICBqUXVlcnkuZXh0ZW5k
KCB0aWNrLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmltOiBhbmltYXRpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICBxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBlbGVtOiBlbGVtCi0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAg
KTsKLQotICAgICAgICAvLyBhdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9ucwotICAgICAgICBy
ZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApCi0gICAg
ICAgICAgICAgICAgLmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNv
bXBsZXRlICkKLSAgICAgICAgICAgICAgICAuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCi0g
ICAgICAgICAgICAgICAgLmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7Ci19Ci0KLWZ1
bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgewotICAgICAgICB2YXIg
aW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzOwotCi0gICAgICAgIC8vIGNhbWVsQ2Fz
ZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzcwotICAgICAgICBmb3IgKCBp
bmRleCBpbiBwcm9wcyApIHsKLSAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2Fz
ZSggaW5kZXggKTsKLSAgICAgICAgICAgICAgICBlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1l
IF07Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKLSAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZWFzaW5nID0gdmFsdWVbIDEgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmICggaW5kZXggIT09IG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wc1sgbmFtZSBdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgcHJvcHNbIGluZGV4IF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICBpZiAoIGhv
b2tzICYmICJleHBhbmQiIGluIGhvb2tzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgcHJvcHNbIG5hbWUgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IHF1aXRl
ICQuZXh0ZW5kLCB0aGlzIHdvbnQgb3ZlcndyaXRlIGtleXMgYWxyZWFkeSBwcmVzZW50LgotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyAtIHJldXNpbmcgJ2luZGV4JyBmcm9tIGFib3Zl
IGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCAibmFtZSIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGluZGV4IGluIHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsRWFzaW5nWyBpbmRleCBd
ID0gZWFzaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZzsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLX0KLQotalF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFu
aW1hdGlvbiwgewotCi0gICAgICAgIHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sg
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvcHM7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wcyA9IFsgIioiIF07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BzID0gcHJvcHMuc3BsaXQoIiAiKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcHJvcCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHByb3Bz
Lmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRl
eCsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IHByb3BzWyBpbmRleCBdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW5lcnNbIHByb3AgXSA9IHR3ZWVuZXJzWyBwcm9w
IF0gfHwgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICB0d2VlbmVyc1sgcHJvcCBdLnVuc2hp
ZnQoIGNhbGxiYWNrICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAg
IHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkgewotICAgICAgICAgICAg
ICAgIGlmICggcHJlcGVuZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblBy
ZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUHJlZmlsdGVycy5wdXNoKCBjYWxsYmFj
ayApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotfSk7Ci0KLWZ1bmN0aW9uIGRlZmF1
bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkgewotICAgICAgICB2YXIgaW5kZXgsIHBy
b3AsIHZhbHVlLCBsZW5ndGgsIGRhdGFTaG93LCB0b2dnbGUsIHR3ZWVuLCBob29rcywgb2xkZmly
ZSwKLSAgICAgICAgICAgICAgICBhbmltID0gdGhpcywKLSAgICAgICAgICAgICAgICBzdHlsZSA9
IGVsZW0uc3R5bGUsCi0gICAgICAgICAgICAgICAgb3JpZyA9IHt9LAotICAgICAgICAgICAgICAg
IGhhbmRsZWQgPSBbXSwKLSAgICAgICAgICAgICAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYm
IGlzSGlkZGVuKCBlbGVtICk7Ci0KLSAgICAgICAgLy8gaGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9t
aXNlcwotICAgICAgICBpZiAoICFvcHRzLnF1ZXVlICkgewotICAgICAgICAgICAgICAgIGhvb2tz
ID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCAiZngiICk7Ci0gICAgICAgICAgICAgICAgaWYg
KCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaG9v
a3MudW5xdWV1ZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgb2xkZmlyZSA9IGhvb2tz
LmVtcHR5LmZpcmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWhvb2tz
LnVucXVldWVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9s
ZGZpcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaG9va3Mu
dW5xdWV1ZWQrKzsKLQotICAgICAgICAgICAgICAgIGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9pbmcgdGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhl
IGNvbXBsZXRlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJlZm9yZSB0aGlzIGNvbXBsZXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgYW5pbS5h
bHdheXMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tz
LnVucXVldWVkLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVy
eS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaGVpZ2h0L3dpZHRoIG92ZXJmbG93IHBh
c3MKLSAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggImhlaWdodCIgaW4gcHJv
cHMgfHwgIndpZHRoIiBpbiBwcm9wcyApICkgewotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAotICAgICAgICAgICAgICAgIC8vIFJlY29yZCBhbGwg
MyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QKLSAgICAgICAgICAgICAg
ICAvLyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3aGVuIG92ZXJmbG93WCBhbmQKLSAg
ICAgICAgICAgICAgICAvLyBvdmVyZmxvd1kgYXJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZQotICAg
ICAgICAgICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVy
Zmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdOwotCi0gICAgICAgICAgICAgICAgLy8gU2V0IGRpc3Bs
YXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWlnaHQvd2lkdGgKLSAgICAgICAgICAg
ICAgICAvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lk
dGgvaGVpZ2h0IGFuaW1hdGVkCi0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVt
LCAiZGlzcGxheSIgKSA9PT0gImlubGluZSIgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGlubGluZS1sZXZlbCBlbGVtZW50cyBhY2NlcHQgaW5saW5l
LWJsb2NrOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2stbGV2ZWwgZWxlbWVudHMg
bmVlZCB0byBiZSBpbmxpbmUgd2l0aCBsYXlvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIWpRdWVyeS5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgfHwgY3NzX2RlZmF1bHRE
aXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgPT09ICJpbmxpbmUiICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlLnpvb20gPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICggb3B0cy5vdmVyZmxvdyApIHsKLSAg
ICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwotICAgICAgICAgICAgICAg
IGlmICggIWpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhbmltLmRvbmUoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAx
IF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93WSA9IG9w
dHMub3ZlcmZsb3dbIDIgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0KLSAgICAgICAgLy8gc2hvdy9oaWRlIHBhc3MKLSAgICAg
ICAgZm9yICggaW5kZXggaW4gcHJvcHMgKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9w
c1sgaW5kZXggXTsKLSAgICAgICAgICAgICAgICBpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHNbIGluZGV4IF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09ICJ0b2dnbGUi
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyAiaGlk
ZSIgOiAic2hvdyIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVkLnB1c2goIGluZGV4ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgbGVuZ3RoID0gaGFuZGxlZC5sZW5ndGg7Ci0gICAgICAgIGlmICggbGVuZ3RoICkgewot
ICAgICAgICAgICAgICAgIGRhdGFTaG93ID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAiZnhzaG93IiAp
IHx8IGpRdWVyeS5fZGF0YSggZWxlbSwgImZ4c2hvdyIsIHt9ICk7Ci0gICAgICAgICAgICAgICAg
aWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhp
ZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBzdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgpLnRvZ2ds
ZSgpIHRvICJyZXZlcnNlIgotICAgICAgICAgICAgICAgIGlmICggdG9nZ2xlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBoaWRkZW4gKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkoIGVsZW0gKS5zaG93KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW0uZG9uZShmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBlbGVtICkuaGlkZSgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFu
aW0uZG9uZShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wOwot
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sICJmeHNob3ci
LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBwcm9wIGluIG9yaWcgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJv
cCwgb3JpZ1sgcHJvcCBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgZm9yICggaW5kZXggPSAwIDsgaW5kZXggPCBsZW5n
dGggOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IGhhbmRsZWRb
IGluZGV4IF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0d2VlbiA9IGFuaW0uY3JlYXRlVHdl
ZW4oIHByb3AsIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBvcmlnWyBwcm9wIF0gPSBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHls
ZSggZWxlbSwgcHJvcCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIHByb3Ag
aW4gZGF0YVNob3cgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNo
b3dbIHByb3AgXSA9IHR3ZWVuLnN0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGhpZGRlbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0d2Vlbi5zdGFydCA9IHByb3AgPT09ICJ3aWR0aCIgfHwgcHJvcCA9PT0gImhl
aWdodCIgPyAxIDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotfQotCi1m
dW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7Ci0gICAg
ICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3As
IGVuZCwgZWFzaW5nICk7Ci19Ci1qUXVlcnkuVHdlZW4gPSBUd2VlbjsKLQotVHdlZW4ucHJvdG90
eXBlID0gewotICAgICAgICBjb25zdHJ1Y3RvcjogVHdlZW4sCi0gICAgICAgIGluaXQ6IGZ1bmN0
aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLmVsZW0gPSBlbGVtOwotICAgICAgICAgICAgICAgIHRoaXMucHJvcCA9IHBy
b3A7Ci0gICAgICAgICAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgInN3aW5nIjsKLSAg
ICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICAgICAgICAgICAgICAgIHRo
aXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5l
bmQgPSBlbmQ7Ci0gICAgICAgICAgICAgICAgdGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5j
c3NOdW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApOwotICAgICAgICB9LAotICAgICAgICBjdXI6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29r
c1sgdGhpcy5wcm9wIF07Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaG9va3MgJiYgaG9va3Mu
Z2V0ID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tzLmdldCggdGhpcyApIDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTsK
LSAgICAgICAgfSwKLSAgICAgICAgcnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHsKLSAgICAgICAg
ICAgICAgICB2YXIgZWFzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IFR3ZWVu
LnByb3BIb29rc1sgdGhpcy5wcm9wIF07Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMub3B0
aW9ucy5kdXJhdGlvbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gZWFz
ZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAx
LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0g
ZWFzZWQgPSBwZXJjZW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlz
Lm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywg
dGhpcyApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggaG9va3Mg
JiYgaG9va3Muc2V0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Muc2V0KCB0aGlz
ICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFR3
ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLX07Ci0KLVR3ZWVuLnByb3Rv
dHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKLQotVHdlZW4ucHJvcEhvb2tz
ID0gewotICAgICAgICBfZGVmYXVsdDogewotICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24o
IHR3ZWVuICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAm
JgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXR3ZWVuLmVsZW0uc3R5bGUgfHwg
dHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwpICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXNz
aW5nIGFueSB2YWx1ZSBhcyBhIDR0aCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2Fs
bHkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBm
YWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHNvLCBzaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8g
RmxvYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFz
ICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcyBpcy4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIGZhbHNlLCAi
IiApOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5k
ZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSAiYXV0byIgPyAwIDogcmVzdWx0Owot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4g
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Ugc3RlcCBob29rIGZvciBiYWNrIGNv
bXBhdCAtIHVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZSAtIHVzZSAuc3R5bGUgaWYgaXRzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVz
IHdoZXJlIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuZngu
c3RlcFsgdHdlZW4ucHJvcCBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICggdHdlZW4uZWxlbS5zdHlsZSAmJiAoIHR3ZWVuLmVsZW0uc3R5bGVb
IGpRdWVyeS5jc3NQcm9wc1sgdHdlZW4ucHJvcCBdIF0gIT0gbnVsbCB8fCBqUXVlcnkuY3NzSG9v
a3NbIHR3ZWVuLnByb3AgXSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVu
aXQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLX07
Ci0KLS8vIFJlbW92ZSBpbiAyLjAgLSB0aGlzIHN1cHBvcnRzIElFOCdzIHBhbmljIGJhc2VkIGFw
cHJvYWNoCi0vLyB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKLQotVHdl
ZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0gewot
ICAgICAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKLSAgICAgICAgICAgICAgICBpZiAoIHR3
ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfQotfTsKLQotalF1ZXJ5LmVhY2goWyAidG9nZ2xlIiwg
InNob3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgICAgIHZhciBjc3NG
biA9IGpRdWVyeS5mblsgbmFtZSBdOwotICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0
aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiB8fAotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjaGVjayBmb3IgLnRvZ2dsZSggaGFuZGxlciwgaGFu
ZGxlciwgLi4uICkKLSAgICAgICAgICAgICAgICAgICAgICAgICggIWkgJiYgalF1ZXJ5LmlzRnVu
Y3Rpb24oIHNwZWVkICkgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2luZyApICkgPwotICAgICAg
ICAgICAgICAgICAgICAgICAgY3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3Bl
ZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICAgICAgfTsKLX0pOwotCi1qUXVlcnkuZm4uZXh0
ZW5kKHsKLSAgICAgICAgZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxi
YWNrICkgewotCi0gICAgICAgICAgICAgICAgLy8gc2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFm
dGVyIHNldHRpbmcgb3BhY2l0eSB0byAwCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmls
dGVyKCBpc0hpZGRlbiApLmNzcyggIm9wYWNpdHkiLCAwICkuc2hvdygpCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZAotICAgICAgICAg
ICAgICAgICAgICAgICAgLmVuZCgpLmFuaW1hdGUoeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFz
aW5nLCBjYWxsYmFjayApOwotICAgICAgICB9LAotICAgICAgICBhbmltYXRlOiBmdW5jdGlvbigg
cHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVt
cHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28g
cGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwg
cHJvcCApLCBvcHRhbGwgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBF
bXB0eSBhbmltYXRpb25zIHJlc29sdmUgaW1tZWRpYXRlbHkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBlbXB0eSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmltLnN0b3AoIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIHJl
dHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID8KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkgewotICAg
ICAgICAgICAgICAgIHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0b3A7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Ao
IGdvdG9FbmQgKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
RW5kID0gY2xlYXJRdWV1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUXVldWUgPSB0
eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBjbGVhclF1ZXVlICYmIHR5cGUgIT09IGZh
bHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngi
LCBbXSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVxdWV1ZSA9
IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gdHlwZSAhPSBu
dWxsICYmIHR5cGUgKyAicXVldWVIb29rcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBpbmRleCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBk
YXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaW5kZXggaW4gZGF0
YSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGFb
IGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BRdWV1
ZSggZGF0YVsgaW5kZXggXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpbmRleCA9IHRpbWVy
cy5sZW5ndGg7IGluZGV4LS07ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmICh0eXBlID09IG51bGwgfHwgdGlt
ZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVxdWV1ZSA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGlu
ZGV4LCAxICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgdGhlIG5l
eHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxl
dGUgY2FsbGJhY2tzLCB3aGljaCB3aWxsIGRlcXVldWUKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLX0pOwotCi0vLyBHZW5lcmF0
ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvbgotZnVuY3Rpb24gZ2Vu
RngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHsKLSAgICAgICAgdmFyIHdoaWNoLAotICAgICAgICAg
ICAgICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfSwKLSAgICAgICAgICAgICAgICBpID0gMDsK
LQotICAgICAgICAvLyBpZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8g
YWxsIGNzc0V4cGFuZCB2YWx1ZXMsCi0gICAgICAgIC8vIGlmIHdlIGRvbid0IGluY2x1ZGUgd2lk
dGgsIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHQKLSAgICAgICAg
aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoPyAxIDogMDsKLSAgICAgICAgZm9yKCA7IGkgPCA0
IDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkgewotICAgICAgICAgICAgICAgIHdoaWNoID0gY3Nz
RXhwYW5kWyBpIF07Ci0gICAgICAgICAgICAgICAgYXR0cnNbICJtYXJnaW4iICsgd2hpY2ggXSA9
IGF0dHJzWyAicGFkZGluZyIgKyB3aGljaCBdID0gdHlwZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICggaW5jbHVkZVdpZHRoICkgewotICAgICAgICAgICAgICAgIGF0dHJzLm9wYWNpdHkgPSBh
dHRycy53aWR0aCA9IHR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYXR0cnM7Ci19
Ci0KLS8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKLWpRdWVyeS5l
YWNoKHsKLSAgICAgICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIpLAotICAgICAgICBzbGlkZVVw
OiBnZW5GeCgiaGlkZSIpLAotICAgICAgICBzbGlkZVRvZ2dsZTogZ2VuRngoInRvZ2dsZSIpLAot
ICAgICAgICBmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCi0gICAgICAgIGZhZGVPdXQ6IHsg
b3BhY2l0eTogImhpZGUiIH0sCi0gICAgICAgIGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogInRvZ2ds
ZSIgfQotfSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkgewotICAgICAgICBqUXVlcnkuZm5bIG5h
bWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sg
KTsKLSAgICAgICAgfTsKLX0pOwotCi1qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVh
c2luZywgZm4gKSB7Ci0gICAgICAgIHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09
ICJvYmplY3QiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7Ci0gICAgICAgICAgICAg
ICAgY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAotICAgICAgICAgICAgICAg
IGR1cmF0aW9uOiBzcGVlZCwKLSAgICAgICAgICAgICAgICBlYXNpbmc6IGZuICYmIGVhc2luZyB8
fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmcKLSAgICAg
ICAgfTsKLQotICAgICAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2ZmID8gMCA6IHR5cGVv
ZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0LmR1cmF0aW9uIDoKLSAgICAgICAgICAg
ICAgICBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNb
IG9wdC5kdXJhdGlvbiBdIDogalF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDsKLQotICAgICAgICAv
LyBub3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiAiZngiCi0gICAg
ICAgIGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkgewotICAg
ICAgICAgICAgICAgIG9wdC5xdWV1ZSA9ICJmeCI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBR
dWV1ZWluZwotICAgICAgICBvcHQub2xkID0gb3B0LmNvbXBsZXRlOwotCi0gICAgICAgIG9wdC5j
b21wbGV0ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVu
Y3Rpb24oIG9wdC5vbGQgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5vbGQuY2Fs
bCggdGhpcyApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggb3B0
LnF1ZXVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMs
IG9wdC5xdWV1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICBy
ZXR1cm4gb3B0OwotfTsKLQotalF1ZXJ5LmVhc2luZyA9IHsKLSAgICAgICAgbGluZWFyOiBmdW5j
dGlvbiggcCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcDsKLSAgICAgICAgfSwKLSAgICAg
ICAgc3dpbmc6IGZ1bmN0aW9uKCBwICkgewotICAgICAgICAgICAgICAgIHJldHVybiAwLjUgLSBN
YXRoLmNvcyggcCpNYXRoLlBJICkgLyAyOwotICAgICAgICB9Ci19OwotCi1qUXVlcnkudGltZXJz
ID0gW107Ci1qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDsKLWpRdWVyeS5meC50aWNr
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciB0aW1lciwKLSAgICAgICAgICAgICAgICB0aW1l
cnMgPSBqUXVlcnkudGltZXJzLAotICAgICAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAgIGZ4
Tm93ID0galF1ZXJ5Lm5vdygpOwotCi0gICAgICAgIGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7
IGkrKyApIHsKLSAgICAgICAgICAgICAgICB0aW1lciA9IHRpbWVyc1sgaSBdOwotICAgICAgICAg
ICAgICAgIC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gcmVtb3ZlZAot
ICAgICAgICAgICAgICAgIGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaS0tLCAxICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhdGltZXJzLmxlbmd0aCAp
IHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZnguc3RvcCgpOwotICAgICAgICB9Ci0gICAgICAg
IGZ4Tm93ID0gdW5kZWZpbmVkOwotfTsKLQotalF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRp
bWVyICkgewotICAgICAgICBpZiAoIHRpbWVyKCkgJiYgalF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1l
ciApICYmICF0aW1lcklkICkgewotICAgICAgICAgICAgICAgIHRpbWVySWQgPSBzZXRJbnRlcnZh
bCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZhbCApOwotICAgICAgICB9Ci19Owot
Ci1qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMzsKLQotalF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigp
IHsKLSAgICAgICAgY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOwotICAgICAgICB0aW1lcklkID0g
bnVsbDsKLX07Ci0KLWpRdWVyeS5meC5zcGVlZHMgPSB7Ci0gICAgICAgIHNsb3c6IDYwMCwKLSAg
ICAgICAgZmFzdDogMjAwLAotICAgICAgICAvLyBEZWZhdWx0IHNwZWVkCi0gICAgICAgIF9kZWZh
dWx0OiA0MDAKLX07Ci0KLS8vIEJhY2sgQ29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50Ci1qUXVl
cnkuZnguc3RlcCA9IHt9OwotCi1pZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHByLmZpbHRl
cnMgKSB7Ci0gICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVy
cywgZnVuY3Rpb24oIGZuICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0g
PT09IGZuLmVsZW07Ci0gICAgICAgICAgICAgICAgfSkubGVuZ3RoOwotICAgICAgICB9OwotfQot
dmFyIHJyb290ID0gL14oPzpib2R5fGh0bWwpJC9pOwotCi1qUXVlcnkuZm4ub2Zmc2V0ID0gZnVu
Y3Rpb24oIG9wdGlvbnMgKSB7Ci0gICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMgOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lYWNoKGZ1
bmN0aW9uKCBpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkub2Zm
c2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZG9jRWxlbSwgYm9keSwgd2luLCBjbGll
bnRUb3AsIGNsaWVudExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCwKLSAgICAgICAgICAgICAg
ICBib3ggPSB7IHRvcDogMCwgbGVmdDogMCB9LAotICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlz
WyAwIF0sCi0gICAgICAgICAgICAgICAgZG9jID0gZWxlbSAmJiBlbGVtLm93bmVyRG9jdW1lbnQ7
Ci0KLSAgICAgICAgaWYgKCAhZG9jICkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICggKGJvZHkgPSBkb2MuYm9keSkgPT09IGVsZW0gKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7Ci0KLSAgICAg
ICAgLy8gTWFrZSBzdXJlIGl0J3Mgbm90IGEgZGlzY29ubmVjdGVkIERPTSBub2RlCi0gICAgICAg
IGlmICggIWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxlbSApICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBib3g7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZl
IGdCQ1IsIGp1c3QgdXNlIDAsMCByYXRoZXIgdGhhbiBlcnJvcgotICAgICAgICAvLyBCbGFja0Jl
cnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpCi0gICAgICAgIGlmICggdHlwZW9mIGVsZW0u
Z2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAgICAg
ICBib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgICB9Ci0gICAgICAg
IHdpbiA9IGdldFdpbmRvdyggZG9jICk7Ci0gICAgICAgIGNsaWVudFRvcCAgPSBkb2NFbGVtLmNs
aWVudFRvcCAgfHwgYm9keS5jbGllbnRUb3AgIHx8IDA7Ci0gICAgICAgIGNsaWVudExlZnQgPSBk
b2NFbGVtLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7Ci0gICAgICAgIHNjcm9s
bFRvcCAgPSB3aW4ucGFnZVlPZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxUb3A7Ci0gICAgICAgIHNj
cm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxMZWZ0OwotICAgICAg
ICByZXR1cm4gewotICAgICAgICAgICAgICAgIHRvcDogYm94LnRvcCAgKyBzY3JvbGxUb3AgIC0g
Y2xpZW50VG9wLAotICAgICAgICAgICAgICAgIGxlZnQ6IGJveC5sZWZ0ICsgc2Nyb2xsTGVmdCAt
IGNsaWVudExlZnQKLSAgICAgICAgfTsKLX07Ci0KLWpRdWVyeS5vZmZzZXQgPSB7Ci0KLSAgICAg
ICAgYm9keU9mZnNldDogZnVuY3Rpb24oIGJvZHkgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRv
cCA9IGJvZHkub2Zmc2V0VG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGJvZHku
b2Zmc2V0TGVmdDsKLQotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuZG9lc05v
dEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpblRvcCIpICkgfHwgMDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhi
b2R5LCAibWFyZ2luTGVmdCIpICkgfHwgMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OwotICAgICAgICB9LAotCi0g
ICAgICAgIHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgInBvc2l0aW9uIiApOwot
Ci0gICAgICAgICAgICAgICAgLy8gc2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0
IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQotICAgICAgICAgICAgICAgIGlmICggcG9zaXRp
b24gPT09ICJzdGF0aWMiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5w
b3NpdGlvbiA9ICJyZWxhdGl2ZSI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdmFyIGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBj
dXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiApLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1
dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBb
Y3VyQ1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
b3BzID0ge30sIGN1clBvc2l0aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDsKLQotICAgICAgICAg
ICAgICAgIC8vIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVy
IHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBm
aXhlZAotICAgICAgICAgICAgICAgIGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBj
dXJDU1NUb3AgKSB8fCAwOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGVmdCA9IHBhcnNl
RmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGN1ck9mZnNldCAp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy50b3Ag
IT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnRvcCA9ICggb3B0aW9u
cy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCAp
ICsgY3VyTGVmdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoICJ1
c2luZyIgaW4gb3B0aW9ucyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXNp
bmcuY2FsbCggZWxlbSwgcHJvcHMgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3BzICk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICB9Ci19OwotCi0KLWpRdWVyeS5mbi5leHRlbmQoewotCi0gICAgICAgIHBvc2l0
aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoICF0aGlzWzBdICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXSwKLQotICAgICAgICAgICAgICAgIC8vIEdldCAq
cmVhbCogb2Zmc2V0UGFyZW50Ci0gICAgICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gdGhpcy5v
ZmZzZXRQYXJlbnQoKSwKLQotICAgICAgICAgICAgICAgIC8vIEdldCBjb3JyZWN0IG9mZnNldHMK
LSAgICAgICAgICAgICAgICBvZmZzZXQgICAgICAgPSB0aGlzLm9mZnNldCgpLAotICAgICAgICAg
ICAgICAgIHBhcmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFyZW50WzBdLm5vZGVOYW1l
KSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBTdWJ0cmFjdCBlbGVtZW50IG1hcmdpbnMKLSAgICAgICAgICAgICAgICAv
LyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdpbjogYXV0byB0aGUgb2Zmc2V0TGVmdCBh
bmQgbWFyZ2luTGVmdAotICAgICAgICAgICAgICAgIC8vIGFyZSB0aGUgc2FtZSBpbiBTYWZhcmkg
Y2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNvcnJlY3RseSBiZSAwCi0gICAgICAgICAgICAgICAg
b2Zmc2V0LnRvcCAgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAibWFyZ2luVG9wIikg
KSB8fCAwOwotICAgICAgICAgICAgICAgIG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoIGpRdWVy
eS5jc3MoZWxlbSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7Ci0KLSAgICAgICAgICAgICAgICAvLyBB
ZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKLSAgICAgICAgICAgICAgICBwYXJlbnRPZmZzZXQudG9w
ICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKG9mZnNldFBhcmVudFswXSwgImJvcmRlclRvcFdp
ZHRoIikgKSB8fCAwOwotICAgICAgICAgICAgICAgIHBhcmVudE9mZnNldC5sZWZ0ICs9IHBhcnNl
RmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVyTGVmdFdpZHRoIikgKSB8
fCAwOwotCi0gICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgdGhlIHR3byBvZmZzZXRzCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogIG9mZnNl
dC50b3AgIC0gcGFyZW50T2Zmc2V0LnRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6
IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQKLSAgICAgICAgICAgICAgICB9OwotICAg
ICAgICB9LAotCi0gICAgICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG9mZnNldFBhcmVudCAmJiAoIXJyb290
LnRlc3Qob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAmJiBqUXVlcnkuY3NzKG9mZnNldFBhcmVudCwg
InBvc2l0aW9uIikgPT09ICJzdGF0aWMiKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXRQ
YXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
fSk7Ci0KLQotLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCi1qUXVl
cnkuZWFjaCgge3Njcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIsIHNjcm9sbFRvcDogInBhZ2VZT2Zm
c2V0In0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7Ci0gICAgICAgIHZhciB0b3AgPSAvWS8u
dGVzdCggcHJvcCApOwotCi0gICAgICAgIGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbigg
dmFsICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5j
dGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
d2luID0gZ2V0V2luZG93KCBlbGVtICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dmFsID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB3aW4gPyAocHJvcCBpbiB3aW4pID8gd2luWyBwcm9wIF0gOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIG1l
dGhvZCBdIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBt
ZXRob2QgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB3aW4gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbi5z
Y3JvbGxUbygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdG9wID8g
dmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxMZWZ0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvcCA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsVG9wKCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgbWV0
aG9kIF0gPSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGgsIG51bGwgKTsKLSAgICAgICAgfTsKLX0p
OwotCi1mdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiBqUXVlcnku
aXNXaW5kb3coIGVsZW0gKSA/Ci0gICAgICAgICAgICAgICAgZWxlbSA6Ci0gICAgICAgICAgICAg
ICAgZWxlbS5ub2RlVHlwZSA9PT0gOSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmRl
ZmF1bHRWaWV3IHx8IGVsZW0ucGFyZW50V2luZG93IDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZhbHNlOwotfQotLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdp
ZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzCi1qUXVlcnkuZWFjaCggeyBI
ZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSAp
IHsKLSAgICAgICAgalF1ZXJ5LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRl
bnQ6IHR5cGUsICIiOiAib3V0ZXIiICsgbmFtZSB9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBm
dW5jTmFtZSApIHsKLSAgICAgICAgICAgICAgICAvLyBtYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJI
ZWlnaHQsIG91dGVyV2lkdGgKLSAgICAgICAgICAgICAgICBqUXVlcnkuZm5bIGZ1bmNOYW1lIF0g
PSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVv
ZiBtYXJnaW4gIT09ICJib29sZWFuIiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0g
dHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvYzsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzIG9mIDUvOC8yMDEy
IHRoaXMgd2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0
IHRoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNuJ3Qg
YSB3aG9sZSBsb3Qgd2UgY2FuIGRvLiBTZWUgcHVsbCByZXF1ZXN0IGF0IHRoaXMgVVJMIGZvciBk
aXNjdXNzaW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50WyAiY2xpZW50IiArIG5hbWUgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBkb2N1bWVudCB3aWR0
aCBvciBoZWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSA5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtX
aWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLCB3aGljaGV2ZXIgaXMgZ3JlYXRl
c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmZvcnR1bmF0
ZWx5LCB0aGlzIGNhdXNlcyBidWcgIzM4MzggaW4gSUU2Lzggb25seSwgYnV0IHRoZXJlIGlzIGN1
cnJlbnRseSBubyBnb29kLCBzbWFsbCB3YXkgdG8gZml4IGl0LgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsgInNjcm9sbCIgKyBuYW1l
IF0sIGRvY1sgInNjcm9sbCIgKyBuYW1lIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJvZmZzZXQiICsgbmFtZSBdLCBkb2NbICJv
ZmZzZXQiICsgbmFtZSBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jWyAiY2xpZW50IiArIG5hbWUgXQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5l
ZCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHdpZHRo
IG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFy
c2VGbG9hdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5j
c3MoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApIDoKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVs
ZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHlw
ZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTsKLSAg
ICAgICAgICAgICAgICB9OwotICAgICAgICB9KTsKLX0pOwotLy8gRXhwb3NlIGpRdWVyeSB0byB0
aGUgZ2xvYmFsIG9iamVjdAotd2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5OwotCi0v
LyBFeHBvc2UgalF1ZXJ5IGFzIGFuIEFNRCBtb2R1bGUsIGJ1dCBvbmx5IGZvciBBTUQgbG9hZGVy
cyB0aGF0Ci0vLyB1bmRlcnN0YW5kIHRoZSBpc3N1ZXMgd2l0aCBsb2FkaW5nIG11bHRpcGxlIHZl
cnNpb25zIG9mIGpRdWVyeQotLy8gaW4gYSBwYWdlIHRoYXQgYWxsIG1pZ2h0IGNhbGwgZGVmaW5l
KCkuIFRoZSBsb2FkZXIgd2lsbCBpbmRpY2F0ZQotLy8gdGhleSBoYXZlIHNwZWNpYWwgYWxsb3dh
bmNlcyBmb3IgbXVsdGlwbGUgalF1ZXJ5IHZlcnNpb25zIGJ5Ci0vLyBzcGVjaWZ5aW5nIGRlZmlu
ZS5hbWQualF1ZXJ5ID0gdHJ1ZS4gUmVnaXN0ZXIgYXMgYSBuYW1lZCBtb2R1bGUsCi0vLyBzaW5j
ZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyIGZpbGVzIHRoYXQgbWF5IHVz
ZSBkZWZpbmUsCi0vLyBidXQgbm90IHVzZSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0
aGF0IHVuZGVyc3RhbmRzIGFub255bW91cwotLy8gQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlz
IHNhZmVzdCBhbmQgbW9zdCByb2J1c3Qgd2F5IHRvIHJlZ2lzdGVyLgotLy8gTG93ZXJjYXNlIGpx
dWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmUgZGVyaXZlZCBmcm9tCi0v
LyBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2Vy
Y2FzZSBmaWxlIG5hbWUuCi0vLyBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28g
dGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzIHRvIGNhbGwKLS8vIG5vQ29uZmxpY3QgdG8gaGlk
ZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuCi1pZiAoIHR5cGVvZiBkZWZp
bmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCAmJiBkZWZpbmUuYW1kLmpRdWVyeSApIHsK
LSAgICAgICAgZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpRdWVy
eTsgfSApOwotfQotCi19KSggd2luZG93ICk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzLXRleHQvdGV4dC5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvYm93ZXJfY29tcG9uZW50cy9yZXF1aXJlanMtdGV4dC90ZXh0LmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxZTRmYzk2NjEzNTM3NDJmNzYwNzdmNjY0MWE3OGJmYWZlOGVlNDk4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9yZXF1aXJlanMtdGV4dC90ZXh0LmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMzg2ICswLDAgQEAKLS8qKgotICogQGxpY2Vuc2UgUmVxdWlyZUpTIHRleHQg
Mi4wLjEwIENvcHlyaWdodCAoYykgMjAxMC0yMDEyLCBUaGUgRG9qbyBGb3VuZGF0aW9uIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKiBBdmFpbGFibGUgdmlhIHRoZSBNSVQgb3IgbmV3IEJTRCBsaWNl
bnNlLgotICogc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvdGV4dCBmb3IgZGV0YWls
cwotICovCi0vKmpzbGludCByZWdleHA6IHRydWUgKi8KLS8qZ2xvYmFsIHJlcXVpcmUsIFhNTEh0
dHBSZXF1ZXN0LCBBY3RpdmVYT2JqZWN0LAotICBkZWZpbmUsIHdpbmRvdywgcHJvY2VzcywgUGFj
a2FnZXMsCi0gIGphdmEsIGxvY2F0aW9uLCBDb21wb25lbnRzLCBGaWxlVXRpbHMgKi8KLQotZGVm
aW5lKFsnbW9kdWxlJ10sIGZ1bmN0aW9uIChtb2R1bGUpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0K
LSAgICB2YXIgdGV4dCwgZnMsIENjLCBDaSwgeHBjSXNXaW5kb3dzLAotICAgICAgICBwcm9nSWRz
ID0gWydNc3htbDIuWE1MSFRUUCcsICdNaWNyb3NvZnQuWE1MSFRUUCcsICdNc3htbDIuWE1MSFRU
UC40LjAnXSwKLSAgICAgICAgeG1sUmVnRXhwID0gL15ccyo8XD94bWwoXHMpK3ZlcnNpb249W1wn
XCJdKFxkKSouKFxkKSpbXCdcIl0oXHMpKlw/Pi9pbSwKLSAgICAgICAgYm9keVJlZ0V4cCA9IC88
Ym9keVtePl0qPlxzKihbXHNcU10rKVxzKjxcL2JvZHk+L2ltLAotICAgICAgICBoYXNMb2NhdGlv
biA9IHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9jYXRpb24uaHJlZiwKLSAg
ICAgICAgZGVmYXVsdFByb3RvY29sID0gaGFzTG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wg
JiYgbG9jYXRpb24ucHJvdG9jb2wucmVwbGFjZSgvXDovLCAnJyksCi0gICAgICAgIGRlZmF1bHRI
b3N0TmFtZSA9IGhhc0xvY2F0aW9uICYmIGxvY2F0aW9uLmhvc3RuYW1lLAotICAgICAgICBkZWZh
dWx0UG9ydCA9IGhhc0xvY2F0aW9uICYmIChsb2NhdGlvbi5wb3J0IHx8IHVuZGVmaW5lZCksCi0g
ICAgICAgIGJ1aWxkTWFwID0ge30sCi0gICAgICAgIG1hc3RlckNvbmZpZyA9IChtb2R1bGUuY29u
ZmlnICYmIG1vZHVsZS5jb25maWcoKSkgfHwge307Ci0KLSAgICB0ZXh0ID0gewotICAgICAgICB2
ZXJzaW9uOiAnMi4wLjEwJywKLQotICAgICAgICBzdHJpcDogZnVuY3Rpb24gKGNvbnRlbnQpIHsK
LSAgICAgICAgICAgIC8vU3RyaXBzIDw/eG1sIC4uLj8+IGRlY2xhcmF0aW9ucyBzbyB0aGF0IGV4
dGVybmFsIFNWRyBhbmQgWE1MCi0gICAgICAgICAgICAvL2RvY3VtZW50cyBjYW4gYmUgYWRkZWQg
dG8gYSBkb2N1bWVudCB3aXRob3V0IHdvcnJ5LiBBbHNvLCBpZiB0aGUgc3RyaW5nCi0gICAgICAg
ICAgICAvL2lzIGFuIEhUTUwgZG9jdW1lbnQsIG9ubHkgdGhlIHBhcnQgaW5zaWRlIHRoZSBib2R5
IHRhZyBpcyByZXR1cm5lZC4KLSAgICAgICAgICAgIGlmIChjb250ZW50KSB7Ci0gICAgICAgICAg
ICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh4bWxSZWdFeHAsICIiKTsKLSAgICAgICAg
ICAgICAgICB2YXIgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goYm9keVJlZ0V4cCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1hdGNoZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IG1h
dGNoZXNbMV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBjb250ZW50ID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gY29udGVudDsKLSAgICAgICAgfSwKLQotICAgICAgICBqc0VzY2FwZTogZnVuY3Rpb24gKGNv
bnRlbnQpIHsKLSAgICAgICAgICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UoLyhbJ1xcXSkvZywg
J1xcJDEnKQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXGZdL2csICJcXGYiKQotICAgICAg
ICAgICAgICAgIC5yZXBsYWNlKC9bXGJdL2csICJcXGIiKQotICAgICAgICAgICAgICAgIC5yZXBs
YWNlKC9bXG5dL2csICJcXG4iKQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXHRdL2csICJc
XHQiKQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXHJdL2csICJcXHIiKQotICAgICAgICAg
ICAgICAgIC5yZXBsYWNlKC9bXHUyMDI4XS9nLCAiXFx1MjAyOCIpCi0gICAgICAgICAgICAgICAg
LnJlcGxhY2UoL1tcdTIwMjldL2csICJcXHUyMDI5Iik7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
Y3JlYXRlWGhyOiBtYXN0ZXJDb25maWcuY3JlYXRlWGhyIHx8IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIC8vV291bGQgbG92ZSB0byBkdW1wIHRoZSBBY3RpdmVYIGNyYXAgaW4gaGVyZS4gTmVl
ZCBJRSA2IHRvIGRpZSBmaXJzdC4KLSAgICAgICAgICAgIHZhciB4aHIsIGksIHByb2dJZDsKLSAg
ICAgICAgICAgIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICJ1bmRlZmluZWQiKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgICAgICAgICAg
fSBlbHNlIGlmICh0eXBlb2YgQWN0aXZlWE9iamVjdCAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHByb2dJZCA9IHByb2dJZHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdChwcm9nSWQpOwotICAg
ICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQotCi0gICAgICAgICAgICAgICAgICAgIGlm
ICh4aHIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2dJZHMgPSBbcHJvZ0lkXTsgIC8v
IHNvIGZhc3RlciBuZXh0IHRpbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4geGhyOwotICAgICAgICB9LAotCi0gICAgICAgIC8qKgotICAgICAg
ICAgKiBQYXJzZXMgYSByZXNvdXJjZSBuYW1lIGludG8gaXRzIGNvbXBvbmVudCBwYXJ0cy4gUmVz
b3VyY2UgbmFtZXMKLSAgICAgICAgICogbG9vayBsaWtlOiBtb2R1bGUvbmFtZS5leHQhc3RyaXAs
IHdoZXJlIHRoZSAhc3RyaXAgcGFydCBpcwotICAgICAgICAgKiBvcHRpb25hbC4KLSAgICAgICAg
ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlc291cmNlIG5hbWUKLSAgICAgICAgICogQHJl
dHVybnMge09iamVjdH0gd2l0aCBwcm9wZXJ0aWVzICJtb2R1bGVOYW1lIiwgImV4dCIgYW5kICJz
dHJpcCIKLSAgICAgICAgICogd2hlcmUgc3RyaXAgaXMgYSBib29sZWFuLgotICAgICAgICAgKi8K
LSAgICAgICAgcGFyc2VOYW1lOiBmdW5jdGlvbiAobmFtZSkgewotICAgICAgICAgICAgdmFyIG1v
ZE5hbWUsIGV4dCwgdGVtcCwKLSAgICAgICAgICAgICAgICBzdHJpcCA9IGZhbHNlLAotICAgICAg
ICAgICAgICAgIGluZGV4ID0gbmFtZS5pbmRleE9mKCIuIiksCi0gICAgICAgICAgICAgICAgaXNS
ZWxhdGl2ZSA9IG5hbWUuaW5kZXhPZignLi8nKSA9PT0gMCB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lLmluZGV4T2YoJy4uLycpID09PSAwOwotCi0gICAgICAgICAgICBpZiAo
aW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRleCA+IDEpKSB7Ci0gICAgICAgICAg
ICAgICAgbW9kTmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICAgICAgICAgICAg
ICBleHQgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5hbWUubGVuZ3RoKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbW9kTmFtZSA9IG5hbWU7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHRlbXAgPSBleHQgfHwgbW9kTmFtZTsKLSAgICAgICAgICAgIGlu
ZGV4ID0gdGVtcC5pbmRleE9mKCIhIik7Ci0gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7
Ci0gICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgc3RyaXAgYXJnLgotICAgICAgICAgICAg
ICAgIHN0cmlwID0gdGVtcC5zdWJzdHJpbmcoaW5kZXggKyAxKSA9PT0gInN0cmlwIjsKLSAgICAg
ICAgICAgICAgICB0ZW1wID0gdGVtcC5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgICAgICAg
ICAgIGlmIChleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgZXh0ID0gdGVtcDsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtb2ROYW1lID0gdGVtcDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogbW9kTmFtZSwKLSAgICAgICAgICAgICAgICBleHQ6
IGV4dCwKLSAgICAgICAgICAgICAgICBzdHJpcDogc3RyaXAKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgeGRSZWdFeHA6IC9eKChcdyspXDopP1wvXC8oW15cL1xcXSspLywK
LQotICAgICAgICAvKioKLSAgICAgICAgICogSXMgYW4gVVJMIG9uIGFub3RoZXIgZG9tYWluLiBP
bmx5IHdvcmtzIGZvciBicm93c2VyIHVzZSwgcmV0dXJucwotICAgICAgICAgKiBmYWxzZSBpbiBu
b24tYnJvd3NlciBlbnZpcm9ubWVudHMuIE9ubHkgdXNlZCB0byBrbm93IGlmIGFuCi0gICAgICAg
ICAqIG9wdGltaXplZCAuanMgdmVyc2lvbiBvZiBhIHRleHQgcmVzb3VyY2Ugc2hvdWxkIGJlIGxv
YWRlZAotICAgICAgICAgKiBpbnN0ZWFkLgotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJs
Ci0gICAgICAgICAqIEByZXR1cm5zIEJvb2xlYW4KLSAgICAgICAgICovCi0gICAgICAgIHVzZVho
cjogZnVuY3Rpb24gKHVybCwgcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0KSB7Ci0gICAgICAgICAg
ICB2YXIgdVByb3RvY29sLCB1SG9zdE5hbWUsIHVQb3J0LAotICAgICAgICAgICAgICAgIG1hdGNo
ID0gdGV4dC54ZFJlZ0V4cC5leGVjKHVybCk7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1
UHJvdG9jb2wgPSBtYXRjaFsyXTsKLSAgICAgICAgICAgIHVIb3N0TmFtZSA9IG1hdGNoWzNdOwot
Ci0gICAgICAgICAgICB1SG9zdE5hbWUgPSB1SG9zdE5hbWUuc3BsaXQoJzonKTsKLSAgICAgICAg
ICAgIHVQb3J0ID0gdUhvc3ROYW1lWzFdOwotICAgICAgICAgICAgdUhvc3ROYW1lID0gdUhvc3RO
YW1lWzBdOwotCi0gICAgICAgICAgICByZXR1cm4gKCF1UHJvdG9jb2wgfHwgdVByb3RvY29sID09
PSBwcm90b2NvbCkgJiYKLSAgICAgICAgICAgICAgICAgICAoIXVIb3N0TmFtZSB8fCB1SG9zdE5h
bWUudG9Mb3dlckNhc2UoKSA9PT0gaG9zdG5hbWUudG9Mb3dlckNhc2UoKSkgJiYKLSAgICAgICAg
ICAgICAgICAgICAoKCF1UG9ydCAmJiAhdUhvc3ROYW1lKSB8fCB1UG9ydCA9PT0gcG9ydCk7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoTG9hZDogZnVuY3Rpb24gKG5hbWUsIHN0cmlwLCBj
b250ZW50LCBvbkxvYWQpIHsKLSAgICAgICAgICAgIGNvbnRlbnQgPSBzdHJpcCA/IHRleHQuc3Ry
aXAoY29udGVudCkgOiBjb250ZW50OwotICAgICAgICAgICAgaWYgKG1hc3RlckNvbmZpZy5pc0J1
aWxkKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRNYXBbbmFtZV0gPSBjb250ZW50OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgb25Mb2FkKGNvbnRlbnQpOwotICAgICAgICB9LAotCi0gICAg
ICAgIGxvYWQ6IGZ1bmN0aW9uIChuYW1lLCByZXEsIG9uTG9hZCwgY29uZmlnKSB7Ci0gICAgICAg
ICAgICAvL05hbWUgaGFzIGZvcm1hdDogc29tZS5tb2R1bGUuZmlsZXh0IXN0cmlwCi0gICAgICAg
ICAgICAvL1RoZSBzdHJpcCBwYXJ0IGlzIG9wdGlvbmFsLgotICAgICAgICAgICAgLy9pZiBzdHJp
cCBpcyBwcmVzZW50LCB0aGVuIHRoYXQgbWVhbnMgb25seSBnZXQgdGhlIHN0cmluZyBjb250ZW50
cwotICAgICAgICAgICAgLy9pbnNpZGUgYSBib2R5IHRhZyBpbiBhbiBIVE1MIHN0cmluZy4gRm9y
IFhNTC9TVkcgY29udGVudCBpdCBtZWFucwotICAgICAgICAgICAgLy9yZW1vdmluZyB0aGUgPD94
bWwgLi4uPz4gZGVjbGFyYXRpb25zIHNvIHRoZSBjb250ZW50IGNhbiBiZSBpbnNlcnRlZAotICAg
ICAgICAgICAgLy9pbnRvIHRoZSBjdXJyZW50IGRvYyB3aXRob3V0IHByb2JsZW1zLgotCi0gICAg
ICAgICAgICAvLyBEbyBub3QgYm90aGVyIHdpdGggdGhlIHdvcmsgaWYgYSBidWlsZCBhbmQgdGV4
dCB3aWxsCi0gICAgICAgICAgICAvLyBub3QgYmUgaW5saW5lZC4KLSAgICAgICAgICAgIGlmIChj
b25maWcuaXNCdWlsZCAmJiAhY29uZmlnLmlubGluZVRleHQpIHsKLSAgICAgICAgICAgICAgICBv
bkxvYWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG1hc3RlckNvbmZpZy5pc0J1aWxkID0gY29uZmlnLmlzQnVpbGQ7Ci0KLSAgICAgICAg
ICAgIHZhciBwYXJzZWQgPSB0ZXh0LnBhcnNlTmFtZShuYW1lKSwKLSAgICAgICAgICAgICAgICBu
b25TdHJpcE5hbWUgPSBwYXJzZWQubW9kdWxlTmFtZSArCi0gICAgICAgICAgICAgICAgICAgIChw
YXJzZWQuZXh0ID8gJy4nICsgcGFyc2VkLmV4dCA6ICcnKSwKLSAgICAgICAgICAgICAgICB1cmwg
PSByZXEudG9Vcmwobm9uU3RyaXBOYW1lKSwKLSAgICAgICAgICAgICAgICB1c2VYaHIgPSAobWFz
dGVyQ29uZmlnLnVzZVhocikgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnVzZVho
cjsKLQotICAgICAgICAgICAgLy8gRG8gbm90IGxvYWQgaWYgaXQgaXMgYW4gZW1wdHk6IHVybAot
ICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCdlbXB0eTonKSA9PT0gMCkgewotICAgICAgICAg
ICAgICAgIG9uTG9hZCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy9Mb2FkIHRoZSB0ZXh0LiBVc2UgWEhSIGlmIHBvc3NpYmxlIGFuZCBp
biBhIGJyb3dzZXIuCi0gICAgICAgICAgICBpZiAoIWhhc0xvY2F0aW9uIHx8IHVzZVhocih1cmws
IGRlZmF1bHRQcm90b2NvbCwgZGVmYXVsdEhvc3ROYW1lLCBkZWZhdWx0UG9ydCkpIHsKLSAgICAg
ICAgICAgICAgICB0ZXh0LmdldCh1cmwsIGZ1bmN0aW9uIChjb250ZW50KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRleHQuZmluaXNoTG9hZChuYW1lLCBwYXJzZWQuc3RyaXAsIGNvbnRlbnQsIG9u
TG9hZCk7Ci0gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgewotICAgICAgICAgICAg
ICAgICAgICBpZiAob25Mb2FkLmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbkxv
YWQuZXJyb3IoZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvL05lZWQgdG8gZmV0Y2gg
dGhlIHJlc291cmNlIGFjcm9zcyBkb21haW5zLiBBc3N1bWUKLSAgICAgICAgICAgICAgICAvL3Ro
ZSByZXNvdXJjZSBoYXMgYmVlbiBvcHRpbWl6ZWQgaW50byBhIEpTIG1vZHVsZS4gRmV0Y2gKLSAg
ICAgICAgICAgICAgICAvL2J5IHRoZSBtb2R1bGUgbmFtZSArIGV4dGVuc2lvbiwgYnV0IGRvIG5v
dCBpbmNsdWRlIHRoZQotICAgICAgICAgICAgICAgIC8vIXN0cmlwIHBhcnQgdG8gYXZvaWQgZmls
ZSBzeXN0ZW0gaXNzdWVzLgotICAgICAgICAgICAgICAgIHJlcShbbm9uU3RyaXBOYW1lXSwgZnVu
Y3Rpb24gKGNvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5maW5pc2hMb2FkKHBh
cnNlZC5tb2R1bGVOYW1lICsgJy4nICsgcGFyc2VkLmV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlZC5zdHJpcCwgY29udGVudCwgb25Mb2FkKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICB3cml0ZTog
ZnVuY3Rpb24gKHBsdWdpbk5hbWUsIG1vZHVsZU5hbWUsIHdyaXRlLCBjb25maWcpIHsKLSAgICAg
ICAgICAgIGlmIChidWlsZE1hcC5oYXNPd25Qcm9wZXJ0eShtb2R1bGVOYW1lKSkgewotICAgICAg
ICAgICAgICAgIHZhciBjb250ZW50ID0gdGV4dC5qc0VzY2FwZShidWlsZE1hcFttb2R1bGVOYW1l
XSk7Ci0gICAgICAgICAgICAgICAgd3JpdGUuYXNNb2R1bGUocGx1Z2luTmFtZSArICIhIiArIG1v
ZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmluZShmdW5jdGlv
biAoKSB7IHJldHVybiAnIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRlbnQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInO30pO1xuIik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgd3JpdGVGaWxlOiBmdW5jdGlvbiAocGx1
Z2luTmFtZSwgbW9kdWxlTmFtZSwgcmVxLCB3cml0ZSwgY29uZmlnKSB7Ci0gICAgICAgICAgICB2
YXIgcGFyc2VkID0gdGV4dC5wYXJzZU5hbWUobW9kdWxlTmFtZSksCi0gICAgICAgICAgICAgICAg
ZXh0UGFydCA9IHBhcnNlZC5leHQgPyAnLicgKyBwYXJzZWQuZXh0IDogJycsCi0gICAgICAgICAg
ICAgICAgbm9uU3RyaXBOYW1lID0gcGFyc2VkLm1vZHVsZU5hbWUgKyBleHRQYXJ0LAotICAgICAg
ICAgICAgICAgIC8vVXNlIGEgJy5qcycgZmlsZSBuYW1lIHNvIHRoYXQgaXQgaW5kaWNhdGVzIGl0
IGlzIGEKLSAgICAgICAgICAgICAgICAvL3NjcmlwdCB0aGF0IGNhbiBiZSBsb2FkZWQgYWNyb3Nz
IGRvbWFpbnMuCi0gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSByZXEudG9VcmwocGFyc2VkLm1v
ZHVsZU5hbWUgKyBleHRQYXJ0KSArICcuanMnOwotCi0gICAgICAgICAgICAvL0xldmVyYWdlIG93
biBsb2FkKCkgbWV0aG9kIHRvIGxvYWQgcGx1Z2luIHZhbHVlLCBidXQgb25seQotICAgICAgICAg
ICAgLy93cml0ZSBvdXQgdmFsdWVzIHRoYXQgZG8gbm90IGhhdmUgdGhlIHN0cmlwIGFyZ3VtZW50
LAotICAgICAgICAgICAgLy90byBhdm9pZCBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoICEgaW4g
ZmlsZSBuYW1lcy4KLSAgICAgICAgICAgIHRleHQubG9hZChub25TdHJpcE5hbWUsIHJlcSwgZnVu
Y3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy9Vc2Ugb3duIHdyaXRlKCkgbWV0aG9k
IHRvIGNvbnN0cnVjdCBmdWxsIG1vZHVsZSB2YWx1ZS4KLSAgICAgICAgICAgICAgICAvL0J1dCBu
ZWVkIHRvIGNyZWF0ZSBzaGVsbCB0aGF0IHRyYW5zbGF0ZXMgd3JpdGVGaWxlJ3MKLSAgICAgICAg
ICAgICAgICAvL3dyaXRlKCkgdG8gdGhlIHJpZ2h0IGludGVyZmFjZS4KLSAgICAgICAgICAgICAg
ICB2YXIgdGV4dFdyaXRlID0gZnVuY3Rpb24gKGNvbnRlbnRzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB3cml0ZShmaWxlTmFtZSwgY29udGVudHMpOwotICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICAgICAgdGV4dFdyaXRlLmFzTW9kdWxlID0gZnVuY3Rpb24gKG1vZHVsZU5h
bWUsIGNvbnRlbnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZS5hc01vZHVs
ZShtb2R1bGVOYW1lLCBmaWxlTmFtZSwgY29udGVudHMpOwotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICB0ZXh0LndyaXRlKHBsdWdpbk5hbWUsIG5vblN0cmlwTmFtZSwgdGV4
dFdyaXRlLCBjb25maWcpOwotICAgICAgICAgICAgfSwgY29uZmlnKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBpZiAobWFzdGVyQ29uZmlnLmVudiA9PT0gJ25vZGUnIHx8ICghbWFzdGVyQ29u
ZmlnLmVudiAmJgotICAgICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICJ1bmRlZmluZWQiICYm
Ci0gICAgICAgICAgICBwcm9jZXNzLnZlcnNpb25zICYmCi0gICAgICAgICAgICAhIXByb2Nlc3Mu
dmVyc2lvbnMubm9kZSAmJgotICAgICAgICAgICAgIXByb2Nlc3MudmVyc2lvbnNbJ25vZGUtd2Vi
a2l0J10pKSB7Ci0gICAgICAgIC8vVXNpbmcgc3BlY2lhbCByZXF1aXJlLm5vZGVSZXF1aXJlLCBz
b21ldGhpbmcgYWRkZWQgYnkgci5qcy4KLSAgICAgICAgZnMgPSByZXF1aXJlLm5vZGVSZXF1aXJl
KCdmcycpOwotCi0gICAgICAgIHRleHQuZ2V0ID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2ssIGVy
cmJhY2spIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdmFyIGZpbGUgPSBm
cy5yZWFkRmlsZVN5bmModXJsLCAndXRmOCcpOwotICAgICAgICAgICAgICAgIC8vUmVtb3ZlIEJP
TSAoQnl0ZSBNYXJrIE9yZGVyKSBmcm9tIHV0ZjggZmlsZXMgaWYgaXQgaXMgdGhlcmUuCi0gICAg
ICAgICAgICAgICAgaWYgKGZpbGUuaW5kZXhPZignXHVGRUZGJykgPT09IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyaW5nKDEpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBjYWxsYmFjayhmaWxlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICAgICBlcnJiYWNrKGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9
OwotICAgIH0gZWxzZSBpZiAobWFzdGVyQ29uZmlnLmVudiA9PT0gJ3hocicgfHwgKCFtYXN0ZXJD
b25maWcuZW52ICYmCi0gICAgICAgICAgICB0ZXh0LmNyZWF0ZVhocigpKSkgewotICAgICAgICB0
ZXh0LmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrLCBlcnJiYWNrLCBoZWFkZXJzKSB7Ci0g
ICAgICAgICAgICB2YXIgeGhyID0gdGV4dC5jcmVhdGVYaHIoKSwgaGVhZGVyOwotICAgICAgICAg
ICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgIC8vQWxsb3cgcGx1
Z2lucyBkaXJlY3QgYWNjZXNzIHRvIHhociBoZWFkZXJzCi0gICAgICAgICAgICBpZiAoaGVhZGVy
cykgewotICAgICAgICAgICAgICAgIGZvciAoaGVhZGVyIGluIGhlYWRlcnMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLnRvTG93ZXJDYXNl
KCksIGhlYWRlcnNbaGVhZGVyXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vQWxsb3cgb3ZlcnJpZGVzIHNw
ZWNpZmllZCBpbiBjb25maWcKLSAgICAgICAgICAgIGlmIChtYXN0ZXJDb25maWcub25YaHIpIHsK
LSAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcub25YaHIoeGhyLCB1cmwpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKGV2
dCkgewotICAgICAgICAgICAgICAgIHZhciBzdGF0dXMsIGVycjsKLSAgICAgICAgICAgICAgICAv
L0RvIG5vdCBleHBsaWNpdGx5IGhhbmRsZSBlcnJvcnMsIHRob3NlIHNob3VsZCBiZQotICAgICAg
ICAgICAgICAgIC8vdmlzaWJsZSB2aWEgY29uc29sZSBvdXRwdXQgaW4gdGhlIGJyb3dzZXIuCi0g
ICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0
dXMgPiAzOTkgJiYgc3RhdHVzIDwgNjAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0Fu
IGh0dHAgNHh4IG9yIDV4eCBlcnJvci4gU2lnbmFsIGFuIGVycm9yLgotICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyID0gbmV3IEVycm9yKHVybCArICcgSFRUUCBzdGF0dXM6ICcgKyBzdGF0dXMp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnhociA9IHhocjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVycmJhY2soZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hc3RlckNvbmZpZy5v
blhockNvbXBsZXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcub25Y
aHJDb21wbGV0ZSh4aHIsIHVybCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7Ci0gICAg
ICAgIH07Ci0gICAgfSBlbHNlIGlmIChtYXN0ZXJDb25maWcuZW52ID09PSAncmhpbm8nIHx8ICgh
bWFzdGVyQ29uZmlnLmVudiAmJgotICAgICAgICAgICAgdHlwZW9mIFBhY2thZ2VzICE9PSAndW5k
ZWZpbmVkJyAmJiB0eXBlb2YgamF2YSAhPT0gJ3VuZGVmaW5lZCcpKSB7Ci0gICAgICAgIC8vV2h5
IEphdmEsIHdoeSBpcyB0aGlzIHNvIGF3a3dhcmQ/Ci0gICAgICAgIHRleHQuZ2V0ID0gZnVuY3Rp
b24gKHVybCwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHZhciBzdHJpbmdCdWZmZXIsIGxpbmUs
Ci0gICAgICAgICAgICAgICAgZW5jb2RpbmcgPSAidXRmLTgiLAotICAgICAgICAgICAgICAgIGZp
bGUgPSBuZXcgamF2YS5pby5GaWxlKHVybCksCi0gICAgICAgICAgICAgICAgbGluZVNlcGFyYXRv
ciA9IGphdmEubGFuZy5TeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIiksCi0gICAg
ICAgICAgICAgICAgaW5wdXQgPSBuZXcgamF2YS5pby5CdWZmZXJlZFJlYWRlcihuZXcgamF2YS5p
by5JbnB1dFN0cmVhbVJlYWRlcihuZXcgamF2YS5pby5GaWxlSW5wdXRTdHJlYW0oZmlsZSksIGVu
Y29kaW5nKSksCi0gICAgICAgICAgICAgICAgY29udGVudCA9ICcnOwotICAgICAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWZmZXIgPSBuZXcgamF2YS5sYW5nLlN0cmluZ0J1
ZmZlcigpOwotICAgICAgICAgICAgICAgIGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpOwotCi0gICAg
ICAgICAgICAgICAgLy8gQnl0ZSBPcmRlciBNYXJrIChCT00pIC0gVGhlIFVuaWNvZGUgU3RhbmRh
cmQsIHZlcnNpb24gMy4wLCBwYWdlIDMyNAotICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cu
dW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbAotCi0gICAgICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHdoZW4gd2UgdXNlIHV0Zi04LCB0aGUgQk9NIHNob3VsZCBhcHBlYXIgYXMgIkVGIEJCIEJG
IiwgYnV0IGl0IGRvZXNuJ3QgZHVlIHRvIHRoaXMgYnVnIGluIHRoZSBKREs6Ci0gICAgICAgICAg
ICAgICAgLy8gaHR0cDovL2J1Z3Muc3VuLmNvbS9idWdkYXRhYmFzZS92aWV3X2J1Zy5kbz9idWdf
aWQ9NDUwODA1OAotICAgICAgICAgICAgICAgIGlmIChsaW5lICYmIGxpbmUubGVuZ3RoKCkgJiYg
bGluZS5jaGFyQXQoMCkgPT09IDB4ZmVmZikgewotICAgICAgICAgICAgICAgICAgICAvLyBFYXQg
dGhlIEJPTSwgc2luY2Ugd2UndmUgYWxyZWFkeSBmb3VuZCB0aGUgZW5jb2Rpbmcgb24gdGhpcyBm
aWxlLAotICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2UgcGxhbiB0byBjb25jYXRlbmF0aW5n
IHRoaXMgYnVmZmVyIHdpdGggb3RoZXJzOyB0aGUgQk9NIHNob3VsZAotICAgICAgICAgICAgICAg
ICAgICAvLyBvbmx5IGFwcGVhciBhdCB0aGUgdG9wIG9mIGEgZmlsZS4KLSAgICAgICAgICAgICAg
ICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKDEpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChsaW5lICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0
cmluZ0J1ZmZlci5hcHBlbmQobGluZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUoKSkgIT09IG51bGwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3RyaW5nQnVmZmVyLmFwcGVuZChsaW5lU2VwYXJhdG9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgc3RyaW5nQnVmZmVyLmFwcGVuZChsaW5lKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgd2UgcmV0dXJuIGEgSmF2YVNjcmlwdCBz
dHJpbmcgYW5kIG5vdCBhIEphdmEgc3RyaW5nLgotICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBT
dHJpbmcoc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOyAvL1N0cmluZwotICAgICAgICAgICAgfSBm
aW5hbGx5IHsKLSAgICAgICAgICAgICAgICBpbnB1dC5jbG9zZSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgY2FsbGJhY2soY29udGVudCk7Ci0gICAgICAgIH07Ci0gICAgfSBlbHNlIGlm
IChtYXN0ZXJDb25maWcuZW52ID09PSAneHBjb25uZWN0JyB8fCAoIW1hc3RlckNvbmZpZy5lbnYg
JiYKLSAgICAgICAgICAgIHR5cGVvZiBDb21wb25lbnRzICE9PSAndW5kZWZpbmVkJyAmJiBDb21w
b25lbnRzLmNsYXNzZXMgJiYKLSAgICAgICAgICAgIENvbXBvbmVudHMuaW50ZXJmYWNlcykpIHsK
LSAgICAgICAgLy9BdmVydCB5b3VyIGdhemUhCi0gICAgICAgIENjID0gQ29tcG9uZW50cy5jbGFz
c2VzLAotICAgICAgICBDaSA9IENvbXBvbmVudHMuaW50ZXJmYWNlczsKLSAgICAgICAgQ29tcG9u
ZW50cy51dGlsc1snaW1wb3J0J10oJ3Jlc291cmNlOi8vZ3JlL21vZHVsZXMvRmlsZVV0aWxzLmpz
bScpOwotICAgICAgICB4cGNJc1dpbmRvd3MgPSAoJ0Btb3ppbGxhLm9yZy93aW5kb3dzLXJlZ2lz
dHJ5LWtleTsxJyBpbiBDYyk7Ci0KLSAgICAgICAgdGV4dC5nZXQgPSBmdW5jdGlvbiAodXJsLCBj
YWxsYmFjaykgewotICAgICAgICAgICAgdmFyIGluU3RyZWFtLCBjb252ZXJ0U3RyZWFtLCBmaWxl
T2JqLAotICAgICAgICAgICAgICAgIHJlYWREYXRhID0ge307Ci0KLSAgICAgICAgICAgIGlmICh4
cGNJc1dpbmRvd3MpIHsKLSAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvXC8vZywg
J1xcJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbGVPYmogPSBuZXcgRmlsZVV0
aWxzLkZpbGUodXJsKTsKLQotICAgICAgICAgICAgLy9YUENPTSwgeW91IHNvIGNyYXp5Ci0gICAg
ICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGluU3RyZWFtID0gQ2NbJ0Btb3ppbGxhLm9y
Zy9uZXR3b3JrL2ZpbGUtaW5wdXQtc3RyZWFtOzEnXQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLmNyZWF0ZUluc3RhbmNlKENpLm5zSUZpbGVJbnB1dFN0cmVhbSk7Ci0gICAgICAgICAgICAg
ICAgaW5TdHJlYW0uaW5pdChmaWxlT2JqLCAxLCAwLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgICAg
ICBjb252ZXJ0U3RyZWFtID0gQ2NbJ0Btb3ppbGxhLm9yZy9pbnRsL2NvbnZlcnRlci1pbnB1dC1z
dHJlYW07MSddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVJbnN0YW5j
ZShDaS5uc0lDb252ZXJ0ZXJJbnB1dFN0cmVhbSk7Ci0gICAgICAgICAgICAgICAgY29udmVydFN0
cmVhbS5pbml0KGluU3RyZWFtLCAidXRmLTgiLCBpblN0cmVhbS5hdmFpbGFibGUoKSwKLSAgICAg
ICAgICAgICAgICBDaS5uc0lDb252ZXJ0ZXJJbnB1dFN0cmVhbS5ERUZBVUxUX1JFUExBQ0VNRU5U
X0NIQVJBQ1RFUik7Ci0KLSAgICAgICAgICAgICAgICBjb252ZXJ0U3RyZWFtLnJlYWRTdHJpbmco
aW5TdHJlYW0uYXZhaWxhYmxlKCksIHJlYWREYXRhKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0
U3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgaW5TdHJlYW0uY2xvc2UoKTsKLSAgICAg
ICAgICAgICAgICBjYWxsYmFjayhyZWFkRGF0YS52YWx1ZSk7Ci0gICAgICAgICAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChmaWxlT2JqICYmIGZpbGVP
YmoucGF0aCB8fCAnJykgKyAnOiAnICsgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0g
ICAgfQotICAgIHJldHVybiB0ZXh0OwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJjZTA5YjVlM2IyMzExZDcxZTY4MGU4NjI2M2M2NmI0OWI4ZWFiNTMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9ib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy9yZXF1aXJlLmpzCisrKyAvZGV2L251bGwK
QEAgLTEsMjA1NCArMCwwIEBACi0vKiogdmltOiBldDp0cz00OnN3PTQ6c3RzPTQKLSAqIEBsaWNl
bnNlIFJlcXVpcmVKUyAyLjEuOSBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwgVGhlIERvam8gRm91
bmRhdGlvbiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQXZhaWxhYmxlIHZpYSB0aGUgTUlUIG9y
IG5ldyBCU0QgbGljZW5zZS4KLSAqIHNlZTogaHR0cDovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1
aXJlanMgZm9yIGRldGFpbHMKLSAqLwotLy9Ob3QgdXNpbmcgc3RyaWN0OiB1bmV2ZW4gc3RyaWN0
IHN1cHBvcnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVzZXMKLS8vcHJvYmxlbXMgd2l0aCBy
ZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1heSBub3QgYmUgc3RyaWN0
LgotLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5OiB0cnVlICovCi0v
Kmdsb2JhbCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQsIGltcG9ydFNjcmlwdHMsIHNldFRp
bWVvdXQsIG9wZXJhICovCi0KLXZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKLShmdW5j
dGlvbiAoZ2xvYmFsKSB7Ci0gICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFN
YWluLCBzcmMsCi0gICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3Jp
cHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCi0gICAgICAgIHZlcnNpb24gPSAnMi4xLjknLAotICAg
ICAgICBjb21tZW50UmVnRXhwID0gLyhcL1wqKFtcc1xTXSo/KVwqXC98KFteOl18XilcL1wvKC4q
KSQpL21nLAotICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChc
cypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAotICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9c
LmpzJC8sCi0gICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAotICAgICAgICBvcCA9IE9i
amVjdC5wcm90b3R5cGUsCi0gICAgICAgIG9zdHJpbmcgPSBvcC50b1N0cmluZywKLSAgICAgICAg
aGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCi0gICAgICAgIGFwID0gQXJyYXkucHJvdG90eXBl
LAotICAgICAgICBhcHNwID0gYXAuc3BsaWNlLAotICAgICAgICBpc0Jyb3dzZXIgPSAhISh0eXBl
b2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZp
bmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQpLAotICAgICAgICBpc1dlYldvcmtlciA9ICFpc0Jyb3dz
ZXIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnLAotICAgICAgICAvL1BT
MyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0IG5lZWQgdG8gd2FpdCBmb3IgY29t
cGxldGUKLSAgICAgICAgLy9zcGVjaWZpY2FsbHkuIFNlcXVlbmNlIGlzICdsb2FkaW5nJywgJ2xv
YWRlZCcsIGV4ZWN1dGlvbiwKLSAgICAgICAgLy8gdGhlbiAnY29tcGxldGUnLiBUaGUgVUEgY2hl
Y2sgaXMgdW5mb3J0dW5hdGUsIGJ1dCBub3Qgc3VyZSBob3cKLSAgICAgICAgLy90byBmZWF0dXJl
IHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCi0gICAgICAgIHJlYWR5UmVnRXhwID0gaXNC
cm93c2VyICYmIG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ1BMQVlTVEFUSU9OIDMnID8KLSAgICAg
ICAgICAgICAgICAgICAgICAvXmNvbXBsZXRlJC8gOiAvXihjb21wbGV0ZXxsb2FkZWQpJC8sCi0g
ICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAotICAgICAgICAvL09oIHRoZSB0cmFnZWR5LCBk
ZXRlY3Rpbmcgb3BlcmEuIFNlZSB0aGUgdXNhZ2Ugb2YgaXNPcGVyYSBmb3IgcmVhc29uLgotICAg
ICAgICBpc09wZXJhID0gdHlwZW9mIG9wZXJhICE9PSAndW5kZWZpbmVkJyAmJiBvcGVyYS50b1N0
cmluZygpID09PSAnW29iamVjdCBPcGVyYV0nLAotICAgICAgICBjb250ZXh0cyA9IHt9LAotICAg
ICAgICBjZmcgPSB7fSwKLSAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXSwKLSAgICAgICAgdXNl
SW50ZXJhY3RpdmUgPSBmYWxzZTsKLQotICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaXQpIHsKLSAg
ICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gaXNBcnJheShpdCkgewotICAgICAgICByZXR1cm4gb3N0cmlu
Zy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5LiBJZiB0aGUgZnVu
YyByZXR1cm5zCi0gICAgICogYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUg
bG9vcC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBlYWNoKGFyeSwgZnVuYykgewotICAgICAgICBp
ZiAoYXJ5KSB7Ci0gICAgICAgICAgICB2YXIgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBhcnkubGVuZ3RoOyBpICs9IDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1
bmMoYXJ5W2ldLCBpLCBhcnkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkgYmFja3dh
cmRzLiBJZiB0aGUgZnVuYwotICAgICAqIHJldHVybnMgYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJy
ZWFrIG91dCBvZiB0aGUgbG9vcC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBlYWNoUmV2ZXJzZShh
cnksIGZ1bmMpIHsKLSAgICAgICAgaWYgKGFyeSkgewotICAgICAgICAgICAgdmFyIGk7Ci0gICAg
ICAgICAgICBmb3IgKGkgPSBhcnkubGVuZ3RoIC0gMTsgaSA+IC0xOyBpIC09IDEpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7Ci0gICAg
ICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIHByb3ApOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IGdldE93bihvYmosIHByb3ApIHsKLSAgICAgICAgcmV0dXJuIGhhc1Byb3Aob2JqLCBwcm9wKSAm
JiBvYmpbcHJvcF07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3ljbGVzIG92ZXIgcHJvcGVy
dGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rpb24gZm9yIGVhY2gKLSAgICAgKiBw
cm9wZXJ0eSB2YWx1ZS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB0cnV0aHkgdmFsdWUsIHRo
ZW4gdGhlCi0gICAgICogaXRlcmF0aW9uIGlzIHN0b3BwZWQuCi0gICAgICovCi0gICAgZnVuY3Rp
b24gZWFjaFByb3Aob2JqLCBmdW5jKSB7Ci0gICAgICAgIHZhciBwcm9wOwotICAgICAgICBmb3Ig
KHByb3AgaW4gb2JqKSB7Ci0gICAgICAgICAgICBpZiAoaGFzUHJvcChvYmosIHByb3ApKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGZ1bmMob2JqW3Byb3BdLCBwcm9wKSkgewotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGUgZnVuY3Rpb24gdG8gbWl4IGluIHBy
b3BlcnRpZXMgZnJvbSBzb3VyY2UgaW50byB0YXJnZXQsCi0gICAgICogYnV0IG9ubHkgaWYgdGFy
Z2V0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHByb3BlcnR5IG9mIHRoZSBzYW1lIG5hbWUuCi0g
ICAgICovCi0gICAgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UsIGZvcmNlLCBkZWVwU3Ry
aW5nTWl4aW4pIHsKLSAgICAgICAgaWYgKHNvdXJjZSkgewotICAgICAgICAgICAgZWFjaFByb3Ao
c291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKLSAgICAgICAgICAgICAgICBpZiAoZm9y
Y2UgfHwgIWhhc1Byb3AodGFyZ2V0LCBwcm9wKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
ZGVlcFN0cmluZ01peGluICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0W3Byb3BdID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRbcHJvcF0sIHZhbHVlLCBmb3JjZSwg
ZGVlcFN0cmluZ01peGluKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRhcmdldDsKLSAgICB9Ci0KLSAgICAvL1NpbWlsYXIgdG8gRnVuY3Rpb24ucHJv
dG90eXBlLmJpbmQsIGJ1dCB0aGUgJ3RoaXMnIG9iamVjdCBpcyBzcGVjaWZpZWQKLSAgICAvL2Zp
cnN0LCBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gcmVhZC9maWd1cmUgb3V0IHdoYXQgJ3RoaXMnIHdp
bGwgYmUuCi0gICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7Ci0gICAgICAgIHJldHVybiBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmd1bWVudHMpOwot
ICAgICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNjcmlwdHMoKSB7Ci0gICAgICAgIHJl
dHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gZGVmYXVsdE9uRXJyb3IoZXJyKSB7Ci0gICAgICAgIHRocm93IGVycjsKLSAg
ICB9Ci0KLSAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwgdGhhdCBleHByZXNzZWQgaW4KLSAg
ICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgotICAgIGZ1bmN0aW9uIGdldEdsb2JhbCh2
YWx1ZSkgewotICAgICAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWU7
Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGcgPSBnbG9iYWw7Ci0gICAgICAgIGVhY2godmFsdWUu
c3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKLSAgICAgICAgICAgIGcgPSBnW3BhcnRdOwot
ICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIGc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
Q29uc3RydWN0cyBhbiBlcnJvciB3aXRoIGEgcG9pbnRlciB0byBhbiBVUkwgd2l0aCBtb3JlIGlu
Zm9ybWF0aW9uLgotICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZXJyb3IgSUQgdGhhdCBt
YXBzIHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCi0gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3Nh
Z2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCi0gICAgICogQHBhcmFtIHtFcnJvcn0gW2Vycl0gdGhl
IG9yaWdpbmFsIGVycm9yLCBpZiB0aGVyZSBpcyBvbmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJu
cyB7RXJyb3J9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gbWFrZUVycm9yKGlkLCBtc2csIGVyciwg
cmVxdWlyZU1vZHVsZXMpIHsKLSAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnICsgJ1xuaHR0
cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMnICsgaWQpOwotICAgICAgICBlLnJl
cXVpcmVUeXBlID0gaWQ7Ci0gICAgICAgIGUucmVxdWlyZU1vZHVsZXMgPSByZXF1aXJlTW9kdWxl
czsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgZS5vcmlnaW5hbEVycm9yID0gZXJy
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlOwotICAgIH0KLQotICAgIGlmICh0eXBlb2Yg
ZGVmaW5lICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAvL0lmIGEgZGVmaW5lIGlzIGFscmVh
ZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAotICAgICAgICAvL2RvIG5vdCBvdmVy
d3JpdGUuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodHlwZW9mIHJlcXVpcmVq
cyAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWlyZWpzKSkg
ewotICAgICAgICAgICAgLy9EbyBub3Qgb3ZlcndyaXRlIGFuZCBleGlzdGluZyByZXF1aXJlanMg
aW5zdGFuY2UuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2ZnID0g
cmVxdWlyZWpzOwotICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7Ci0gICAgfQotCi0gICAg
Ly9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKLSAgICBpZiAodHlwZW9mIHJlcXVp
cmUgIT09ICd1bmRlZmluZWQnICYmICFpc0Z1bmN0aW9uKHJlcXVpcmUpKSB7Ci0gICAgICAgIC8v
YXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KLSAgICAgICAgY2ZnID0gcmVxdWlyZTsKLSAg
ICAgICAgcmVxdWlyZSA9IHVuZGVmaW5lZDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBuZXdDb250
ZXh0KGNvbnRleHROYW1lKSB7Ci0gICAgICAgIHZhciBpbkNoZWNrTG9hZGVkLCBNb2R1bGUsIGNv
bnRleHQsIGhhbmRsZXJzLAotICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQsCi0gICAg
ICAgICAgICBjb25maWcgPSB7Ci0gICAgICAgICAgICAgICAgLy9EZWZhdWx0cy4gRG8gbm90IHNl
dCBhIGRlZmF1bHQgZm9yIG1hcAotICAgICAgICAgICAgICAgIC8vY29uZmlnIHRvIHNwZWVkIHVw
IG5vcm1hbGl6ZSgpLCB3aGljaAotICAgICAgICAgICAgICAgIC8vd2lsbCBydW4gZmFzdGVyIGlm
IHRoZXJlIGlzIG5vIGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgd2FpdFNlY29uZHM6IDcsCi0g
ICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKLSAgICAgICAgICAgICAgICBwYXRoczoge30s
Ci0gICAgICAgICAgICAgICAgcGtnczoge30sCi0gICAgICAgICAgICAgICAgc2hpbToge30sCi0g
ICAgICAgICAgICAgICAgY29uZmlnOiB7fQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHJl
Z2lzdHJ5ID0ge30sCi0gICAgICAgICAgICAvL3JlZ2lzdHJ5IG9mIGp1c3QgZW5hYmxlZCBtb2R1
bGVzLCB0byBzcGVlZAotICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBjb2RlIHdoZW4gbG90
cyBvZiBtb2R1bGVzCi0gICAgICAgICAgICAvL2FyZSByZWdpc3RlcmVkLCBidXQgbm90IGFjdGl2
YXRlZC4KLSAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeSA9IHt9LAotICAgICAgICAgICAgdW5k
ZWZFdmVudHMgPSB7fSwKLSAgICAgICAgICAgIGRlZlF1ZXVlID0gW10sCi0gICAgICAgICAgICBk
ZWZpbmVkID0ge30sCi0gICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCi0gICAgICAgICAgICBy
ZXF1aXJlQ291bnRlciA9IDEsCi0gICAgICAgICAgICB1bm5vcm1hbGl6ZWRDb3VudGVyID0gMTsK
LQotICAgICAgICAvKioKLSAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJy
YXkgb2YgcGF0aCBzZWdtZW50cy4KLSAgICAgICAgICogSXQgd2lsbCBrZWVwIGEgbGVhZGluZyBw
YXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQotICAgICAgICAgKiB0aGUgZmlyc3QgcGF0
aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcywKLSAgICAgICAgICog
d2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJl
c3VsdCwKLSAgICAgICAgICogYWxsIHBhdGhzIHRoYXQgdXNlIHRoaXMgZnVuY3Rpb24gc2hvdWxk
IGxvb2sgbm9ybWFsaXplZC4KLSAgICAgICAgICogTk9URTogdGhpcyBtZXRob2QgTU9ESUZJRVMg
dGhlIGlucHV0IGFycmF5LgotICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5
IG9mIHBhdGggc2VnbWVudHMuCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiB0cmltRG90
cyhhcnkpIHsKLSAgICAgICAgICAgIHZhciBpLCBwYXJ0OwotICAgICAgICAgICAgZm9yIChpID0g
MDsgYXJ5W2ldOyBpICs9IDEpIHsKLSAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOwotICAg
ICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgYXJ5
LnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
aSA9PT0gMSAmJiAoYXJ5WzJdID09PSAnLi4nIHx8IGFyeVswXSA9PT0gJy4uJykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vRW5kIG9mIHRoZSBsaW5lLiBLZWVwIGF0IGxlYXN0IG9uZSBu
b24tZG90Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3BhdGggc2VnbWVudCBhdCB0aGUgZnJv
bnQgc28gaXQgY2FuIGJlIG1hcHBlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy9jb3JyZWN0
bHkgdG8gZGlzay4gT3RoZXJ3aXNlLCB0aGVyZSBpcyBsaWtlbHkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vbm8gcGF0aCBtYXBwaW5nIGZvciBhIHBhdGggc3RhcnRpbmcgd2l0aCAnLi4nLgot
ICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGlzIGNhbiBzdGlsbCBmYWlsLCBidXQgY2F0Y2hl
cyB0aGUgbW9zdCByZWFzb25hYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAvL3VzZXMgb2Yg
Li4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGkg
LSAxLCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8qKgotICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtl
IC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KLSAgICAgICAgICogYSByZWFsIG5hbWUgdGhh
dCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4KLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5h
bWUgdGhlIHJlbGF0aXZlIG5hbWUKLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1l
IGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCi0gICAgICAgICAqIHRv
LgotICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5IHRoZSBtYXAgY29u
ZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCi0gICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlz
IG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KLSAgICAgICAgICogQHJldHVy
bnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCi0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlv
biBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7Ci0gICAgICAgICAgICB2YXIg
cGtnTmFtZSwgcGtnQ29uZmlnLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVu
dCwKLSAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJ
LAotICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0
KCcvJyksCi0gICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cywK
LSAgICAgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAotICAgICAgICAgICAgICAgIHN0YXJN
YXAgPSBtYXAgJiYgbWFwWycqJ107Ci0KLSAgICAgICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2
ZSBwYXRocy4KLSAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUuY2hhckF0KDApID09PSAnLicp
IHsKLSAgICAgICAgICAgICAgICAvL0lmIGhhdmUgYSBiYXNlIG5hbWUsIHRyeSB0byBub3JtYWxp
emUgYWdhaW5zdCBpdCwKLSAgICAgICAgICAgICAgICAvL290aGVyd2lzZSwgYXNzdW1lIGl0IGlz
IGEgdG9wLWxldmVsIHJlcXVpcmUgdGhhdCB3aWxsCi0gICAgICAgICAgICAgICAgLy9iZSByZWxh
dGl2ZSB0byBiYXNlVXJsIGluIHRoZSBlbmQuCi0gICAgICAgICAgICAgICAgaWYgKGJhc2VOYW1l
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24oY29uZmlnLnBrZ3MsIGJhc2VOYW1l
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgYmFzZU5hbWUgaXMgYSBwYWNr
YWdlIG5hbWUsIHRoZW4ganVzdCB0cmVhdCBpdCBhcyBvbmUKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vbmFtZSB0byBjb25jYXQgdGhlIG5hbWUgd2l0aC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMgPSBbYmFzZU5hbWVdOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9Db252ZXJ0
IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9wIG9mZiB0aGUgbGFzdCBwYXJ0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBu
b3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwotICAgICAgICAgICAgICAgICAgICAgICAgLy9tb2R1
bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdvL3RocmVlLmpzJywgYnV0IHdlIHdhbnQg
dGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgLy90
aGlzIG5vcm1hbGl6YXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFz
ZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVk
QmFzZVBhcnRzLmNvbmNhdChuYW1lLnNwbGl0KCcvJykpOwotICAgICAgICAgICAgICAgICAgICB0
cmltRG90cyhuYW1lKTsKLQotICAgICAgICAgICAgICAgICAgICAvL1NvbWUgdXNlIG9mIHBhY2th
Z2VzIG1heSB1c2UgYSAuIHBhdGggdG8gcmVmZXJlbmNlIHRoZQotICAgICAgICAgICAgICAgICAg
ICAvLydtYWluJyBtb2R1bGUgbmFtZSwgc28gbm9ybWFsaXplIGZvciB0aGF0LgotICAgICAgICAg
ICAgICAgICAgICBwa2dDb25maWcgPSBnZXRPd24oY29uZmlnLnBrZ3MsIChwa2dOYW1lID0gbmFt
ZVswXSkpOwotICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChwa2dDb25maWcgJiYgbmFtZSA9PT0gcGtnTmFtZSArICcvJyAr
IHBrZ0NvbmZpZy5tYWluKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGtnTmFt
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFt
ZS5pbmRleE9mKCcuLycpID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vIGJhc2VO
YW1lLCBzbyB0aGlzIGlzIElEIGlzIHJlc29sdmVkIHJlbGF0aXZlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHRvIGJhc2VVcmwsIHB1bGwgb2ZmIHRoZSBsZWFkaW5nIGRvdC4KLSAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9BcHBseSBtYXAgY29uZmlnIGlmIGF2YWlsYWJs
ZS4KLSAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAgJiYgKGJhc2VQYXJ0cyB8fCBzdGFy
TWFwKSkgewotICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKLQot
ICAgICAgICAgICAgICAgIGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEp
IHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFydHMuc2xpY2UoMCwg
aSkuam9pbignLycpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNlTmFtZSBzZWdtZW50
IG1hdGNoIGluIHRoZSBjb25maWcuCi0gICAgICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBq
b2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBq
IC09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93biht
YXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJykpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFz
IG9uZSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbmFtZS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUg
bmV3IHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAg
PSBtYXBWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9
IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvL0No
ZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRvIGl0LAotICAgICAg
ICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVy
IGluIGEgbWF0Y2hpbmcKLSAgICAgICAgICAgICAgICAgICAgLy9jb25maWcsIHRoZW4gZmF2b3Ig
b3ZlciB0aGlzIHN0YXIgbWFwLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1h
cCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFySSA9IGk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWZvdW5kTWFw
ICYmIGZvdW5kU3Rhck1hcCkgewotICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5k
U3Rhck1hcDsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkgewotICAgICAgICAgICAgaWYgKGlz
QnJvd3NlcikgewotICAgICAgICAgICAgICAgIGVhY2goc2NyaXB0cygpLCBmdW5jdGlvbiAoc2Ny
aXB0Tm9kZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1
dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9
PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0
Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdE5vZGUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGhh
c1BhdGhGYWxsYmFjayhpZCkgewotICAgICAgICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24o
Y29uZmlnLnBhdGhzLCBpZCk7Ci0gICAgICAgICAgICBpZiAocGF0aENvbmZpZyAmJiBpc0FycmF5
KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcubGVuZ3RoID4gMSkgewotICAgICAgICAgICAgICAg
IC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNpbmNlIGl0IGZhaWxlZCwgYW5kCi0g
ICAgICAgICAgICAgICAgLy9yZXRyeQotICAgICAgICAgICAgICAgIHBhdGhDb25maWcuc2hpZnQo
KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUudW5kZWYoaWQpOwotICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVxdWlyZShbaWRdKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vVHVybnMgYSBwbHVnaW4h
cmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCi0gICAgICAgIC8vd2l0aCB0aGUgcGx1Z2lu
IGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQotICAgICAgICAvL2RpZCBub3QgaGF2ZSBhIHBs
dWdpbiBwcmVmaXguCi0gICAgICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHsKLSAgICAg
ICAgICAgIHZhciBwcmVmaXgsCi0gICAgICAgICAgICAgICAgaW5kZXggPSBuYW1lID8gbmFtZS5p
bmRleE9mKCchJykgOiAtMTsKLSAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7Ci0gICAgICAg
ICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgICAgICAg
ICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5hbWUubGVuZ3RoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGVzIGEgbW9kdWxlIG1hcHBpbmcgdGhhdCBp
bmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUKLSAgICAgICAgICogbmFtZSwgYW5kIHBhdGgu
IElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3aWxsCi0gICAgICAgICAqIGFsc28g
bm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCi0gICAgICAgICAqCi0g
ICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBtb2R1bGUgbmFtZQotICAgICAgICAg
KiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKLSAg
ICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIG5h
bWVzLgotICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzTm9ybWFsaXplZDogaXMgdGhlIElE
IGFscmVhZHkgbm9ybWFsaXplZC4KLSAgICAgICAgICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2Fs
bCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KLSAgICAgICAgICogQHBhcmFtIHtC
b29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIElELgotICAgICAg
ICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBhIGRlcGVuZGVuY3ku
Ci0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9Ci0gICAgICAgICAqLwot
ICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNO
b3JtYWxpemVkLCBhcHBseU1hcCkgewotICAgICAgICAgICAgdmFyIHVybCwgcGx1Z2luTW9kdWxl
LCBzdWZmaXgsIG5hbWVQYXJ0cywKLSAgICAgICAgICAgICAgICBwcmVmaXggPSBudWxsLAotICAg
ICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVN
YXAubmFtZSA6IG51bGwsCi0gICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lID0gbmFtZSwKLSAg
ICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCi0gICAgICAgICAgICAgICAgbm9ybWFsaXpl
ZE5hbWUgPSAnJzsKLQotICAgICAgICAgICAgLy9JZiBubyBuYW1lLCB0aGVuIGl0IG1lYW5zIGl0
IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgotICAgICAgICAgICAgLy9pbnRlcm5hbCBu
YW1lLgotICAgICAgICAgICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaXNEZWZpbmUg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIg
Kz0gMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJl
Zml4KG5hbWUpOwotICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwotICAgICAgICAg
ICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKLQotICAgICAgICAgICAgaWYgKHByZWZpeCkgewotICAg
ICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHBhcmVudE5hbWUsIGFwcGx5
TWFwKTsKLSAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJl
Zml4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2
ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KLSAgICAgICAgICAgIGlmIChuYW1lKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
cGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBwbHVnaW5Nb2R1bGUubm9y
bWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUsIHBhcmVu
dE5hbWUsIGFwcGx5TWFwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vQSByZWd1bGFyIG1vZHVsZS4KLSAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFt
ZSwgYXBwbHlNYXApOwotCi0gICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplZCBuYW1lIG1h
eSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZwotICAgICAgICAgICAgICAgICAgICAv
L2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFsdWVzIG11c3QKLSAg
ICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIHNvIGRvIG5vdCBuZWVk
IHRvIHJlZG8gdGhhdCBwYXJ0LgotICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxp
dFByZWZpeChub3JtYWxpemVkTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IG5h
bWVQYXJ0c1swXTsKLSAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lUGFy
dHNbMV07Ci0gICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplZE5hbWUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9JZiB0aGUg
aWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpZiBpdCBuZWVkcwot
ICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEgdW5pcXVlIElEIHNv
IHR3byBtYXRjaGluZyByZWxhdGl2ZQotICAgICAgICAgICAgLy9pZHMgdGhhdCBtYXkgY29uZmxp
Y3QgY2FuIGJlIHNlcGFyYXRlLgotICAgICAgICAgICAgc3VmZml4ID0gcHJlZml4ICYmICFwbHVn
aW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/Ci0gICAgICAgICAgICAgICAgICAgICAnX3Vubm9y
bWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6Ci0gICAgICAgICAgICAgICAg
ICAgICAnJzsKLQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICBwcmVmaXg6
IHByZWZpeCwKLSAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSwKLSAgICAgICAg
ICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKLSAgICAgICAgICAgICAgICB1bm5v
cm1hbGl6ZWQ6ICEhc3VmZml4LAotICAgICAgICAgICAgICAgIHVybDogdXJsLAotICAgICAgICAg
ICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAotICAgICAgICAgICAgICAgIGlzRGVm
aW5lOiBpc0RlZmluZSwKLSAgICAgICAgICAgICAgICBpZDogKHByZWZpeCA/Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkgKyBzdWZmaXgKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRNb2R1bGUoZGVwTWFwKSB7Ci0gICAgICAg
ICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCi0gICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJl
Z2lzdHJ5LCBpZCk7Ci0KLSAgICAgICAgICAgIGlmICghbW9kKSB7Ci0gICAgICAgICAgICAgICAg
bW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRleHQuTW9kdWxlKGRlcE1hcCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtb2Q7Ci0gICAgICAgIH0KLQotICAgICAgICBm
dW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7Ci0gICAgICAgICAgICB2YXIgaWQgPSBkZXBN
YXAuaWQsCi0gICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7Ci0KLSAg
ICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAmJgotICAgICAgICAgICAgICAgICAg
ICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgewotICAgICAgICAgICAgICAgIGlm
IChuYW1lID09PSAnZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICAgICAgZm4oZGVmaW5lZFtp
ZF0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZC5l
cnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZuKG1vZC5l
cnJvcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbW9k
Lm9uKG5hbWUsIGZuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykgewotICAgICAgICAg
ICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKLSAgICAgICAgICAgICAgICBub3RpZmll
ZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoZXJyYmFjaykgewotICAgICAgICAgICAgICAg
IGVycmJhY2soZXJyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZWFj
aChpZHMsIGZ1bmN0aW9uIChpZCkgewotICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0
T3duKHJlZ2lzdHJ5LCBpZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMgdGlt
ZW91dCBjaGVja3MuCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2QuZXJyb3IgPSBlcnI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIW5vdGlmaWVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9y
KGVycik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLyoqCi0gICAgICAgICAqIEludGVybmFsIG1ldGhvZCB0byB0cmFuc2ZlciBnbG9iYWxR
dWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncwotICAgICAgICAgKiBkZWZRdWV1ZS4KLSAgICAg
ICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxRdWV1ZSgpIHsKLSAgICAgICAgICAg
IC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhlIGNvbnRleHQncyBk
ZWZRdWV1ZQotICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIC8vQXJyYXkgc3BsaWNlIGluIHRoZSB2YWx1ZXMgc2luY2UgdGhlIGNvbnRleHQg
Y29kZSBoYXMgYQotICAgICAgICAgICAgICAgIC8vbG9jYWwgdmFyIHJlZiB0byBkZWZRdWV1ZSwg
c28gY2Fubm90IGp1c3QgcmVhc3NpZ24gdGhlIG9uZQotICAgICAgICAgICAgICAgIC8vb24gY29u
dGV4dC4KLSAgICAgICAgICAgICAgICBhcHNwLmFwcGx5KGRlZlF1ZXVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgW2RlZlF1ZXVlLmxlbmd0aCAtIDEsIDBdLmNvbmNhdChnbG9iYWxEZWZR
dWV1ZSkpOwotICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBoYW5kbGVycyA9IHsKLSAgICAgICAgICAgICdyZXF1
aXJlJzogZnVuY3Rpb24gKG1vZCkgewotICAgICAgICAgICAgICAgIGlmIChtb2QucmVxdWlyZSkg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QucmVxdWlyZSA9IGNv
bnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2QpIHsKLSAgICAgICAg
ICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAobW9k
Lm1hcC5pc0RlZmluZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV4cG9ydHMpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QuZXhwb3J0czsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4
cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdtb2R1bGUn
OiBmdW5jdGlvbiAobW9kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZC5tb2R1bGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QubW9kdWxlID0gewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICB1cmk6IG1vZC5tYXAudXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IGdldE93bihjb25maWcucGtncywgbW9kLm1hcC5p
ZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHBhY2thZ2VzLCBvbmx5IHN1
cHBvcnQgY29uZmlnIHRhcmdldGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQg
dGhlIG1haW4gbW9kdWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBwa2cgPyBn
ZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCArICcvJyArIHBrZy5tYWluKSA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE93bihjb25maWcuY29uZmlnLCBt
b2QubWFwLmlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIGMgfHwge307
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgZXhw
b3J0czogZGVmaW5lZFttb2QubWFwLmlkXQotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZnVuY3Rp
b24gY2xlYW5SZWdpc3RyeShpZCkgewotICAgICAgICAgICAgLy9DbGVhbiB1cCBtYWNoaW5lcnkg
dXNlZCBmb3Igd2FpdGluZyBtb2R1bGVzLgotICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W2lk
XTsKLSAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJvY2Vzc2VkKSB7Ci0g
ICAgICAgICAgICB2YXIgaWQgPSBtb2QubWFwLmlkOwotCi0gICAgICAgICAgICBpZiAobW9kLmVy
cm9yKSB7Ci0gICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgbW9kLmVycm9yKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHJhY2VkW2lkXSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgZWFjaChtb2QuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgewot
ICAgICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBNYXAuaWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2ZSBub3QgY29tcGxldGVkCi0gICAg
ICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5
LAotICAgICAgICAgICAgICAgICAgICAvL2FuZCBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBtYXRj
aGVkIHVwCi0gICAgICAgICAgICAgICAgICAgIC8vaW4gdGhlIG1vZHVsZSBhbHJlYWR5LgotICAg
ICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtpXSAmJiAhcHJvY2Vz
c2VkW2RlcElkXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldE93bih0cmFjZWQs
IGRlcElkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5kZWZpbmVEZXAoaSwg
ZGVmaW5lZFtkZXBJZF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5jaGVjaygp
OyAvL3Bhc3MgZmFsc2U/Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVwLCB0cmFjZWQsIHByb2Nlc3NlZCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRdID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKCkg
ewotICAgICAgICAgICAgdmFyIG1hcCwgbW9kSWQsIGVyciwgdXNpbmdQYXRoRmFsbGJhY2ssCi0g
ICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNvbmRzICogMTAwMCwK
LSAgICAgICAgICAgICAgICAvL0l0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdGhlIHdhaXQgaW50
ZXJ2YWwgYnkgdXNpbmcgd2FpdFNlY29uZHMgb2YgMC4KLSAgICAgICAgICAgICAgICBleHBpcmVk
ID0gd2FpdEludGVydmFsICYmIChjb250ZXh0LnN0YXJ0VGltZSArIHdhaXRJbnRlcnZhbCkgPCBu
ZXcgRGF0ZSgpLmdldFRpbWUoKSwKLSAgICAgICAgICAgICAgICBub0xvYWRzID0gW10sCi0gICAg
ICAgICAgICAgICAgcmVxQ2FsbHMgPSBbXSwKLSAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcg
PSBmYWxzZSwKLSAgICAgICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRydWU7Ci0KLSAgICAg
ICAgICAgIC8vRG8gbm90IGJvdGhlciBpZiB0aGlzIGNhbGwgd2FzIGEgcmVzdWx0IG9mIGEgY3lj
bGUgYnJlYWsuCi0gICAgICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgewotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9
IHRydWU7Ci0KLSAgICAgICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBt
b2R1bGVzLgotICAgICAgICAgICAgZWFjaFByb3AoZW5hYmxlZFJlZ2lzdHJ5LCBmdW5jdGlvbiAo
bW9kKSB7Ci0gICAgICAgICAgICAgICAgbWFwID0gbW9kLm1hcDsKLSAgICAgICAgICAgICAgICBt
b2RJZCA9IG1hcC5pZDsKLQotICAgICAgICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUg
bm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCi0gICAgICAgICAgICAgICAgaWYgKCFtb2Qu
ZW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICghbW9kLmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1v
ZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMgbm90Ci0gICAgICAgICAgICAgICAg
ICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0LgotICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5wdXNoKG1vZElkKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9kSWQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb2Qu
aW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbWFwLnByZWZpeCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTm8gcmVhc29u
IHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0aG91Z2gsIGtlZXAgZ29pbmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBiZSB0aGF0IGEgcGx1
Z2luIHJlc291cmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9u
IGEgbm9uLXBsdWdpbiBjeWNsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KG5lZWRDeWNsZUNoZWNrID0gZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMubGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2YgdW5sb2FkZWQgbW9k
dWxlcy4KLSAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0
aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7Ci0gICAgICAg
ICAgICAgICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5jb250ZXh0TmFtZTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KLSAgICAgICAgICAgIGlmIChuZWVk
Q3ljbGVDaGVjaykgewotICAgICAgICAgICAgICAgIGVhY2gocmVxQ2FsbHMsIGZ1bmN0aW9uICht
b2QpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9LCB7fSk7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vSWYgc3RpbGwg
d2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCi0gICAg
ICAgICAgICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3VyY2UsIG9yIHRoZXJlIGFyZSBzdGls
bCBvdXRzdGFuZGluZwotICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1c3QgdHJ5IGJhY2sg
bGF0ZXIuCi0gICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAm
JiBzdGlsbExvYWRpbmcpIHsKLSAgICAgICAgICAgICAgICAvL1NvbWV0aGluZyBpcyBzdGlsbCB3
YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25seQotICAgICAgICAgICAgICAgIC8v
aWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KLSAgICAgICAgICAgICAgICBp
ZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gc2V0VGltZW91dChm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJ
ZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwotICAgICAgICAg
ICAgICAgICAgICB9LCA1MCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBN
b2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7Ci0gICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93
bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKLSAgICAgICAgICAgIHRoaXMubWFwID0gbWFw
OwotICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtYXAuaWQpOwot
ICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107Ci0gICAgICAgICAgICB0aGlzLmRlcE1h
cHMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwotICAgICAgICAgICAg
dGhpcy5wbHVnaW5NYXBzID0ge307Ci0gICAgICAgICAgICB0aGlzLmRlcENvdW50ID0gMDsKLQot
ICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQotICAgICAgICAgICAgICAg
dGhpcy5kZXBNYXBzID0gW10sCi0gICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQsIHRoaXMuZmV0
Y2hlZAotICAgICAgICAgICAgKi8KLSAgICAgICAgfTsKLQotICAgICAgICBNb2R1bGUucHJvdG90
eXBlID0gewotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGRlcE1hcHMsIGZhY3RvcnksIGVy
cmJhY2ssIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7
fTsKLQotICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1vcmUgaW5pdHMgaWYgYWxyZWFkeSBk
b25lLiBDYW4gaGFwcGVuIGlmIHRoZXJlCi0gICAgICAgICAgICAgICAgLy9hcmUgbXVsdGlwbGUg
ZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90Ci0gICAgICAgICAg
ICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVj
dGVkLgotICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRlZCkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhpcy5m
YWN0b3J5ID0gZmFjdG9yeTsKLQotICAgICAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlzIG1vZHVsZS4KLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9yIGxpc3RlbmVycwot
ICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0
byBwYXNzIHRvIHRoZSBkZXBzLgotICAgICAgICAgICAgICAgICAgICBlcnJiYWNrID0gYmluZCh0
aGlzLCBmdW5jdGlvbiAoZXJyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQo
J2Vycm9yJywgZXJyKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXks
IHNvIHRoYXQKLSAgICAgICAgICAgICAgICAvL3NvdXJjZSBpbnB1dHMgYXJlIG5vdCBtb2RpZmll
ZC4gRm9yIGV4YW1wbGUKLSAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBzIGFyZSBwYXNzZWQg
aW4gaGVyZSBkaXJlY3RseSwgYW5kCi0gICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBt
b2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKLSAgICAgICAgICAgICAgICAvL3dvdWxk
IGFmZmVjdCB0aGF0IGNvbmZpZy4KLSAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBkZXBN
YXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmVycmJhY2sg
PSBlcnJiYWNrOwotCi0gICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMg
YmUgaW5pdGlhbGl6ZWQKLSAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7Ci0KLSAg
ICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwotCi0gICAgICAgICAg
ICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxlIGluIGVuYWJsZWQg
bW9kZSwKLSAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1h
cmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAotICAgICAgICAgICAgICAgIC8vdGhlIGRlcGVuZGVu
Y2llcyBhcmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2FsbGVkLiBTbwotICAgICAgICAgICAg
ICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBlbmRlbmNpZXMgYXMg
ZW5hYmxlZC4KLSAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5h
YmxlZCkgewotICAgICAgICAgICAgICAgICAgICAvL0VuYWJsZSB0aGlzIG1vZHVsZSBhbmQgZGVw
ZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0aGlzLmNoZWNrKCkK
LSAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwg
ZGVwRXhwb3J0cykgewotICAgICAgICAgICAgICAgIC8vQmVjYXVzZSBvZiBjeWNsZXMsIGRlZmlu
ZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4KLSAgICAgICAgICAgICAgICAvL2V4cG9ydCBjYW4gYmUg
Y2FsbGVkIG1vcmUgdGhhbiBvbmNlLgotICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRj
aGVkW2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZFtpXSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBmZXRjaDogZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aGlzLmZldGNoZWQgPSB0
cnVlOwotCi0gICAgICAgICAgICAgICAgY29udGV4dC5zdGFydFRpbWUgPSAobmV3IERhdGUoKSku
Z2V0VGltZSgpOwotCi0gICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOwotCi0gICAg
ICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4gbWFuYWdlZCByZXNv
dXJjZSwKLSAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93Lgot
ICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgewotICAgICAgICAgICAgICAgICAgICAgICAgZW5h
YmxlQnVpbGRDYWxsYmFjazogdHJ1ZQotICAgICAgICAgICAgICAgICAgICB9KSh0aGlzLnNoaW0u
ZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGxvYWQ6IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5tYXAudXJsOwotCi0g
ICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCi0gICAgICAgICAgICAgICAgaWYg
KCF1cmxGZXRjaGVkW3VybF0pIHsKLSAgICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxd
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkKHRoaXMubWFwLmlkLCB1
cmwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5l
IGl0c2VsZiwgYW5kIGlmIHNvLAotICAgICAgICAgICAgICogZGVmaW5lIGl0LgotICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAg
IGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBlcnIs
IGNqc01vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKLSAgICAg
ICAgICAgICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVwRXhwb3J0cywKLSAgICAgICAgICAg
ICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKLSAgICAgICAgICAgICAgICAgICAgZmFj
dG9yeSA9IHRoaXMuZmFjdG9yeTsKLQotICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0ZWQp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAodGhpcy5lcnJvcikgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vy
cm9yJywgdGhpcy5lcnJvcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZp
bmluZykgewotICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0b3J5IGNvdWxkIHRyaWdnZXIg
YW5vdGhlciByZXF1aXJlIGNhbGwKLSAgICAgICAgICAgICAgICAgICAgLy90aGF0IHdvdWxkIHJl
c3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bwotICAgICAgICAgICAgICAgICAgICAvL2Rl
ZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKLSAgICAgICAgICAg
ICAgICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29yay4KLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVy
cm9yLiBIb3dldmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25seSBkbyBpdCBm
b3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1cmVzIGluCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVpciBjYWxsYmFja3MgKCM2OTkpLiBIb3dldmVy
IGlmIGEgZ2xvYmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbkVycm9yIGlzIHNl
dCwgdXNlIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmV2ZW50
cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxLm9uRXJyb3IgIT09IGRlZmF1bHRPbkVycm9yKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4
cG9ydHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhl
Y0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAu
aXNEZWZpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBzZXR0aW5n
IGV4cG9ydHMgdmlhICdtb2R1bGUnIGlzIGluIHBsYXksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vZmF2b3IgdGhhdCBvdmVyIHJldHVybiB2YWx1ZSBhbmQgZXhwb3J0cy4gQWZ0
ZXIgdGhhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mYXZvciBhIG5vbi11
bmRlZmluZWQgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cyB1c2UuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNqc01vZHVsZSA9IHRoaXMubW9kdWxlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlLmV4cG9ydHMgIT09IHVuZGVmaW5lZCAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIGl0IGlzIG5v
dCBhbHJlYWR5IHRoZSBleHBvcnRzIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2pzTW9kdWxlLmV4cG9ydHMgIT09IHRoaXMuZXhwb3J0cykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNqc01vZHVsZS5leHBvcnRz
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4cG9ydHMgPT09
IHVuZGVmaW5lZCAmJiB0aGlzLnVzaW5nRXhwb3J0cykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy9leHBvcnRzIGFscmVhZHkgc2V0IHRoZSBkZWZpbmVkIHZhbHVlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0
czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNYXAgPSB0aGlzLm1hcDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gdGhp
cy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVsbDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVm
aW5lJyA6ICdyZXF1aXJlJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG9uRXJyb3IoKHRoaXMuZXJyb3IgPSBlcnIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNlTG9hZCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25SZXNvdXJjZUxvYWQoY29udGV4dCwg
dGhpcy5tYXAsIHRoaXMuZGVwTWFwcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL0Ns
ZWFuIHVwCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vRmluaXNoZWQgdGhlIGRlZmluZSBzdGFn
ZS4gQWxsb3cgY2FsbGluZyBjaGVjayBhZ2FpbgotICAgICAgICAgICAgICAgICAgICAvL3RvIGFs
bG93IGRlZmluZSBub3RpZmljYXRpb25zIGJlbG93IGluIHRoZSBjYXNlIG9mIGEKLSAgICAgICAg
ICAgICAgICAgICAgLy9jeWNsZS4KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9
IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmluZWQgJiYgIXRoaXMu
ZGVmaW5lRW1pdHRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0
dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVmaW5lZCcs
IHRoaXMuZXhwb3J0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXRD
b21wbGV0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXAsCi0gICAgICAgICAgICAgICAg
ICAgIGlkID0gbWFwLmlkLAotICAgICAgICAgICAgICAgICAgICAvL01hcCBhbHJlYWR5IG5vcm1h
bGl6ZWQgdGhlIHByZWZpeC4KLSAgICAgICAgICAgICAgICAgICAgcGx1Z2luTWFwID0gbWFrZU1v
ZHVsZU1hcChtYXAucHJlZml4KTsKLQotICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEg
ZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0Ci0gICAgICAgICAgICAgICAgLy9jYW4g
YmUgdHJhY2VkIGZvciBjeWNsZXMuCi0gICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2go
cGx1Z2luTWFwKTsKLQotICAgICAgICAgICAgICAgIG9uKHBsdWdpbk1hcCwgJ2RlZmluZWQnLCBi
aW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGxv
YWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6ZWRNb2QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lID0gdGhpcy5tYXAubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5h
bWUgPSB0aGlzLm1hcC5wYXJlbnRNYXAgPyB0aGlzLm1hcC5wYXJlbnRNYXAubmFtZSA6IG51bGws
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1
aXJlKG1hcC5wYXJlbnRNYXAsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVC
dWlsZENhbGxiYWNrOiB0cnVlCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgICAgICAgICAvL0lmIGN1cnJlbnQgbWFwIGlzIG5vdCBub3JtYWxpemVkLCB3YWl0IGZv
ciB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1lIHRvIGxvYWQgaW5z
dGVhZCBvZiBjb250aW51aW5nLgotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5u
b3JtYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQg
aWYgdGhlIHBsdWdpbiBhbGxvd3MgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1
Z2luLm5vcm1hbGl6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVn
aW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgdHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFuZCBuYW1lIHNob3Vs
ZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9ybWFsaXplZE1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCArICchJyAr
IG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLm1hcC5wYXJlbnRNYXApOwotICAgICAgICAgICAgICAgICAgICAgICAgb24obm9y
bWFsaXplZE1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lZCcsIGJpbmQo
dGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5
LCBub3JtYWxpemVkTWFwLmlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxp
emVkTW9kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBk
ZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rp
b24gKGVycikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0
KCdlcnJvcicsIGVycik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9ybWFsaXplZE1vZC5lbmFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJu
IHZhbHVlOyB9LCBudWxsLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDog
dHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5kKHRoaXMsIGZ1bmN0aW9u
IChlcnIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBtb2R1bGVzIGZvciB0aGlzIG1vZHVsZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHJlc29s
dmVkIG90aGVyd2lzZSBub3cuCi0gICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdp
c3RyeSwgZnVuY3Rpb24gKG1vZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
b2QubWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFsaXplZCcpID09PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9kLm1hcC5pZCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIHRvIGxvYWQgb3Ro
ZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQotICAgICAgICAgICAgICAgICAgICAv
L2NvbnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhlIGxvYWQuCi0gICAgICAgICAgICAgICAg
ICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0ZXh0LCB0ZXh0QWx0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCi0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IG1hcC5uYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAobW9kdWxlTmFtZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2
ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEuMCwgc3VwcG9ydCBqdXN0
IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJjZS4gU3RpbGwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBvbGQgc3R5bGUgb2YgcGFzc2luZyBtb2R1
bGVOYW1lIGJ1dCBkaXNjYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICAvL3RoYXQgbW9kdWxl
TmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleHRBbHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4
dEFsdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQgbWF0Y2hpbmcgZm9yIElFIGZvciBhbnkg
ZGVmaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGluIHRoZSB0ZXh0LCB0aGVu
IHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0ludGVyYWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJh
Y3RpdmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5IGNyZWF0aW5nIGEgbW9kdWxlIGluc3Rh
bmNlIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
L1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21vZHVsZU5hbWVdID0gY29uZmlnLmNvbmZp
Z1tpZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmV4ZWModGV4dCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdmcm9tdGV4dGV2YWwnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb21UZXh0IGV2YWwgZm9y
ICcgKyBpZCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcg
ZmFpbGVkOiAnICsgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRd
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNJbnRlcmFjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUlu
dGVyYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgcGx1Z2lu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1vZHVsZSB0byB0aGUgdmFsdWUgZm9yIHRo
aXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UgSUQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFyZW50TmFtZSBoZXJl
IHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKLSAgICAgICAgICAgICAg
ICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmluZyB3aXRoIG5vIHBhdGggdGhhdCBhY3R1
YWxseSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAvL3JlZmVyZW5jZSB0aGUgcGFyZW50
TmFtZSdzIHBhdGguCi0gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKG1hcC5uYW1lLCBs
b2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgfSkpOwotCi0gICAg
ICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlkXSA9IHBsdWdpbk1hcDsKLSAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
ICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0gPSB0aGlzOwotICAgICAgICAgICAgICAg
IHRoaXMuZW5hYmxlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAvL1NldCBmbGFnIG1lbnRp
b25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAotICAgICAgICAgICAgICAgIC8vc28g
dGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tzCi0gICAgICAgICAg
ICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0cmlnZ2VyIGluYWR2ZXJ0ZW50IGxvYWQK
LSAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50IHN0aWxsIGJlaW5nIHplcm8uCi0g
ICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAv
L0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKLSAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFw
cywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBpZCwgbW9kLCBoYW5kbGVyOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
ZGVwTWFwID09PSAnc3RyaW5nJykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9EZXBlbmRl
bmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRlcE1hcAotICAgICAgICAgICAgICAgICAg
ICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWFwLmlzRGVmaW5lID8gdGhpcy5tYXAg
OiB0aGlzLm1hcC5wYXJlbnRNYXApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmRlcE1hcHNbaV0gPSBkZXBNYXA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIg
PSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChoYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBv
cnRzW2ldID0gaGFuZGxlcih0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZGVwQ291bnQgKz0gMTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFw
LCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBvcnRzKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycmJhY2spIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhp
cywgdGhpcy5lcnJiYWNrKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZCA9IGRlcE1hcC5pZDsKLSAgICAg
ICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vU2tpcCBzcGVjaWFsIG1vZHVsZXMgbGlrZSAncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVs
ZScKLSAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVuYWJsZSBpZiBpdCBp
cyBhbHJlYWR5IGVuYWJsZWQsCi0gICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0YW50IGluIGNp
cmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJv
cChoYW5kbGVycywgaWQpICYmIG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAgICAgICAgICAvL0VuYWJsZSBl
YWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KLSAgICAgICAgICAgICAgICAvL2EgZGVwZW5kZW5j
eQotICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywgYmluZCh0aGlzLCBm
dW5jdGlvbiAocGx1Z2luTWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRP
d24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtb2Qg
JiYgIW1vZC5lbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJs
ZShwbHVnaW5NYXAsIHRoaXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSkpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZhbHNlOwotCi0gICAg
ICAgICAgICAgICAgdGhpcy5jaGVjaygpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
b246IGZ1bmN0aW9uIChuYW1lLCBjYikgewotICAgICAgICAgICAgICAgIHZhciBjYnMgPSB0aGlz
LmV2ZW50c1tuYW1lXTsKLSAgICAgICAgICAgICAgICBpZiAoIWNicykgewotICAgICAgICAgICAg
ICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBjYnMucHVzaChjYik7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICBlbWl0OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7Ci0gICAgICAgICAgICAgICAgZWFjaCh0
aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNi
KGV2dCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09
ICdlcnJvcicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0aGUgZXJyb3IgaGFu
ZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKLSAgICAgICAgICAgICAgICAgICAgLy90aGUgbGlz
dGVuZXJzLCBzaW5jZSB0aGlzIGJyb2tlbiBNb2R1bGUgaW5zdGFuY2UKLSAgICAgICAgICAgICAg
ICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJlZ2lzdHJ5LgotICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxH
ZXRNb2R1bGUoYXJncykgewotICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMgYWxyZWFkeSBkZWZp
bmVkLgotICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGFyZ3NbMF0pKSB7Ci0gICAg
ICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwgbnVsbCwgdHJ1ZSkp
LmluaXQoYXJnc1sxXSwgYXJnc1syXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1lLCBpZU5hbWUpIHsK
LSAgICAgICAgICAgIC8vRmF2b3IgZGV0YWNoRXZlbnQgYmVjYXVzZSBvZiBJRTkKLSAgICAgICAg
ICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVyIGNvbW1lbnQgZWxz
ZXdoZXJlCi0gICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KLSAgICAgICAgICAgIGlmIChub2Rl
LmRldGFjaEV2ZW50ICYmICFpc09wZXJhKSB7Ci0gICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJ
RS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYmUKLSAgICAgICAg
ICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgotICAgICAgICAgICAgICAgIGlmIChpZU5hbWUpIHsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUsIGZ1bmMpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbm9k
ZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHaXZlbiBhbiBldmVudCBmcm9t
IGEgc2NyaXB0IG5vZGUsIGdldCB0aGUgcmVxdWlyZWpzIGluZm8gZnJvbSBpdCwKLSAgICAgICAg
ICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBub2RlLgotICAg
ICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKLSAgICAgICAgICogQHJldHVybnMge09iamVjdH0K
LSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEoZXZ0KSB7Ci0gICAg
ICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVm
b3ggMi4wJ3Mgc2FrZS4gTm90Ci0gICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBi
ZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKLSAgICAgICAgICAgIC8v
dG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCi0gICAgICAgICAgICB2YXIgbm9kZSA9
IGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50OwotCi0gICAgICAgICAgICAvL1Jl
bW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KLSAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVy
KG5vZGUsIGNvbnRleHQub25TY3JpcHRMb2FkLCAnbG9hZCcsICdvbnJlYWR5c3RhdGVjaGFuZ2Un
KTsKLSAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRFcnJv
ciwgJ2Vycm9yJyk7Ci0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgbm9k
ZTogbm9kZSwKLSAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgn
ZGF0YS1yZXF1aXJlbW9kdWxlJykKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBpbnRha2VEZWZpbmVzKCkgewotICAgICAgICAgICAgdmFyIGFyZ3M7Ci0KLSAg
ICAgICAgICAgIC8vQW55IGRlZmluZWQgbW9kdWxlcyBpbiB0aGUgZ2xvYmFsIHF1ZXVlLCBpbnRh
a2UgdGhlbSBub3cuCi0gICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKLQotICAgICAgICAg
ICAgLy9NYWtlIHN1cmUgYW55IHJlbWFpbmluZyBkZWZRdWV1ZSBpdGVtcyBnZXQgcHJvcGVybHkg
cHJvY2Vzc2VkLgotICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwotICAgICAgICAgICAgICAgIGlmIChh
cmdzWzBdID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1h
a2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxl
OiAnICsgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwgZGVwcywgZmFjdG9yeS4gU2hvdWxk
IGJlIG5vcm1hbGl6ZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lKCkgZnVu
Y3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29udGV4dCA9
IHsKLSAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLAotICAgICAgICAgICAgY29udGV4dE5hbWU6
IGNvbnRleHROYW1lLAotICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAotICAgICAgICAg
ICAgZGVmaW5lZDogZGVmaW5lZCwKLSAgICAgICAgICAgIHVybEZldGNoZWQ6IHVybEZldGNoZWQs
Ci0gICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCi0gICAgICAgICAgICBNb2R1bGU6IE1v
ZHVsZSwKLSAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCi0gICAgICAg
ICAgICBuZXh0VGljazogcmVxLm5leHRUaWNrLAotICAgICAgICAgICAgb25FcnJvcjogb25FcnJv
ciwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBTZXQgYSBjb25maWd1cmF0aW9u
IGZvciB0aGUgY29udGV4dC4KLSAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29u
ZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNv
bmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgewotICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRo
ZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KLSAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VV
cmwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNoYXJBdChjZmcuYmFz
ZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjZmcu
YmFzZVVybCArPSAnLyc7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAvL1NhdmUgb2ZmIHRoZSBwYXRocyBhbmQgcGFja2FnZXMgc2lu
Y2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKLSAgICAgICAgICAgICAgICAvL3Ro
ZXkgYXJlIGFkZGl0aXZlLgotICAgICAgICAgICAgICAgIHZhciBwa2dzID0gY29uZmlnLnBrZ3Ms
Ci0gICAgICAgICAgICAgICAgICAgIHNoaW0gPSBjb25maWcuc2hpbSwKLSAgICAgICAgICAgICAg
ICAgICAgb2JqcyA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiB0cnVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgbWFwOiB0cnVlCi0gICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBl
YWNoUHJvcChjZmcsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAob2Jqc1twcm9wXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09
ICdtYXAnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWcubWFwKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5tYXAgPSB7fTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4
aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1tw
cm9wXSwgdmFsdWUsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3Bd
ID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQotICAgICAgICAgICAgICAgIGlmIChjZmcuc2hp
bSkgewotICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuc2hpbSwgZnVuY3Rpb24gKHZh
bHVlLCBpZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIHN0cnVj
dHVyZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlcHM6IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFs
dWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0ZuKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwb3J0c0ZuID0gY29udGV4dC5tYWtlU2hpbUV4
cG9ydHModmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbmZpZy5zaGltID0gc2hpbTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvL0FkanVzdCBwYWNrYWdlcyBpZiBuZWNlc3NhcnkuCi0gICAgICAg
ICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgewotICAgICAgICAgICAgICAgICAgICBlYWNoKGNm
Zy5wYWNrYWdlcywgZnVuY3Rpb24gKHBrZ09iaikgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGxvY2F0aW9uOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBwa2dPYmogPSB0eXBlb2Yg
cGtnT2JqID09PSAnc3RyaW5nJyA/IHsgbmFtZTogcGtnT2JqIH0gOiBwa2dPYmo7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBrZ09iai5sb2NhdGlvbjsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy9DcmVhdGUgYSBicmFuZCBuZXcgb2JqZWN0IG9uIHBrZ3MsIHNpbmNl
IGN1cnJlbnRQYWNrYWdlcyBjYW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vYmUgcGFzc2Vk
IGluIGFnYWluLCBhbmQgY29uZmlnLnBrZ3MgaXMgdGhlIGludGVybmFsIHRyYW5zZm9ybWVkCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvL3N0YXRlIGZvciBhbGwgcGFja2FnZSBjb25maWdzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dPYmoubmFtZV0gPSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZTogcGtnT2JqLm5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uIHx8IHBrZ09iai5uYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90IGluIG1haW4sIHNvIG1haW4gcGF0
aHMgYXJlIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgcmVt
b3ZlIGFueSB0cmFpbGluZyAuanMsIHNpbmNlIGRpZmZlcmVudCBwYWNrYWdlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zOiBzb21l
IHVzZSBhIG1vZHVsZSBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc29tZSB1
c2UgYSBmaWxlIG5hbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogKHBrZ09i
ai5tYWluIHx8ICdtYWluJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVw
bGFjZShjdXJyRGlyUmVnRXhwLCAnJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpCi0gICAgICAgICAgICAgICAgICAgICAgICB9
OwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICAvL0RvbmUg
d2l0aCBtb2RpZmljYXRpb25zLCBhc3NpbmcgcGFja2FnZXMgYmFjayB0byBjb250ZXh0IGNvbmZp
ZwotICAgICAgICAgICAgICAgICAgICBjb25maWcucGtncyA9IHBrZ3M7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBhcmUgYW55ICJ3YWl0aW5nIHRvIGV4
ZWN1dGUiIG1vZHVsZXMgaW4gdGhlIHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgIC8vdXBkYXRl
IHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVSTHMgdG8gbG9hZCwK
LSAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAgZWFj
aFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QsIGlkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBpdCBpcyB0b28KLSAg
ICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9y
bWFsaXplZCBvbmVzCi0gICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSBhcmUgdHJhbnNp
ZW50LgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgIW1vZC5tYXAudW5u
b3JtYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVs
ZU1hcChpZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgICAgIC8vSWYgYSBkZXBzIGFycmF5IG9yIGEgY29uZmlnIGNhbGxiYWNrIGlz
IHNwZWNpZmllZCwgdGhlbiBjYWxsCi0gICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhv
c2UgYXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQotICAg
ICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQu
Ci0gICAgICAgICAgICAgICAgaWYgKGNmZy5kZXBzIHx8IGNmZy5jYWxsYmFjaykgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFj
ayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgbWFr
ZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgICAgICAgICAgICBmdW5jdGlv
biBmbigpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlLmluaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZhbHVl
LmluaXQuYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xv
YmFsKHZhbHVlLmV4cG9ydHMpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGZuOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1
bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0
aW9ucyB8fCB7fTsKLQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBz
LCBjYWxsYmFjaywgZXJyYmFjaykgewotICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwg
cmVxdWlyZU1vZDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWls
ZENhbGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9
PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNh
bGxiYWNrKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1
aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4
cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vdmFsdWUgZm9yIHRoZW0gZnJvbSB0aGUgc3BlY2lhbCBoYW5kbGVycy4gQ2F2ZWF0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlz
IGJlaW5nIGRlZmluZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhh
c1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGhhbmRsZXJzW2RlcHNdKHJlZ2lzdHJ5W3JlbE1hcC5pZF0pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL1N5bmNocm9ub3VzIGFjY2Vz
cyB0byBvbmUgbW9kdWxlLiBJZiByZXF1aXJlLmdldCBpcwotICAgICAgICAgICAgICAgICAgICAg
ICAgLy9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlcS5nZXQoY29udGV4dCwgZGVwcywgcmVsTWFwLCBsb2NhbFJlcXVp
cmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLgotICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNl
LCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAn
TW9kdWxlIG5hbWUgIicgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90
IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVzZSByZXF1aXJlKFtdKScpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZGVmaW5lZFtpZF07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCi0gICAgICAgICAg
ICAgICAgICAgIGludGFrZURlZmluZXMoKTsKLQotICAgICAgICAgICAgICAgICAgICAvL01hcmsg
YWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1h
cCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hv
dWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAv
L2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVN
b2Quc2tpcE1hcCA9IG9wdGlvbnMuc2tpcE1hcDsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWl4aW4obG9jYWxSZXF1aXJlLCB7
Ci0gICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAotCi0gICAgICAgICAg
ICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBu
YW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgotICAgICAgICAgICAgICAgICAgICAg
KiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9y
dCB1c2luZwotICAgICAgICAgICAgICAgICAgICAgKiBwbGFpbiBVUkxzIGxpa2UgbmFtZVRvVXJs
LgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1
bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1vZHVsZU5hbWVQbHVz
RXh0Lmxhc3RJbmRleE9mKCcuJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVu
dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXNSZWxhdGl2ZSA9IHNlZ21lbnQgPT09ICcuJyB8fCBzZWdtZW50ID09PSAnLi4n
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlh
cywgYW5kIGl0IGlzIG5vdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vZG90cyBmcm9t
IGEgcmVsYXRpdmUgcGF0aC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0g
LTEgJiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5h
bWVQbHVzRXh0Lmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFt
ZVBsdXNFeHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplKG1vZHVsZU5hbWVQbHVzRXh0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsTWFwICYmIHJlbE1hcC5pZCwg
dHJ1ZSksIGV4dCwgIHRydWUpOwotICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxz
ZSwgdHJ1ZSkuaWQpOwotICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAg
ICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVn
aXN0cnksIGlkKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJl
IGNhbGxzCi0gICAgICAgICAgICAgICAgaWYgKCFyZWxNYXApIHsKLSAgICAgICAgICAgICAgICAg
ICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgLy9maXggZm9yICM0MDgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCB0cnVlKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGRlZmluZWRbaWRdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZl
dGNoZWRbbWFwLnVybF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVu
dHNbaWRdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlIHdpbGwgYmUgYXR0ZW1wdGVkIHRvIGJl
IHJlbG9hZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2luZyBhIGRpZmZlcmVu
dCBjb25maWcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVm
aW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZkV2ZW50c1tpZF0g
PSBtb2QuZXZlbnRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7Ci0gICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAvKioKLSAgICAgICAgICAgICAqIENhbGxlZCB0byBlbmFibGUgYSBtb2R1bGUgaWYg
aXQgaXMgc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5Ci0gICAgICAgICAgICAgKiBhd2FpdGluZyBlbmFi
bGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBhcmVudCBtb2R1bGUsCi0gICAgICAg
ICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4gdGhpcyBtZXRob2QgaXMgb3Zl
cnJpZGVuIGJ5Ci0gICAgICAgICAgICAgKiB0aGUgb3B0aW1pemVyLiBOb3Qgc2hvd24gaGVyZSB0
byBrZWVwIGNvZGUgY29tcGFjdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZW5hYmxl
OiBmdW5jdGlvbiAoZGVwTWFwKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihy
ZWdpc3RyeSwgZGVwTWFwLmlkKTsKLSAgICAgICAgICAgICAgICBpZiAobW9kKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGdldE1vZHVsZShkZXBNYXApLmVuYWJsZSgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogSW50
ZXJuYWwgbWV0aG9kIHVzZWQgYnkgZW52aXJvbm1lbnQgYWRhcHRlcnMgdG8gY29tcGxldGUgYSBs
b2FkIGV2ZW50LgotICAgICAgICAgICAgICogQSBsb2FkIGV2ZW50IGNvdWxkIGJlIGEgc2NyaXB0
IGxvYWQgb3IganVzdCBhIGxvYWQgcGFzcyBmcm9tIGEgc3luY2hyb25vdXMKLSAgICAgICAgICAg
ICAqIGxvYWQgY2FsbC4KLSAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1l
IHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gcG90ZW50aWFsbHkgY29tcGxldGUuCi0gICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGNvbXBsZXRlTG9hZDogZnVuY3Rpb24gKG1vZHVsZU5hbWUp
IHsKLSAgICAgICAgICAgICAgICB2YXIgZm91bmQsIGFyZ3MsIG1vZCwKLSAgICAgICAgICAgICAg
ICAgICAgc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbW9kdWxlTmFtZSkgfHwge30sCi0gICAg
ICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhwb3J0czsKLQotICAgICAgICAgICAg
ICAgIHRha2VHbG9iYWxRdWV1ZSgpOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVl
Lmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3NbMF0gPSBtb2R1bGVOYW1lOwotICAgICAgICAgICAgICAgICAgICAg
ICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFuIGFub255bW91cyBtb2R1bGUgYW5kIGJvdW5kIGl0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFtZSwgdGhlbiB0aGlzIGlzIHNvbWUg
b3RoZXIgYW5vbiBtb2R1bGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdGluZyBmb3Ig
aXRzIGNvbXBsZXRlTG9hZCB0byBmaXJlLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PT0gbW9kdWxlTmFtZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy9Gb3VuZCBtYXRjaGluZyBkZWZpbmUgY2FsbCBmb3IgdGhp
cyBzY3JpcHQhCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3Mp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0
aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQKLSAgICAgICAgICAg
ICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCi0g
ICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBtb2R1bGVOYW1lKTsKLQotICAg
ICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkg
JiYgbW9kICYmICFtb2QuaW5pdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcu
ZW5mb3JjZURlZmluZSAmJiAoIXNoRXhwb3J0cyB8fCAhZ2V0R2xvYmFsKHNoRXhwb3J0cykpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25F
cnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRoYXQgZG9lcyBub3QgY2FsbCBkZWZpbmUo
KSwgc28ganVzdCBzaW11bGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBm
b3IgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKFttb2R1bGVOYW1l
LCAoc2hpbS5kZXBzIHx8IFtdKSwgc2hpbS5leHBvcnRzRm5dKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7
Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIENvbnZl
cnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCi0g
ICAgICAgICAgICAgKiBtb2R1bGVOYW1lIG1heSBhY3R1YWxseSBiZSBqdXN0IGFuIFVSTC4KLSAg
ICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90KiogY2FsbCBub3JtYWxpemUgb24g
dGhlIG1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxy
ZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KLSAgICAgICAgICAgICAqIGludGVybmFs
IEFQSSwgbm90IGEgcHVibGljIG9uZS4gVXNlIHRvVXJsIGZvciB0aGUgcHVibGljIEFQSS4KLSAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFt
ZSwgZXh0LCBza2lwRXh0KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBhdGhzLCBwa2dzLCBwa2cs
IHBrZ1BhdGgsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJsLAotICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRQYXRoOwotCi0gICAgICAgICAgICAgICAgLy9JZiBhIGNvbG9uIGlzIGluIHRoZSBV
UkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQgYW5kIGl0IGlzIGp1c3QKLSAgICAg
ICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xh
c2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCi0gICAgICAgICAgICAgICAgLy9vciBl
bmRzIHdpdGggLmpzLCB0aGVuIGFzc3VtZSB0aGUgdXNlciBtZWFudCB0byB1c2UgYW4gdXJsIGFu
ZCBub3QgYSBtb2R1bGUgaWQuCi0gICAgICAgICAgICAgICAgLy9UaGUgc2xhc2ggaXMgaW1wb3J0
YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBhcyBmdWxsIHBhdGhzLgotICAgICAg
ICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1lKSkgewotICAgICAg
ICAgICAgICAgICAgICAvL0p1c3QgYSBwbGFpbiBwYXRoLCBub3QgbW9kdWxlIG5hbWUgbG9va3Vw
LCBzbyBqdXN0IHJldHVybiBpdC4KLSAgICAgICAgICAgICAgICAgICAgLy9BZGQgZXh0ZW5zaW9u
IGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdvbmt5LCBvbmx5IG5vbi0uanMgdGhp
bmdzIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24sIHRoaXMgbWV0aG9k
IHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgotICAgICAgICAgICAgICAgICAgICB1cmwg
PSBtb2R1bGVOYW1lICsgKGV4dCB8fCAnJyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0
byBhIHBhdGguCi0gICAgICAgICAgICAgICAgICAgIHBhdGhzID0gY29uZmlnLnBhdGhzOwotICAg
ICAgICAgICAgICAgICAgICBwa2dzID0gY29uZmlnLnBrZ3M7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsKLSAgICAgICAgICAgICAgICAgICAgLy9G
b3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYgdGhlcmUgaXMgYSBwYXRoCi0gICAg
ICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJlZCBmb3IgaXQuIFN0YXJ0IHdpdGggbW9zdCBzcGVj
aWZpYyBuYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vYW5kIHdvcmsgdXAgZnJvbSBpdC4KLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZHVsZSA9IHN5bXMuc2xpY2UoMCwgaSku
am9pbignLycpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGtnID0gZ2V0T3duKHBrZ3MsIHBh
cmVudE1vZHVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gZ2V0T3du
KHBhdGhzLCBwYXJlbnRNb2R1bGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVu
dFBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFuIGFycmF5LCBpdCBt
ZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc0FycmF5KHBhcmVudFBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRoWzBdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zLnNwbGljZSgwLCBp
LCBwYXJlbnRQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGtnKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy9JZiBtb2R1bGUgbmFtZSBpcyBqdXN0IHRoZSBwYWNrYWdlIG5hbWUsIHRoZW4g
bG9va2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIHRoZSBtYWluIG1vZHVs
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gcGtnLm5h
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnUGF0aCA9IHBrZy5sb2Nh
dGlvbiArICcvJyArIHBrZy5tYWluOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ1BhdGggPSBwa2cubG9jYXRp
b247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBrZ1BhdGgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9Kb2luIHRoZSBwYXRoIHBhcnRzIHRvZ2V0
aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBuZWVkZWQuCi0gICAgICAgICAgICAg
ICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOwotICAgICAgICAgICAgICAgICAgICB1cmwgKz0g
KGV4dCB8fCAoL15kYXRhXDp8XD8vLnRlc3QodXJsKSB8fCBza2lwRXh0ID8gJycgOiAnLmpzJykp
OwotICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNoYXJBdCgwKSA9PT0gJy8nIHx8IHVy
bC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25maWcuYmFzZVVybCkgKyB1cmw7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmxBcmdz
ID8gdXJsICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVybC5p
bmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmZpZy51cmxBcmdzKSA6IHVybDsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8vRGVsZWdhdGVzIHRvIHJlcS5sb2FkLiBCcm9rZW4gb3V0IGFzIGEg
c2VwYXJhdGUgZnVuY3Rpb24gdG8KLSAgICAgICAgICAgIC8vYWxsb3cgb3ZlcnJpZGluZyBpbiB0
aGUgb3B0aW1pemVyLgotICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGlkLCB1cmwpIHsKLSAg
ICAgICAgICAgICAgICByZXEubG9hZChjb250ZXh0LCBpZCwgdXJsKTsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogRXhlY3V0ZXMgYSBtb2R1bGUgY2Fs
bGJhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbgotICAgICAg
ICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhl
IGZpbGVzIGluIHRoZSBidWlsdAotICAgICAgICAgICAgICogbGF5ZXIgaW4gdGhlIHJpZ2h0IHNl
cXVlbmNlLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEBwcml2YXRlCi0gICAgICAg
ICAgICAgKi8KLSAgICAgICAgICAgIGV4ZWNDYjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBh
cmdzLCBleHBvcnRzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4
cG9ydHMsIGFyZ3MpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAg
ICAgICAgKiBjYWxsYmFjayBmb3Igc2NyaXB0IGxvYWRzLCB1c2VkIHRvIGNoZWNrIHN0YXR1cyBv
ZiBsb2FkaW5nLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9
IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlwdAotICAgICAgICAg
ICAgICogdGhhdCB3YXMgbG9hZGVkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBvblNj
cmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKLSAgICAgICAgICAgICAgICAvL1VzaW5nIGN1cnJl
bnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90Ci0g
ICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQg
dGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCi0gICAgICAgICAgICAgICAgLy90byBzdXBwb3J0IGFu
ZCBzdGlsbCBtYWtlcyBzZW5zZS4KLSAgICAgICAgICAgICAgICBpZiAoZXZ0LnR5cGUgPT09ICds
b2FkJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWR5UmVnRXhwLnRlc3QoKGV2dC5j
dXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5yZWFkeVN0YXRlKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBzY3JpcHQgbm9kZSBp
cyBub3QgaGVsZCBvbnRvIGZvcgotICAgICAgICAgICAgICAgICAgICAvL3RvIGxvbmcuCi0gICAg
ICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0ID0gbnVsbDsKLQotICAgICAgICAgICAg
ICAgICAgICAvL1B1bGwgb3V0IHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYW5kIHRoZSBjb250ZXh0
LgotICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5pZCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAg
ICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4KLSAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgb25TY3JpcHRFcnJvcjogZnVuY3Rpb24gKGV2dCkgewotICAgICAgICAgICAgICAgIHZh
ciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwotICAgICAgICAgICAgICAgIGlmICghaGFzUGF0
aEZhbGxiYWNrKGRhdGEuaWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9y
KG1ha2VFcnJvcignc2NyaXB0ZXJyb3InLCAnU2NyaXB0IGVycm9yIGZvcjogJyArIGRhdGEuaWQs
IGV2dCwgW2RhdGEuaWRdKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9OwotCi0gICAgICAgIGNvbnRleHQucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUo
KTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTWFp
biBlbnRyeSBwb2ludC4KLSAgICAgKgotICAgICAqIElmIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHJl
cXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0Ci0gICAgICogaXMgcmVwcmVz
ZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRl
eHQuCi0gICAgICoKLSAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRo
ZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5Ci0gICAgICogb2YgZGVwZW5kZW5jeSBz
dHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgot
ICAgICAqIGJlIHNwZWNpZmllZCB0byBleGVjdXRlIHdoZW4gYWxsIG9mIHRob3NlIGRlcGVuZGVu
Y2llcyBhcmUgYXZhaWxhYmxlLgotICAgICAqCi0gICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJp
YWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKLSAgICAgKiBv
biBhIHJlcXVpcmUgdGhhdCBhcmUgbm90IHN0YW5kYXJkaXplZCksIGFuZCB0byBnaXZlIGEgc2hv
cnQKLSAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUgdXNlLgotICAgICAq
LwotICAgIHJlcSA9IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChkZXBzLCBjYWxsYmFjaywgZXJyYmFj
aywgb3B0aW9uYWwpIHsKLQotICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBk
ZWZhdWx0Ci0gICAgICAgIHZhciBjb250ZXh0LCBjb25maWcsCi0gICAgICAgICAgICBjb250ZXh0
TmFtZSA9IGRlZkNvbnRleHROYW1lOwotCi0gICAgICAgIC8vIERldGVybWluZSBpZiBoYXZlIGNv
bmZpZyBvYmplY3QgaW4gdGhlIGNhbGwuCi0gICAgICAgIGlmICghaXNBcnJheShkZXBzKSAmJiB0
eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25m
aWcgb2JqZWN0Ci0gICAgICAgICAgICBjb25maWcgPSBkZXBzOwotICAgICAgICAgICAgaWYgKGlz
QXJyYXkoY2FsbGJhY2spKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhl
cmUgYXJlIGRlcGVuZGVuY2llcwotICAgICAgICAgICAgICAgIGRlcHMgPSBjYWxsYmFjazsKLSAg
ICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7Ci0gICAgICAgICAgICAgICAgZXJyYmFj
ayA9IG9wdGlvbmFsOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkZXBz
ID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29uZmlnICYm
IGNvbmZpZy5jb250ZXh0KSB7Ci0gICAgICAgICAgICBjb250ZXh0TmFtZSA9IGNvbmZpZy5jb250
ZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgY29udGV4dCA9IGdldE93bihjb250ZXh0cywgY29u
dGV4dE5hbWUpOwotICAgICAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbnRleHQg
PSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25maWcpIHsKLSAgICAgICAgICAgIGNvbnRleHQu
Y29uZmlndXJlKGNvbmZpZyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY29udGV4dC5y
ZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAg
ICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvb3BlcmF0
ZSB3aXRoIG90aGVyCi0gICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVz
LgotICAgICAqLwotICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7Ci0gICAgICAg
IHJldHVybiByZXEoY29uZmlnKTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZSBz
b21ldGhpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgdGljawotICAgICAqIG9mIHRoZSBldmVudCBsb29w
LiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cwotICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1
dGlvbiB0aGFuIHNldFRpbWVvdXQuCi0gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGZ1bmN0
aW9uIHRvIGV4ZWN1dGUgbGF0ZXIuCi0gICAgICovCi0gICAgcmVxLm5leHRUaWNrID0gdHlwZW9m
IHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7Ci0gICAgICAgIHNl
dFRpbWVvdXQoZm4sIDQpOwotICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4oKTsgfTsKLQotICAg
IC8qKgotICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQgb25seSBpZiBpdCBk
b2VzIG5vdCBhbHJlYWR5IGV4aXN0LgotICAgICAqLwotICAgIGlmICghcmVxdWlyZSkgewotICAg
ICAgICByZXF1aXJlID0gcmVxOwotICAgIH0KLQotICAgIHJlcS52ZXJzaW9uID0gdmVyc2lvbjsK
LQotICAgIC8vVXNlZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBhbHJlYWR5
IHBhdGhzLgotICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpzJC87Ci0gICAgcmVx
LmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKLSAgICBzID0gcmVxLnMgPSB7Ci0gICAgICAgIGNvbnRl
eHRzOiBjb250ZXh0cywKLSAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAotICAgIH07Ci0K
LSAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCi0gICAgcmVxKHt9KTsKLQotICAgIC8vRXhw
b3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCi0g
ICAgZWFjaChbCi0gICAgICAgICd0b1VybCcsCi0gICAgICAgICd1bmRlZicsCi0gICAgICAgICdk
ZWZpbmVkJywKLSAgICAgICAgJ3NwZWNpZmllZCcKLSAgICBdLCBmdW5jdGlvbiAocHJvcCkgewot
ICAgICAgICAvL1JlZmVyZW5jZSBmcm9tIGNvbnRleHRzIGluc3RlYWQgb2YgZWFybHkgYmluZGlu
ZyB0byBkZWZhdWx0IGNvbnRleHQsCi0gICAgICAgIC8vc28gdGhhdCBkdXJpbmcgYnVpbGRzLCB0
aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKLSAgICAgICAgLy93aXRo
IGl0cyBjb25maWcgZ2V0cyB1c2VkLgotICAgICAgICByZXFbcHJvcF0gPSBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5hbWVdOwotICAgICAg
ICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKLSAg
ICAgICAgfTsKLSAgICB9KTsKLQotICAgIGlmIChpc0Jyb3dzZXIpIHsKLSAgICAgICAgaGVhZCA9
IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07Ci0gICAg
ICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9i
bGVtIGZvciBJRTYuCi0gICAgICAgIC8vV2hlbiB0aGF0IGJyb3dzZXIgZGllcywgdGhpcyBjYW4g
YmUgcmVtb3ZlZC4gRGV0YWlscyBpbiB0aGlzIGpRdWVyeSBidWc6Ci0gICAgICAgIC8vaHR0cDov
L2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5Ci0gICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKLSAgICAgICAgaWYgKGJhc2VFbGVt
ZW50KSB7Ci0gICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1lbnQucGFyZW50Tm9k
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFueSBlcnJvcnMgdGhhdCBy
ZXF1aXJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMKLSAgICAg
KiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50IGN1c3RvbSBlcnJv
ciBoYW5kbGluZy4KLSAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4K
LSAgICAgKi8KLSAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVycm9yOwotCi0gICAgLyoqCi0g
ICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29tbWFuZC4gT25seSB1c2VkIGlu
IGJyb3dzZXIgZW52cy4KLSAgICAgKi8KLSAgICByZXEuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChj
b25maWcsIG1vZHVsZU5hbWUsIHVybCkgewotICAgICAgICB2YXIgbm9kZSA9IGNvbmZpZy54aHRt
bCA/Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3
LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgotICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwotICAgICAgICBub2RlLnR5cGUgPSBjb25m
aWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKLSAgICAgICAgbm9kZS5jaGFyc2V0
ID0gJ3V0Zi04JzsKLSAgICAgICAgbm9kZS5hc3luYyA9IHRydWU7Ci0gICAgICAgIHJldHVybiBu
b2RlOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQg
YSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCi0gICAgICogTWFrZSB0aGlzIGEgc2VwYXJh
dGUgZnVuY3Rpb24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1lbnRzCi0gICAgICogdG8gb3ZlcnJp
ZGUgaXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCB0aGUgcmVxdWly
ZSBjb250ZXh0IHRvIGZpbmQgc3RhdGUuCi0gICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5h
bWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KLSAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRo
ZSBVUkwgdG8gdGhlIG1vZHVsZS4KLSAgICAgKi8KLSAgICByZXEubG9hZCA9IGZ1bmN0aW9uIChj
b250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKLSAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0
ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKLSAgICAgICAgICAgIG5vZGU7Ci0gICAgICAgIGlm
IChpc0Jyb3dzZXIpIHsKLSAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2Ny
aXB0IHRhZwotICAgICAgICAgICAgbm9kZSA9IHJlcS5jcmVhdGVOb2RlKGNvbmZpZywgbW9kdWxl
TmFtZSwgdXJsKTsKLQotICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWly
ZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKLSAgICAgICAgICAgIG5vZGUuc2V0QXR0
cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVOYW1lKTsKLQotICAgICAgICAgICAg
Ly9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJzdCBiZWNhdXNlIElF
OSBoYXMKLSAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUgaW4gaXRzIGFkZEV2ZW50TGlzdGVu
ZXIgYW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncwotICAgICAgICAgICAgLy90aGF0IGRvIG5vdCBt
YXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJzIHdpdGgKLSAgICAgICAgICAg
IC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBvbmxvYWQgZXZlbnQg
Zm9yIGEKLSAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFmdGVyIHRoZSBzY3JpcHQgZXhlY3V0
aW9uLiBTZWU6Ci0gICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lF
L2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQtZXZlbnQtaXMtbm90LWZpcmVk
LWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KLSAgICAgICAgICAgIC8vVU5GT1JU
VU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2VzIG5vdCBmb2xsb3cg
dGhlIHNjcmlwdAotICAgICAgICAgICAgLy9zY3JpcHQgZXhlY3V0aW9uIG1vZGUuCi0gICAgICAg
ICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgotICAgICAgICAgICAgICAgICAgICAvL0NoZWNr
IGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3Jp
cHQgb3IKLSAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVseSBzdXBwb3J0ZWQgYnkgYnJvd3Nl
cgotICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2Uv
cmVxdWlyZWpzL2lzc3Vlcy8xODcKLSAgICAgICAgICAgICAgICAgICAgLy9pZiB3ZSBjYW4gTk9U
IGZpbmQgW25hdGl2ZSBjb2RlXSB0aGVuIGl0IG11c3QgTk9UIG5hdGl2ZWx5IHN1cHBvcnRlZC4K
LSAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUuYXR0YWNoRXZlbnQgZG9lcyBub3Qg
aGF2ZSB0b1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0aGUgdGVzdCBmb3Ig
IltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6Ci0gICAgICAgICAgICAg
ICAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL2lzc3Vlcy8yNzMK
LSAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nICYmIG5vZGUu
YXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSA8IDApICYmCi0g
ICAgICAgICAgICAgICAgICAgICFpc09wZXJhKSB7Ci0gICAgICAgICAgICAgICAgLy9Qcm9iYWJs
eSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUKLSAgICAgICAgICAgICAgICAvL3Nj
cmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQsIHNvCi0gICAgICAg
ICAgICAgICAgLy93ZSBjYW5ub3QgdGllIHRoZSBhbm9ueW1vdXMgZGVmaW5lIGNhbGwgdG8gYSBu
YW1lLgotICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUgcmVwb3J0cyB0aGUgc2NyaXB0IGFz
IGJlaW5nIGluICdpbnRlcmFjdGl2ZScKLSAgICAgICAgICAgICAgICAvL3JlYWR5U3RhdGUgYXQg
dGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgotICAgICAgICAgICAgICAgIHVzZUludGVyYWN0
aXZlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29ucmVhZHlz
dGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsKLSAgICAgICAgICAgICAgICAvL0l0
IHdvdWxkIGJlIGdyZWF0IHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIGhlcmUgdG8gY2F0Y2gKLSAg
ICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZlciwgb25yZWFkeXN0YXRlY2hhbmdl
IHdpbGwgZmlyZSBiZWZvcmUKLSAgICAgICAgICAgICAgICAvL3RoZSBlcnJvciBoYW5kbGVyLCBz
byB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKLSAgICAgICAgICAgICAg
ICAvL2lzIHVzZWQsIHRoZW4gSUUgd2lsbCBmaXJlIGVycm9yIGJlZm9yZSBsb2FkLCBidXQgd2Ug
Y2Fubm90Ci0gICAgICAgICAgICAgICAgLy91c2UgdGhhdCBwYXRod2F5IGdpdmVuIHRoZSBjb25u
ZWN0Lm1pY3Jvc29mdC5jb20gaXNzdWUKLSAgICAgICAgICAgICAgICAvL21lbnRpb25lZCBhYm92
ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0ZSwKLSAgICAgICAgICAgICAgICAv
L3RoZW4gZmlyZSB0aGUgc2NyaXB0IGxvYWQgZXZlbnQgbGlzdGVuZXIgYmVmb3JlIGV4ZWN1dGUK
LSAgICAgICAgICAgICAgICAvL25leHQgc2NyaXB0JyB0aGF0IG90aGVyIGJyb3dzZXJzIGRvLgot
ICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBpc3N1ZXMsCi0gICAg
ICAgICAgICAgICAgLy9hbmQgdGhlbiBkZXN0cm95cyBhbGwgaW5zdGFsbHMgb2YgSUUgNi05Lgot
ICAgICAgICAgICAgICAgIC8vbm9kZS5hdHRhY2hFdmVudCgnb25lcnJvcicsIGNvbnRleHQub25T
Y3JpcHRFcnJvcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5vZGUu
YWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNvbnRleHQub25TY3JpcHRMb2FkLCBmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNvbnRleHQub25T
Y3JpcHRFcnJvciwgZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbm9kZS5zcmMg
PSB1cmw7Ci0KLSAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2FzZXMgaW4gSUUgNi04LCB0
aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCi0gICAgICAgICAgICAvL29mIHRoZSBh
cHBlbmRDaGlsZCBleGVjdXRpb24sIHNvIHRvIHRpZSBhbiBhbm9ueW1vdXMgZGVmaW5lCi0gICAg
ICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGljaCBpcyBzdG9yZWQgb24gdGhl
IG5vZGUpLCBob2xkIG9uCi0gICAgICAgICAgICAvL3RvIGEgcmVmZXJlbmNlIHRvIHRoaXMgbm9k
ZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgotICAgICAgICAgICAgY3VycmVu
dGx5QWRkaW5nU2NyaXB0ID0gbm9kZTsKLSAgICAgICAgICAgIGlmIChiYXNlRWxlbWVudCkgewot
ICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJhc2VFbGVtZW50KTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChub2Rl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG51
bGw7Ci0KLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAgICB9IGVsc2UgaWYgKGlzV2Vi
V29ya2VyKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vSW4gYSB3ZWIg
d29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5Ci0gICAgICAgICAg
ICAgICAgLy9lZmZpY2llbnQgdXNlIG9mIGltcG9ydFNjcmlwdHMsIGltcG9ydFNjcmlwdHMgd2ls
bCBibG9jayB1bnRpbAotICAgICAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBpcyBkb3dubG9hZGVk
IGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCi0gICAgICAgICAgICAgICAg
Ly9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25l
IHNvIHRoYXQKLSAgICAgICAgICAgICAgICAvL29ubHkgb25lIHNjcmlwdCBuZWVkcyB0byBiZSBs
b2FkZWQgYW55d2F5LiBUaGlzIG1heSBuZWVkIHRvIGJlCi0gICAgICAgICAgICAgICAgLy9yZWV2
YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KLSAgICAgICAgICAgICAg
ICBpbXBvcnRTY3JpcHRzKHVybCk7Ci0KLSAgICAgICAgICAgICAgICAvL0FjY291bnQgZm9yIGFu
b255bW91cyBtb2R1bGVzCi0gICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9k
dWxlTmFtZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2NyaXB0cycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyArCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgJyBhdCAnICsgdXJsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbbW9kdWxlTmFtZV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpIHsKLSAgICAgICAgaWYgKGlu
dGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRl
cmFjdGl2ZScpIHsKLSAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkg
ewotICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9IHNjcmlwdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3Jp
cHQ7Ci0gICAgfQotCi0gICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3JpcHQgYXR0cmlidXRl
LCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KLSAgICBpZiAoaXNCcm93c2Vy
ICYmICFjZmcuc2tpcERhdGFNYWluKSB7Ci0gICAgICAgIC8vRmlndXJlIG91dCBiYXNlVXJsLiBH
ZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVpcmUuanMgaW4gaXQuCi0gICAgICAg
IGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewotICAgICAgICAgICAg
Ly9TZXQgdGhlICdoZWFkJyB3aGVyZSB3ZSBjYW4gYXBwZW5kIGNoaWxkcmVuIGJ5Ci0gICAgICAg
ICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQuCi0gICAgICAgICAgICBpZiAoIWhlYWQp
IHsKLSAgICAgICAgICAgICAgICBoZWFkID0gc2NyaXB0LnBhcmVudE5vZGU7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gYXR0cmlidXRlIHRvIHNl
dCBtYWluIHNjcmlwdCBmb3IgdGhlIHBhZ2UKLSAgICAgICAgICAgIC8vdG8gbG9hZC4gSWYgaXQg
aXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNvbWVzIHRoZQotICAgICAgICAgICAg
Ly9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCi0gICAgICAgICAgICBkYXRhTWFp
biA9IHNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFpbicpOwotICAgICAgICAgICAgaWYgKGRh
dGFNYWluKSB7Ci0gICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0
IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCi0gICAgICAgICAgICAgICAgbWFpblNjcmlw
dCA9IGRhdGFNYWluOwotCi0gICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0
aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUuCi0gICAgICAgICAgICAgICAgaWYg
KCFjZmcuYmFzZVVybCkgewotICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb2ZmIHRoZSBkaXJl
Y3Rvcnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8v
YmFzZVVybC4KLSAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlwdC5zcGxpdCgnLycp
OwotICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gc3JjLnBvcCgpOwotICAgICAgICAg
ICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5qb2luKCcvJykgICsgJy8nIDog
Jy4vJzsKLQotICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCA9IHN1YlBhdGg7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9TdHJpcCBvZmYgYW55IHRyYWlsaW5n
IC5qcyBzaW5jZSBtYWluU2NyaXB0IGlzIG5vdwotICAgICAgICAgICAgICAgIC8vbGlrZSBhIG1v
ZHVsZSBuYW1lLgotICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxh
Y2UoanNTdWZmaXhSZWdFeHAsICcnKTsKLQotICAgICAgICAgICAgICAgICAvL0lmIG1haW5TY3Jp
cHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KLSAgICAgICAgICAgICAg
ICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobWFpblNjcmlwdCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vUHV0IHRoZSBkYXRhLW1haW4gc2NyaXB0IGluIHRoZSBmaWxlcyB0byBsb2Fk
LgotICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRlcHMgPyBjZmcuZGVwcy5jb25jYXQo
bWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
VGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1bGVzLiBEaWZmZXJz
IGZyb20KLSAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3IgdGhlIG1vZHVsZSBz
aG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAotICAgICAqIGFuZCB0aGUgZnVuY3Rpb24gdG8g
ZXhlY3V0ZSBhZnRlciBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZCBzaG91bGQKLSAgICAgKiByZXR1
cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJz
dCBhcmd1bWVudCdzCi0gICAgICogbmFtZS4KLSAgICAgKi8KLSAgICBkZWZpbmUgPSBmdW5jdGlv
biAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKLSAgICAgICAgdmFyIG5vZGUsIGNvbnRleHQ7Ci0K
LSAgICAgICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVsZXMKLSAgICAgICAgaWYgKHR5cGVv
ZiBuYW1lICE9PSAnc3RyaW5nJykgewotICAgICAgICAgICAgLy9BZGp1c3QgYXJncyBhcHByb3By
aWF0ZWx5Ci0gICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7Ci0gICAgICAgICAgICBkZXBzID0g
bmFtZTsKLSAgICAgICAgICAgIG5hbWUgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9U
aGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzCi0gICAgICAgIGlmICghaXNBcnJh
eShkZXBzKSkgewotICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwotICAgICAgICAgICAgZGVw
cyA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvL0lmIG5vIG5hbWUsIGFuZCBjYWxsYmFj
ayBpcyBhIGZ1bmN0aW9uLCB0aGVuIGZpZ3VyZSBvdXQgaWYgaXQgYQotICAgICAgICAvL0NvbW1v
bkpTIHRoaW5nIHdpdGggZGVwZW5kZW5jaWVzLgotICAgICAgICBpZiAoIWRlcHMgJiYgaXNGdW5j
dGlvbihjYWxsYmFjaykpIHsKLSAgICAgICAgICAgIGRlcHMgPSBbXTsKLSAgICAgICAgICAgIC8v
UmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGNhbGxiYWNrIHN0cmluZywKLSAgICAgICAgICAgIC8v
bG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRoZSBkZXBlbmRlbmNp
ZXMsCi0gICAgICAgICAgICAvL2J1dCBvbmx5IGlmIHRoZXJlIGFyZSBmdW5jdGlvbiBhcmdzLgot
ICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGNhbGxi
YWNrCi0gICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAg
IC5yZXBsYWNlKGNvbW1lbnRSZWdFeHAsICcnKQotICAgICAgICAgICAgICAgICAgICAucmVwbGFj
ZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVwcy5wdXNoKGRlcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgLy9NYXkgYmUgYSBDb21tb25KUyB0aGluZyBldmVuIHdpdGhvdXQgcmVx
dWlyZSBjYWxscywgYnV0IHN0aWxsCi0gICAgICAgICAgICAgICAgLy9jb3VsZCB1c2UgZXhwb3J0
cywgYW5kIG1vZHVsZS4gQXZvaWQgZG9pbmcgZXhwb3J0cyBhbmQgbW9kdWxlCi0gICAgICAgICAg
ICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUuCi0gICAgICAgICAg
ICAgICAgLy9SRVFVSVJFUyB0aGUgZnVuY3Rpb24gdG8gZXhwZWN0IHRoZSBDb21tb25KUyB2YXJp
YWJsZXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgLy9vcmRlciBsaXN0ZWQgYmVsb3cuCi0gICAg
ICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBbJ3JlcXVpcmUnXSA6
IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVwcyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvL0lmIGluIElFIDYtOCBhbmQgaGl0IGFuIGFu
b255bW91cyBkZWZpbmUoKSBjYWxsLCBkbyB0aGUgaW50ZXJhY3RpdmUKLSAgICAgICAgLy93b3Jr
LgotICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKLSAgICAgICAgICAgIG5vZGUgPSBjdXJy
ZW50bHlBZGRpbmdTY3JpcHQgfHwgZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKTsKLSAgICAgICAgICAg
IGlmIChub2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5hbWUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJyk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tub2Rl
LmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vQWx3YXlzIHNhdmUgb2ZmIGV2YWx1YXRpbmcgdGhlIGRlZiBj
YWxsIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGhhbmRsZXIuCi0gICAgICAgIC8vVGhpcyBhbGxv
d3MgbXVsdGlwbGUgbW9kdWxlcyB0byBiZSBpbiBhIGZpbGUgd2l0aG91dCBwcmVtYXR1cmVseQot
ICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZvciBhbm9ueW1vdXMg
bW9kdWxlIHN1cHBvcnQsCi0gICAgICAgIC8vd2hlcmUgdGhlIG1vZHVsZSBuYW1lIGlzIG5vdCBr
bm93biB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBldmVudAotICAgICAgICAvL29jY3Vycy4gSWYg
bm8gY29udGV4dCwgdXNlIHRoZSBnbG9iYWwgcXVldWUsIGFuZCBnZXQgaXQgcHJvY2Vzc2VkCi0g
ICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCi0gICAgICAgIChjb250ZXh0
ID8gY29udGV4dC5kZWZRdWV1ZSA6IGdsb2JhbERlZlF1ZXVlKS5wdXNoKFtuYW1lLCBkZXBzLCBj
YWxsYmFja10pOwotICAgIH07Ci0KLSAgICBkZWZpbmUuYW1kID0gewotICAgICAgICBqUXVlcnk6
IHRydWUKLSAgICB9OwotCi0KLSAgICAvKioKLSAgICAgKiBFeGVjdXRlcyB0aGUgdGV4dC4gTm9y
bWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKLSAgICAgKiB0byB1c2Ug
YSBiZXR0ZXIsIGVudmlyb25tZW50LXNwZWNpZmljIGNhbGwuIE9ubHkgdXNlZCBmb3IgdHJhbnNw
aWxpbmcKLSAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZvciBwbGFpbiBKUyBtb2R1bGVzLgot
ICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1dGUvZXZhbHVhdGUu
Ci0gICAgICovCi0gICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAodGV4dCkgewotICAgICAgICAvKmpz
bGludCBldmlsOiB0cnVlICovCi0gICAgICAgIHJldHVybiBldmFsKHRleHQpOwotICAgIH07Ci0K
LSAgICAvL1NldCB1cCB3aXRoIGNvbmZpZyBpbmZvLgotICAgIHJlcShjZmcpOwotfSh0aGlzKSk7
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1j
b21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212
Yy1jb21tb24vYmFzZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NWJlZjgz
MTg5YzkxNWVlNzhlY2E4NDdmOTA4YzZkMDJkNThhNDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRz
L3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTU1ICswLDAgQEAK
LWh0bWwsCi1ib2R5IHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotYnV0
dG9uIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMDsKLSAgICBib3JkZXI6IDA7Ci0g
ICAgYmFja2dyb3VuZDogbm9uZTsKLSAgICBmb250LXNpemU6IDEwMCU7Ci0gICAgdmVydGljYWwt
YWxpZ246IGJhc2VsaW5lOwotICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwotICAgIGNvbG9yOiBp
bmhlcml0OwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAtbXMtYXBwZWFyYW5j
ZTogbm9uZTsKLSAgICAtby1hcHBlYXJhbmNlOiBub25lOwotICAgIGFwcGVhcmFuY2U6IG5vbmU7
Ci19Ci0KLWJvZHkgewotICAgIGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNh
LCBBcmlhbCwgc2Fucy1zZXJpZjsKLSAgICBsaW5lLWhlaWdodDogMS40ZW07Ci0gICAgYmFja2dy
b3VuZDogI2VhZWFlYSB1cmwoJ2JnLnBuZycpOwotICAgIGNvbG9yOiAjNGQ0ZDRkOwotICAgIHdp
ZHRoOiA1NTBweDsKLSAgICBtYXJnaW46IDAgYXV0bzsKLSAgICAtd2Via2l0LWZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
LSAgICAtbXMtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1vLWZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0K
LWJ1dHRvbiwKLWlucHV0W3R5cGU9ImNoZWNrYm94Il0gewotICBvdXRsaW5lOiBub25lOwotfQot
Ci0jdG9kb2FwcCB7Ci0gICAgYmFja2dyb3VuZDogI2ZmZjsKLSAgICBiYWNrZ3JvdW5kOiByZ2Jh
KDI1NSwgMjU1LCAyNTUsIDAuOSk7Ci0gICAgbWFyZ2luOiAxMzBweCAwIDQwcHggMDsKLSAgICBi
b3JkZXI6IDFweCBzb2xpZCAjY2NjOwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBib3Jk
ZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7Ci0gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJw
eDsKLSAgICBib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2JhKDAsIDAsIDAsIDAuMiksCi0gICAg
ICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpOwotfQotCi0jdG9k
b2FwcDpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICcnOwotICAgIGJvcmRlci1sZWZ0OiAxcHggc29s
aWQgI2Y1ZDZkNjsKLSAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZjVkNmQ2OwotICAgIHdp
ZHRoOiAycHg7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICBsZWZ0
OiA0MHB4OwotICAgIGhlaWdodDogMTAwJTsKLX0KLQotI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQt
aW5wdXQtcGxhY2Vob2xkZXIgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLQotI3RvZG9h
cHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAg
ICBjb2xvcjogI2E5YTlhOTsKLX0KLQotI3RvZG9hcHAgaDEgewotICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKLSAgICB0b3A6IC0xMjBweDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBmb250LXNpemU6
IDcwcHg7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwot
ICAgIGNvbG9yOiAjYjNiM2IzOwotICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7
Ci0gICAgdGV4dC1zaGFkb3c6IC0xcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMik7Ci0gICAgLXdl
YmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1tb3otdGV4dC1y
ZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKLSAgICAtbXMtdGV4dC1yZW5kZXJpbmc6IG9w
dGltaXplTGVnaWJpbGl0eTsKLSAgICAtby10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmls
aXR5OwotICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Ci19Ci0KLSNoZWFk
ZXIgewotICAgIHBhZGRpbmctdG9wOiAxNXB4OwotICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7
Ci19Ci0KLSNoZWFkZXI6YmVmb3JlIHsKLSAgICBjb250ZW50OiAnJzsKLSAgICBwb3NpdGlvbjog
YWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIHJpZ2h0OiAwOwotICAgIGxlZnQ6IDA7Ci0gICAg
aGVpZ2h0OiAxNXB4OwotICAgIHotaW5kZXg6IDI7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNv
bGlkICM2YzYxNWM7Ci0gICAgYmFja2dyb3VuZDogIzhkN2Q3NzsKLSAgICBiYWNrZ3JvdW5kOiAt
d2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYmEo
MTMyLCAxMTAsIDEwMCwgMC44KSksdG8ocmdiYSgxMDEsIDg0LCA3NiwgMC44KSkpOwotICAgIGJh
Y2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgcmdiYSgxMzIsIDExMCwgMTAw
LCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKLSAgICBiYWNrZ3JvdW5kOiBsaW5lYXIt
Z3JhZGllbnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAuOCksIHJnYmEoMTAxLCA4NCwgNzYs
IDAuOCkpOwotICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFweDsKLSAgICBib3JkZXItdG9w
LXJpZ2h0LXJhZGl1czogMXB4OwotfQotCi0jbmV3LXRvZG8sCi0uZWRpdCB7Ci0gICAgcG9zaXRp
b246IHJlbGF0aXZlOwotICAgIG1hcmdpbjogMDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBmb250
LXNpemU6IDI0cHg7Ci0gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Ci0gICAgbGluZS1oZWlnaHQ6
IDEuNGVtOwotICAgIGJvcmRlcjogMDsKLSAgICBvdXRsaW5lOiBub25lOwotICAgIGNvbG9yOiBp
bmhlcml0OwotICAgIHBhZGRpbmc6IDZweDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5Owot
ICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7Ci0g
ICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIC1tcy1ib3gtc2l6aW5nOiBib3Jk
ZXItYm94OwotICAgIC1vLWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgYm94LXNpemluZzog
Ym9yZGVyLWJveDsKLSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAg
ICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbXMtZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOwotICAgIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAg
ICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSNuZXctdG9kbyB7Ci0gICAgcGFk
ZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYmFja2dy
b3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTsKLSAgICB6LWluZGV4OiAyOwotICAgIGJveC1zaGFk
b3c6IG5vbmU7Ci19Ci0KLSNtYWluIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgei1p
bmRleDogMjsKLSAgICBib3JkZXItdG9wOiAxcHggZG90dGVkICNhZGFkYWQ7Ci19Ci0KLWxhYmVs
W2Zvcj0ndG9nZ2xlLWFsbCddIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0jdG9nZ2xlLWFs
bCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTQycHg7Ci0gICAgbGVmdDog
LTRweDsKLSAgICB3aWR0aDogNDBweDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgLyog
TW9iaWxlIFNhZmFyaSAqLwotICAgIGJvcmRlcjogbm9uZTsKLX0KLQotI3RvZ2dsZS1hbGw6YmVm
b3JlIHsKLSAgICBjb250ZW50OiAnwrsnOwotICAgIGZvbnQtc2l6ZTogMjhweDsKLSAgICBjb2xv
cjogI2Q5ZDlkOTsKLSAgICBwYWRkaW5nOiAwIDI1cHggN3B4OwotfQotCi0jdG9nZ2xlLWFsbDpj
aGVja2VkOmJlZm9yZSB7Ci0gICAgY29sb3I6ICM3MzczNzM7Ci19Ci0KLSN0b2RvLWxpc3Qgewot
ICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci19
Ci0KLSN0b2RvLWxpc3QgbGkgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBmb250LXNp
emU6IDI0cHg7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjY2NjOwotfQotCi0jdG9k
by1saXN0IGxpOmxhc3QtY2hpbGQgewotICAgIGJvcmRlci1ib3R0b206IG5vbmU7Ci19Ci0KLSN0
b2RvLWxpc3QgbGkuZWRpdGluZyB7Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLSAgICBwYWRk
aW5nOiAwOwotfQotCi0jdG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgewotICAgIGRpc3BsYXk6
IGJsb2NrOwotICAgIHdpZHRoOiA1MDZweDsKLSAgICBwYWRkaW5nOiAxM3B4IDE3cHggMTJweCAx
N3B4OwotICAgIG1hcmdpbjogMCAwIDAgNDNweDsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5n
IC52aWV3IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGUg
ewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICB3aWR0aDogNDBweDsKLSAgICAvKiBhdXRv
LCBzaW5jZSBub24tV2ViS2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5n
ICovCi0gICAgaGVpZ2h0OiBhdXRvOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6
IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIG1hcmdpbjogYXV0byAwOwotICAgIC8qIE1vYmlsZSBT
YWZhcmkgKi8KLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25l
OwotICAgIC1tcy1hcHBlYXJhbmNlOiBub25lOwotICAgIC1vLWFwcGVhcmFuY2U6IG5vbmU7Ci0g
ICAgYXBwZWFyYW5jZTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyIHsK
LSAgICBjb250ZW50OiAn4pyUJzsKLSAgICAvKiA0MCArIGEgY291cGxlIG9mIHBpeGVscyB2aXN1
YWwgYWRqdXN0bWVudCAqLwotICAgIGxpbmUtaGVpZ2h0OiA0M3B4OwotICAgIGZvbnQtc2l6ZTog
MjBweDsKLSAgICBjb2xvcjogI2Q5ZDlkOTsKLSAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgI2Jm
YmZiZjsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXIgewotICAgIGNv
bG9yOiAjODVhZGE3OwotICAgIHRleHQtc2hhZG93OiAwIDFweCAwICM2Njk5OTE7Ci0gICAgYm90
dG9tOiAxcHg7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0jdG9kby1saXN0IGxpIGxh
YmVsIHsKLSAgICB3aGl0ZS1zcGFjZTogcHJlOwotICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7
Ci0gICAgcGFkZGluZzogMTVweCA2MHB4IDE1cHggMTVweDsKLSAgICBtYXJnaW4tbGVmdDogNDVw
eDsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBsaW5lLWhlaWdodDogMS4yOwotICAgIC13ZWJr
aXQtdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRzOwot
fQotCi0jdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7Ci0gICAgY29sb3I6ICNhOWE5YTk7
Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ci19Ci0KLSN0b2RvLWxpc3QgbGkg
LmRlc3Ryb3kgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIHRvcDogMDsKLSAgICByaWdodDogMTBweDsKLSAgICBib3R0b206IDA7Ci0gICAgd2lkdGg6
IDQwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIG1hcmdpbjogYXV0byAwOwotICAgIGZvbnQt
c2l6ZTogMjJweDsKLSAgICBjb2xvcjogI2E4OGE4YTsKLSAgICAtd2Via2l0LXRyYW5zaXRpb246
IGFsbCAwLjJzOwotICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwotfQotCi0jdG9kby1saXN0IGxp
IC5kZXN0cm95OmhvdmVyIHsKLSAgICB0ZXh0LXNoYWRvdzogMCAwIDFweCAjMDAwLAotICAgICAg
ICAgICAgICAgICAwIDAgMTBweCByZ2JhKDE5OSwgMTA3LCAxMDcsIDAuOCk7Ci0gICAgLXdlYmtp
dC10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMS4zKTsK
LSAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6
YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICfinJYnOwotfQotCi0jdG9kby1saXN0IGxpOmhvdmVyIC5k
ZXN0cm95IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotI3RvZG8tbGlzdCBsaSAuZWRpdCB7
Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hp
bGQgewotICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Ci19Ci0KLSNmb290ZXIgewotICAgIGNvbG9y
OiAjNzc3OwotICAgIHBhZGRpbmc6IDAgMTVweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0g
ICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAtMzFweDsKLSAgICBsZWZ0OiAwOwotICAgIGhlaWdo
dDogMjBweDsKLSAgICB6LWluZGV4OiAxOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQot
I2Zvb3RlcjpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICcnOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDMxcHg7Ci0gICAgbGVmdDogMDsKLSAgICBo
ZWlnaHQ6IDUwcHg7Ci0gICAgei1pbmRleDogLTE7Ci0gICAgYm94LXNoYWRvdzogMCAxcHggMXB4
IHJnYmEoMCwgMCwgMCwgMC4zKSwKLSAgICAgICAgICAgICAgICAwIDZweCAwIC0zcHggcmdiYSgy
NTUsIDI1NSwgMjU1LCAwLjgpLAotICAgICAgICAgICAgICAgIDAgN3B4IDFweCAtM3B4IHJnYmEo
MCwgMCwgMCwgMC4zKSwKLSAgICAgICAgICAgICAgICAwIDQzcHggMCAtNnB4IHJnYmEoMjU1LCAy
NTUsIDI1NSwgMC44KSwKLSAgICAgICAgICAgICAgICAwIDQ0cHggMnB4IC02cHggcmdiYSgwLCAw
LCAwLCAwLjIpOwotfQotCi0jdG9kby1jb3VudCB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgdGV4
dC1hbGlnbjogbGVmdDsKLX0KLQotI2ZpbHRlcnMgewotICAgIG1hcmdpbjogMDsKLSAgICBwYWRk
aW5nOiAwOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIHJpZ2h0OiAwOwotICAgIGxlZnQ6IDA7Ci19Ci0KLSNmaWx0ZXJzIGxpIHsKLSAgICBkaXNw
bGF5OiBpbmxpbmU7Ci19Ci0KLSNmaWx0ZXJzIGxpIGEgewotICAgIGNvbG9yOiAjODM3NTZmOwot
ICAgIG1hcmdpbjogMnB4OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLX0KLQotI2ZpbHRl
cnMgbGkgYS5zZWxlY3RlZCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLSNjbGVhci1j
b21wbGV0ZWQgewotICAgIGZsb2F0OiByaWdodDsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0g
ICAgbGluZS1oZWlnaHQ6IDIwcHg7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotICAgIGJh
Y2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xKTsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAg
cGFkZGluZzogMCAxMHB4OwotICAgIGJvcmRlci1yYWRpdXM6IDNweDsKLSAgICBib3gtc2hhZG93
OiAwIC0xcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKLX0KLQotI2NsZWFyLWNvbXBsZXRlZDpo
b3ZlciB7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE1KTsKLSAgICBib3gtc2hh
ZG93OiAwIC0xcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4zKTsKLX0KLQotI2luZm8gewotICAgIG1h
cmdpbjogNjVweCBhdXRvIDA7Ci0gICAgY29sb3I6ICNhNmE2YTY7Ci0gICAgZm9udC1zaXplOiAx
MnB4OwotICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsK
LSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNpbmZvIGEgewotICAgIGNvbG9yOiBpbmhl
cml0OwotfQotCi0vKgotICAgIEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUg
U2FmYXJpLgotICAgIENhbid0IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVj
a2JveGVzIGluIEZpcmVmb3ggYW5kIE9wZXJhCi0qLwotCi1AbWVkaWEgc2NyZWVuIGFuZCAoLXdl
YmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKLSAgICAjdG9nZ2xlLWFsbCwKLSAgICAj
dG9kby1saXN0IGxpIC50b2dnbGUgewotICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwotICAgIH0K
LQotICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAgICAgIGhlaWdodDogNDBweDsKLSAg
ICB9Ci0KLSAgICAjdG9nZ2xlLWFsbCB7Ci0gICAgICAgIHRvcDogLTU2cHg7Ci0gICAgICAgIGxl
ZnQ6IC0xNXB4OwotICAgICAgICB3aWR0aDogNjVweDsKLSAgICAgICAgaGVpZ2h0OiA0MXB4Owot
ICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKLSAgICAgICAgLW1zLXRy
YW5zZm9ybTogcm90YXRlKDkwZGVnKTsKLSAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcp
OwotICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgICAgIGFwcGVhcmFuY2U6
IG5vbmU7Ci0gICAgfQotfQotCi0uaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi1o
ciB7Ci0gICAgbWFyZ2luOiAyMHB4IDA7Ci0gICAgYm9yZGVyOiAwOwotICAgIGJvcmRlci10b3A6
IDFweCBkYXNoZWQgI0M1QzVDNTsKLSAgICBib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNGN0Y3
Rjc7Ci19Ci0KLS5sZWFybiBhIHsKLSAgICBmb250LXdlaWdodDogbm9ybWFsOwotICAgIHRleHQt
ZGVjb3JhdGlvbjogbm9uZTsKLSAgICBjb2xvcjogI2I4M2Y0NTsKLX0KLQotLmxlYXJuIGE6aG92
ZXIgewotICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotICAgIGNvbG9yOiAjNzg3ZTdl
OwotfQotCi0ubGVhcm4gaDMsCi0ubGVhcm4gaDQsCi0ubGVhcm4gaDUgewotICAgIG1hcmdpbjog
MTBweCAwOwotICAgIGZvbnQtd2VpZ2h0OiA1MDA7Ci0gICAgbGluZS1oZWlnaHQ6IDEuMjsKLSAg
ICBjb2xvcjogIzAwMDsKLX0KLQotLmxlYXJuIGgzIHsKLSAgICBmb250LXNpemU6IDI0cHg7Ci19
Ci0KLS5sZWFybiBoNCB7Ci0gICAgZm9udC1zaXplOiAxOHB4OwotfQotCi0ubGVhcm4gaDUgewot
ICAgIG1hcmdpbi1ib3R0b206IDA7Ci0gICAgZm9udC1zaXplOiAxNHB4OwotfQotCi0ubGVhcm4g
dWwgewotICAgIHBhZGRpbmc6IDA7Ci0gICAgbWFyZ2luOiAwIDAgMzBweCAyNXB4OwotfQotCi0u
bGVhcm4gbGkgewotICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwotfQotCi0ubGVhcm4gcCB7Ci0gICAg
Zm9udC1zaXplOiAxNXB4OwotICAgIGZvbnQtd2VpZ2h0OiAzMDA7Ci0gICAgbGluZS1oZWlnaHQ6
IDEuMzsKLSAgICBtYXJnaW4tdG9wOiAwOwotICAgIG1hcmdpbi1ib3R0b206IDA7Ci19Ci0KLS5x
dW90ZSB7Ci0gICAgYm9yZGVyOiBub25lOwotICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKLX0K
LQotLnF1b3RlIHAgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLQotLnF1b3RlIHA6YmVm
b3JlIHsKLSAgICBjb250ZW50OiAn4oCcJzsKLSAgICBmb250LXNpemU6IDUwcHg7Ci0gICAgb3Bh
Y2l0eTogLjE1OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IC0yMHB4OwotICAg
IGxlZnQ6IDNweDsKLX0KLQotLnF1b3RlIHA6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICfigJ0nOwot
ICAgIGZvbnQtc2l6ZTogNTBweDsKLSAgICBvcGFjaXR5OiAuMTU7Ci0gICAgcG9zaXRpb246IGFi
c29sdXRlOwotICAgIGJvdHRvbTogLTQycHg7Ci0gICAgcmlnaHQ6IDNweDsKLX0KLQotLnF1b3Rl
IGZvb3RlciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGJvdHRvbTogLTQwcHg7Ci0g
ICAgcmlnaHQ6IDA7Ci19Ci0KLS5xdW90ZSBmb290ZXIgaW1nIHsKLSAgICBib3JkZXItcmFkaXVz
OiAzcHg7Ci19Ci0KLS5xdW90ZSBmb290ZXIgYSB7Ci0gICAgbWFyZ2luLWxlZnQ6IDVweDsKLSAg
ICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotfQotCi0uc3BlZWNoLWJ1YmJsZSB7Ci0gICAgcG9z
aXRpb246IHJlbGF0aXZlOwotICAgIHBhZGRpbmc6IDEwcHg7Ci0gICAgYmFja2dyb3VuZDogcmdi
YSgwLCAwLCAwLCAuMDQpOwotICAgIGJvcmRlci1yYWRpdXM6IDVweDsKLX0KLQotLnNwZWVjaC1i
dWJibGU6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICcnOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6IDEwMCU7Ci0gICAgcmlnaHQ6IDMwcHg7Ci0gICAgYm9yZGVyOiAxM3B4IHNvbGlk
IHRyYW5zcGFyZW50OwotICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsK
LX0KLQotLmxlYXJuLWJhciA+IC5sZWFybiB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAg
IHdpZHRoOiAyNzJweDsKLSAgICB0b3A6IDhweDsKLSAgICBsZWZ0OiAtMzAwcHg7Ci0gICAgcGFk
ZGluZzogMTBweDsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xv
cjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3Bl
cnR5OiBsZWZ0OwotICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7Ci0gICAgLXdlYmtpdC10
cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKLSAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBt
czsKLX0KLQotQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7Ci0gICAgLmxlYXJuLWJhciB7Ci0g
ICAgICAgIHdpZHRoOiBhdXRvOwotICAgICAgICBtYXJnaW46IDAgMCAwIDMwMHB4OwotICAgIH0K
LQotICAgIC5sZWFybi1iYXIgPiAubGVhcm4gewotICAgICAgICBsZWZ0OiA4cHg7Ci0gICAgfQot
Ci0gICAgLmxlYXJuLWJhciAjdG9kb2FwcCB7Ci0gICAgICAgIHdpZHRoOiA1NTBweDsKLSAgICAg
ICAgbWFyZ2luOiAxMzBweCBhdXRvIDQwcHggYXV0bzsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjhlNWVhMDNhNjFhZDM2Njc5YzE1ZWEw
YWY2NDg5MTM3MWRiOWVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9i
YXNlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLShmdW5jdGlvbiAoKSB7Ci0g
ICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgLy8gVW5kZXJzY29yZSdzIFRlbXBsYXRlIE1vZHVsZQot
ICAgIC8vIENvdXJ0ZXN5IG9mIHVuZGVyc2NvcmVqcy5vcmcKLSAgICB2YXIgXyA9IChmdW5jdGlv
biAoXykgewotICAgICAgICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iamVjdCkgewotICAgICAg
ICAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh2YXIgYXJnc0luZGV4ID0gMSwgYXJnc0xlbmd0
aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGg7IGFyZ3NJbmRleCsr
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07
Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGtleSBpbiBpdGVyYWJsZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9i
amVjdFtrZXldID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rb
a2V5XSA9IGl0ZXJhYmxlW2tleV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQnkgZGVmYXVsdCwg
VW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhl
Ci0gICAgICAgIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRp
dmUgZGVsaW1pdGVycy4KLSAgICAgICAgXy50ZW1wbGF0ZVNldHRpbmdzID0gewotICAgICAgICAg
ICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNdKz8pJT4vZywKLSAgICAgICAgICAgIGludGVycG9s
YXRlIDogLzwlPShbXHNcU10rPyklPi9nLAotICAgICAgICAgICAgZXNjYXBlICAgICAgOiAvPCUt
KFtcc1xTXSs/KSU+L2cKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBXaGVuIGN1c3RvbWl6aW5n
IGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuCi0gICAg
ICAgIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5l
ZWQgb25lIHRoYXQgaXMKLSAgICAgICAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guCi0gICAg
ICAgIHZhciBub01hdGNoID0gLyguKV4vOwotCi0gICAgICAgIC8vIENlcnRhaW4gY2hhcmFjdGVy
cyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhCi0gICAg
ICAgIC8vIHN0cmluZyBsaXRlcmFsLgotICAgICAgICB2YXIgZXNjYXBlcyA9IHsKLSAgICAgICAg
ICAgICInIjogICAgICAiJyIsCi0gICAgICAgICAgICAnXFwnOiAgICAgJ1xcJywKLSAgICAgICAg
ICAgICdccic6ICAgICAncicsCi0gICAgICAgICAgICAnXG4nOiAgICAgJ24nLAotICAgICAgICAg
ICAgJ1x0JzogICAgICd0JywKLSAgICAgICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAotICAgICAg
ICAgICAgJ1x1MjAyOSc6ICd1MjAyOScKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgZXNjYXBl
ciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsKLQotICAgICAgICAvLyBKYXZhU2Ny
aXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0
aW9uLgotICAgICAgICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkg
ZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCi0gICAgICAgIC8vIGFuZCBjb3JyZWN0
bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgotICAgICAgICBfLnRl
bXBsYXRlID0gZnVuY3Rpb24odGV4dCwgZGF0YSwgc2V0dGluZ3MpIHsKLSAgICAgICAgICAgIHZh
ciByZW5kZXI7Ci0gICAgICAgICAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdz
LCBfLnRlbXBsYXRlU2V0dGluZ3MpOwotCi0gICAgICAgICAgICAvLyBDb21iaW5lIGRlbGltaXRl
cnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KLSAgICAgICAg
ICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCi0gICAgICAgICAgICAgICAgKHNldHRpbmdz
LmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsCi0gICAgICAgICAgICAgICAgKHNldHRpbmdzLmlu
dGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKLSAgICAgICAgICAgICAgICAoc2V0dGluZ3Mu
ZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCi0gICAgICAgICAgICBdLmpvaW4oJ3wnKSArICd8
JCcsICdnJyk7Ci0KLSAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwg
ZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuCi0gICAgICAgICAgICB2YXIg
aW5kZXggPSAwOwotICAgICAgICAgICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOwotICAgICAgICAg
ICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9s
YXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc291cmNlICs9IHRleHQu
c2xpY2UoaW5kZXgsIG9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBl
ciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJj
ZSArPSAiJytcbigoX190PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkp
K1xuJyI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0
ZSkgewotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVy
cG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4nIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgaWYgKGV2YWx1YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSAr
PSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOwotICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgc291cmNlICs9
ICInO1xuIjsKLQotICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVk
LCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KLSAgICAgICAgICAgIGlmICghc2V0
dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9
XG4nOwotCi0gICAgICAgICAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnBy
b3RvdHlwZS5qb2luLCIgKwotICAgICAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9
X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiArCi0gICAgICAgICAgICAgICAgc291cmNlICsg
InJldHVybiBfX3A7XG4iOwotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJl
bmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3Vy
Y2UpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIGUuc291cmNl
ID0gc291cmNlOwotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOwotICAgICAgICAgICAg
dmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAgICAgIHJldHVybiBy
ZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAg
IC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNl
IGZvciBwcmVjb21waWxhdGlvbi4KLSAgICAgICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5j
dGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSAr
ICd9JzsKLQotICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlOwotICAgICAgICB9OwotCi0gICAg
ICAgIHJldHVybiBfOwotICAgIH0pKHt9KTsKLQotICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9
PT0gJ3RvZG9tdmMuY29tJykgewotICAgICAgICB3aW5kb3cuX2dhcSA9IFtbJ19zZXRBY2NvdW50
JywnVUEtMzEwODEwNjItMSddLFsnX3RyYWNrUGFnZXZpZXcnXV07KGZ1bmN0aW9uKGQsdCl7dmFy
IGc9ZC5jcmVhdGVFbGVtZW50KHQpLHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KVswXTtnLnNy
Yz0nLy93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vZ2EuanMnO3MucGFyZW50Tm9kZS5pbnNlcnRC
ZWZvcmUoZyxzKX0oZG9jdW1lbnQsJ3NjcmlwdCcpKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBy
ZWRpcmVjdCgpIHsKLSAgICAgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndGFzdGVqcy5n
aXRodWIuaW8nKSB7Ci0gICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZi5y
ZXBsYWNlKCd0YXN0ZWpzLmdpdGh1Yi5pby90b2RvbXZjJywgJ3RvZG9tdmMuY29tJyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBmaW5kUm9vdCgpIHsKLSAgICAgICAgdmFyIGJh
c2U7Ci0KLSAgICAgICAgWy9sYWJzLywgL1x3Ki1leGFtcGxlcy9dLmZvckVhY2goZnVuY3Rpb24g
KGhyZWYpIHsKLSAgICAgICAgICAgIHZhciBtYXRjaCA9IGxvY2F0aW9uLmhyZWYubWF0Y2goaHJl
Zik7Ci0KLSAgICAgICAgICAgIGlmICghYmFzZSAmJiBtYXRjaCkgewotICAgICAgICAgICAgICAg
IGJhc2UgPSBsb2NhdGlvbi5ocmVmLmluZGV4T2YobWF0Y2gpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9KTsKLQotICAgICAgICByZXR1cm4gbG9jYXRpb24uaHJlZi5zdWJzdHIoMCwgYmFzZSk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0RmlsZShmaWxlLCBjYWxsYmFjaykgewotICAgICAg
ICBpZiAoIWxvY2F0aW9uLmhvc3QpIHsKLSAgICAgICAgICAgIHJldHVybiBjb25zb2xlLmluZm8o
J01pc3MgdGhlIGluZm8gYmFyPyBSdW4gVG9kb01WQyBmcm9tIGEgc2VydmVyIHRvIGF2b2lkIGEg
Y3Jvc3Mtb3JpZ2luIGVycm9yLicpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHhociA9IG5l
dyBYTUxIdHRwUmVxdWVzdCgpOwotCi0gICAgICAgIHhoci5vcGVuKCdHRVQnLCBmaW5kUm9vdCgp
ICsgZmlsZSwgdHJ1ZSk7Ci0gICAgICAgIHhoci5zZW5kKCk7Ci0KLSAgICAgICAgeGhyLm9ubG9h
ZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYg
Y2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh4aHIucmVzcG9uc2VUZXh0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBMZWFybihs
ZWFybkpTT04sIGNvbmZpZykgewotICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTGVhcm4p
KSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciB0ZW1wbGF0ZSwgZnJhbWV3b3JrOwotCi0gICAgICAgIGlm
ICh0eXBlb2YgbGVhcm5KU09OICE9PSAnb2JqZWN0JykgewotICAgICAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgICAgICBsZWFybkpTT04gPSBKU09OLnBhcnNlKGxlYXJuSlNPTik7Ci0gICAgICAg
ICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbmZpZykgewotICAgICAgICAgICAgdGVtcGxh
dGUgPSBjb25maWcudGVtcGxhdGU7Ci0gICAgICAgICAgICBmcmFtZXdvcmsgPSBjb25maWcuZnJh
bWV3b3JrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0ZW1wbGF0ZSAmJiBsZWFybkpTT04u
dGVtcGxhdGVzKSB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA9IGxlYXJuSlNPTi50ZW1wbGF0ZXMu
dG9kb212YzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZnJhbWV3b3JrICYmIGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKSkgewotICAgICAgICAgICAgZnJhbWV3
b3JrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpLmdldEF0dHJp
YnV0ZSgnZGF0YS1mcmFtZXdvcmsnKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgaWYgKHRlbXBs
YXRlICYmIGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7Ci0gICAgICAgICAgICB0aGlzLmZyYW1ld29y
a0pTT04gPSBsZWFybkpTT05bZnJhbWV3b3JrXTsKLSAgICAgICAgICAgIHRoaXMudGVtcGxhdGUg
PSB0ZW1wbGF0ZTsKLQotICAgICAgICAgICAgdGhpcy5hcHBlbmQoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIExlYXJuLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAg
IHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FzaWRlJyk7Ci0gICAgICAgIGFz
aWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1wbGF0ZSwgdGhpcy5mcmFtZXdvcmtK
U09OKTsKLSAgICAgICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xlYXJuJzsKLQotICAgICAgICAvLyBM
b2NhbGl6ZSBkZW1vIGxpbmtzCi0gICAgICAgIHZhciBkZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNl
bGVjdG9yQWxsKCcuZGVtby1saW5rJyk7Ci0gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNo
LmNhbGwoZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmspIHsKLSAgICAgICAgICAgIGRlbW9M
aW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGluay5nZXRBdHRyaWJ1
dGUoJ2hyZWYnKSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NO
YW1lID0gKGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBsZWFybi1iYXInKS50cmltKCk7Ci0g
ICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywgYXNp
ZGUub3V0ZXJIVE1MKTsKLSAgICB9OwotCi0gICAgcmVkaXJlY3QoKTsKLSAgICBnZXRGaWxlKCds
ZWFybi5qc29uJywgTGVhcm4pOwotfSkoKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5wbmcgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmcucG5nCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiMmE3NjAwODI1ZWUxMWYyMTg0OWVkNDc1NDk5YzdkMWVjYmNjODcwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDIxMjYKemNtVi1VMihrQnhQKTxoOzNLfExr
MDAwZTFOSkxUcTAwM2tGMDAza0gwe3tSMzRVQiFxMDAwMENQKXQtcz8oWGpFCno+Kzl5YD1ISzdu
dD1+M3QwMDBPNU5rbDxaY3dUanUoUTR2fjdLV0VXI1ltP2xLX3Y7VG18IUZjKUBOd0VubXRzaAp6
eCFPfno4MUpUM3BGc20+bT0wNGhWYV9sWGxfYm09K007PWVJPCUkck8ydGFgc3VoKlNyI1BPdyo/
YWRxIU8hQ1YKeiowJmIpcmtDQ0VWKTFuSXVpTEJudFVILU1KSTsmcVlnenxkQE5obm5fYWJpMmdg
cHU0TkFNVmlkM2hTJT9xdXp+CnpqbEpmKHg4Y2o8UEdjam4qSitheyZINXAqbjUkNWUzPzxLQ2M/
bzA2bUFzTlNiZ1BXTz9QeiNDem48IT17PntWUwp6VVZFUDFtc2c5YF5PRlVoU081cnRYSGhSbHlV
Mmk+NiRCVD1nbEdge0psY3RHSHJ3UkltKTZCdXU2NWpMUW5eSDgKenZsOWxacVVCQSslcXZNNVhD
K3lZQG1mQShZQn5YUD1lfDY8eyUkXmVVOG5ySz92MmNjYkBKb201Q0c+cktBTDdKCnpwbEhFSWF2
VnB8MHAxJm0hR2BUaT88N2laO31ARzcjWil9S20lMiFGSG5RMComP1BMUilHIUhBYUhnVSNjfCRk
egp6cGojMEhtZWFkSWU+YCMpPUpqa2J7Qj1GS25VM3BjLSZZQGpfajYoaDRZfitVcTxQVTM2Qzs1
Yj1NXkZgPXAxZEkKems8Q1FPUE5hNz4hXko9TEh1bngxeGk0UVhLLVl7Jk1vVDhreTZWYjljfFdo
bk93Rn5jPTN6T3k4YWdrdGxpUzYjCnpgIzhGYDlIKUQ9Ym1rOUI1TW5XJl9yIylmJGMrOyRMU3It
QF5BbjhkaGN+SXF1dXY+ak9LN3B3N0xKOyZYMGkxQwp6R01zSGRQMU9zQG55JCRqIT5YQWlpJTdi
cDVrPmBweU5BIX5lcGIpKClwOXpSNFlsNno9VX17Q0lkaDF6KEZwQW8KelFJVyE7MHpwQ3lDNCo3
WUxrWkNPQGN1bDBSXyZ6Z2hzQThFayl6JTwhcC1idnNzcGxZWTJ9UDshdjRDWWo5a21GCnpiMGJO
X200VipmXllaTW9iMihqM3BLan43diNadGtzPUlvK3tzdSVXaXVrZEpIJGI/ZlpraUE9UFlfM09o
REJrbwp6KExUUUhZJkZeXjJoRy1ZYCpaOTN2Yn5jPyooSmNoRGpUZkNzP3pSbSpgKk4qVi0kPT9R
cXRoblNyKj9PUzNzaksKem88X1VeZnt+YWc2MHVsPmpOcEthOTJ7QE5IK1NzdFglQH14QipKayFs
fVBaMWNDbEluc359NV4hUm5jVWsqcm1BCnolU0lWZ3Q1OEVReExKK09pRnE8eXU0ZU9EfDlMdDNk
TnNlZnhPdXEpRCYkXyVqMERncUN5MWd6Y3x0VEQzKm1lZQp6ez0lfDxgYH1fSHlwaE91ezspeGtS
ZytRbkhDQzNUZitrc3BxVjYqfFFLLVJjcUR9ND5La0J1d3F1eVpMVXB8Z3IKelBVYlViRmJCclBk
MXhPYF5DKnItaTNwOSpGIyhPQmghNFd5QGFDJiohfE98R1hjakRBJlloRns7Y0Q3Km8oR1NeCnpA
cFFTRTcpeF84MT1ReWplNipMUSNUWHUtNyhvO1M4dTN0cERBPFNnY0tjS09wbUE7PUhCWlNAT0ZU
QF9YT3Z4cQp6Kk58M0tMeXRnekg2R1UmJlVvYzRaems0bHVtM1B7OT9mcEk0K1FHUEordjZgMWxm
UnEzTGNTKihNKldLK3xiJU8KemUkej4wX2RkaiVobUNzcGVYZGhZUn0taTlBPUNgRW9DaFVZdUh+
XnghOSt8JihQZ2IqPkNrPD05anwpKkB4eWZUCnpwUCMrS3Q8fTM5YnwzV2w0ZnhUKCtHP2FIPmdH
XmRATUVhVU9KUmZ5NTVUdEZJN15ZKVZ1TVU9N1BwMHk1NWpTfgp6K1RKKWlnTXlycWtYO3dVOGo2
OGlJRHRxSlloU19EM19PZW0tQGc2bWVfUmZpUX11VF9LLUEtOXFHJX1nazNFOWMKeiE4YEtnc01O
WG0pYmVsb1BmTXFsKnwmJE0+MXFgaSFjWSlSRlluak5ZdSpnU3ZAOFhlYlY3JX14WUw+NilHSlBK
CnpKcEE3SzMxbGNKdUlGS1N3LXt4NEZYMEsyQXopflhnPGBzT3UkNHxePE1DN0AreGJ3eHNHZ1R2
SklBTGpQezY4TAp6OEFZdVNHUzBHVWdrNldgdjRXO1J5KnVvRVRudWxQaXw1NzMlbHYqWnh3I3Y2
eVVRXk1PZmNwVCNWOFJJRFYjI04KekQxYCtBZW1zT2gpd2JXREV4VmNmcEt6KWp5Vj08fiZaWFBn
NmN8WkRFN1U0Yms8RF4+LSheWEpYNFl6b2lOUnZMCnp5dVk3fjI2dy1QXlp3JTZGfXNoQndWMiQw
MmM4UnNTVXk2ZE05MmRpQ0F4aVgzSVVxc3E1aWc2PlVfIVZ5KnE1JAp6am19MTZ0SnIrUVomVD9I
a2twZUl3VlgtcjFFST1AJVpsdDs2PHR3SDg2SUQ+ZyptaiZFIUEpKSVnWEo9eDZ1I2wKemNLRVA+
Yng0cnFWKmtgQkJyWiRNcWp0e1RzSGN4VUg+OylpQUt9QihLaWxhJlZEJWI/Nm0mXjBXSzReJkVa
TkFJCno4QU1Zc18lJEQlfE0rQCtjUXFMLWhpNHlHPmgqandkaWkhVzF7fXA+Wmh3Rll0XzRTdTFr
alk5PGJBWmp6fjllawp6X0RpYXIrQWZKRlBfOUB5bVVvJEtXPjwtNWAhJFZOT0kxeShFRFNINFdw
Q2lqRV8+YWwhTnQ9XmVWRVIjdUoxPWIKejtCV0YySWd5RjVMZXhWK3llYyRLaW47QWlAbXlvO0c+
ekomanJkVyNlY1hoSVpwaDVPWXF3X1BFZmNGNTY8TzE5CnpMKThyIUtNKClpZjBgQD9XNChKZGMp
N1dvUEdeJj0kPHpVc00rSENXYWtDXjN0WnhrK1BqUUd9Qj5aNTxaNlZ4dwp6QkBIclYkJmx+QFRh
ajcwcGNle2lTdVJMc1VjekRZXzVUbkRxOFB5X1Ezd2hgRDghNGpLO3ZGZFJQK1EwPXpKeSoKenp1
V2QlIWFpQER7fCpKPEk7T0QmaSVse0pwLTgqUHUzVkdMV2l5azZ2I1htUXF3YC0rJWUkfENKdypA
YDV6YjM8CnpFfXojO2tSaEwmcTVQREc2QG1tKiQ+WnVfWlpFI3EzTWMrTiYxT143aG9oOVFSN2Ar
TCRjQlA1cHFHPWZxQTB1aAp6VUJ1a2F4VEZtSCk8fFhidnAyYz1IU2JOa3BYdzczYTVsdjdWJGpi
OTIjeVoxNDFAJFg/Rn1KdDhnSVU3V202bTkKej9lXzs7enNubTZgTFplUD5UPSQpS3I+Wj9rcipV
bUZxUjd6eDBDNl5ibWNzY0AxQUd0d19yTkg+LVhtJGQqfFE8CnpuJjFMbjB1Nz1sJklMcz4lQ2tK
cGBEaUc5RjE4eDROZStsZzwjaT9lN2pMJXg7NFpuUmtOXk14MDcqcW9NNk48JApFZig+ME4hMmtk
TgoKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9kYXRhL3N0YXRz
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzg5MzNmZDJkMDc0MjA2NWI2ZDlkM2RlNmM0N2U3NjI4YjU5MDgzMAotLS0gL2Rldi9u
dWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9kYXRhL3N0YXRzLmpzCkBA
IC0wLDAgKzEsMzkgQEAKKy8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZp
bmUoWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCisgICAgJ2FwcC9zdG9yZScKK10sIGZ1
bmN0aW9uIChkZWZpbmVDb21wb25lbnQsIGRhdGFTdG9yZSkgeworICAgIGZ1bmN0aW9uIHN0YXRz
KCkgeworICAgICAgICB0aGlzLmF0dHJpYnV0ZXMoeworICAgICAgICAgICAgZGF0YVN0b3JlOiBk
YXRhU3RvcmUKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5yZWNvdW50ID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIHRvZG9zID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5hbGwoKTsK
KyAgICAgICAgICAgIHZhciBhbGwgPSB0b2Rvcy5sZW5ndGg7CisgICAgICAgICAgICB2YXIgcmVt
YWluaW5nID0gdG9kb3MucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBlYWNoKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1lbW8gKz0gZWFjaC5jb21wbGV0ZWQgPyAwIDogMTsKKyAgICAgICAgICAg
IH0sIDApOworCisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFTdGF0c0NvdW50ZWQnLCB7
CisgICAgICAgICAgICAgICAgYWxsOiBhbGwsCisgICAgICAgICAgICAgICAgcmVtYWluaW5nOiBy
ZW1haW5pbmcsCisgICAgICAgICAgICAgICAgY29tcGxldGVkOiBhbGwgLSByZW1haW5pbmcsCisg
ICAgICAgICAgICAgICAgZmlsdGVyOiAnJworICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisK
KyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb3NMb2FkZWQnLCB0aGlzLnJlY291bnQpOwor
ICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvQWRkZWQnLCB0aGlzLnJlY291
bnQpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2RvUmVtb3ZlZCcsIHRo
aXMucmVjb3VudCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9Ub2dn
bGVkJywgdGhpcy5yZWNvdW50KTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRh
Q2xlYXJlZENvbXBsZXRlZCcsIHRoaXMucmVjb3VudCk7CisgICAgICAgICAgICB0aGlzLm9uKGRv
Y3VtZW50LCAnZGF0YVRvZG9Ub2dnbGVkQWxsJywgdGhpcy5yZWNvdW50KTsKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChzdGF0cyk7Cit9KTsKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9kYXRhL3RvZG9zLmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU5
ZjFjMzViMGNiMjhhNGYxNDJkYTAxNWI5OTE2ODQ4NjRhYWZmMAotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9kYXRhL3RvZG9zLmpzCkBAIC0wLDAgKzEs
MTAzIEBACisvKmdsb2JhbCBkZWZpbmUgKi8KKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsKKyAg
ICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAorICAgICdhcHAvc3RvcmUnCitdLCBmdW5jdGlvbiAo
ZGVmaW5lQ29tcG9uZW50LCBkYXRhU3RvcmUpIHsKKyAgICBmdW5jdGlvbiB0b2RvcygpIHsKKyAg
ICAgICAgdmFyIGZpbHRlcjsKKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVzKHsKKyAgICAgICAgICAg
IGRhdGFTdG9yZTogZGF0YVN0b3JlCisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMuYWRkID0g
ZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZhciB0b2RvID0gdGhpcy5hdHRyLmRh
dGFTdG9yZS5zYXZlKHsKKyAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSwKKyAgICAg
ICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlCisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgdGhpcy50cmlnZ2VyKCdkYXRhVG9kb0FkZGVkJywgeyB0b2RvOiB0b2RvLCBmaWx0ZXI6IGZp
bHRlciB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uIChl
LCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgdG9kbyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuZGVz
dHJveShkYXRhLmlkKTsKKworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhVG9kb1JlbW92
ZWQnLCB0b2RvKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmxvYWQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICB2YXIgdG9kb3M7CisKKyAgICAgICAgICAgIC8vIGZpbHRlciA9IGxv
Y2FsU3RvcmFnZS5nZXRJdGVtKCdmaWx0ZXInKTsKKyAgICAgICAgICAgIGZpbHRlciA9ICcnOwor
ICAgICAgICAgICAgdG9kb3MgPSB0aGlzLmZpbmQoKTsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dl
cignZGF0YVRvZG9zTG9hZGVkJywgeyB0b2RvczogdG9kb3MgfSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdGhp
cy5hdHRyLmRhdGFTdG9yZS5zYXZlKGRhdGEpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMu
dG9nZ2xlQ29tcGxldGVkID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZhciBl
dmVudFR5cGU7CisgICAgICAgICAgICB2YXIgdG9kbyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuZ2V0
KGRhdGEuaWQpOworCisgICAgICAgICAgICB0b2RvLmNvbXBsZXRlZCA9ICF0b2RvLmNvbXBsZXRl
ZDsKKyAgICAgICAgICAgIHRoaXMuYXR0ci5kYXRhU3RvcmUuc2F2ZSh0b2RvKTsKKworICAgICAg
ICAgICAgZXZlbnRUeXBlID0gZmlsdGVyID8gJ2RhdGFUb2RvUmVtb3ZlZCcgOiAnZGF0YVRvZG9U
b2dnbGVkJzsKKworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKGV2ZW50VHlwZSwgdG9kbyk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGVBbGxDb21wbGV0ZWQgPSBmdW5jdGlvbiAo
ZSwgZGF0YSkgeworICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS51cGRhdGVBbGwoeyBj
b21wbGV0ZWQ6IGRhdGEuY29tcGxldGVkIH0pOworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdk
YXRhVG9kb1RvZ2dsZWRBbGwnLCB7IHRvZG9zOiB0aGlzLmZpbmQoZmlsdGVyKSB9KTsKKyAgICAg
ICAgfTsKKworICAgICAgICB0aGlzLmZpbHRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAg
ICAgICAgICB2YXIgdG9kb3M7CisKKyAgICAgICAgICAgIC8vIGxvY2FsU3RvcmFnZS5zZXRJdGVt
KCdmaWx0ZXInLCBkYXRhLmZpbHRlcik7CisgICAgICAgICAgICBmaWx0ZXIgPSBkYXRhLmZpbHRl
cjsKKyAgICAgICAgICAgIHRvZG9zID0gdGhpcy5maW5kKCk7CisKKyAgICAgICAgICAgIHRoaXMu
dHJpZ2dlcignZGF0YVRvZG9zRmlsdGVyZWQnLCB7IHRvZG9zOiB0b2RvcyB9KTsKKyAgICAgICAg
fTsKKworICAgICAgICB0aGlzLmZpbmQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIg
dG9kb3M7CisKKyAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICB0b2Rv
cyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuZmluZChmdW5jdGlvbiAoZWFjaCkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBlYWNoW2ZpbHRlcl0gIT09ICd1bmRlZmluZWQnKSA/
IGVhY2guY29tcGxldGVkIDogIWVhY2guY29tcGxldGVkOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0b2RvcyA9IHRoaXMuYXR0ci5k
YXRhU3RvcmUuYWxsKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0b2Rv
czsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5kZXN0cm95QWxsKHsgY29tcGxl
dGVkOiB0cnVlIH0pOworCisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpRmlsdGVyUmVxdWVz
dGVkJywgeyBmaWx0ZXI6IGZpbHRlciB9KTsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0
YUNsZWFyZWRDb21wbGV0ZWQnKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdp
bml0aWFsaXplJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwg
J3VpQWRkUmVxdWVzdGVkJywgdGhpcy5hZGQpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVu
dCwgJ3VpVXBkYXRlUmVxdWVzdGVkJywgdGhpcy51cGRhdGUpOworICAgICAgICAgICAgdGhpcy5v
bihkb2N1bWVudCwgJ3VpUmVtb3ZlUmVxdWVzdGVkJywgdGhpcy5yZW1vdmUpOworICAgICAgICAg
ICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpTG9hZFJlcXVlc3RlZCcsIHRoaXMubG9hZCk7CisgICAg
ICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlUb2dnbGVSZXF1ZXN0ZWQnLCB0aGlzLnRvZ2ds
ZUNvbXBsZXRlZCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlUb2dnbGVBbGxS
ZXF1ZXN0ZWQnLCB0aGlzLnRvZ2dsZUFsbENvbXBsZXRlZCk7CisgICAgICAgICAgICB0aGlzLm9u
KGRvY3VtZW50LCAndWlDbGVhclJlcXVlc3RlZCcsIHRoaXMuY2xlYXJDb21wbGV0ZWQpOworICAg
ICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpRmlsdGVyUmVxdWVzdGVkJywgdGhpcy5maWx0
ZXIpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHRv
ZG9zKTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL21h
aW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvbWFpbi5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NjQ3NzNmMThkMWFhMGExMDkzYzBlZGIyYWRkYjQ4ZTM1ZWNhNWRlCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL21haW4uanMKQEAgLTAsMCArMSwz
MSBAQAorLypnbG9iYWwgREVCVUcgKi8KKyd1c2Ugc3RyaWN0JzsKKworcmVxdWlyZS5jb25maWco
eworICAgIGJhc2VVcmw6ICcuLycsCisgICAgcGF0aHM6IHsKKyAgICAgICAganF1ZXJ5OiAnbm9k
ZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeScsCisgICAgICAgIGVzNXNoaW06ICdub2RlX21v
ZHVsZXMvZXM1LXNoaW0vZXM1LXNoaW0nLAorICAgICAgICBlczVzaGFtOiAnbm9kZV9tb2R1bGVz
L2VzNS1zaGltL2VzNS1zaGFtJywKKyAgICAgICAgdGV4dDogJ25vZGVfbW9kdWxlcy9yZXF1aXJl
anMtdGV4dC90ZXh0JywKKyAgICAgICAgZmxpZ2h0OiAnbm9kZV9tb2R1bGVzL2ZsaWdodCcsCisg
ICAgICAgIGRlcG90OiAnbm9kZV9tb2R1bGVzL2RlcG90L2RlcG90JywKKyAgICAgICAgbWVtb3J5
c3RvcmFnZTogJ25vZGVfbW9kdWxlcy9tZW1vcnlzdG9yYWdlL21lbW9yeXN0b3JhZ2UnLAorICAg
ICAgICBhcHA6ICdhcHAvanMnLAorICAgICAgICB0ZW1wbGF0ZXM6ICdhcHAvdGVtcGxhdGVzJywK
KyAgICAgICAgdWk6ICdhcHAvanMvdWknLAorICAgICAgICBkYXRhOiAnYXBwL2pzL2RhdGEnLAor
ICAgIH0sCisgICAgc2hpbTogeworICAgICAgICAnYXBwL3BhZ2UvYXBwJzogeworICAgICAgICAg
ICAgZGVwczogWydqcXVlcnknLCAnZXM1c2hpbScsICdlczVzaGFtJ10KKyAgICAgICAgfQorICAg
IH0KK30pOworCityZXF1aXJlKFtdLCBmdW5jdGlvbiAoKSB7CisgICAgcmVxdWlyZShbJ2FwcC9w
YWdlL2FwcCddLGZ1bmN0aW9uKEFwcCl7CisgICAgICAgIEFwcC5pbml0aWFsaXplKCk7CisgICAg
ICAgIGNvbnNvbGUubG9nKEFwcCk7CisgICAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9wYWdlL2FwcC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L2FwcC9qcy9wYWdlL2FwcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTczM2EzZDgzMDA3YzdmMDZkNjFj
MjA3MDk1Mzc4ZWQ3YTE0MDU4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvYXBwL2pzL3BhZ2UvYXBwLmpzCkBAIC0wLDAgKzEsMjYgQEAKKy8qZ2xvYmFsIGRlZmlu
ZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdkYXRhL3RvZG9zJywKKyAgICAn
ZGF0YS9zdGF0cycsCisgICAgJ3VpL25ld19pdGVtJywKKyAgICAndWkvdG9kb19saXN0JywKKyAg
ICAndWkvc3RhdHMnLAorICAgICd1aS9tYWluX3NlbGVjdG9yJywKKyAgICAndWkvdG9nZ2xlX2Fs
bCcKK10sIGZ1bmN0aW9uIChUb2Rvc0RhdGEsIFN0YXRzRGF0YSwgTmV3SXRlbVVJLCBUb2RvTGlz
dFVJLCBTdGF0c1VJLCBNYWluU2VsZWN0b3JVSSwgVG9nZ2xlQWxsVUkpIHsKKyAgICB2YXIgaW5p
dGlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgU3RhdHNEYXRhLmF0dGFjaFRvKGRvY3Vt
ZW50KTsKKyAgICAgICAgVG9kb3NEYXRhLmF0dGFjaFRvKGRvY3VtZW50KTsKKyAgICAgICAgTmV3
SXRlbVVJLmF0dGFjaFRvKCcjbmV3LXRvZG8nKTsKKyAgICAgICAgTWFpblNlbGVjdG9yVUkuYXR0
YWNoVG8oJyNtYWluJyk7CisgICAgICAgIFN0YXRzVUkuYXR0YWNoVG8oJyNmb290ZXInKTsKKyAg
ICAgICAgVG9nZ2xlQWxsVUkuYXR0YWNoVG8oJyN0b2dnbGUtYWxsJyk7CisgICAgICAgIFRvZG9M
aXN0VUkuYXR0YWNoVG8oJyN0b2RvLWxpc3QnKTsKKyAgICB9OworCisgICAgcmV0dXJuIHsKKyAg
ICAgICAgaW5pdGlhbGl6ZTogaW5pdGlhbGl6ZQorICAgIH07Cit9KTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9zdG9yZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L2FwcC9qcy9zdG9yZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWE3ZjkwYWNhOTQxMWI1OTdlMTg5
MTg5ZDMyZTc1ZDZiOTdkNGE3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvYXBwL2pzL3N0b3JlLmpzCkBAIC0wLDAgKzEsMTEgQEAKKy8qZ2xvYmFsIGRlZmluZSAq
LworCisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2RlcG90JywKKyAgICAnbWVtb3J5
c3RvcmFnZScKK10sIGZ1bmN0aW9uIChkZXBvdCwgTWVtb3J5U3RvcmFnZSkgeworICAgIHZhciBt
ZW1TdG9yZSA9IG5ldyBNZW1vcnlTdG9yYWdlKCd0b2RvcycpOworICAgIHJldHVybiBkZXBvdCgn
dG9kb3MnLCB7IGlkQXR0cmlidXRlOiAnaWQnLCBzdG9yYWdlQWRhcHRvcjogbWVtU3RvcmUgfSk7
Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS9tYWlu
X3NlbGVjdG9yLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL21haW5fc2Vs
ZWN0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4YzJkNGNlMGE5MmRlMmU0ZTEyMjg3ZmI2ZTE4ODlhZjdl
N2QzMwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91
aS9tYWluX3NlbGVjdG9yLmpzCkBAIC0wLDAgKzEsMjAgQEAKKy8qZ2xvYmFsIGRlZmluZSAqLwor
J3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcKK10s
IGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQpIHsKKyAgICBmdW5jdGlvbiBtYWluU2VsZWN0b3Io
KSB7CisgICAgICAgIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAg
ICAgIHZhciB0b2dnbGUgPSBkYXRhLmFsbCA+IDA7CisgICAgICAgICAgICB0aGlzLiRub2RlLnRv
Z2dsZSh0b2dnbGUpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxp
emUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLiRub2RlLmhpZGUoKTsKKyAgICAg
ICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJywgdGhpcy50b2dnbGUp
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KG1haW5T
ZWxlY3Rvcik7Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9q
cy91aS9uZXdfaXRlbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS9uZXdf
aXRlbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yMWQ2ZDg3ZTM0M2I1NTgxYThhNTdhOGZhMzM5NGI2ZDNiYTQy
NTBiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3Vp
L25ld19pdGVtLmpzCkBAIC0wLDAgKzEsMjkgQEAKKy8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBz
dHJpY3QnOworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcKK10sIGZ1bmN0
aW9uIChkZWZpbmVDb21wb25lbnQpIHsKKyAgICBmdW5jdGlvbiBuZXdJdGVtKCkgeworICAgICAg
ICB2YXIgRU5URVJfS0VZID0gMTM7CisKKyAgICAgICAgdGhpcy5jcmVhdGVPbkVudGVyID0gZnVu
Y3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChlLndoaWNoICE9PSBFTlRFUl9LRVkgfHwKKyAg
ICAgICAgICAgICAgICAhdGhpcy4kbm9kZS52YWwoKS50cmltKCkpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlB
ZGRSZXF1ZXN0ZWQnLCB7CisgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuJG5vZGUudmFsKCku
dHJpbSgpCisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy4kbm9kZS52YWwoJycp
OworICAgICAgICB9OworCisgICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICB0aGlzLm9uKCdrZXlkb3duJywgdGhpcy5jcmVhdGVPbkVudGVy
KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChuZXdJ
dGVtKTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3Vp
L3N0YXRzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3N0YXRzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFkYTdhYzY2YTc0N2RjYTY0YjcwNjAzOWJiNjA4NTUwZDM2MjBkZGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMK
QEAgLTAsMCArMSwzNyBAQAorLypnbG9iYWwgZGVmaW5lICovCisndXNlIHN0cmljdCc7CisKK2Rl
ZmluZShbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywKKyAgICAnLi93aXRoX2ZpbHRlcnMn
LAorICAgICd0ZXh0IXRlbXBsYXRlcy9zdGF0cy5odG1sJywKKyAgICAnYXBwL3V0aWxzJworXSwg
ZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCwgd2l0aEZpbHRlcnMsIHN0YXRzVG1wbCwgdXRpbHMp
IHsKKyAgICBmdW5jdGlvbiBzdGF0cygpIHsKKyAgICAgICAgdmFyIHRlbXBsYXRlID0gdXRpbHMu
dG1wbChzdGF0c1RtcGwpOworCisgICAgICAgIHRoaXMuYXR0cmlidXRlcyh7CisgICAgICAgICAg
ICBjbGVhckNvbXBsZXRlZFNlbGVjdG9yOiAnI2NsZWFyLWNvbXBsZXRlZCcKKyAgICAgICAgfSk7
CisKKyAgICAgICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAg
ICAgdmFyIHRvZ2dsZSA9IGRhdGEuYWxsID4gMDsKKworICAgICAgICAgICAgdGhpcy4kbm9kZS5o
dG1sKHRlbXBsYXRlKGRhdGEpKTsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUudG9nZ2xlKHRvZ2ds
ZSk7CisgICAgICAgICAgICB0aGlzLm1hcmtTZWxlY3RlZChkYXRhLmZpbHRlcik7CisgICAgICAg
IH07CisKKyAgICAgICAgdGhpcy5jbGVhckNvbXBsZXRlZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHRoaXMudHJpZ2dlcigndWlDbGVhclJlcXVlc3RlZCcpOworICAgICAgICB9OworCisg
ICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICB0aGlzLiRub2RlLmhpZGUoKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRh
U3RhdHNDb3VudGVkJywgdGhpcy5yZW5kZXIpOworICAgICAgICAgICAgdGhpcy5vbignY2xpY2sn
LCB7ICdjbGVhckNvbXBsZXRlZFNlbGVjdG9yJzogdGhpcy5jbGVhckNvbXBsZXRlZCB9KTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChzdGF0cywgd2l0
aEZpbHRlcnMpOworfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAv
anMvdWkvdG9kb19saXN0LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3Rv
ZG9fbGlzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTRkODNkNzU1NDgwYmY3OTNjODgzZGUwMzFlYzI0YjAx
YWI3YTdlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pz
L3VpL3RvZG9fbGlzdC5qcwpAQCAtMCwwICsxLDEwOCBAQAorLypnbG9iYWwgZGVmaW5lLCAkICov
CisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywK
KyAgICAndGV4dCF0ZW1wbGF0ZXMvdG9kby5odG1sJywKKyAgICAnYXBwL3V0aWxzJworXSwgZnVu
Y3Rpb24gKGRlZmluZUNvbXBvbmVudCwgdG9kb1RtcGwsIHV0aWxzKSB7CisgICAgZnVuY3Rpb24g
dG9kb0xpc3QoKSB7CisgICAgICAgIHZhciBFTlRFUl9LRVkgPSAxMzsKKyAgICAgICAgdmFyIHRl
bXBsYXRlID0gdXRpbHMudG1wbCh0b2RvVG1wbCk7CisKKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVz
KHsKKyAgICAgICAgICAgIGRlc3Ryb3lTZWxlY3RvcjogJ2J1dHRvbi5kZXN0cm95JywKKyAgICAg
ICAgICAgIHRvZ2dsZVNlbGVjdG9yOiAnaW5wdXQudG9nZ2xlJywKKyAgICAgICAgICAgIGxhYmVs
U2VsZWN0b3I6ICdsYWJlbCcsCisgICAgICAgICAgICBlZGl0U2VsZWN0b3I6ICcuZWRpdCcKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5yZW5kZXJBbGwgPSBmdW5jdGlvbiAoZSwgZGF0YSkg
eworICAgICAgICAgICAgdGhpcy4kbm9kZS5odG1sKCcnKTsKKyAgICAgICAgICAgIGRhdGEudG9k
b3MuZm9yRWFjaChmdW5jdGlvbiAoZWFjaCkgeworICAgICAgICAgICAgICAgIHRoaXMucmVuZGVy
KGUsIHsgdG9kbzogZWFjaCB9KTsKKyAgICAgICAgICAgIH0sIHRoaXMpOworICAgICAgICB9Owor
CisgICAgICAgIHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAg
IGlmIChlLnR5cGUgPT09ICdkYXRhVG9kb0FkZGVkJyAmJiBkYXRhLmZpbHRlciA9PT0gJ2NvbXBs
ZXRlZCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRoaXMuJG5vZGUuYXBwZW5kKHRlbXBsYXRlKGRhdGEudG9kbykpOworICAgICAgICB9
OworCisgICAgICAgIHRoaXMuZWRpdCA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAg
ICB2YXIgJHRvZG9FbCA9ICQoZGF0YS5lbCkucGFyZW50cygnbGknKTsKKworICAgICAgICAgICAg
JHRvZG9FbC5hZGRDbGFzcygnZWRpdGluZycpOworICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2Vk
aXRTZWxlY3RvcicpLmZvY3VzKCk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZXF1ZXN0
VXBkYXRlID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHZhciAkaW5wdXRFbCA9ICQoZS5j
dXJyZW50VGFyZ2V0KTsKKyAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJGlucHV0RWwucGFyZW50
cygnbGknKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9ICRpbnB1dEVsLnZhbCgpLnRyaW0oKTsK
KyAgICAgICAgICAgIHZhciBpZCA9ICR0b2RvRWwuYXR0cignaWQnKTsKKworICAgICAgICAgICAg
aWYgKCEkdG9kb0VsLmhhc0NsYXNzKCdlZGl0aW5nJykpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICR0b2RvRWwucmVtb3ZlQ2xhc3MoJ2Vk
aXRpbmcnKTsKKworICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgJHRv
ZG9FbC5maW5kKCdsYWJlbCcpLmh0bWwodmFsdWUpOworICAgICAgICAgICAgICAgIHRoaXMudHJp
Z2dlcigndWlVcGRhdGVSZXF1ZXN0ZWQnLCAgeyBpZDogaWQsIHRpdGxlOiB2YWx1ZSB9KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVJlbW92
ZVJlcXVlc3RlZCcsIHsgaWQ6IGlkIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZU9uRW50ZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewor
ICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IEVOVEVSX0tFWSkgeworICAgICAgICAgICAgICAg
IHRoaXMucmVxdWVzdFVwZGF0ZShlLCBkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICB0aGlzLnJlcXVlc3RSZW1vdmUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAg
ICAgICAgICAgdmFyIGlkID0gJChkYXRhLmVsKS5hdHRyKCdpZCcpLnNwbGl0KCdfJylbMV07Cisg
ICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpUmVtb3ZlUmVxdWVzdGVkJywgeyBpZDogaWQgfSk7
CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbiAoZSwgZGF0YSkg
eworICAgICAgICAgICAgdmFyICR0b2RvRWwgPSB0aGlzLiRub2RlLmZpbmQoJyMnICsgZGF0YS5p
ZCk7CisgICAgICAgICAgICAkdG9kb0VsLnJlbW92ZSgpOworICAgICAgICB9OworCisgICAgICAg
IHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZhciAkdG9k
b0VsID0gJChkYXRhLmVsKS5wYXJlbnRzKCdsaScpOworCisgICAgICAgICAgICAkdG9kb0VsLnRv
Z2dsZUNsYXNzKCdjb21wbGV0ZWQnKTsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlUb2dn
bGVSZXF1ZXN0ZWQnLCB7IGlkOiAkdG9kb0VsLmF0dHIoJ2lkJykgfSk7CisgICAgICAgIH07CisK
KyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb0FkZGVkJywgdGhpcy5yZW5kZXIpOworICAg
ICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2Rvc0xvYWRlZCcsIHRoaXMucmVuZGVy
QWxsKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb3NGaWx0ZXJlZCcs
IHRoaXMucmVuZGVyQWxsKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9k
b1RvZ2dsZWRBbGwnLCB0aGlzLnJlbmRlckFsbCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3Vt
ZW50LCAnZGF0YVRvZG9SZW1vdmVkJywgdGhpcy5yZW1vdmUpOworCisgICAgICAgICAgICB0aGlz
Lm9uKCdjbGljaycsIHsgJ2Rlc3Ryb3lTZWxlY3Rvcic6IHRoaXMucmVxdWVzdFJlbW92ZSB9KTsK
KyAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeyAndG9nZ2xlU2VsZWN0b3InOiB0aGlzLnRv
Z2dsZSB9KTsKKyAgICAgICAgICAgIHRoaXMub24oJ2RibGNsaWNrJywgeyAnbGFiZWxTZWxlY3Rv
cic6IHRoaXMuZWRpdCB9KTsKKworICAgICAgICAgICAgdGhpcy4kbm9kZS5vbignYmx1cicsICcu
ZWRpdCcsIHRoaXMucmVxdWVzdFVwZGF0ZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIHRoaXMu
JG5vZGUub24oJ2tleWRvd24nLCAnLmVkaXQnLCB0aGlzLnJlcXVlc3RVcGRhdGVPbkVudGVyLmJp
bmQodGhpcykpOworCisgICAgICAgICAgICAvLyB0aGVzZSBkb24ndCB3b3JrCisgICAgICAgICAg
ICAvLyB0aGlzLm9uKHRoaXMuYXR0ci5lZGl0U2VsZWN0b3IsICdibHVyJywgdGhpcy5yZXF1ZXN0
VXBkYXRlKTsKKyAgICAgICAgICAgIC8vIHRoaXMub24oJ2JsdXInLCB7ICdlZGl0U2VsZWN0b3In
OiB0aGlzLnJlcXVlc3RVcGRhdGUgfSk7CisKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlM
b2FkUmVxdWVzdGVkJyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBkZWZpbmVD
b21wb25lbnQodG9kb0xpc3QpOworfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9hcHAvanMvdWkvdG9nZ2xlX2FsbC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2Fw
cC9qcy91aS90b2dnbGVfYWxsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkYzY5ODNjMzFhYjZmYzFiMTcxODA1
ODU3MGQ0MjM3ZGY3NDc0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9hcHAvanMvdWkvdG9nZ2xlX2FsbC5qcwpAQCAtMCwwICsxLDI1IEBACisvKmdsb2JhbCBk
ZWZpbmUgKi8KKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsKKyAgICAnZmxpZ2h0L2xpYi9jb21w
b25lbnQnCitdLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50KSB7CisgICAgZnVuY3Rpb24gdG9n
Z2xlQWxsKCkgeworICAgICAgICB0aGlzLnRvZ2dsZUFsbENvbXBsZXRlID0gZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVRvZ2dsZUFsbFJlcXVlc3RlZCcsIHsKKyAg
ICAgICAgICAgICAgICBjb21wbGV0ZWQ6IHRoaXMuJG5vZGUuaXMoJzpjaGVja2VkJykKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9OworCisgICAgICAgIHRoaXMudG9nZ2xlQ2hlY2tib3ggPSBm
dW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdGhpcy5ub2RlLmNoZWNrZWQgPSAhZGF0
YS5yZW1haW5pbmc7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6
ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgdGhpcy50b2dn
bGVBbGxDb21wbGV0ZSk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVN0YXRz
Q291bnRlZCcsIHRoaXMudG9nZ2xlQ2hlY2tib3gpOworICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHRvZ2dsZUFsbCk7Cit9KTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvd2l0aF9maWx0ZXJzLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIx
NzI3OThlMWU5NzA0OTdhOTBmNjNjMmY0MDIzYzdjZjkwYzM3MTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvd2l0aF9maWx0ZXJzLmpzCkBAIC0w
LDAgKzEsMjYgQEAKKy8qZ2xvYmFsIGRlZmluZSwgJCAqLworJ3VzZSBzdHJpY3QnOworCitkZWZp
bmUoZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBmdW5jdGlvbiB3aXRoRmlsdGVycygpIHsKKyAg
ICAgICAgdGhpcy5hdHRyaWJ1dGVzKHsKKyAgICAgICAgICAgIGZpbHRlclNlbGVjdG9yOiAnI2Zp
bHRlcnMgYScKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5jaG9vc2VGaWx0ZXIgPSBmdW5j
dGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIGZpbHRlciA9IGRhdGEuZWwuaGFzaC5z
bGljZSgyKTsKKworICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2ZpbHRlclNlbGVjdG9yJykucmVt
b3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAkKGRhdGEuZWwpLmFkZENsYXNzKCdz
ZWxlY3RlZCcpOworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aUZpbHRlclJlcXVlc3RlZCcs
IHsgZmlsdGVyOiBmaWx0ZXIgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5tYXJrU2Vs
ZWN0ZWQgPSBmdW5jdGlvbiAoZmlsdGVyKSB7CisgICAgICAgICAgICB0aGlzLiRub2RlLmZpbmQo
J1tocmVmPSIjLycgKyBmaWx0ZXIgKyAnIl0nKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAg
ICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB7IGZpbHRlclNlbGVjdG9yOiB0aGlzLmNob29z
ZUZpbHRlciB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3V0aWxzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL3V0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhODU3MzM5MWMwNTRjNDExOGY0NTg0ZjA5
OTBiYjNjNmQ4ODNhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9hcHAvanMvdXRpbHMuanMKQEAgLTAsMCArMSwxMzQgQEAKKy8qZ2xvYmFsIGRlZmluZSAqLwor
J3VzZSBzdHJpY3QnOworCisvLyB0bXBsIGZ1bmN0aW9uIHNjb29wZWQgZnJvbSB1bmRlcnNjb3Jl
LgorLy8gaHR0cDovL2RvY3VtZW50Y2xvdWQuZ2l0aHViLmNvbS91bmRlcnNjb3JlLyN0ZW1wbGF0
ZQorZGVmaW5lKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgXyA9IHt9OworCisgICAgLy8gTGlzdCBv
ZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy4KKyAgICB2YXIgZW50aXR5TWFwID0geworICAg
ICAgICBlc2NhcGU6IHsKKyAgICAgICAgICAgICcmJzogJyZhbXA7JywKKyAgICAgICAgICAgICc8
JzogJyZsdDsnLAorICAgICAgICAgICAgJz4nOiAnJmd0OycsCisgICAgICAgICAgICAnIic6ICcm
cXVvdDsnLAorICAgICAgICAgICAgLypqc2hpbnQgcXVvdG1hcms6ZmFsc2UgKi8KKyAgICAgICAg
ICAgICInIjogJyYjeDI3OycsCisgICAgICAgICAgICAnLyc6ICcmI3gyRjsnCisgICAgICAgIH0K
KyAgICB9OworCisgICAgdmFyIGVzY2FwZUtleXMgPSAnJjw+IlwnLyc7CisgICAgdmFyIHVuZXNj
YXBlS2V5cyA9ICcmYW1wO3wmbHQ7fCZndDt8JnF1b3Q7fCYjeDI3O3wmI3gyRjsnOworCisgICAg
Ly8gUmVnZXhlcyBjb250YWluaW5nIHRoZSBrZXlzIGFuZCB2YWx1ZXMgbGlzdGVkIGltbWVkaWF0
ZWx5IGFib3ZlLgorICAgIHZhciBlbnRpdHlSZWdleGVzID0geworICAgICAgICBlc2NhcGU6ICAg
bmV3IFJlZ0V4cCgnWycgKyBlc2NhcGVLZXlzICsgJ10nLCAnZycpLAorICAgICAgICB1bmVzY2Fw
ZTogbmV3IFJlZ0V4cCgnKCcgKyB1bmVzY2FwZUtleXMgKyAnKScsICdnJykKKyAgICB9OworCisg
ICAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyBzdHJpbmdzIHRvL2Zy
b20gSFRNTCBpbnRlcnBvbGF0aW9uLgorICAgIFsnZXNjYXBlJywgJ3VuZXNjYXBlJ10uZm9yRWFj
aChmdW5jdGlvbiAobWV0aG9kKSB7CisgICAgICAgIF9bbWV0aG9kXSA9IGZ1bmN0aW9uIChzdHJp
bmcpIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiAoJycgKyBzdHJpbmcpLnJlcGxhY2UoZW50aXR5UmVnZXhlc1ttZXRo
b2RdLCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50aXR5TWFw
W21ldGhvZF1bbWF0Y2hdOworICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgfSk7CisK
KyAgICB2YXIgc2V0dGluZ3MgPSB7CisgICAgICAgIGV2YWx1YXRlOiAvPCUoW1xzXFNdKz8pJT4v
ZywKKyAgICAgICAgaW50ZXJwb2xhdGU6IC88JT0oW1xzXFNdKz8pJT4vZywKKyAgICAgICAgZXNj
YXBlOiAvPCUtKFtcc1xTXSs/KSU+L2cKKyAgICB9OworCisgICAgdmFyIG5vTWF0Y2ggPSAvKC4p
Xi87CisgICAgdmFyIGVzY2FwZXMgPSB7CisgICAgICAgIC8qanNoaW50IHF1b3RtYXJrOmZhbHNl
ICovCisgICAgICAgICInIjogIiciLAorICAgICAgICAnXFwnOiAnXFwnLAorICAgICAgICAnXHIn
OiAncicsCisgICAgICAgICdcbic6ICduJywKKyAgICAgICAgJ1x0JzogJ3QnLAorICAgICAgICAn
XHUyMDI4JzogJ3UyMDI4JywKKyAgICAgICAgJ1x1MjAyOSc6ICd1MjAyOScKKyAgICB9OworCisg
ICAgdmFyIGVzY2FwZXIgPSAvXFx8J3xccnxcbnxcdHxcdTIwMjh8XHUyMDI5L2c7CisKKyAgICAv
LyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGlt
cGxlbWVudGF0aW9uLgorICAgIC8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0
cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSwKKyAgICAvLyBhbmQgY29ycmVj
dGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0ZWQgY29kZS4KKyAgICB2YXIgdGVt
cGxhdGUgPSBmdW5jdGlvbiAodGV4dCwgZGF0YSkgeworICAgICAgICB2YXIgcmVuZGVyOworCisg
ICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24g
dmlhIGFsdGVybmF0aW9uLgorICAgICAgICB2YXIgbWF0Y2hlciA9IG5ldyBSZWdFeHAoWworICAg
ICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAg
ICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAorICAgICAgICAgICAg
KHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJjZQorICAgICAgICBdLmpvaW4oJ3wn
KSArICd8JCcsICdnJyk7CisKKyAgICAgICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNl
LCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgdmFyIGlu
ZGV4ID0gMDsKKyAgICAgICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOworICAgICAgICB0ZXh0LnJl
cGxhY2UobWF0Y2hlciwgZnVuY3Rpb24gKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFs
dWF0ZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwg
b2Zmc2V0KQorICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24gKG1hdGNoKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgc291
cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190
KSkrXG4nIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZSkgewor
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAi
KSk9PW51bGw/Jyc6X190KStcbiciOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV2
YWx1YXRlKSB7CisgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsg
IlxuX19wKz0nIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ID0gb2Zmc2V0ICsg
bWF0Y2gubGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAgICB9KTsKKyAg
ICAgICAgc291cmNlICs9ICInO1xuIjsKKworICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5v
dCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgorICAgICAgICBp
ZiAoIXNldHRpbmdzLnZhcmlhYmxlKSB7CisgICAgICAgICAgICBzb3VyY2UgPSAnd2l0aChvYmp8
fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKKyAgICAgICAgfQorCisgICAgICAgIHNvdXJjZSA9
ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAgICAg
ICAicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIgKwor
ICAgICAgICAgICAgc291cmNlICsgInJldHVybiBfX3A7XG4iOworCisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAvKmpzaGludCBldmlsOnRydWUgKi8KKyAgICAgICAgICAgIHJlbmRlciA9IG5l
dyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOworICAg
ICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgIGVyci5zb3VyY2UgPSBzb3VyY2U7Cisg
ICAgICAgICAgICB0aHJvdyBlcnI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGF0YSkgewor
ICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gcmVu
ZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gUHJvdmlk
ZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNv
bXBpbGF0aW9uLgorICAgICAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIChzZXR0
aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcbicgKyBzb3VyY2UgKyAnfSc7CisKKyAgICAg
ICAgcmV0dXJuIHRlbXBsYXRlOworICAgIH07CisKKyAgICByZXR1cm4geworICAgICAgICB0bXBs
OiB0ZW1wbGF0ZQorICAgIH07Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L2FwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2Fw
cC90ZW1wbGF0ZXMvc3RhdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2NiYTllYTg0ODZmNzY5MzkyMzE2
NTc1OWNhNzRjZDE5NTgwYmJhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0cy5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzxzcGFuIGlk
PSJ0b2RvLWNvdW50Ij4KKyAgICA8c3Ryb25nPjwlPSByZW1haW5pbmcgJT48L3N0cm9uZz4gPCU9
IHJlbWFpbmluZyA9PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJyAlPiBsZWZ0Cis8L3NwYW4+Cis8dWwg
aWQ9ImZpbHRlcnMiPgorICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iIy8iPkFsbDwvYT4KKyAg
ICA8L2xpPgorICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwvYT4K
KyAgICA8L2xpPgorICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iIy9jb21wbGV0ZWQiPkNvbXBs
ZXRlZDwvYT4KKyAgICA8L2xpPgorPC91bD4KKzwlIGlmIChjb21wbGV0ZWQpIHsgJT4KKzxidXR0
b24gaWQ9ImNsZWFyLWNvbXBsZXRlZCI+Q2xlYXIgY29tcGxldGVkPC9idXR0b24+Cis8JSB9ICU+
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8u
aHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvdG9kby5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIxZmY3NTM4OWRmNTcwMTI2MmUxZjUyNjFlYzk0NTMzMjRjM2ViNmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8u
aHRtbApAQCAtMCwwICsxLDggQEAKKzxsaSBpZD0iPCU9IGlkICU+IiBjbGFzcz0iPCU9IGNvbXBs
ZXRlZCA/ICdjb21wbGV0ZWQnIDogJycgJT4iPgorICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAg
ICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3giIDwlPSBjb21wbGV0ZWQg
PyAnY2hlY2tlZCcgOiAnJyAlPj4KKyAgICAgICAgPGxhYmVsPjwlLSB0aXRsZSAlPjwvbGFiZWw+
CisgICAgICAgIDxidXR0b24gaWQ9ImRlc3Ryb3lfPCU9IGlkICU+IiBjbGFzcz0iZGVzdHJveSI+
PC9idXR0b24+CisgICAgPC9kaXY+CisgICAgPGlucHV0IGNsYXNzPSJlZGl0IiB2YWx1ZT0iPCUt
IHRpdGxlICU+Ij4KKzwvbGk+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9p
bmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvaW5kZXguaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MDBmYmIwYzk4MTYzNDFiMmJjZTQ4NzkwMjRkYjc5Yzc2YWFmMDE3Ci0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvaW5kZXguaHRtbApAQCAtMCwwICsxLDMwIEBA
Cis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBkYXRhLWZyYW1ld29yaz0iZmxpZ2h0
Ij4KKyAgICA8aGVhZD4KKyAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgICAgICA8
dGl0bGU+RmxpZ2h0IOKAoiBUb2RvPC90aXRsZT4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgorICAgICAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1j
c3MvaW5kZXguY3NzIj4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDxzZWN0aW9u
IGlkPSJ0b2RvYXBwIj4KKyAgICAgICAgICAgIDxoZWFkZXIgaWQ9ImhlYWRlciI+CisgICAgICAg
ICAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Im5ldy10
b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIgYXV0b2ZvY3VzPgorICAg
ICAgICAgICAgPC9oZWFkZXI+CisgICAgICAgICAgICA8c2VjdGlvbiBpZD0ibWFpbiI+CisgICAg
ICAgICAgICAgICAgPGlucHV0IGlkPSJ0b2dnbGUtYWxsIiB0eXBlPSJjaGVja2JveCI+CisgICAg
ICAgICAgICAgICAgPGxhYmVsIGZvcj0idG9nZ2xlLWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8
L2xhYmVsPgorICAgICAgICAgICAgICAgIDx1bCBpZD0idG9kby1saXN0Ij48L3VsPgorICAgICAg
ICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPGZvb3RlciBpZD0iZm9vdGVyIj48L2Zvb3Rl
cj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8Zm9vdGVyIGlkPSJpbmZvIj4KKyAgICAg
ICAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgICAgICAgIDxw
PlNwZWVkb21ldGVyIHZlcnNpb24gYnkgQWRkeSBPc21hbmk8L3A+CisgICAgICAgICAgICA8cD5D
cmVhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21rdWtsaXMiPk1pY2hhbCBLdWts
aXM8L2E+PC9wPgorICAgICAgICAgICAgPHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212
Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgorICAgICAgICA8L2Zvb3Rlcj4KKyAgICAgICAgPHNjcmlw
dCBkYXRhLW1haW49ImFwcC9qcy9tYWluIiBzcmM9Im5vZGVfbW9kdWxlcy9yZXF1aXJlanMvcmVx
dWlyZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2RlcG90L1JFQURNRS5tZCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9SRUFETUUubWQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWM3NmY3MDVlNzJiZDQ0MzEwMWRkNDVhMjRmOGEyN2YwOTY4OWUxOAotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9SRUFETUUu
bWQKQEAgLTAsMCArMSwxODUgQEAKKyMjIGRlcG90LmpzCisKK1shW2J1aWxkIHN0YXR1c10oaHR0
cHM6Ly9zZWN1cmUudHJhdmlzLWNpLm9yZy9ta3VrbGlzL2RlcG90LmpzLnBuZyldKGh0dHA6Ly90
cmF2aXMtY2kub3JnL21rdWtsaXMvZGVwb3QuanMpCisKKyFbZGVwb3QuanNdKGh0dHA6Ly9vaTQ1
LnRpbnlwaWMuY29tL3hvaXE3bC5qcGcpCisKKworIyMgRGVzY3JpcHRpb24KKworKipkZXBvdC5q
cyoqIGlzIGEgbmFtZXNwYWNlZCBbbG9jYWxTdG9yYWdlXShodHRwOi8vZGl2ZWludG9odG1sNS5p
bmZvL3N0b3JhZ2UuaHRtbCkgd3JhcHBlciB3aXRoIGEgc2ltcGxlIEFQSS4KK1RoZXJlIGFyZSBb
b3RoZXJdKGh0dHA6Ly9icmlhbi5pby9sYXduY2hhaXIvKSBbdG9vbHNdKGh0dHBzOi8vZ2l0aHVi
LmNvbS9tYXJjdXN3ZXN0aW4vc3RvcmUuanMvKSBvdXQgdGhlcmUgYnV0IG5vbmUKK29mIHRoZW0g
aGFkIHdoYXQgSSB3YXMgbG9va2luZyBmb3IuCisKKworIyMgU2V0dXAKKworZGVwb3QuanMgc2hv
dWxkIHdvcmsgd2VsbCB3aXRoIENvbW1vbkpTIGFuZCBBTUQgbG9hZGVycy4KK0lmIGxvYWRlcnMg
YXJlIG5vdCBwcmVzZW50IGRlcG90LmpzIHdpbGwgYXR0YWNoIGl0c2VsZiB0byB0aGUgY3VycmVu
dCBjb250ZXh0ICh3aW5kb3cpIHdoZW4gbG9hZGVkIHZpYSBgPHNjcmlwdCBzcmM9ImRlcG90Lm1p
bi5qcyI+PC9zY3JpcHQ+YC4KKworZGVwb3QuanMgaXMgYWxzbyBhIFtib3dlcl0oaHR0cHM6Ly9n
aXRodWIuY29tL3R3aXR0ZXIvYm93ZXIpIFtjb21wb25lbnRdKGh0dHA6Ly9zaW5kcmVzb3JodXMu
Y29tL2Jvd2VyLWNvbXBvbmVudHMvKSBzbyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gaW5zdGFsbCBp
dCBieSBydW5uaW5nOgorCitgYm93ZXIgaW5zdGFsbCBkZXBvdGAKKworb3IgaWYgeW91IGFscmVh
ZHkgaGF2ZSBhIGJvd2VyIGJhc2VkIHByb2plY3QgeW91IGNhbiBhZGQgZGVwb3QuanMgdG8geW91
ciBkZXBlbmRlbmN5IGxpc3QgaW4gYGNvbXBvbmVudC5qc29uYAorCitgYGBqcworICJkZXBlbmRl
bmNpZXMiOiB7CisgICAgLi4uCisgICAgImRlcG90IjogIjAueC54IgorICAgIC4uLgorICB9Citg
YGAKKworCisjIyBEZXBlbmRlbmNpZXMKKworZGVwb3QuanMgZG9lcyBub3QgZGVwZW5kIG9uIGFu
eSBvdGhlciBsaWJyYXJpZXMgaG93ZXZlciBpZiB5b3UgcGxhbiB0byBzdXBwb3J0IG9sZGVyIGJy
b3dzZXJzIHlvdSB3aWxsIG5lZWQgdG8gaW5jbHVkZSBbRVM1LXNoaW1dKGh0dHBzOi8vZ2l0aHVi
LmNvbS9rcmlza293YWwvZXM1LXNoaW0pLgorCitJZiB5b3UgcGxhbiB0byBydW4gaXQgb24gYnJv
d3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IFtsb2NhbFN0b3JhZ2VdKGh0dHA6Ly9kaXZlaW50b2h0
bWw1LmluZm8vc3RvcmFnZS5odG1sKSB5b3UgbWF5IHRyeSB0byBpbmNsdWRlIFtzdG9yYWdlIHBv
bHlmaWxsXShodHRwczovL2dpc3QuZ2l0aHViLmNvbS9yZW15LzM1MDQzMykuCisKKyMjIEFQSQor
CisrIHNhdmUocmVjb3JkKQorCisrIHVwZGF0ZUFsbChoYXNoKQorCisrIHVwZGF0ZShoYXNoKQor
CisrIGZpbmQoaGFzaCB8IGZ1bmN0aW9uKQorCisrIGFsbCgpCisKKysgZGVzdHJveShpZCB8IHJl
Y29yZCkKKworKyBkZXN0cm95QWxsKG5vbmUgfCBoYXNoIHwgZnVuY3Rpb24pCisKKysgZ2V0KGlk
KQorCisrIHNpemUoKQorCisjI1VzYWdlCisKKyMjIyNEZWZpbmUgbmV3IHN0b3JlCisKK2BgYGpz
Cit2YXIgdG9kb1N0b3JlID0gZGVwb3QoJ3RvZG9zJyk7CitgYGAKKworIyMjI0FkZCBuZXcgcmVj
b3JkcworCitgX2lkYCBwcm9wZXJ0eSB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgYXR0YWNoZWQgdG8g
ZWFjaCBuZXcgcmVjb3JkOgorCitgYGBqcwordG9kb1N0b3JlLnNhdmUoeyB0aXRsZTogInRvZG8x
IiB9KTsKK3RvZG9TdG9yZS5zYXZlKHsgdGl0bGU6ICJ0b2RvMiIsIGNvbXBsZXRlZDogdHJ1ZSB9
KTsKK3RvZG9TdG9yZS5zYXZlKHsgdGl0bGU6ICJ0b2RvMyIsIGNvbXBsZXRlZDogdHJ1ZSB9KTsK
K2BgYAorCisjIyMjVXBkYXRlIGFsbCByZWNvcmRzCisKK2BgYGpzCit0b2RvU3RvcmUudXBkYXRl
QWxsKHsgY29tcGxldGVkOiBmYWxzZSB9KTsKK2BgYAorCisjIyMjUmV0dXJuIGFsbCByZWNvcmRz
CisKK2BgYGpzCit0b2RvU3RvcmUuYWxsKCk7IC8vIFt7IGlkOiAxLCB0aXRsZSAidG9kbzEiIH0s
IHtpZDogMiwgdGl0bGU6IHRvZG8yIH1dCitgYGAKKworIyMjI0ZpbmQgcmVjb3JkcworCisqIGZp
bmQgYmFzZWQgb24gZ2l2ZW4gY3JpdGVyaWEKKworYGBganMKK3RvZG9TdG9yZS5maW5kKHsgY29t
cGxldGVkOiB0cnVlIH0pOyAvLyBbeyBpZDogMiwgdGl0bGU6ICJ0b2RvMiIgfSwgeyBpZDogMywg
dGl0bGU6ICJ0b2RvMyIgfV0KK2BgYAorCisqIGZpbmQgYmFzZWQgb24gZ2l2ZW4gZnVuY3Rpb24K
KworYGBganMKK3RvZG9TdG9yZS5maW5kKGZ1bmN0aW9uIChyZWNvcmQpIHsKKyAgcmV0dXJuIHJl
Y29yZC5jb21wbGV0ZWQgJiYgcmVjb3JkLnRpdGxlID09ICJ0b2RvMyI7Cit9KTsgLy8gW3sgaWQ6
IDMsIHRpdGxlOiAidG9kbzMiIH1dCitgYGAKKworCisjIyMjUmV0dXJuIHNpbmdsZSByZWNvcmQg
YnkgaWQKKworYGBganMKK3RvZG9TdG9yZS5nZXQoMSk7IC8vIHsgaWQ6IDEsIHRpdGxlOiAidG9k
bzEiIH0KK2BgYAorCisjIyMjRGVzdHJveSBzaW5nbGUgcmVjb3JkCisKKyogYnkgcmVjb3JkIGlk
CisKK2BgYGpzCit0b2RvU3RvcmUuZGVzdHJveSgxKTsKK2BgYAorCisqIGJ5IHJlY29yZCBvYmpl
Y3QKKworYGBganMKK3RvZG9TdG9yZS5kZXN0cm95KHRvZG8pOworYGBgCisKKyMjIyNEZXN0cm95
IGFsbCByZWNvcmRzCisKKyogZGVzdHJveSBhbGwKKworYGBganMKK3RvZG9TdG9yZS5kZXN0cm95
QWxsKCk7CitgYGAKKworKiBkZXN0cm95IGJ5IGdpdmVuIGNyaXRlcmlhCisKK2BgYGpzCit0b2Rv
U3RvcmUuZGVzdHJveUFsbCh7IGNvbXBsZXRlZDogdHJ1ZSB9KTsKK2BgYAorCisqIGRlc3Ryb3kg
YnkgZ2l2ZW4gZnVuY3Rpb24KKworYGBganMKK3RvZG9TdG9yZS5kZXN0cm95QWxsKGZ1bmN0aW9u
IChyZWNvcmQpIHsKKyAgcmV0dXJuIHJlY29yZC5jb21wbGV0ZWQgJiYgcmVjb3JkLnRpdGxlID09
ICJ0b2RvMyI7Cit9KTsKK2BgYAorCisjI09wdGlvbnMKKworWW91IGNhbiBwYXNzIGEgc2Vjb25k
IHBhcmFtZXRlciB0byBkZXBvdC5qcyB3aXRoIGFkZGl0aW9uYWwgb3B0aW9ucy4KKworYGBganMK
K3ZhciB0b2RvU3RvcmUgPSBkZXBvdCgidG9kb3MiLCBvcHRpb25zKTsKK2BgYAorCisjIyMgQXZh
aWxhYmxlIG9wdGlvbnM6CisKKysgaWRBdHRyaWJ1dGUgLSB1c2VkIHRvIG92ZXJyaWRlIHJlY29y
ZCBpZCBwcm9wZXJ0eSAoZGVmYXVsdDogYF9pZGApCisKK2BgYGpzCit2YXIgdG9kb1N0b3JlID0g
ZGVwb3QoInRvZG9zIiwgeyBpZEF0dHJpYnV0ZTogJ2lkJyB9KTsKK2BgYAorCisrIHN0b3JhZ2VB
ZGFwdG9yIC0gdXNlZCB0byBvdmVycmlkZSBzdG9yYWdlIHR5cGUgKGRlZmF1bHQ6IGBsb2NhbFN0
b3JhZ2VgKQorCitgYGBqcwordmFyIHRvZG9TdG9yZSA9IGRlcG90KCd0b2RvcycsIHsgc3RvcmFn
ZUFkYXB0b3I6IHNlc3Npb25TdG9yYWdlIH0pOworYGBgCisKKworIyNDb250cmlidXRvcnM6CisK
KyogW0Bta3VrbGlzXShodHRwOi8vZ2l0aHViLmNvbS9ta3VrbGlzKQorKiBbQHNjdHRubHNuXSho
dHRwOi8vZ2l0aHViLmNvbS9zY3R0bmxzbikKKyogW0BjaHJpc3BpdHRdKGh0dHA6Ly9naXRodWIu
Y29tL2NocmlzcGl0dCkKKyogW0BzaW1vbnNtaXRoXShodHRwOi8vZ2l0aHViLmNvbS9zaW1vbnNt
aXRoKQorKiBbQG1kbGF3c29uXShodHRwOi8vZ2l0aHViLmNvbS9tZGxhd3NvbikKKyogW0BqZGJh
cnRsZXR0XShodHRwOi8vZ2l0aHViLmNvbS9qZGJhcnRsZXR0KQorCisjI0xpY2Vuc2U6Cis8cHJl
PgorVGhlIE1JVCBMaWNlbnNlCis8L3ByZT4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9kZXBvdC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9kZXBvdC9kZXBvdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjgzODJiYjBmNmFl
MzA1YjhiZTE0NjE1NzU0ODU1ZWUxMDBjNDg3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2RlcG90L2RlcG90LmpzCkBAIC0wLDAgKzEsMjQ5
IEBACisvLyBkZXBvdC5qcyB2MC4xLjYKKworLy8gKGMpIDIwMTMgTWljaGFsIEt1a2xpcworLy8g
TGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvTUlUCisKKyhmdW5jdGlvbiAobmFtZSwgcm9vdCwgZmFjdG9yeSkgeworICBpZiAo
dHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcpIHsKKyAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3Rv
cnkoKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5l
LmFtZCkgeworICAgIGRlZmluZShmYWN0b3J5KTsKKyAgfSBlbHNlIHsKKyAgICByb290W25hbWVd
ID0gZmFjdG9yeSgpOworICB9Cit9KCJkZXBvdCIsIHRoaXMsIGZ1bmN0aW9uICgpIHsKKworICAi
dXNlIHN0cmljdCI7CisKKyAgLy8gZGVwb3QgYXBpCisKKyAgdmFyIGFwaSA9IHsKKworICAgIHNh
dmU6IGZ1bmN0aW9uIChyZWNvcmQpIHsKKyAgICAgIHZhciBpZCwgaWRzOworCisgICAgICB0aGlz
LnJlZnJlc2goKTsKKworICAgICAgaWYgKCFyZWNvcmRbdGhpcy5pZEF0dHJpYnV0ZV0pIHsKKyAg
ICAgICAgcmVjb3JkW3RoaXMuaWRBdHRyaWJ1dGVdID0gZ3VpZCgpOworICAgICAgfQorCisgICAg
ICBpZCA9IHJlY29yZFt0aGlzLmlkQXR0cmlidXRlXSArICcnOworCisgICAgICBpZiAodGhpcy5p
ZHMuaW5kZXhPZihpZCkgPCAwKSB7CisgICAgICAgIHRoaXMuaWRzLnB1c2goaWQpOworICAgICAg
ICBpZHMgPSB0aGlzLmlkcy5qb2luKCIsIik7CisgICAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3Iu
c2V0SXRlbSh0aGlzLm5hbWUsIGlkcyk7CisgICAgICAgIHRoaXMuc3RvcmUgPSBpZHM7CisgICAg
ICB9CisKKyAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3Iuc2V0SXRlbShnZXRLZXkodGhpcy5uYW1l
LCBpZCksIEpTT04uc3RyaW5naWZ5KHJlY29yZCkpOworCisgICAgICByZXR1cm4gcmVjb3JkOwor
ICAgIH0sCisKKyAgICB1cGRhdGU6IGZ1bmN0aW9uIChpZCwgZGF0YSkgeworICAgICAgaWYgKHR5
cGVvZiBkYXRhID09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGRhdGEgPSBpZDsKKyAgICAgICAg
aWQgPSBkYXRhW3RoaXMuaWRBdHRyaWJ1dGVdOworICAgICAgfQorCisgICAgICB2YXIgcmVjb3Jk
ID0gdGhpcy5nZXQoaWQpOworCisgICAgICBpZiAocmVjb3JkKSB7CisgICAgICAgIHJlY29yZCA9
IGV4dGVuZChyZWNvcmQsIGRhdGEpOworICAgICAgICB0aGlzLnNhdmUocmVjb3JkKTsKKyAgICAg
IH0KKworICAgICAgcmV0dXJuIHJlY29yZDsKKyAgICB9LAorCisgICAgdXBkYXRlQWxsOiBmdW5j
dGlvbiAoZGF0YSkgeworICAgICAgdmFyIHJlY29yZHMgPSB0aGlzLmFsbCgpOworCisgICAgICBy
ZWNvcmRzLmZvckVhY2goZnVuY3Rpb24gKHJlY29yZCkgeworICAgICAgICByZWNvcmQgPSBleHRl
bmQocmVjb3JkLCBkYXRhKTsKKyAgICAgICAgdGhpcy5zYXZlKHJlY29yZCk7CisgICAgICB9LCB0
aGlzKTsKKworICAgICAgcmV0dXJuIHJlY29yZHM7CisgICAgfSwKKworICAgIGZpbmQ6IGZ1bmN0
aW9uIChjcml0ZXJpYSkgeworICAgICAgdmFyIGtleSwgbWF0Y2gsIHJlY29yZDsKKyAgICAgIHZh
ciBuYW1lID0gdGhpcy5uYW1lOworICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICBpZiAo
IWNyaXRlcmlhKSByZXR1cm4gdGhpcy5hbGwoKTsKKworICAgICAgdGhpcy5yZWZyZXNoKCk7CisK
KyAgICAgIHJldHVybiB0aGlzLmlkcy5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGlkKSB7CisgICAg
ICAgIHJlY29yZCA9IGpzb25EYXRhKHNlbGYuc3RvcmFnZUFkYXB0b3IuZ2V0SXRlbShnZXRLZXko
bmFtZSwgaWQpKSk7CisgICAgICAgIG1hdGNoID0gZmluZE1hdGNoKGNyaXRlcmlhLCByZWNvcmQp
OworCisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgIG1lbW8ucHVzaChyZWNvcmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1lbW87CisgICAgICB9LCBbXSk7CisgICAgfSwK
KworICAgIGdldDogZnVuY3Rpb24gKGlkKSB7CisgICAgICByZXR1cm4ganNvbkRhdGEodGhpcy5z
dG9yYWdlQWRhcHRvci5nZXRJdGVtKGdldEtleSh0aGlzLm5hbWUsIGlkKSkpOworICAgIH0sCisK
KyAgICBhbGw6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciByZWNvcmQsIHNlbGYgPSB0aGlzLCBu
YW1lID0gdGhpcy5uYW1lOworCisgICAgICB0aGlzLnJlZnJlc2goKTsKKworICAgICAgcmV0dXJu
IHRoaXMuaWRzLnJlZHVjZShmdW5jdGlvbiAobWVtbywgaWQpIHsKKyAgICAgICAgcmVjb3JkID0g
c2VsZi5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGdldEtleShuYW1lLCBpZCkpOworCisgICAgICAg
IGlmIChyZWNvcmQpIHsKKyAgICAgICAgICBtZW1vLnB1c2goanNvbkRhdGEocmVjb3JkKSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWVtbzsKKyAgICAgIH0sIFtdKTsKKyAgICB9LAor
CisgICAgZGVzdHJveTogZnVuY3Rpb24gKHJlY29yZCkgeworICAgICAgdmFyIGluZGV4OworICAg
ICAgdmFyIGlkID0gKHJlY29yZFt0aGlzLmlkQXR0cmlidXRlXSkgPyByZWNvcmRbdGhpcy5pZEF0
dHJpYnV0ZV0gOiByZWNvcmQ7CisgICAgICB2YXIga2V5ID0gZ2V0S2V5KHRoaXMubmFtZSwgaWQp
OworCisgICAgICByZWNvcmQgPSBqc29uRGF0YSh0aGlzLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0o
a2V5KSk7CisgICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0oa2V5KTsKKworICAg
ICAgaW5kZXggPSB0aGlzLmlkcy5pbmRleE9mKGlkKTsKKyAgICAgIGlmIChpbmRleCAhPSAtMSkg
dGhpcy5pZHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3Iuc2V0
SXRlbSh0aGlzLm5hbWUsIHRoaXMuaWRzLmpvaW4oIiwiKSk7CisKKyAgICAgIHJldHVybiByZWNv
cmQ7CisgICAgfSwKKworICAgIGRlc3Ryb3lBbGw6IGZ1bmN0aW9uIChjcml0ZXJpYSkgeworICAg
ICAgdmFyIGF0dHIsIGlkLCBtYXRjaCwgcmVjb3JkLCBrZXk7CisKKyAgICAgIHRoaXMucmVmcmVz
aCgpOworCisgICAgICBmb3IgKHZhciBpID0gdGhpcy5pZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBp
LS0pIHsKKyAgICAgICAgaWQgPSB0aGlzLmlkc1tpXTsKKyAgICAgICAga2V5ID0gZ2V0S2V5KHRo
aXMubmFtZSwgaWQpOworCisgICAgICAgIGlmIChjcml0ZXJpYSkgeworCisgICAgICAgICAgcmVj
b3JkID0ganNvbkRhdGEodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGtleSkpOworICAgICAg
ICAgIG1hdGNoID0gZmluZE1hdGNoKGNyaXRlcmlhLCByZWNvcmQpOworCisgICAgICAgICAgaWYg
KG1hdGNoKSB7CisgICAgICAgICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0oa2V5
KTsKKyAgICAgICAgICAgIHRoaXMuaWRzLnNwbGljZShpLCAxKTsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJl
bW92ZUl0ZW0oa2V5KTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoY3JpdGVyaWEp
IHsKKyAgICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKHRoaXMubmFtZSwgdGhpcy5p
ZHMuam9pbigiLCIpKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICB0aGlzLnN0b3Jh
Z2VBZGFwdG9yLnJlbW92ZUl0ZW0odGhpcy5uYW1lKTsKKyAgICAgICAgdGhpcy5pZHMgPSBbXTsK
KyAgICAgIH0KKyAgICB9LAorCisgICAgc2l6ZTogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5y
ZWZyZXNoKCk7CisKKyAgICAgIHJldHVybiB0aGlzLmlkcy5sZW5ndGg7CisgICAgfSwKKworICAg
IHJlZnJlc2g6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmFnZUFk
YXB0b3IuZ2V0SXRlbSh0aGlzLm5hbWUpOworCisgICAgICBpZiAodGhpcy5zdG9yZSAmJiB0aGlz
LnN0b3JlID09PSBzdG9yZSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIHRo
aXMuaWRzID0gKHN0b3JlICYmIHN0b3JlLnNwbGl0KCIsIikpIHx8IFtdOworICAgICAgdGhpcy5z
dG9yZSA9IHN0b3JlOworICAgIH0KKyAgfTsKKworICAvLyBoZWxwZXJzCisKKyAgZnVuY3Rpb24g
anNvbkRhdGEoZGF0YSkgeworICAgIHJldHVybiBkYXRhICYmIEpTT04ucGFyc2UoZGF0YSk7Cisg
IH0KKworICBmdW5jdGlvbiBnZXRLZXkobmFtZSwgaWQpIHsKKyAgICByZXR1cm4gbmFtZSArICIt
IiArIGlkOworICB9CisKKyAgZnVuY3Rpb24gZmluZE1hdGNoKGNyaXRlcmlhLCByZWNvcmQpIHsK
KyAgICB2YXIgbWF0Y2gsIGF0dHI7CisKKyAgICBpZiAodHlwZW9mIGNyaXRlcmlhID09ICdmdW5j
dGlvbicpIHsKKyAgICAgIG1hdGNoID0gY3JpdGVyaWEocmVjb3JkKTsKKyAgICB9CisgICAgZWxz
ZSB7CisgICAgICBtYXRjaCA9IHRydWU7CisgICAgICBmb3IgKGF0dHIgaW4gY3JpdGVyaWEpIHsK
KyAgICAgICAgbWF0Y2ggJj0gKGNyaXRlcmlhW2F0dHJdID09PSByZWNvcmRbYXR0cl0pOworICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXRjaDsKKyAgfQorCisgIGZ1bmN0aW9uIHM0KCkg
eworICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKQor
ICAgICAgLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7CisgIH0KKworICBmdW5jdGlvbiBndWlk
KCkgeworICAgIHJldHVybiBzNCgpICsgczQoKSArICctJyArIHM0KCkgKyAnLScgKyBzNCgpICsK
KyAgICAgICctJyArczQoKSArICctJyArIHM0KCkgKyBzNCgpICsgczQoKTsKKyAgfQorCisgIGZ1
bmN0aW9uIGV4dGVuZChkZXN0LCBzb3VyY2UpIHsKKyAgICBmb3IgKHZhciBrZXkgaW4gc291cmNl
KSB7CisgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgZGVz
dFtrZXldID0gc291cmNlW2tleV07CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGRlc3Q7
CisgIH0KKworICBmdW5jdGlvbiBkZXBvdChuYW1lLCBvcHRpb25zKSB7CisgICAgdmFyIGluc3Rh
bmNlOworCisgICAgb3B0aW9ucyA9IGV4dGVuZCh7CisgICAgICBpZEF0dHJpYnV0ZTogJ19pZCcs
CisgICAgICBzdG9yYWdlQWRhcHRvcjogbG9jYWxTdG9yYWdlCisgICAgfSwgb3B0aW9ucyk7CisK
KyAgICBpZiAoIW9wdGlvbnMuc3RvcmFnZUFkYXB0b3IpIHRocm93IG5ldyBFcnJvcigiTm8gc3Rv
cmFnZSBhZGFwdG9yIHdhcyBmb3VuZCIpOworCisgICAgaW5zdGFuY2UgPSBPYmplY3QuY3JlYXRl
KGFwaSwgeworICAgICAgbmFtZTogeyB2YWx1ZTogbmFtZSB9LAorICAgICAgaWRBdHRyaWJ1dGU6
IHsgdmFsdWU6IG9wdGlvbnMuaWRBdHRyaWJ1dGUgfSwKKyAgICAgIHN0b3JhZ2VBZGFwdG9yOiB7
IHZhbHVlOiBvcHRpb25zLnN0b3JhZ2VBZGFwdG9yIH0KKyAgICB9KTsKKworICAgIGluc3RhbmNl
LnJlZnJlc2goKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfQorCisgIHJldHVybiBkZXBv
dDsKK30pKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9kZXBvdC9kZXBvdC5taW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvZGVwb3QvZGVwb3QubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1ZDZiNjMzNjcxMjNmMDg3MmJjYmE0
MGY1Yjk5ZDdkYmFkYTc2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvZGVwb3QvZGVwb3QubWluLmpzCkBAIC0wLDAgKzEsNiBAQAorLy8g
ZGVwb3QuanMgdjAuMS42IHwgKGMpIDIwMTMgTWljaGFsIEt1a2xpcyB8IExpY2Vuc2VkIHVuZGVy
IFRoZSBNSVQgTGljZW5zZQorKGZ1bmN0aW9uKGYsaCxkKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9y
dHM/bW9kdWxlLmV4cG9ydHM9ZCgpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5h
bWQ/ZGVmaW5lKGQpOmhbZl09ZCgpfSkoImRlcG90Iix0aGlzLGZ1bmN0aW9uKCl7ZnVuY3Rpb24g
ZihiKXtyZXR1cm4gYiYmSlNPTi5wYXJzZShiKX1mdW5jdGlvbiBoKGIsYSl7dmFyIGMsZTtpZigi
ZnVuY3Rpb24iPT10eXBlb2YgYiljPWIoYSk7ZWxzZSBmb3IoZSBpbiBjPSEwLGIpYyY9YltlXT09
PWFbZV07cmV0dXJuIGN9ZnVuY3Rpb24gZCgpe3JldHVybiBNYXRoLmZsb29yKDY1NTM2KigxK01h
dGgucmFuZG9tKCkpKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpfWZ1bmN0aW9uIGcoYixhKXtm
b3IodmFyIGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiYoYltjXT1hW2NdKTtyZXR1cm4gYn12
YXIgaj17c2F2ZTpmdW5jdGlvbihiKXt2YXIgYTtiW3RoaXMuaWRBdHRyaWJ1dGVdfHwoYlt0aGlz
LmlkQXR0cmlidXRlXT0KK2QoKStkKCkrIi0iK2QoKSsiLSIrZCgpKyItIitkKCkrIi0iK2QoKStk
KCkrZCgpKTthPWJbdGhpcy5pZEF0dHJpYnV0ZV0rIiI7MD50aGlzLmlkcy5pbmRleE9mKGEpJiYo
dGhpcy5pZHMucHVzaChhKSx0aGlzLnN0b3JhZ2VBZGFwdG9yLnNldEl0ZW0odGhpcy5uYW1lLHRo
aXMuaWRzLmpvaW4oIiwiKSkpO3RoaXMuc3RvcmFnZUFkYXB0b3Iuc2V0SXRlbSh0aGlzLm5hbWUr
Ii0iK2EsSlNPTi5zdHJpbmdpZnkoYikpO3JldHVybiBifSx1cGRhdGU6ZnVuY3Rpb24oYixhKXsi
dW5kZWZpbmVkIj09dHlwZW9mIGEmJihhPWIsYj1hW3RoaXMuaWRBdHRyaWJ1dGVdKTt2YXIgYz10
aGlzLmdldChiKTtjJiYoYz1nKGMsYSksdGhpcy5zYXZlKGMpKTtyZXR1cm4gY30sdXBkYXRlQWxs
OmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuYWxsKCk7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2E9Zyhh
LGIpO3RoaXMuc2F2ZShhKX0sdGhpcyk7cmV0dXJuIGF9LGZpbmQ6ZnVuY3Rpb24oYil7dmFyIGEs
YyxlPQordGhpcy5uYW1lLGQ9dGhpcztyZXR1cm4hYj90aGlzLmFsbCgpOnRoaXMuaWRzLnJlZHVj
ZShmdW5jdGlvbihnLGope2M9ZihkLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oZSsiLSIraikpOyhh
PWgoYixjKSkmJmcucHVzaChjKTtyZXR1cm4gZ30sW10pfSxnZXQ6ZnVuY3Rpb24oYil7cmV0dXJu
IGYodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKHRoaXMubmFtZSsiLSIrYikpfSxhbGw6ZnVu
Y3Rpb24oKXt2YXIgYixhPXRoaXMsYz10aGlzLm5hbWU7cmV0dXJuIHRoaXMuaWRzLnJlZHVjZShm
dW5jdGlvbihlLGQpeyhiPWEuc3RvcmFnZUFkYXB0b3IuZ2V0SXRlbShjKyItIitkKSkmJmUucHVz
aChmKGIpKTtyZXR1cm4gZX0sW10pfSxkZXN0cm95OmZ1bmN0aW9uKGIpe3ZhciBhO2E9Ylt0aGlz
LmlkQXR0cmlidXRlXT9iW3RoaXMuaWRBdHRyaWJ1dGVdOmI7dmFyIGM9dGhpcy5uYW1lKyItIith
O2I9Zih0aGlzLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oYykpO3RoaXMuc3RvcmFnZUFkYXB0b3Iu
cmVtb3ZlSXRlbShjKTsKK2E9dGhpcy5pZHMuaW5kZXhPZihhKTstMSE9YSYmdGhpcy5pZHMuc3Bs
aWNlKGEsMSk7dGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVtKHRoaXMubmFtZSx0aGlzLmlkcy5q
b2luKCIsIikpO3JldHVybiBifSxkZXN0cm95QWxsOmZ1bmN0aW9uKGIpe2Zvcih2YXIgYSxjLGQ9
dGhpcy5pZHMubGVuZ3RoLTE7MDw9ZDtkLS0paWYoYT10aGlzLmlkc1tkXSxhPXRoaXMubmFtZSsi
LSIrYSxiKXtpZihjPWYodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGEpKSxjPWgoYixjKSl0
aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0oYSksdGhpcy5pZHMuc3BsaWNlKGQsMSl9ZWxz
ZSB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0oYSk7Yj90aGlzLnN0b3JhZ2VBZGFwdG9y
LnNldEl0ZW0odGhpcy5uYW1lLHRoaXMuaWRzLmpvaW4oIiwiKSk6KHRoaXMuc3RvcmFnZUFkYXB0
b3IucmVtb3ZlSXRlbSh0aGlzLm5hbWUpLHRoaXMuaWRzPVtdKX0sc2l6ZTpmdW5jdGlvbigpe3Jl
dHVybiB0aGlzLmlkcy5sZW5ndGh9fTsKK3JldHVybiBmdW5jdGlvbihiLGEpe3ZhciBjLGQ7YT1n
KHtpZEF0dHJpYnV0ZToiX2lkIixzdG9yYWdlQWRhcHRvcjpsb2NhbFN0b3JhZ2V9LGEpO2lmKCFh
LnN0b3JhZ2VBZGFwdG9yKXRocm93IEVycm9yKCJObyBzdG9yYWdlIGFkYXB0b3Igd2FzIGZvdW5k
Iik7ZD0oYz1hLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oYikpJiZjLnNwbGl0KCIsIil8fFtdO3Jl
dHVybiBPYmplY3QuY3JlYXRlKGose25hbWU6e3ZhbHVlOmJ9LHN0b3JlOnt2YWx1ZTpjfSxpZHM6
e3ZhbHVlOmQsd3JpdGFibGU6ITB9LGlkQXR0cmlidXRlOnt2YWx1ZTphLmlkQXR0cmlidXRlfSxz
dG9yYWdlQWRhcHRvcjp7dmFsdWU6YS5zdG9yYWdlQWRhcHRvcn19KX19KTsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9wYWNrYWdlLmpzb24g
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZGVwb3QvcGFja2FnZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVkYWZiNTM3N2JkNmIyNTRiZTZhNDE3YjU4YTc2NDk1MmEwNGVhZmUKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZGVw
b3QvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsNzEgQEAKK3sKKyAgIl9hcmdzIjogWworICAgIFsK
KyAgICAgIHsKKyAgICAgICAgInJhdyI6ICJkZXBvdEBeMC4xLjYiLAorICAgICAgICAic2NvcGUi
OiBudWxsLAorICAgICAgICAiZXNjYXBlZE5hbWUiOiAiZGVwb3QiLAorICAgICAgICAibmFtZSI6
ICJkZXBvdCIsCisgICAgICAgICJyYXdTcGVjIjogIl4wLjEuNiIsCisgICAgICAgICJzcGVjIjog
Ij49MC4xLjYgPDAuMi4wIiwKKyAgICAgICAgInR5cGUiOiAicmFuZ2UiCisgICAgICB9LAorICAg
ICAgIi9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiCisgICAgXQorICBdLAorICAiX2Zyb20iOiAiZGVw
b3RAPj0wLjEuNiA8MC4yLjAiLAorICAiX2lkIjogImRlcG90QDAuMS42IiwKKyAgIl9pbkNhY2hl
IjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvZGVwb3QiLAorICAiX25wbVVzZXIiOiB7CisgICAg
Im5hbWUiOiAiYXBwZWRlbWljIiwKKyAgICAiZW1haWwiOiAiZGVya0BhcHBlZGVtaWMubmwiCisg
IH0sCisgICJfbnBtVmVyc2lvbiI6ICIxLjMuNSIsCisgICJfcGhhbnRvbUNoaWxkcmVuIjoge30s
CisgICJfcmVxdWVzdGVkIjogeworICAgICJyYXciOiAiZGVwb3RAXjAuMS42IiwKKyAgICAic2Nv
cGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJkZXBvdCIsCisgICAgIm5hbWUiOiAiZGVw
b3QiLAorICAgICJyYXdTcGVjIjogIl4wLjEuNiIsCisgICAgInNwZWMiOiAiPj0wLjEuNiA8MC4y
LjAiLAorICAgICJ0eXBlIjogInJhbmdlIgorICB9LAorICAiX3JlcXVpcmVkQnkiOiBbCisgICAg
Ii8iCisgIF0sCisgICJfcmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVw
b3QvLS9kZXBvdC0wLjEuNi50Z3oiLAorICAiX3NoYXN1bSI6ICIwN2U2ZTAxMTNhNDg4Y2RmZjI1
YWE3ZWI5Mzk0ZDA4YTk5OWYyZDM1IiwKKyAgIl9zaHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVj
IjogImRlcG90QF4wLjEuNiIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL0Rlc2t0b3AvU3Bl
ZWRvbWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodCIs
CisgICJhbmFseXplIjogZmFsc2UsCisgICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiTWljaGFs
IEt1a2xpcyIsCisgICAgImVtYWlsIjogIm1pY2hhbC5rdWtsaXNAZ21haWwuY29tIgorICB9LAor
ICAiZGVwZW5kZW5jaWVzIjoge30sCisgICJkZXNjcmlwdGlvbiI6ICJbIVtidWlsZCBzdGF0dXNd
KGh0dHBzOi8vc2VjdXJlLnRyYXZpcy1jaS5vcmcvbWt1a2xpcy9kZXBvdC5qcy5wbmcpXShodHRw
Oi8vdHJhdmlzLWNpLm9yZy9ta3VrbGlzL2RlcG90LmpzKSIsCisgICJkZXZEZXBlbmRlbmNpZXMi
OiB7CisgICAgIm1vY2hhLXBoYW50b21qcyI6ICJsYXRlc3QiCisgIH0sCisgICJkaXJlY3Rvcmll
cyI6IHt9LAorICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjogIjA3ZTZlMDExM2E0ODhjZGZmMjVh
YTdlYjkzOTRkMDhhOTk5ZjJkMzUiLAorICAgICJ0YXJiYWxsIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2RlcG90Ly0vZGVwb3QtMC4xLjYudGd6IgorICB9LAorICAiZW5naW5lcyI6IHsK
KyAgICAibm9kZSI6ICIqIgorICB9LAorICAibWFpbnRhaW5lcnMiOiBbCisgICAgeworICAgICAg
Im5hbWUiOiAiYXBwZWRlbWljIiwKKyAgICAgICJlbWFpbCI6ICJkZXJrQGFwcGVkZW1pYy5ubCIK
KyAgICB9CisgIF0sCisgICJuYW1lIjogImRlcG90IiwKKyAgIm9wdGlvbmFsRGVwZW5kZW5jaWVz
Ijoge30sCisgICJyZWFkbWUiOiAiRVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kISIsCisgICJ2
ZXJzaW9uIjogIjAuMS42IgorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL2VzNS1zaGltL0xJQ0VOU0UgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvZXM1LXNoaW0vTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZWUwODI1NWNiOTcxOGQ5
MzU5YmNjZWE5MDViZTc0ODI2MzdlZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL0xJQ0VOU0UKQEAgLTAsMCArMSwxOSBA
QAorCitDb3B5cmlnaHQgMjAwOSwgMjAxMCBLcmlzdG9waGVyIE1pY2hhZWwgS293YWwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo
YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFu
ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KK2Rl
YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0
IGxpbWl0YXRpb24gdGhlCityaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs
aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKK3NlbGwgY29waWVzIG9mIHRoZSBT
b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitm
dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor
CitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz
aGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv
ZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI
T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcg
QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg
Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFO
IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9V
VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI
RVIgREVBTElOR1MKK0lOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUtc2hhbS5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUtc2hhbS5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMGM5ODQ1OTc1MTMzNDE4NDM5MjQ3ZGU5OWI1YzBhNzMwMTU1OTRmCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1z
aGFtLmpzCkBAIC0wLDAgKzEsNDQ2IEBACisvLyBDb3B5cmlnaHQgMjAwOS0yMDEyIGJ5IGNvbnRy
aWJ1dG9ycywgTUlUIExpY2Vuc2UKKy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYgor
CisvL0FkZCBzZW1pY29sb24gdG8gcHJldmVudCBJSUZFIGZyb20gYmVpbmcgcGFzc2VkIGFzIGFy
Z3VtZW50IHRvIGNvbmNhdGVkIGNvZGUuCis7CisvLyBNb2R1bGUgc3lzdGVtcyBtYWdpYyBkYW5j
ZQorKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7CisgICAgLy8gUmVxdWlyZUpTCisgICAgaWYgKHR5
cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgeworICAgICAgICBkZWZpbmUoZGVmaW5pdGlvbik7
CisgICAgLy8gWVVJMworICAgIH0gZWxzZSBpZiAodHlwZW9mIFlVSSA9PSAiZnVuY3Rpb24iKSB7
CisgICAgICAgIFlVSS5hZGQoImVzNS1zaGFtIiwgZGVmaW5pdGlvbik7CisgICAgLy8gQ29tbW9u
SlMgYW5kIDxzY3JpcHQ+CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmaW5pdGlvbigpOworICAg
IH0KK30pKGZ1bmN0aW9uICgpIHsKKworCit2YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5j
YWxsOwordmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTsKK3ZhciBvd25z
ID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKKworLy8gSWYg
SlMgZW5naW5lIHN1cHBvcnRzIGFjY2Vzc29ycyBjcmVhdGluZyBzaG9ydGN1dHMuCit2YXIgZGVm
aW5lR2V0dGVyOwordmFyIGRlZmluZVNldHRlcjsKK3ZhciBsb29rdXBHZXR0ZXI7Cit2YXIgbG9v
a3VwU2V0dGVyOwordmFyIHN1cHBvcnRzQWNjZXNzb3JzOworaWYgKChzdXBwb3J0c0FjY2Vzc29y
cyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmluZUdldHRlcl9fIikpKSB7CisgICAg
ZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVy
X18pOworICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2Rl
ZmluZVNldHRlcl9fKTsKKyAgICBsb29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZP
YmplY3QuX19sb29rdXBHZXR0ZXJfXyk7CisgICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHBy
b3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOworfQorCisvLyBFUzUgMTUuMi4zLjIK
Ky8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4yCitpZiAoIU9iamVjdC5nZXRQcm90
b3R5cGVPZikgeworICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9p
c3N1ZXMjaXNzdWUvMgorICAgIC8vIGh0dHA6Ly9lam9obi5vcmcvYmxvZy9vYmplY3RnZXRwcm90
b3R5cGVvZi8KKyAgICAvLyByZWNvbW1lbmRlZCBieSBmc2NoYWVmZXIgb24gZ2l0aHViCisgICAg
T2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8ICgKKyAgICAgICAgICAgIG9iamVj
dC5jb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgID8gb2JqZWN0LmNvbnN0cnVjdG9yLnByb3Rv
dHlwZQorICAgICAgICAgICAgICAgIDogcHJvdG90eXBlT2ZPYmplY3QKKyAgICAgICAgKTsKKyAg
ICB9OworfQorCisvL0VTNSAxNS4yLjMuMworLy9odHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4y
LjMuMworCitmdW5jdGlvbiBkb2VzR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29yayhvYmplY3Qp
IHsKKyAgICB0cnkgeworICAgICAgICBvYmplY3Quc2VudGluZWwgPSAwOworICAgICAgICByZXR1
cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgICBvYmpl
Y3QsCisgICAgICAgICAgICAgICAgInNlbnRpbmVsIgorICAgICAgICApLnZhbHVlID09PSAwOwor
ICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAvLyByZXR1cm5zIGZhbHN5CisgICAg
fQorfQorCisvL2NoZWNrIHdoZXRoZXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHdvcmtzIGlm
IGl0J3MgZ2l2ZW4uIE90aGVyd2lzZSwKKy8vc2hpbSBwYXJ0aWFsbHkuCitpZiAoT2JqZWN0LmRl
ZmluZVByb3BlcnR5KSB7CisgICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvcldvcmtzT25P
YmplY3QgPSAKKyAgICAgICAgZG9lc0dldE93blByb3BlcnR5RGVzY3JpcHRvcldvcmsoe30pOwor
ICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3Jrc09uRG9tID0gdHlwZW9mIGRvY3Vt
ZW50ID09ICJ1bmRlZmluZWQiIHx8CisgICAgZG9lc0dldE93blByb3BlcnR5RGVzY3JpcHRvcldv
cmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOworICAgIGlmICghZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yV29ya3NPbkRvbSB8fCAKKyAgICAgICAgICAgICFnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JXb3Jrc09uT2JqZWN0CisgICAgKSB7CisgICAgICAgIHZhciBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3JGYWxsYmFjayA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Cisg
ICAgfQorfQorCitpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgfHwgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yRmFsbGJhY2spIHsKKyAgICB2YXIgRVJSX05PTl9PQkpFQ1QgPSAi
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSBub24tb2JqZWN0OiAi
OworCisgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB7CisgICAgICAgIGlmICgodHlw
ZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8
IG9iamVjdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJf
Tk9OX09CSkVDVCArIG9iamVjdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBtYWtlIGEgdmFs
aWFudCBhdHRlbXB0IHRvIHVzZSB0aGUgcmVhbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IKKyAg
ICAgICAgLy8gZm9yIEk4J3MgRE9NIGVsZW1lbnRzLgorICAgICAgICBpZiAoZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRmFsbGJhY2spIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdldE93blByb3BlcnR5RGVzY3JpcHRvckZhbGxiYWNrLmNhbGwoT2JqZWN0LCBv
YmplY3QsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAg
ICAgICAgICAgICAgIC8vIHRyeSB0aGUgc2hpbSBpZiB0aGUgcmVhbCBvbmUgZG9lc24ndCB3b3Jr
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBvYmplY3QgZG9lcyBu
b3Qgb3ducyBwcm9wZXJ0eSByZXR1cm4gdW5kZWZpbmVkIGltbWVkaWF0ZWx5LgorICAgICAgICBp
ZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIElmIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSB0aGVuIGl0J3MgZm9y
IHN1cmUgYm90aCBgZW51bWVyYWJsZWAgYW5kCisgICAgICAgIC8vIGBjb25maWd1cmFibGVgLgor
ICAgICAgICB2YXIgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJs
ZTogdHJ1ZSB9OworCisgICAgICAgIC8vIElmIEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvciBw
cm9wZXJ0aWVzIHRoZW4gcHJvcGVydHkgbWF5IGJlIGEKKyAgICAgICAgLy8gZ2V0dGVyIG9yIHNl
dHRlci4KKyAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7CisgICAgICAgICAgICAvLyBV
bmZvcnR1bmF0ZWx5IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBhIGdldHRlciBldmVu
CisgICAgICAgICAgICAvLyBpZiBvYmplY3QgaGFzIG93biBub24gZ2V0dGVyIHByb3BlcnR5IGFs
b25nIHdpdGggYSBzYW1lIG5hbWVkCisgICAgICAgICAgICAvLyBpbmhlcml0ZWQgZ2V0dGVyLiBU
byBhdm9pZCBtaXNiZWhhdmlvciB3ZSB0ZW1wb3JhcnkgcmVtb3ZlCisgICAgICAgICAgICAvLyBg
X19wcm90b19fYCBzbyB0aGF0IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBnZXR0ZXIg
b25seQorICAgICAgICAgICAgLy8gaWYgaXQncyBvd25lZCBieSBhbiBvYmplY3QuCisgICAgICAg
ICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgIG9iamVj
dC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKKworICAgICAgICAgICAgdmFyIGdldHRl
ciA9IGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIHZhciBzZXR0
ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIC8vIE9u
Y2Ugd2UgaGF2ZSBnZXR0ZXIgYW5kIHNldHRlciB3ZSBjYW4gcHV0IHZhbHVlcyBiYWNrLgorICAg
ICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKKworICAgICAgICAgICAgaWYg
KGdldHRlciB8fCBzZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0ID0gc2V0dGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyBJZiBpdCB3YXMgYWNjZXNzb3IgcHJvcGVydHkgd2UncmUgZG9uZSBhbmQgcmV0dXJuIGhl
cmUKKyAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBhZGRpbmcgYHZhbHVlYCB0
byB0aGUgZGVzY3JpcHRvci4KKyAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciB3
ZSBrbm93IHRoYXQgb2JqZWN0IGhhcyBhbiBvd24gcHJvcGVydHkgdGhhdCBpcworICAgICAgICAv
LyBub3QgYW4gYWNjZXNzb3Igc28gd2Ugc2V0IGl0IGFzIGEgdmFsdWUgYW5kIHJldHVybiBkZXNj
cmlwdG9yLgorICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKKyAg
ICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7CisgICAgICAgIHJldHVybiBkZXNjcmlw
dG9yOworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuNAorLy8gaHR0cDovL2VzNS5naXRodWIu
Y29tLyN4MTUuMi4zLjQKK2lmICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHsKKyAgICBP
YmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0KSB7CisgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOworICAgIH07Cit9
CisKKy8vIEVTNSAxNS4yLjMuNQorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjUK
K2lmICghT2JqZWN0LmNyZWF0ZSkgeworCisgICAgLy8gQ29udHJpYnV0ZWQgYnkgQnJhbmRvbiBC
ZW52aWUsIE9jdG9iZXIsIDIwMTIKKyAgICB2YXIgY3JlYXRlRW1wdHk7CisgICAgdmFyIHN1cHBv
cnRzUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyA9PT0gbnVsbDsKKyAgICBpZiAo
c3VwcG9ydHNQcm90byB8fCB0eXBlb2YgZG9jdW1lbnQgPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAg
ICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geyAiX19w
cm90b19fIjogbnVsbCB9OworICAgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElu
IG9sZCBJRSBfX3Byb3RvX18gY2FuJ3QgYmUgdXNlZCB0byBtYW51YWxseSBzZXQgYG51bGxgLCBu
b3IgZG9lcworICAgICAgICAvLyBhbnkgb3RoZXIgbWV0aG9kIGV4aXN0IHRvIG1ha2UgYW4gb2Jq
ZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBub3RoaW5nLAorICAgICAgICAvLyBhc2lkZSBmcm9tIE9i
amVjdC5wcm90b3R5cGUgaXRzZWxmLiBJbnN0ZWFkLCBjcmVhdGUgYSBuZXcgZ2xvYmFsCisgICAg
ICAgIC8vIG9iamVjdCBhbmQgKnN0ZWFsKiBpdHMgT2JqZWN0LnByb3RvdHlwZSBhbmQgc3RyaXAg
aXQgYmFyZS4gVGhpcyBpcworICAgICAgICAvLyB1c2VkIGFzIHRoZSBwcm90b3R5cGUgdG8gY3Jl
YXRlIG51bGxhcnkgb2JqZWN0cy4KKyAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1l
Jyk7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKKyAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgICAgICAgICAg
aWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7CisgICAgICAgICAgICB2YXIgZW1wdHkgPSBpZnJh
bWUuY29udGVudFdpbmRvdy5PYmplY3QucHJvdG90eXBlOworICAgICAgICAgICAgcGFyZW50LnJl
bW92ZUNoaWxkKGlmcmFtZSk7CisgICAgICAgICAgICBpZnJhbWUgPSBudWxsOworICAgICAgICAg
ICAgZGVsZXRlIGVtcHR5LmNvbnN0cnVjdG9yOworICAgICAgICAgICAgZGVsZXRlIGVtcHR5Lmhh
c093blByb3BlcnR5OworICAgICAgICAgICAgZGVsZXRlIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJh
YmxlOworICAgICAgICAgICAgZGVsZXRlIGVtcHR5LmlzUHJvdG90eXBlT2Y7CisgICAgICAgICAg
ICBkZWxldGUgZW1wdHkudG9Mb2NhbGVTdHJpbmc7CisgICAgICAgICAgICBkZWxldGUgZW1wdHku
dG9TdHJpbmc7CisgICAgICAgICAgICBkZWxldGUgZW1wdHkudmFsdWVPZjsKKyAgICAgICAgICAg
IGVtcHR5Ll9fcHJvdG9fXyA9IG51bGw7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIEVtcHR5KCkg
e30KKyAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IGVtcHR5OworICAgICAgICAgICAgLy8g
c2hvcnQtY2lyY3VpdCBmdXR1cmUgY2FsbHMKKyAgICAgICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRW1wdHkoKTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICByZXR1cm4gbmV3IEVtcHR5KCk7CisgICAgICAgIH07CisgICAg
fQorCisgICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3Bl
cnRpZXMpIHsKKworICAgICAgICB2YXIgb2JqZWN0OworICAgICAgICBmdW5jdGlvbiBUeXBlKCkg
e30gIC8vIEFuIGVtcHR5IGNvbnN0cnVjdG9yLgorCisgICAgICAgIGlmIChwcm90b3R5cGUgPT09
IG51bGwpIHsKKyAgICAgICAgICAgIG9iamVjdCA9IGNyZWF0ZUVtcHR5KCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSAhPT0gIm9iamVjdCIgJiYg
dHlwZW9mIHByb3RvdHlwZSAhPT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgIC8vIElu
IHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24gYHBhcmVudGAgY2FuIGJlIGBudWxsYAorICAgICAg
ICAgICAgICAgIC8vIE9SICphbnkqIGBpbnN0YW5jZW9mIE9iamVjdGAgIChPYmplY3R8RnVuY3Rp
b258QXJyYXl8UmVnRXhwfGV0YykKKyAgICAgICAgICAgICAgICAvLyBVc2UgYHR5cGVvZmAgdGhv
LCBiL2MgaW4gb2xkIElFLCBET00gZWxlbWVudHMgYXJlIG5vdCBgaW5zdGFuY2VvZiBPYmplY3Rg
CisgICAgICAgICAgICAgICAgLy8gbGlrZSB0aGV5IGFyZSBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVz
aW5nIGBPYmplY3QuY3JlYXRlYCBvbiBET00gZWxlbWVudHMKKyAgICAgICAgICAgICAgICAvLyBp
cy4uLmVyci4uLnByb2JhYmx5IGluYXBwcm9wcmlhdGUsIGJ1dCB0aGUgbmF0aXZlIHZlcnNpb24g
YWxsb3dzIGZvciBpdC4KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmpl
Y3QgcHJvdG90eXBlIG1heSBvbmx5IGJlIGFuIE9iamVjdCBvciBudWxsIik7IC8vIHNhbWUgbXNn
IGFzIENocm9tZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBw
cm90b3R5cGU7CisgICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOworICAgICAgICAgICAg
Ly8gSUUgaGFzIG5vIGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIG9mIGBPYmplY3QuZ2V0UHJvdG90
eXBlT2ZgCisgICAgICAgICAgICAvLyBuZWl0aGVyIGBfX3Byb3RvX19gLCBidXQgdGhpcyBtYW51
YWxseSBzZXR0aW5nIGBfX3Byb3RvX19gIHdpbGwKKyAgICAgICAgICAgIC8vIGd1YXJhbnRlZSB0
aGF0IGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIHdpbGwgd29yayBhcyBleHBlY3RlZCB3aXRoCisg
ICAgICAgICAgICAvLyBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgYE9iamVjdC5jcmVhdGVgCisgICAg
ICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHByb3BlcnRpZXMgIT09IHZvaWQgMCkgeworICAgICAgICAgICAgT2JqZWN0LmRlZmlu
ZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy42CisvLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3gxNS4yLjMuNgorCisvLyBQYXRjaCBmb3IgV2ViS2l0IGFuZCBJRTggc3Rh
bmRhcmQgbW9kZQorLy8gRGVzaWduZWQgYnkgaGF4IDxoYXguZ2l0aHViLmNvbT4KKy8vIHJlbGF0
ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMjaXNz
dWUvNQorLy8gSUU4IFJlZmVyZW5jZToKKy8vICAgICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29t
L2VuLXVzL2xpYnJhcnkvZGQyODI5MDAuYXNweAorLy8gICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29m
dC5jb20vZW4tdXMvbGlicmFyeS9kZDIyOTkxNi5hc3B4CisvLyBXZWJLaXQgQnVnczoKKy8vICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY0MjMKKworZnVuY3Rp
b24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3QpIHsKKyAgICB0cnkgeworICAgICAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7CisgICAgICAgIHJl
dHVybiAic2VudGluZWwiIGluIG9iamVjdDsKKyAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAg
ICAgICAgLy8gcmV0dXJucyBmYWxzeQorICAgIH0KK30KKworLy8gY2hlY2sgd2hldGhlciBkZWZp
bmVQcm9wZXJ0eSB3b3JrcyBpZiBpdCdzIGdpdmVuLiBPdGhlcndpc2UsCisvLyBzaGltIHBhcnRp
YWxseS4KK2lmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKKyAgICB2YXIgZGVmaW5lUHJvcGVy
dHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVByb3BlcnR5V29yayh7fSk7CisgICAgdmFyIGRl
ZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8
fAorICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpKTsKKyAgICBpZiAoIWRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCB8fCAhZGVmaW5l
UHJvcGVydHlXb3Jrc09uRG9tKSB7CisgICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNr
ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LAorICAgICAgICAgICAgZGVmaW5lUHJvcGVydGllc0Zh
bGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7CisgICAgfQorfQorCitpZiAoIU9iamVj
dC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CisgICAgdmFyIEVS
Ul9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBh
biBvYmplY3Q6ICI7CisgICAgdmFyIEVSUl9OT05fT0JKRUNUX1RBUkdFVCA9ICJPYmplY3QuZGVm
aW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIKKyAgICB2YXIgRVJSX0FDQ0VTU09S
U19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCAi
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgamF2YXNj
cmlwdCBlbmdpbmUiOworCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVm
aW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikgeworICAgICAgICBpZiAo
KHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24i
KSB8fCBvYmplY3QgPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
RVJSX05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
KHR5cGVvZiBkZXNjcmlwdG9yICE9ICJvYmplY3QiICYmIHR5cGVvZiBkZXNjcmlwdG9yICE9ICJm
dW5jdGlvbiIpIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOworICAg
ICAgICB9CisgICAgICAgIC8vIG1ha2UgYSB2YWxpYW50IGF0dGVtcHQgdG8gdXNlIHRoZSByZWFs
IGRlZmluZVByb3BlcnR5CisgICAgICAgIC8vIGZvciBJOCdzIERPTSBlbGVtZW50cy4KKyAgICAg
ICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmplY3QsIG9i
amVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0
aW9uKSB7CisgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBzaGltIGlmIHRoZSByZWFsIG9uZSBk
b2Vzbid0IHdvcmsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGl0
J3MgYSBkYXRhIHByb3BlcnR5LgorICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAidmFsdWUi
KSkgeworICAgICAgICAgICAgLy8gZmFpbCBzaWxlbnRseSBpZiAid3JpdGFibGUiLCAiZW51bWVy
YWJsZSIsIG9yICJjb25maWd1cmFibGUiCisgICAgICAgICAgICAvLyBhcmUgcmVxdWVzdGVkIGJ1
dCBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgLy8gYWx0ZXJuYXRl
IGFwcHJvYWNoOgorICAgICAgICAgICAgaWYgKCAvLyBjYW4ndCBpbXBsZW1lbnQgdGhlc2UgZmVh
dHVyZXM7IGFsbG93IGZhbHNlIGJ1dCBub3QgdHJ1ZQorICAgICAgICAgICAgICAgICEob3ducyhk
ZXNjcmlwdG9yLCAid3JpdGFibGUiKSA/IGRlc2NyaXB0b3Iud3JpdGFibGUgOiB0cnVlKSB8fAor
ICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAiZW51bWVyYWJsZSIpID8gZGVzY3Jp
cHRvci5lbnVtZXJhYmxlIDogdHJ1ZSkgfHwKKyAgICAgICAgICAgICAgICAhKG93bnMoZGVzY3Jp
cHRvciwgImNvbmZpZ3VyYWJsZSIpID8gZGVzY3JpcHRvci5jb25maWd1cmFibGUgOiB0cnVlKQor
ICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAorICAg
ICAgICAgICAgICAgICAgICAiVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3QuZGVmaW5lUHJv
cGVydHkgZG9lcyBub3QgIiArCisgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IGNvbmZpZ3Vy
YWJsZSwgZW51bWVyYWJsZSwgb3Igd3JpdGFibGUuIgorICAgICAgICAgICAgICAgICk7CisgICAg
ICAgICAgICAqLworCisgICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMgJiYgKGxvb2t1
cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIEFzIGFjY2Vzc29ycyBhcmUgc3VwcG9ydGVkIG9ubHkgb24g
ZW5naW5lcyBpbXBsZW1lbnRpbmcKKyAgICAgICAgICAgICAgICAvLyBgX19wcm90b19fYCB3ZSBj
YW4gc2FmZWx5IG92ZXJyaWRlIGBfX3Byb3RvX19gIHdoaWxlIGRlZmluaW5nCisgICAgICAgICAg
ICAgICAgLy8gYSBwcm9wZXJ0eSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBoaXQgYW4gaW5o
ZXJpdGVkCisgICAgICAgICAgICAgICAgLy8gYWNjZXNzb3IuCisgICAgICAgICAgICAgICAgdmFy
IHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CisgICAgICAgICAgICAgICAgb2JqZWN0Ll9f
cHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OworICAgICAgICAgICAgICAgIC8vIERlbGV0aW5n
IGEgcHJvcGVydHkgYW55d2F5IHNpbmNlIGdldHRlciAvIHNldHRlciBtYXkgYmUKKyAgICAgICAg
ICAgICAgICAvLyBkZWZpbmVkIG9uIG9iamVjdCBpdHNlbGYuCisgICAgICAgICAgICAgICAgZGVs
ZXRlIG9iamVjdFtwcm9wZXJ0eV07CisgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9
IGRlc2NyaXB0b3IudmFsdWU7CisgICAgICAgICAgICAgICAgLy8gU2V0dGluZyBvcmlnaW5hbCBg
X19wcm90b19fYCBiYWNrIG5vdy4KKyAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0g
cHJvdG90eXBlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvYmplY3Rb
cHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nlc3NvcnMpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB3ZSBnb3QgdGhhdCBmYXIgdGhlbiBnZXR0
ZXJzIGFuZCBzZXR0ZXJzIGNhbiBiZSBkZWZpbmVkICEhCisgICAgICAgICAgICBpZiAob3ducyhk
ZXNjcmlwdG9yLCAiZ2V0IikpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVHZXR0ZXIob2JqZWN0
LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5nZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG93bnMoZGVzY3JpcHRvciwgInNldCIpKSB7CisgICAgICAgICAgICAgICAgZGVmaW5lU2V0
dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH07Cit9CisKKy8vIEVTNSAxNS4y
LjMuNworLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjcKK2lmICghT2JqZWN0LmRl
ZmluZVByb3BlcnRpZXMgfHwgZGVmaW5lUHJvcGVydGllc0ZhbGxiYWNrKSB7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJv
cGVydGllcykgeworICAgICAgICAvLyBtYWtlIGEgdmFsaWFudCBhdHRlbXB0IHRvIHVzZSB0aGUg
cmVhbCBkZWZpbmVQcm9wZXJ0aWVzCisgICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0aWVzRmFsbGJh
Y2spIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZVBy
b3BlcnRpZXNGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUg
c2hpbSBpZiB0aGUgcmVhbCBvbmUgZG9lc24ndCB3b3JrCisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7CisgICAgICAg
ICAgICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkgJiYgcHJvcGVydHkgIT0gIl9fcHJv
dG9fXyIpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBw
cm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy44Cisv
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOAoraWYgKCFPYmplY3Quc2VhbCkgewor
ICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKKyAgICAgICAgLy8gdGhp
cyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24sIGJ1dAorICAgICAg
ICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIgZGVncmFkZSB0byB3
b3JraW5nCisgICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLgorICAgICAgICByZXR1cm4gb2Jq
ZWN0OworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuOQorLy8gaHR0cDovL2VzNS5naXRodWIu
Y29tLyN4MTUuMi4zLjkKK2lmICghT2JqZWN0LmZyZWV6ZSkgeworICAgIE9iamVjdC5mcmVlemUg
PSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgIC8vIHRoaXMgaXMgbWlzbGVhZGlu
ZyBhbmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQKKyAgICAgICAgLy8gYWxsb3dzICJz
ZWN1cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29ya2luZworICAgICAg
ICAvLyBidXQgaW5zZWN1cmUgY29kZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Owor
fQorCisvLyBkZXRlY3QgYSBSaGlubyBidWcgYW5kIHBhdGNoIGl0Cit0cnkgeworICAgIE9iamVj
dC5mcmVlemUoZnVuY3Rpb24gKCkge30pOworfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgT2Jq
ZWN0LmZyZWV6ZSA9IChmdW5jdGlvbiBmcmVlemUoZnJlZXplT2JqZWN0KSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9i
amVjdCA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChv
YmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0pKE9iamVjdC5mcmVlemUp
OworfQorCisvLyBFUzUgMTUuMi4zLjEwCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4y
LjMuMTAKK2lmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CisgICAgT2JqZWN0LnByZXZl
bnRFeHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7CisgICAg
ICAgIC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBi
dXQKKyAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRl
Z3JhZGUgdG8gd29ya2luZworICAgICAgICAvLyBidXQgaW5zZWN1cmUgY29kZS4KKyAgICAgICAg
cmV0dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjExCisvLyBodHRwOi8v
ZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTEKK2lmICghT2JqZWN0LmlzU2VhbGVkKSB7CisgICAg
T2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEyCisvLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTIKK2lmICghT2JqZWN0LmlzRnJvemVuKSB7CisgICAgT2Jq
ZWN0LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEzCisvLyBodHRwOi8vZXM1Lmdp
dGh1Yi5jb20vI3gxNS4yLjMuMTMKK2lmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgeworICAgIE9i
amVjdC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7CisgICAg
ICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCB0aHJvdyBhIFR5cGVFcnJvciBleGNl
cHRpb24uCisgICAgICAgIGlmIChPYmplY3Qob2JqZWN0KSAhPT0gb2JqZWN0KSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9Cisg
ICAgICAgIC8vIDIuIFJldHVybiB0aGUgQm9vbGVhbiB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxl
XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAgICAgdmFyIG5hbWUgPSAnJzsKKyAgICAg
ICAgd2hpbGUgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAgbmFtZSArPSAnPyc7
CisgICAgICAgIH0KKyAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKKyAgICAgICAgdmFyIHJl
dHVyblZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOworICAgICAgICBkZWxldGUgb2JqZWN0W25h
bWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfTsKK30KKworfSk7CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1
LXNoYW0ubWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1z
aGltL2VzNS1zaGFtLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzNjMjdhM2ZkOGUxNjNkOWYzMDMxNzc0
NWI4NzRmNjgyYWQzMjMxCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGFtLm1pbi5qcwpAQCAtMCwwICsxLDIgQEAK
KyhmdW5jdGlvbihkZWZpbml0aW9uKXtpZih0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iKXtkZWZp
bmUoZGVmaW5pdGlvbil9ZWxzZSBpZih0eXBlb2YgWVVJPT0iZnVuY3Rpb24iKXtZVUkuYWRkKCJl
czUtc2hhbSIsZGVmaW5pdGlvbil9ZWxzZXtkZWZpbml0aW9uKCl9fSkoZnVuY3Rpb24oKXt2YXIg
Y2FsbD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDt2YXIgcHJvdG90eXBlT2ZPYmplY3Q9T2JqZWN0
LnByb3RvdHlwZTt2YXIgb3ducz1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3duUHJv
cGVydHkpO3ZhciBkZWZpbmVHZXR0ZXI7dmFyIGRlZmluZVNldHRlcjt2YXIgbG9va3VwR2V0dGVy
O3ZhciBsb29rdXBTZXR0ZXI7dmFyIHN1cHBvcnRzQWNjZXNzb3JzO2lmKHN1cHBvcnRzQWNjZXNz
b3JzPW93bnMocHJvdG90eXBlT2ZPYmplY3QsIl9fZGVmaW5lR2V0dGVyX18iKSl7ZGVmaW5lR2V0
dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTtkZWZpbmVT
ZXR0ZXI9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pO2xvb2t1
cEdldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7bG9v
a3VwU2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKX1p
ZighT2JqZWN0LmdldFByb3RvdHlwZU9mKXtPYmplY3QuZ2V0UHJvdG90eXBlT2Y9ZnVuY3Rpb24g
Z2V0UHJvdG90eXBlT2Yob2JqZWN0KXtyZXR1cm4gb2JqZWN0Ll9fcHJvdG9fX3x8KG9iamVjdC5j
b25zdHJ1Y3Rvcj9vYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlOnByb3RvdHlwZU9mT2JqZWN0
KX19ZnVuY3Rpb24gZG9lc0dldE93blByb3BlcnR5RGVzY3JpcHRvcldvcmsob2JqZWN0KXt0cnl7
b2JqZWN0LnNlbnRpbmVsPTA7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
b2JqZWN0LCJzZW50aW5lbCIpLnZhbHVlPT09MH1jYXRjaChleGNlcHRpb24pe319aWYoT2JqZWN0
LmRlZmluZVByb3BlcnR5KXt2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29ya3NPbk9iamVj
dD1kb2VzR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29yayh7fSk7dmFyIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcldvcmtzT25Eb209dHlwZW9mIGRvY3VtZW50PT0idW5kZWZpbmVkInx8ZG9lc0dl
dE93blByb3BlcnR5RGVzY3JpcHRvcldvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikp
O2lmKCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3Jrc09uRG9tfHwhZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yV29ya3NPbk9iamVjdCl7dmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvckZhbGxi
YWNrPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9fWlmKCFPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yfHxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGYWxsYmFjayl7dmFyIEVS
Ul9OT05fT0JKRUNUPSJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBh
IG5vbi1vYmplY3Q6ICI7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbiBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LHByb3BlcnR5KXtpZih0eXBlb2Ygb2JqZWN0
IT0ib2JqZWN0IiYmdHlwZW9mIG9iamVjdCE9ImZ1bmN0aW9uInx8b2JqZWN0PT09bnVsbCl7dGhy
b3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCtvYmplY3QpfWlmKGdldE93blByb3BlcnR5
RGVzY3JpcHRvckZhbGxiYWNrKXt0cnl7cmV0dXJuIGdldE93blByb3BlcnR5RGVzY3JpcHRvckZh
bGxiYWNrLmNhbGwoT2JqZWN0LG9iamVjdCxwcm9wZXJ0eSl9Y2F0Y2goZXhjZXB0aW9uKXt9fWlm
KCFvd25zKG9iamVjdCxwcm9wZXJ0eSkpe3JldHVybn12YXIgZGVzY3JpcHRvcj17ZW51bWVyYWJs
ZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfTtpZihzdXBwb3J0c0FjY2Vzc29ycyl7dmFyIHByb3Rv
dHlwZT1vYmplY3QuX19wcm90b19fO29iamVjdC5fX3Byb3RvX189cHJvdG90eXBlT2ZPYmplY3Q7
dmFyIGdldHRlcj1sb29rdXBHZXR0ZXIob2JqZWN0LHByb3BlcnR5KTt2YXIgc2V0dGVyPWxvb2t1
cFNldHRlcihvYmplY3QscHJvcGVydHkpO29iamVjdC5fX3Byb3RvX189cHJvdG90eXBlO2lmKGdl
dHRlcnx8c2V0dGVyKXtpZihnZXR0ZXIpe2Rlc2NyaXB0b3IuZ2V0PWdldHRlcn1pZihzZXR0ZXIp
e2Rlc2NyaXB0b3Iuc2V0PXNldHRlcn1yZXR1cm4gZGVzY3JpcHRvcn19ZGVzY3JpcHRvci52YWx1
ZT1vYmplY3RbcHJvcGVydHldO2Rlc2NyaXB0b3Iud3JpdGFibGU9dHJ1ZTtyZXR1cm4gZGVzY3Jp
cHRvcn19aWYoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKXtPYmplY3QuZ2V0T3duUHJvcGVy
dHlOYW1lcz1mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCl7cmV0dXJuIE9iamVj
dC5rZXlzKG9iamVjdCl9fWlmKCFPYmplY3QuY3JlYXRlKXt2YXIgY3JlYXRlRW1wdHk7dmFyIHN1
cHBvcnRzUHJvdG89T2JqZWN0LnByb3RvdHlwZS5fX3Byb3RvX189PT1udWxsO2lmKHN1cHBvcnRz
UHJvdG98fHR5cGVvZiBkb2N1bWVudD09InVuZGVmaW5lZCIpe2NyZWF0ZUVtcHR5PWZ1bmN0aW9u
KCl7cmV0dXJue19fcHJvdG9fXzpudWxsfX19ZWxzZXtjcmVhdGVFbXB0eT1mdW5jdGlvbigpe3Zh
ciBpZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7dmFyIHBhcmVudD1kb2N1
bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWZyYW1lLnN0eWxlLmRpc3BsYXk9
Im5vbmUiO3BhcmVudC5hcHBlbmRDaGlsZChpZnJhbWUpO2lmcmFtZS5zcmM9ImphdmFzY3JpcHQ6
Ijt2YXIgZW1wdHk9aWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0LnByb3RvdHlwZTtwYXJlbnQu
cmVtb3ZlQ2hpbGQoaWZyYW1lKTtpZnJhbWU9bnVsbDtkZWxldGUgZW1wdHkuY29uc3RydWN0b3I7
ZGVsZXRlIGVtcHR5Lmhhc093blByb3BlcnR5O2RlbGV0ZSBlbXB0eS5wcm9wZXJ0eUlzRW51bWVy
YWJsZTtkZWxldGUgZW1wdHkuaXNQcm90b3R5cGVPZjtkZWxldGUgZW1wdHkudG9Mb2NhbGVTdHJp
bmc7ZGVsZXRlIGVtcHR5LnRvU3RyaW5nO2RlbGV0ZSBlbXB0eS52YWx1ZU9mO2VtcHR5Ll9fcHJv
dG9fXz1udWxsO2Z1bmN0aW9uIEVtcHR5KCl7fUVtcHR5LnByb3RvdHlwZT1lbXB0eTtjcmVhdGVF
bXB0eT1mdW5jdGlvbigpe3JldHVybiBuZXcgRW1wdHl9O3JldHVybiBuZXcgRW1wdHl9fU9iamVj
dC5jcmVhdGU9ZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSxwcm9wZXJ0aWVzKXt2YXIgb2JqZWN0
O2Z1bmN0aW9uIFR5cGUoKXt9aWYocHJvdG90eXBlPT09bnVsbCl7b2JqZWN0PWNyZWF0ZUVtcHR5
KCl9ZWxzZXtpZih0eXBlb2YgcHJvdG90eXBlIT09Im9iamVjdCImJnR5cGVvZiBwcm90b3R5cGUh
PT0iZnVuY3Rpb24iKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgcHJvdG90eXBlIG1heSBv
bmx5IGJlIGFuIE9iamVjdCBvciBudWxsIil9VHlwZS5wcm90b3R5cGU9cHJvdG90eXBlO29iamVj
dD1uZXcgVHlwZTtvYmplY3QuX19wcm90b19fPXByb3RvdHlwZX1pZihwcm9wZXJ0aWVzIT09dm9p
ZCAwKXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QscHJvcGVydGllcyl9cmV0dXJuIG9i
amVjdH19ZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3Qpe3RyeXtPYmplY3Qu
ZGVmaW5lUHJvcGVydHkob2JqZWN0LCJzZW50aW5lbCIse30pO3JldHVybiJzZW50aW5lbCJpbiBv
YmplY3R9Y2F0Y2goZXhjZXB0aW9uKXt9fWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl7dmFyIGRl
ZmluZVByb3BlcnR5V29ya3NPbk9iamVjdD1kb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTt2YXIg
ZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tPXR5cGVvZiBkb2N1bWVudD09InVuZGVmaW5lZCJ8fGRv
ZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2lmKCFk
ZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3R8fCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pe3Zh
ciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxkZWZpbmVQcm9w
ZXJ0aWVzRmFsbGJhY2s9T2JqZWN0LmRlZmluZVByb3BlcnRpZXN9fWlmKCFPYmplY3QuZGVmaW5l
UHJvcGVydHl8fGRlZmluZVByb3BlcnR5RmFsbGJhY2spe3ZhciBFUlJfTk9OX09CSkVDVF9ERVND
UklQVE9SPSJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjt2YXIgRVJS
X05PTl9PQkpFQ1RfVEFSR0VUPSJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1v
YmplY3Q6ICI7dmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRD0iZ2V0dGVycyAmIHNldHRl
cnMgY2FuIG5vdCBiZSBkZWZpbmVkICIrIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiO09iamVj
dC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShvYmplY3QscHJvcGVydHks
ZGVzY3JpcHRvcil7aWYodHlwZW9mIG9iamVjdCE9Im9iamVjdCImJnR5cGVvZiBvYmplY3QhPSJm
dW5jdGlvbiJ8fG9iamVjdD09PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpF
Q1RfVEFSR0VUK29iamVjdCl9aWYodHlwZW9mIGRlc2NyaXB0b3IhPSJvYmplY3QiJiZ0eXBlb2Yg
ZGVzY3JpcHRvciE9ImZ1bmN0aW9uInx8ZGVzY3JpcHRvcj09PW51bGwpe3Rocm93IG5ldyBUeXBl
RXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUitkZXNjcmlwdG9yKX1pZihkZWZpbmVQcm9w
ZXJ0eUZhbGxiYWNrKXt0cnl7cmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmpl
Y3Qsb2JqZWN0LHByb3BlcnR5LGRlc2NyaXB0b3IpfWNhdGNoKGV4Y2VwdGlvbil7fX1pZihvd25z
KGRlc2NyaXB0b3IsInZhbHVlIikpe2lmKHN1cHBvcnRzQWNjZXNzb3JzJiYobG9va3VwR2V0dGVy
KG9iamVjdCxwcm9wZXJ0eSl8fGxvb2t1cFNldHRlcihvYmplY3QscHJvcGVydHkpKSl7dmFyIHBy
b3RvdHlwZT1vYmplY3QuX19wcm90b19fO29iamVjdC5fX3Byb3RvX189cHJvdG90eXBlT2ZPYmpl
Y3Q7ZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07b2JqZWN0W3Byb3BlcnR5XT1kZXNjcmlwdG9yLnZh
bHVlO29iamVjdC5fX3Byb3RvX189cHJvdG90eXBlfWVsc2V7b2JqZWN0W3Byb3BlcnR5XT1kZXNj
cmlwdG9yLnZhbHVlfX1lbHNle2lmKCFzdXBwb3J0c0FjY2Vzc29ycyl7dGhyb3cgbmV3IFR5cGVF
cnJvcihFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQpfWlmKG93bnMoZGVzY3JpcHRvciwiZ2V0
Iikpe2RlZmluZUdldHRlcihvYmplY3QscHJvcGVydHksZGVzY3JpcHRvci5nZXQpfWlmKG93bnMo
ZGVzY3JpcHRvciwic2V0Iikpe2RlZmluZVNldHRlcihvYmplY3QscHJvcGVydHksZGVzY3JpcHRv
ci5zZXQpfX1yZXR1cm4gb2JqZWN0fX1pZighT2JqZWN0LmRlZmluZVByb3BlcnRpZXN8fGRlZmlu
ZVByb3BlcnRpZXNGYWxsYmFjayl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24gZGVm
aW5lUHJvcGVydGllcyhvYmplY3QscHJvcGVydGllcyl7aWYoZGVmaW5lUHJvcGVydGllc0ZhbGxi
YWNrKXt0cnl7cmV0dXJuIGRlZmluZVByb3BlcnRpZXNGYWxsYmFjay5jYWxsKE9iamVjdCxvYmpl
Y3QscHJvcGVydGllcyl9Y2F0Y2goZXhjZXB0aW9uKXt9fWZvcih2YXIgcHJvcGVydHkgaW4gcHJv
cGVydGllcyl7aWYob3ducyhwcm9wZXJ0aWVzLHByb3BlcnR5KSYmcHJvcGVydHkhPSJfX3Byb3Rv
X18iKXtPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LHByb3BlcnR5LHByb3BlcnRpZXNbcHJv
cGVydHldKX19cmV0dXJuIG9iamVjdH19aWYoIU9iamVjdC5zZWFsKXtPYmplY3Quc2VhbD1mdW5j
dGlvbiBzZWFsKG9iamVjdCl7cmV0dXJuIG9iamVjdH19aWYoIU9iamVjdC5mcmVlemUpe09iamVj
dC5mcmVlemU9ZnVuY3Rpb24gZnJlZXplKG9iamVjdCl7cmV0dXJuIG9iamVjdH19dHJ5e09iamVj
dC5mcmVlemUoZnVuY3Rpb24oKXt9KX1jYXRjaChleGNlcHRpb24pe09iamVjdC5mcmVlemU9ZnVu
Y3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCl7cmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3Qp
e2lmKHR5cGVvZiBvYmplY3Q9PSJmdW5jdGlvbiIpe3JldHVybiBvYmplY3R9ZWxzZXtyZXR1cm4g
ZnJlZXplT2JqZWN0KG9iamVjdCl9fX0oT2JqZWN0LmZyZWV6ZSl9aWYoIU9iamVjdC5wcmV2ZW50
RXh0ZW5zaW9ucyl7T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zPWZ1bmN0aW9uIHByZXZlbnRFeHRl
bnNpb25zKG9iamVjdCl7cmV0dXJuIG9iamVjdH19aWYoIU9iamVjdC5pc1NlYWxlZCl7T2JqZWN0
LmlzU2VhbGVkPWZ1bmN0aW9uIGlzU2VhbGVkKG9iamVjdCl7cmV0dXJuIGZhbHNlfX1pZighT2Jq
ZWN0LmlzRnJvemVuKXtPYmplY3QuaXNGcm96ZW49ZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KXty
ZXR1cm4gZmFsc2V9fWlmKCFPYmplY3QuaXNFeHRlbnNpYmxlKXtPYmplY3QuaXNFeHRlbnNpYmxl
PWZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3Qpe2lmKE9iamVjdChvYmplY3QpIT09b2JqZWN0
KXt0aHJvdyBuZXcgVHlwZUVycm9yfXZhciBuYW1lPSIiO3doaWxlKG93bnMob2JqZWN0LG5hbWUp
KXtuYW1lKz0iPyJ9b2JqZWN0W25hbWVdPXRydWU7dmFyIHJldHVyblZhbHVlPW93bnMob2JqZWN0
LG5hbWUpO2RlbGV0ZSBvYmplY3RbbmFtZV07cmV0dXJuIHJldHVyblZhbHVlfX19KTsKKy8vIyBz
b3VyY2VNYXBwaW5nVVJMPWVzNS1zaGFtLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hp
bS9lczUtc2hpbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUt
c2hpbS9lczUtc2hpbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTE2ZDM5M2ExODJiOTE5NjYwMDRkYmFkMTdj
NWJkOTMzMmQ2MzFkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGltLmpzCkBAIC0wLDAgKzEsMTM2MCBAQAorLy8g
Q29weXJpZ2h0IDIwMDktMjAxMiBieSBjb250cmlidXRvcnMsIE1JVCBMaWNlbnNlCisvLyB2aW06
IHRzPTQgc3RzPTQgc3c9NCBleHBhbmR0YWIKKworLy9BZGQgc2VtaWNvbG9uIHRvIHByZXZlbnQg
SUlGRSBmcm9tIGJlaW5nIHBhc3NlZCBhcyBhcmd1bWVudCB0byBjb25jYXRlZCBjb2RlLgorOwor
Ly8gTW9kdWxlIHN5c3RlbXMgbWFnaWMgZGFuY2UKKyhmdW5jdGlvbiAoZGVmaW5pdGlvbikgewor
ICAgIC8vIFJlcXVpcmVKUworICAgIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIpIHsK
KyAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pOworICAgIC8vIFlVSTMKKyAgICB9IGVsc2UgaWYg
KHR5cGVvZiBZVUkgPT0gImZ1bmN0aW9uIikgeworICAgICAgICBZVUkuYWRkKCJlczUiLCBkZWZp
bml0aW9uKTsKKyAgICAvLyBDb21tb25KUyBhbmQgPHNjcmlwdD4KKyAgICB9IGVsc2UgeworICAg
ICAgICBkZWZpbml0aW9uKCk7CisgICAgfQorfSkoZnVuY3Rpb24gKCkgeworCisvKioKKyAqIEJy
aW5ncyBhbiBlbnZpcm9ubWVudCBhcyBjbG9zZSB0byBFQ01BU2NyaXB0IDUgY29tcGxpYW5jZQor
ICogYXMgaXMgcG9zc2libGUgd2l0aCB0aGUgZmFjaWxpdGllcyBvZiBlcnN0d2hpbGUgZW5naW5l
cy4KKyAqCisgKiBBbm5vdGF0ZWQgRVM1OiBodHRwOi8vZXM1LmdpdGh1Yi5jb20vIChzcGVjaWZp
YyBsaW5rcyBiZWxvdykKKyAqIEVTNSBTcGVjOiBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25h
bC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRWNtYS0yNjIucGRmCisgKiBSZXF1aXJl
ZCByZWFkaW5nOiBodHRwOi8vamF2YXNjcmlwdHdlYmxvZy53b3JkcHJlc3MuY29tLzIwMTEvMTIv
MDUvZXh0ZW5kaW5nLWphdmFzY3JpcHQtbmF0aXZlcy8KKyAqLworCisvLyBFUy01IDE1LjEuMi4y
CitpZiAocGFyc2VJbnQoJzA4JykgIT09IDgpIHsKKyAgICBwYXJzZUludCA9IChmdW5jdGlvbiAo
b3JpZ1BhcnNlSW50KSB7CisgICAgICAgIHZhciBoZXhSZWdleCA9IC9eMFt4WF0vOworICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gcGFyc2VJbnRFUzUoc3RyLCByYWRpeCkgeworICAgICAgICAgICAg
c3RyID0gU3RyaW5nKHN0cikudHJpbSgpOworICAgICAgICAgICAgaWYgKCErcmFkaXgpIHsKKyAg
ICAgICAgICAgICAgICByYWRpeCA9IGhleFJlZ2V4LnRlc3Qoc3RyKSA/IDE2IDogMTA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb3JpZ1BhcnNlSW50KHN0ciwgcmFkaXgpOwor
ICAgICAgICB9OworICAgIH0ocGFyc2VJbnQpKTsKK30KKworLy8KKy8vIEZ1bmN0aW9uCisvLyA9
PT09PT09PQorLy8KKworLy8gRVMtNSAxNS4zLjQuNQorLy8gaHR0cDovL2VzNS5naXRodWIuY29t
LyN4MTUuMy40LjUKKworZnVuY3Rpb24gRW1wdHkoKSB7fQorCitpZiAoIUZ1bmN0aW9uLnByb3Rv
dHlwZS5iaW5kKSB7CisgICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5k
KHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCisgICAgICAgIC8vIDEuIExldCBUYXJnZXQgYmUgdGhl
IHRoaXMgdmFsdWUuCisgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzOworICAgICAgICAvLyAyLiBJ
ZiBJc0NhbGxhYmxlKFRhcmdldCkgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlv
bi4KKyAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIikgeworICAgICAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9u
IGluY29tcGF0aWJsZSAiICsgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgICAvLyAzLiBMZXQg
QSBiZSBhIG5ldyAocG9zc2libHkgZW1wdHkpIGludGVybmFsIGxpc3Qgb2YgYWxsIG9mIHRoZQor
ICAgICAgICAvLyAgIGFyZ3VtZW50IHZhbHVlcyBwcm92aWRlZCBhZnRlciB0aGlzQXJnIChhcmcx
LCBhcmcyIGV0YyksIGluIG9yZGVyLgorICAgICAgICAvLyBYWFggc2xpY2VkQXJncyB3aWxsIHN0
YW5kIGluIGZvciAiQSIgaWYgdXNlZAorICAgICAgICB2YXIgYXJncyA9IF9BcnJheV9zbGljZV8u
Y2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwKKyAgICAgICAgLy8gNC4gTGV0
IEYgYmUgYSBuZXcgbmF0aXZlIEVDTUFTY3JpcHQgb2JqZWN0LgorICAgICAgICAvLyAxMS4gU2V0
IHRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgdG8gdGhlIHN0YW5kYXJk
CisgICAgICAgIC8vICAgYnVpbHQtaW4gRnVuY3Rpb24gcHJvdG90eXBlIG9iamVjdCBhcyBzcGVj
aWZpZWQgaW4gMTUuMy4zLjEuCisgICAgICAgIC8vIDEyLiBTZXQgdGhlIFtbQ2FsbF1dIGludGVy
bmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCisgICAgICAgIC8vICAgMTUuMy40LjUu
MS4KKyAgICAgICAgLy8gMTMuIFNldCB0aGUgW1tDb25zdHJ1Y3RdXSBpbnRlcm5hbCBwcm9wZXJ0
eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAgIDE1LjMuNC41LjIuCisgICAgICAg
IC8vIDE0LiBTZXQgdGhlIFtbSGFzSW5zdGFuY2VdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFz
IGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAgIDE1LjMuNC41LjMuCisgICAgICAgIHZhciBiaW5k
ZXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91
bmQpIHsKKyAgICAgICAgICAgICAgICAvLyAxNS4zLjQuNS4yIFtbQ29uc3RydWN0XV0KKyAgICAg
ICAgICAgICAgICAvLyBXaGVuIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCBvZiBh
IGZ1bmN0aW9uIG9iamVjdCwKKyAgICAgICAgICAgICAgICAvLyBGIHRoYXQgd2FzIGNyZWF0ZWQg
dXNpbmcgdGhlIGJpbmQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYQorICAgICAgICAgICAgICAg
IC8vIGxpc3Qgb2YgYXJndW1lbnRzIEV4dHJhQXJncywgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUg
dGFrZW46CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHRhcmdldCBiZSB0aGUgdmFsdWUgb2Yg
RidzIFtbVGFyZ2V0RnVuY3Rpb25dXQorICAgICAgICAgICAgICAgIC8vICAgaW50ZXJuYWwgcHJv
cGVydHkuCisgICAgICAgICAgICAgICAgLy8gMi4gSWYgdGFyZ2V0IGhhcyBubyBbW0NvbnN0cnVj
dF1dIGludGVybmFsIG1ldGhvZCwgYQorICAgICAgICAgICAgICAgIC8vICAgVHlwZUVycm9yIGV4
Y2VwdGlvbiBpcyB0aHJvd24uCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IGJvdW5kQXJncyBi
ZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwKKyAgICAgICAgICAgICAg
ICAvLyAgIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8vIDQuIExldCBhcmdzIGJlIGEgbmV3
IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlCisgICAgICAgICAgICAgICAg
Ly8gICBsaXN0IGJvdW5kQXJncyBpbiB0aGUgc2FtZSBvcmRlciBmb2xsb3dlZCBieSB0aGUgc2Ft
ZQorICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0
aGUgc2FtZSBvcmRlci4KKyAgICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsCisgICAgICAgICAgICAgICAgLy8g
ICBtZXRob2Qgb2YgdGFyZ2V0IHByb3ZpZGluZyBhcmdzIGFzIHRoZSBhcmd1bWVudHMuCisKKyAg
ICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KAorICAgICAgICAgICAgICAg
ICAgICB0aGlzLAorICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChfQXJyYXlfc2xpY2Vf
LmNhbGwoYXJndW1lbnRzKSkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlm
IChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlz
OworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIDE1LjMuNC41LjEg
W1tDYWxsXV0KKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBt
ZXRob2Qgb2YgYSBmdW5jdGlvbiBvYmplY3QsIEYsCisgICAgICAgICAgICAgICAgLy8gd2hpY2gg
d2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGJpbmQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYQorICAg
ICAgICAgICAgICAgIC8vIHRoaXMgdmFsdWUgYW5kIGEgbGlzdCBvZiBhcmd1bWVudHMgRXh0cmFB
cmdzLCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgLy8gc3RlcHMgYXJlIHRha2VuOgor
ICAgICAgICAgICAgICAgIC8vIDEuIExldCBib3VuZEFyZ3MgYmUgdGhlIHZhbHVlIG9mIEYncyBb
W0JvdW5kQXJnc11dIGludGVybmFsCisgICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4KKyAg
ICAgICAgICAgICAgICAvLyAyLiBMZXQgYm91bmRUaGlzIGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tC
b3VuZFRoaXNdXSBpbnRlcm5hbAorICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCisgICAg
ICAgICAgICAgICAgLy8gMy4gTGV0IHRhcmdldCBiZSB0aGUgdmFsdWUgb2YgRidzIFtbVGFyZ2V0
RnVuY3Rpb25dXSBpbnRlcm5hbAorICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCisgICAg
ICAgICAgICAgICAgLy8gNC4gTGV0IGFyZ3MgYmUgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBz
YW1lIHZhbHVlcyBhcyB0aGUKKyAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGlu
IHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8g
ICB2YWx1ZXMgYXMgdGhlIGxpc3QgRXh0cmFBcmdzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgICAg
ICAgICAgICAgIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1d
IGludGVybmFsIG1ldGhvZAorICAgICAgICAgICAgICAgIC8vICAgb2YgdGFyZ2V0IHByb3ZpZGlu
ZyBib3VuZFRoaXMgYXMgdGhlIHRoaXMgdmFsdWUgYW5kCisgICAgICAgICAgICAgICAgLy8gICBw
cm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLgorCisgICAgICAgICAgICAgICAgLy8gZXF1
aXY6IHRhcmdldC5jYWxsKHRoaXMsIC4uLmJvdW5kQXJncywgLi4uYXJncykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KAorICAgICAgICAgICAgICAgICAgICB0aGF0LAorICAg
ICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRz
KSkKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICB9CisKKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyAxNS4gSWYgdGhlIFtbQ2xhc3NdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBUYXJn
ZXQgaXMgIkZ1bmN0aW9uIiwgdGhlbgorICAgICAgICAvLyAgICAgYS4gTGV0IEwgYmUgdGhlIGxl
bmd0aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxlbmd0aCBvZiBBLgorICAgICAgICAv
LyAgICAgYi4gU2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gZWl0aGVyIDAgb3Ig
TCwgd2hpY2hldmVyIGlzCisgICAgICAgIC8vICAgICAgIGxhcmdlci4KKyAgICAgICAgLy8gMTYu
IEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC4KKworICAgICAgICB2
YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgp
OworCisgICAgICAgIC8vIDE3LiBTZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGxlbmd0aCBvd24g
cHJvcGVydHkgb2YgRiB0byB0aGUgdmFsdWVzCisgICAgICAgIC8vICAgc3BlY2lmaWVkIGluIDE1
LjMuNS4xLgorICAgICAgICB2YXIgYm91bmRBcmdzID0gW107CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykgeworICAgICAgICAgICAgYm91bmRBcmdzLnB1c2go
IiQiICsgaSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBYWFggQnVpbGQgYSBkeW5hbWljIGZ1
bmN0aW9uIHdpdGggZGVzaXJlZCBhbW91bnQgb2YgYXJndW1lbnRzIGlzIHRoZSBvbmx5IAorICAg
ICAgICAvLyB3YXkgdG8gc2V0IHRoZSBsZW5ndGggcHJvcGVydHkgb2YgYSBmdW5jdGlvbi4gCisg
ICAgICAgIC8vIEluIGVudmlyb25tZW50cyB3aGVyZSBDb250ZW50IFNlY3VyaXR5IFBvbGljaWVz
IGVuYWJsZWQgKENocm9tZSBleHRlbnNpb25zLCAKKyAgICAgICAgLy8gZm9yIGV4LikgYWxsIHVz
ZSBvZiBldmFsIG9yIEZ1bmN0aW9uIGNvc3RydWN0b3IgdGhyb3dzIGFuIGV4Y2VwdGlvbi4gCisg
ICAgICAgIC8vIEhvd2V2ZXIgaW4gYWxsIG9mIHRoZXNlIGVudmlyb25tZW50cyBGdW5jdGlvbi5w
cm90b3R5cGUuYmluZCBleGlzdHMgCisgICAgICAgIC8vIGFuZCBzbyB0aGlzIGNvZGUgd2lsbCBu
ZXZlciBiZSBleGVjdXRlZC4KKyAgICAgICAgdmFyIGJvdW5kID0gRnVuY3Rpb24oImJpbmRlciIs
ICJyZXR1cm4gZnVuY3Rpb24oIiArIGJvdW5kQXJncy5qb2luKCIsIikgKyAiKXtyZXR1cm4gYmlu
ZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0iKShiaW5kZXIpOworCisgICAgICAgIGlmICh0YXJn
ZXQucHJvdG90eXBlKSB7CisgICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJv
dG90eXBlOworICAgICAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7CisgICAg
ICAgICAgICAvLyBDbGVhbiB1cCBkYW5nbGluZyByZWZlcmVuY2VzLgorICAgICAgICAgICAgRW1w
dHkucHJvdG90eXBlID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRPRE8KKyAgICAg
ICAgLy8gMTguIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0
byB0cnVlLgorCisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgLy8gMTkuIExldCB0aHJvd2VyIGJl
IHRoZSBbW1Rocm93VHlwZUVycm9yXV0gZnVuY3Rpb24gT2JqZWN0ICgxMy4yLjMpLgorICAgICAg
ICAvLyAyMC4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBv
ZiBGIHdpdGgKKyAgICAgICAgLy8gICBhcmd1bWVudHMgImNhbGxlciIsIFByb3BlcnR5RGVzY3Jp
cHRvciB7W1tHZXRdXTogdGhyb3dlciwgW1tTZXRdXToKKyAgICAgICAgLy8gICB0aHJvd2VyLCBb
W0VudW1lcmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IGZhbHNlfSwgYW5kCisgICAg
ICAgIC8vICAgZmFsc2UuCisgICAgICAgIC8vIDIxLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3Bl
cnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aAorICAgICAgICAvLyAgIGFyZ3VtZW50cyAi
YXJndW1lbnRzIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLAorICAgICAg
ICAvLyAgIFtbU2V0XV06IHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1
cmFibGVdXTogZmFsc2V9LAorICAgICAgICAvLyAgIGFuZCBmYWxzZS4KKworICAgICAgICAvLyBU
T0RPCisgICAgICAgIC8vIE5PVEUgRnVuY3Rpb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIEZ1bmN0
aW9uLnByb3RvdHlwZS5iaW5kIGRvIG5vdAorICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHBy
b3BlcnR5IG9yIHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJhbWV0ZXJzXV0sIGFuZAorICAgICAg
ICAvLyBbW1Njb3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy4KKyAgICAgICAgLy8gWFhYIGNhbid0
IGRlbGV0ZSBwcm90b3R5cGUgaW4gcHVyZS1qcy4KKworICAgICAgICAvLyAyMi4gUmV0dXJuIEYu
CisgICAgICAgIHJldHVybiBib3VuZDsKKyAgICB9OworfQorCisvLyBTaG9ydGN1dCB0byBhbiBv
ZnRlbiBhY2Nlc3NlZCBwcm9wZXJ0aWVzLCBpbiBvcmRlciB0byBhdm9pZCBtdWx0aXBsZQorLy8g
ZGVyZWZlcmVuY2UgdGhhdCBjb3N0cyB1bml2ZXJzYWxseS4KKy8vIF9QbGVhc2Ugbm90ZTogU2hv
cnRjdXRzIGFyZSBkZWZpbmVkIGFmdGVyIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgYXMgd2UK
Ky8vIHVzIGl0IGluIGRlZmluaW5nIHNob3J0Y3V0cy4KK3ZhciBjYWxsID0gRnVuY3Rpb24ucHJv
dG90eXBlLmNhbGw7Cit2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKK3Zh
ciBwcm90b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7Cit2YXIgX0FycmF5X3NsaWNl
XyA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7CisvLyBIYXZpbmcgYSB0b1N0cmluZyBsb2NhbCB2
YXJpYWJsZSBuYW1lIGJyZWFrcyBpbiBPcGVyYSBzbyB1c2UgX3RvU3RyaW5nLgordmFyIF90b1N0
cmluZyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmluZyk7Cit2YXIgb3ducyA9
IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSk7CisKKy8vIElmIEpT
IGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvcnMgY3JlYXRpbmcgc2hvcnRjdXRzLgordmFyIGRlZmlu
ZUdldHRlcjsKK3ZhciBkZWZpbmVTZXR0ZXI7Cit2YXIgbG9va3VwR2V0dGVyOwordmFyIGxvb2t1
cFNldHRlcjsKK3ZhciBzdXBwb3J0c0FjY2Vzc29yczsKK2lmICgoc3VwcG9ydHNBY2Nlc3NvcnMg
PSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJfXyIpKSkgeworICAgIGRl
ZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9f
KTsKKyAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZp
bmVTZXR0ZXJfXyk7CisgICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2Jq
ZWN0Ll9fbG9va3VwR2V0dGVyX18pOworICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90
b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKK30KKworLy8KKy8vIEFycmF5CisvLyA9
PT09PQorLy8KKworLy8gRVM1IDE1LjQuNC4xMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4
MTUuNC40LjEyCisvLyBEZWZhdWx0IHZhbHVlIGZvciBzZWNvbmQgcGFyYW0KKy8vIFtidWdmaXgs
IGllbHQ5LCBvbGQgYnJvd3NlcnNdCisvLyBJRSA8IDkgYnVnOiBbMSwyXS5zcGxpY2UoMCkuam9p
bigiIikgPT0gIiIgYnV0IHNob3VsZCBiZSAiMTIiCitpZiAoWzEsMl0uc3BsaWNlKDApLmxlbmd0
aCAhPSAyKSB7CisgICAgdmFyIGFycmF5X3NwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7
CisgICAgdmFyIGFycmF5X3B1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDsKKyAgICB2YXIgYXJy
YXlfdW5zaGlmdCA9IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0OworCisgICAgaWYgKGZ1bmN0aW9u
KCkgeyAvLyB0ZXN0IElFIDwgOSB0byBzcGxpY2UgYnVnIC0gc2VlIGlzc3VlICMxMzgKKyAgICAg
ICAgZnVuY3Rpb24gbWFrZUFycmF5KGwpIHsKKyAgICAgICAgICAgIHZhciBhID0gW107CisgICAg
ICAgICAgICB3aGlsZSAobC0tKSB7CisgICAgICAgICAgICAgICAgYS51bnNoaWZ0KGwpCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYQorICAgICAgICB9CisKKyAgICAgICAgdmFy
IGFycmF5ID0gW10KKyAgICAgICAgICAgICwgbGVuZ3RoQmVmb3JlCisgICAgICAgIDsKKworICAg
ICAgICBhcnJheS5zcGxpY2UuYmluZChhcnJheSwgMCwgMCkuYXBwbHkobnVsbCwgbWFrZUFycmF5
KDIwKSk7CisgICAgICAgIGFycmF5LnNwbGljZS5iaW5kKGFycmF5LCAwLCAwKS5hcHBseShudWxs
LCBtYWtlQXJyYXkoMjYpKTsKKworICAgICAgICBsZW5ndGhCZWZvcmUgPSBhcnJheS5sZW5ndGg7
IC8vMjAKKyAgICAgICAgYXJyYXkuc3BsaWNlKDUsIDAsICJYWFgiKTsgLy8gYWRkIG9uZSBlbGVt
ZW50CisKKyAgICAgICAgaWYgKGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3RoKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMgcmlnaHQgc3BsaWNlIGltcGxlbWVudGF0aW9u
IHdpdGhvdXQgYnVncworICAgICAgICB9CisgICAgICAgIC8vIGVsc2UgeworICAgICAgICAvLyAg
ICBJRTggYnVnCisgICAgICAgIC8vIH0KKyAgICB9KCkpIHsvL0lFIDYvNworICAgICAgICBBcnJh
eS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGRlbGV0ZUNvdW50KSB7CisgICAg
ICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
W107CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBhcnJheV9z
cGxpY2UuYXBwbHkodGhpcywgWworICAgICAgICAgICAgICAgICAgICBzdGFydCA9PT0gdm9pZCAw
ID8gMCA6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9PT0gdm9pZCAw
ID8gKHRoaXMubGVuZ3RoIC0gc3RhcnQpIDogZGVsZXRlQ291bnQKKyAgICAgICAgICAgICAgICBd
LmNvbmNhdChfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzLCAyKSkpCisgICAgICAgICAgICB9
CisgICAgICAgIH07CisgICAgfQorICAgIGVsc2Ugey8vSUU4CisgICAgICAgIEFycmF5LnByb3Rv
dHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFydCwgZGVsZXRlQ291bnQpIHsKKyAgICAgICAgICAg
IHZhciByZXN1bHQKKyAgICAgICAgICAgICAgICAsIGFyZ3MgPSBfQXJyYXlfc2xpY2VfLmNhbGwo
YXJndW1lbnRzLCAyKQorICAgICAgICAgICAgICAgICwgYWRkRWxlbWVudHNDb3VudCA9IGFyZ3Mu
bGVuZ3RoCisgICAgICAgICAgICA7CisKKyAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0
aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHN0YXJ0ID09PSB2b2lkIDApIHsgLy8gZGVmYXVsdAorICAgICAgICAgICAgICAg
IHN0YXJ0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWxldGVDb3VudCA9
PT0gdm9pZCAwKSB7IC8vIGRlZmF1bHQKKyAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IHRo
aXMubGVuZ3RoIC0gc3RhcnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhZGRF
bGVtZW50c0NvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChkZWxldGVDb3VudCA8PSAw
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PSB0aGlzLmxlbmd0aCkgeyAvLyB0
aW55IG9wdGltaXNhdGlvbiAjMQorICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaC5h
cHBseSh0aGlzLCBhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PSAw
KSB7IC8vIHRpbnkgb3B0aW1pc2F0aW9uICMyCisgICAgICAgICAgICAgICAgICAgICAgICBhcnJh
eV91bnNoaWZ0LmFwcGx5KHRoaXMsIGFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFtdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gQXJyYXkucHJvdG90eXBlLnNwbGljZSBpbXBsZW1lbnRhdGlvbgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IF9BcnJheV9zbGljZV8uY2FsbCh0aGlzLCBzdGFydCwgc3Rh
cnQgKyBkZWxldGVDb3VudCk7Ly8gZGVsZXRlIHBhcnQKKyAgICAgICAgICAgICAgICBhcmdzLnB1
c2guYXBwbHkoYXJncywgX0FycmF5X3NsaWNlXy5jYWxsKHRoaXMsIHN0YXJ0ICsgZGVsZXRlQ291
bnQsIHRoaXMubGVuZ3RoKSk7Ly8gcmlnaHQgcGFydAorICAgICAgICAgICAgICAgIGFyZ3MudW5z
aGlmdC5hcHBseShhcmdzLCBfQXJyYXlfc2xpY2VfLmNhbGwodGhpcywgMCwgc3RhcnQpKTsvLyBs
ZWZ0IHBhcnQKKworICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBhbGwgaXRlbXMgZnJvbSB0aGlz
IGFycmF5IGFuZCByZXBsYWNlIGl0IHRvICdsZWZ0IHBhcnQnICsgX0FycmF5X3NsaWNlXy5jYWxs
KGFyZ3VtZW50cywgMikgKyAncmlnaHQgcGFydCcKKyAgICAgICAgICAgICAgICBhcmdzLnVuc2hp
ZnQoMCwgdGhpcy5sZW5ndGgpOworCisgICAgICAgICAgICAgICAgYXJyYXlfc3BsaWNlLmFwcGx5
KHRoaXMsIGFyZ3MpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGFycmF5X3NwbGljZS5jYWxsKHRoaXMsIHN0YXJ0
LCBkZWxldGVDb3VudCk7CisgICAgICAgIH0KKworICAgIH0KK30KKworLy8gRVM1IDE1LjQuNC4x
MgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjEzCisvLyBSZXR1cm4gbGVuK2Fy
Z0NvdW50LgorLy8gW2J1Z2ZpeCwgaWVsdDhdCisvLyBJRSA8IDggYnVnOiBbXS51bnNoaWZ0KDAp
ID09IHVuZGVmaW5lZCBidXQgc2hvdWxkIGJlICIxIgoraWYgKFtdLnVuc2hpZnQoMCkgIT0gMSkg
eworICAgIHZhciBhcnJheV91bnNoaWZ0ID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQ7CisgICAg
QXJyYXkucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgYXJyYXlfdW5z
aGlmdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGg7
CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuMy4yCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
I3gxNS40LjMuMgorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlw
dC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNBcnJheQoraWYgKCFBcnJheS5pc0Fy
cmF5KSB7CisgICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7CisgICAg
ICAgIHJldHVybiBfdG9TdHJpbmcob2JqKSA9PSAiW29iamVjdCBBcnJheV0iOworICAgIH07Cit9
CisKKy8vIFRoZSBJc0NhbGxhYmxlKCkgY2hlY2sgaW4gdGhlIEFycmF5IGZ1bmN0aW9ucworLy8g
aGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIHN0cmljdCBjaGVjayBvbiB0aGUKKy8vIGludGVybmFs
IGNsYXNzIG9mIHRoZSBvYmplY3QgdG8gdHJhcCBjYXNlcyB3aGVyZQorLy8gdGhlIHByb3ZpZGVk
IGZ1bmN0aW9uIHdhcyBhY3R1YWxseSBhIHJlZ3VsYXIKKy8vIGV4cHJlc3Npb24gbGl0ZXJhbCwg
d2hpY2ggaW4gVjggYW5kCisvLyBKYXZhU2NyaXB0Q29yZSBpcyBhIHR5cGVvZiAiZnVuY3Rpb24i
LiAgT25seSBpbgorLy8gVjggYXJlIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFscyBwZXJtaXR0
ZWQgYXMKKy8vIHJlZHVjZSBwYXJhbWV0ZXJzLCBzbyBpdCBpcyBkZXNpcmFibGUgaW4gdGhlCisv
LyBnZW5lcmFsIGNhc2UgZm9yIHRoZSBzaGltIHRvIG1hdGNoIHRoZSBtb3JlCisvLyBzdHJpY3Qg
YW5kIGNvbW1vbiBiZWhhdmlvciBvZiByZWplY3RpbmcgcmVndWxhcgorLy8gZXhwcmVzc2lvbnMu
CisKKy8vIEVTNSAxNS40LjQuMTgKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4x
OAorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVu
Y2UvR2xvYmFsX09iamVjdHMvYXJyYXkvZm9yRWFjaAorCisvLyBDaGVjayBmYWlsdXJlIG9mIGJ5
LWluZGV4IGFjY2VzcyBvZiBzdHJpbmcgY2hhcmFjdGVycyAoSUUgPCA5KQorLy8gYW5kIGZhaWx1
cmUgb2YgYDAgaW4gYm94ZWRTdHJpbmdgIChSaGlubykKK3ZhciBib3hlZFN0cmluZyA9IE9iamVj
dCgiYSIpLAorICAgIHNwbGl0U3RyaW5nID0gYm94ZWRTdHJpbmdbMF0gIT0gImEiIHx8ICEoMCBp
biBib3hlZFN0cmluZyk7CisvLyBDaGVjayBub2RlIDAuNi4yMSBidWcgd2hlcmUgdGhpcmQgcGFy
YW1ldGVyIGlzIG5vdCBib3hlZAordmFyIGJveGVkRm9yRWFjaCA9IHRydWU7CitpZiAoQXJyYXku
cHJvdG90eXBlLmZvckVhY2gpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCJm
b28iLCBmdW5jdGlvbihpdGVtLCBpLCBvYmopIHsKKyAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09
ICdvYmplY3QnKSBib3hlZEZvckVhY2ggPSBmYWxzZTsKKyAgICB9KTsKK30KKworaWYgKCFBcnJh
eS5wcm90b3R5cGUuZm9yRWFjaCB8fCAhYm94ZWRGb3JFYWNoKSB7CisgICAgQXJyYXkucHJvdG90
eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykgeworICAgICAg
ICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRT
dHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAg
ICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAg
ICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV0sCisgICAgICAgICAgICBpID0gLTEsCisgICAgICAg
ICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKworICAgICAgICAvLyBJZiBubyBjYWxs
YmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgor
ICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKKyAgICAgICAg
fQorCisgICAgICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpIGlu
IHNlbGYpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9u
IHdpdGggY2FsbCwgcGFzc2luZyBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgLy8gY29udGV4
dCwgcHJvcGVydHkgdmFsdWUsIHByb3BlcnR5IGtleSwgdGhpc0FyZyBvYmplY3QKKyAgICAgICAg
ICAgICAgICAvLyBjb250ZXh0CisgICAgICAgICAgICAgICAgZnVuLmNhbGwodGhpc3AsIHNlbGZb
aV0sIGksIG9iamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfQorCisv
LyBFUzUgMTUuNC40LjE5CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTkKKy8v
IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVm
ZXJlbmNlL09iamVjdHMvQXJyYXkvbWFwCitpZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsKKyAg
ICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgewor
ICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0g
c3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAg
ICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAor
ICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICByZXN1
bHQgPSBBcnJheShsZW5ndGgpLAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisK
KyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90
IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2Jq
ZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsg
IiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikKKyAgICAg
ICAgICAgICAgICByZXN1bHRbaV0gPSBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07Cit9CisKKy8vIEVT
NSAxNS40LjQuMjAKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4yMAorLy8gaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVu
Y2UvT2JqZWN0cy9BcnJheS9maWx0ZXIKK2lmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikgewor
ICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoZnVuIC8qLCB0aGlz
cCAqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAg
ICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmlu
Z10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAg
ICAgIG9iamVjdCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAorICAg
ICAgICAgICAgcmVzdWx0ID0gW10sCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIHRo
aXNwID0gYXJndW1lbnRzWzFdOworCisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9u
IG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChf
dG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
IGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZbaV07CisgICAg
ICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1ZSwgaSwgb2JqZWN0KSkgeworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
K30KKworLy8gRVM1IDE1LjQuNC4xNgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40
LjE2CisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVy
ZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9ldmVyeQoraWYgKCFBcnJheS5wcm90b3R5cGUuZXZl
cnkpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyos
IHRoaXNwICovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAg
ICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3Qg
U3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAg
ICAgICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAg
ICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworCisgICAgICAgIC8vIElmIG5vIGNhbGxi
YWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisg
ICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgIWZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBp
LCBvYmplY3QpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07Cit9CisKKy8vIEVTNSAx
NS40LjQuMTcKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNworLy8gaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09i
amVjdHMvQXJyYXkvc29tZQoraWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgeworICAgIEFycmF5
LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7CisgICAg
ICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxp
dFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAg
ICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAg
ICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHRoaXNwID0g
YXJndW1lbnRzWzFdOworCisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlm
IGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJp
bmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChp
IGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4yMQorLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIxCisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxh
Lm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVj
ZQoraWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7CisgICAgQXJyYXkucHJvdG90eXBlLnJl
ZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgeworICAgICAgICB2YXIg
b2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcg
JiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAg
ICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAg
bGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sg
ZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAg
ICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAg
ICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gbm8gdmFsdWUgdG8gcmV0dXJuIGlmIG5vIGluaXRpYWwgdmFs
dWUgYW5kIGFuIGVtcHR5IGFycmF5CisgICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5s
ZW5ndGggPT0gMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9m
IGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIGkgPSAwOworICAgICAgICB2YXIgcmVzdWx0OworICAgICAgICBpZiAoYXJndW1lbnRz
Lmxlbmd0aCA+PSAyKSB7CisgICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKGkgaW4g
c2VsZikgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2krK107CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIGlmIGFycmF5IGNvbnRhaW5zIG5vIHZhbHVlcywgbm8gaW5pdGlhbCB2YWx1ZSB0byByZXR1
cm4KKyAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0aCkgeworICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBp
bml0aWFsIHZhbHVlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAo
dHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVu
LmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07Cit9CisKKy8vIEVT
NSAxNS40LjQuMjIKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4yMgorLy8gaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVu
Y2UvT2JqZWN0cy9BcnJheS9yZWR1Y2VSaWdodAoraWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNl
UmlnaHQpIHsKKyAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiByZWR1
Y2VSaWdodChmdW4gLyosIGluaXRpYWwqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmpl
Y3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRo
aXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIi
KSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5s
ZW5ndGggPj4+IDA7CisKKyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYg
Y2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmlu
ZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gbm8gdmFsdWUgdG8gcmV0dXJuIGlmIG5vIGluaXRpYWwgdmFsdWUsIGVtcHR5IGFycmF5
CisgICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0
aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcmVzdWx0LCBp
ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgeworICAg
ICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlu
cyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJuCisgICAgICAgICAgICAgICAg
aWYgKC0taSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigi
cmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoaSBpbiB0aGlzKSB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9i
amVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGktLSk7CisKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjE0CisvLyBodHRwOi8v
ZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTQKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEu
b3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2luZGV4T2YK
K2lmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9
IC0xKSkgeworICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihz
b3VnaHQgLyosIGZyb21JbmRleCAqLyApIHsKKyAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmlu
ZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAg
ICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKKyAg
ICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAgIGlmICghbGVu
Z3RoKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
aSA9IDA7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAg
aSA9IHRvSW50ZWdlcihhcmd1bWVudHNbMV0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gaGFu
ZGxlIG5lZ2F0aXZlIGluZGljZXMKKyAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgw
LCBsZW5ndGggKyBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
LTE7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4xNQorLy8gaHR0cDovL2VzNS5naXRodWIu
Y29tLyN4MTUuNC40LjE1CisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZh
U2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9sYXN0SW5kZXhPZgoraWYgKCFB
cnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgfHwgKFswLCAxXS5sYXN0SW5kZXhPZigwLCAtMykg
IT0gLTEpKSB7CisgICAgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFz
dEluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8pIHsKKyAgICAgICAgdmFyIHNlbGYgPSBz
cGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAg
ICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAgICB0b09iamVjdCh0
aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAg
IGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGkgPSBsZW5ndGggLSAxOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEp
IHsKKyAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMKKyAgICAgICAg
aSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKKyAgICAgICAgZm9yICg7IGkg
Pj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2Vs
ZltpXSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9OworfQorCisvLworLy8gT2JqZWN0CisvLyA9
PT09PT0KKy8vCisKKy8vIEVTNSAxNS4yLjMuMTQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8j
eDE1LjIuMy4xNAoraWYgKCFPYmplY3Qua2V5cykgeworICAgIC8vIGh0dHA6Ly93aGF0dGhlaGVh
ZHNhaWQuY29tLzIwMTAvMTAvYS1zYWZlci1vYmplY3Qta2V5cy1jb21wYXRpYmlsaXR5LWltcGxl
bWVudGF0aW9uCisgICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKKyAgICAgICAgZG9udEVu
dW1zID0gWworICAgICAgICAgICAgInRvU3RyaW5nIiwKKyAgICAgICAgICAgICJ0b0xvY2FsZVN0
cmluZyIsCisgICAgICAgICAgICAidmFsdWVPZiIsCisgICAgICAgICAgICAiaGFzT3duUHJvcGVy
dHkiLAorICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAorICAgICAgICAgICAgInByb3BlcnR5
SXNFbnVtZXJhYmxlIiwKKyAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKKyAgICAgICAgXSwKKyAg
ICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsKKworICAgIGZvciAodmFy
IGtleSBpbiB7InRvU3RyaW5nIjogbnVsbH0pIHsKKyAgICAgICAgaGFzRG9udEVudW1CdWcgPSBm
YWxzZTsKKyAgICB9CisKKyAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7
CisKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIg
JiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fAorICAgICAgICAgICAgb2JqZWN0ID09
PSBudWxsCisgICAgICAgICkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2Jq
ZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGtleXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHsKKyAgICAg
ICAgICAgIGlmIChvd25zKG9iamVjdCwgbmFtZSkpIHsKKyAgICAgICAgICAgICAgICBrZXlzLnB1
c2gobmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFzRG9u
dEVudW1CdWcpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRvbnRFbnVtc0xl
bmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9udEVudW0gPSBkb250
RW51bXNbaV07CisgICAgICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBkb250RW51bSkpIHsK
KyAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRvbnRFbnVtKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGtleXM7CisgICAg
fTsKKworfQorCisvLworLy8gRGF0ZQorLy8gPT09PQorLy8KKworLy8gRVM1IDE1LjkuNS40Mwor
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS41LjQzCisvLyBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgYSBTdHJpbmcgdmFsdWUgcmVwcmVzZW50IHRoZSBpbnN0YW5jZSBpbiB0aW1lCisvLyBy
ZXByZXNlbnRlZCBieSB0aGlzIERhdGUgb2JqZWN0LiBUaGUgZm9ybWF0IG9mIHRoZSBTdHJpbmcg
aXMgdGhlIERhdGUgVGltZQorLy8gc3RyaW5nIGZvcm1hdCBkZWZpbmVkIGluIDE1LjkuMS4xNS4g
QWxsIGZpZWxkcyBhcmUgcHJlc2VudCBpbiB0aGUgU3RyaW5nLgorLy8gVGhlIHRpbWUgem9uZSBp
cyBhbHdheXMgVVRDLCBkZW5vdGVkIGJ5IHRoZSBzdWZmaXggWi4gSWYgdGhlIHRpbWUgdmFsdWUg
b2YKKy8vIHRoaXMgb2JqZWN0IGlzIG5vdCBhIGZpbml0ZSBOdW1iZXIgYSBSYW5nZUVycm9yIGV4
Y2VwdGlvbiBpcyB0aHJvd24uCit2YXIgbmVnYXRpdmVEYXRlID0gLTYyMTk4NzU1MjAwMDAwLAor
ICAgIG5lZ2F0aXZlWWVhclN0cmluZyA9ICItMDAwMDAxIjsKK2lmICgKKyAgICAhRGF0ZS5wcm90
b3R5cGUudG9JU09TdHJpbmcgfHwKKyAgICAobmV3IERhdGUobmVnYXRpdmVEYXRlKS50b0lTT1N0
cmluZygpLmluZGV4T2YobmVnYXRpdmVZZWFyU3RyaW5nKSA9PT0gLTEpCispIHsKKyAgICBEYXRl
LnByb3RvdHlwZS50b0lTT1N0cmluZyA9IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkgeworICAgICAg
ICB2YXIgcmVzdWx0LCBsZW5ndGgsIHZhbHVlLCB5ZWFyLCBtb250aDsKKyAgICAgICAgaWYgKCFp
c0Zpbml0ZSh0aGlzKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRhdGUu
cHJvdG90eXBlLnRvSVNPU3RyaW5nIGNhbGxlZCBvbiBub24tZmluaXRlIHZhbHVlLiIpOworICAg
ICAgICB9CisKKyAgICAgICAgeWVhciA9IHRoaXMuZ2V0VVRDRnVsbFllYXIoKTsKKworICAgICAg
ICBtb250aCA9IHRoaXMuZ2V0VVRDTW9udGgoKTsKKyAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0
aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTExCisgICAgICAgIHllYXIgKz0gTWF0
aC5mbG9vcihtb250aCAvIDEyKTsKKyAgICAgICAgbW9udGggPSAobW9udGggJSAxMiArIDEyKSAl
IDEyOworCisgICAgICAgIC8vIHRoZSBkYXRlIHRpbWUgc3RyaW5nIGZvcm1hdCBpcyBzcGVjaWZp
ZWQgaW4gMTUuOS4xLjE1LgorICAgICAgICByZXN1bHQgPSBbbW9udGggKyAxLCB0aGlzLmdldFVU
Q0RhdGUoKSwKKyAgICAgICAgICAgIHRoaXMuZ2V0VVRDSG91cnMoKSwgdGhpcy5nZXRVVENNaW51
dGVzKCksIHRoaXMuZ2V0VVRDU2Vjb25kcygpXTsKKyAgICAgICAgeWVhciA9ICgKKyAgICAgICAg
ICAgICh5ZWFyIDwgMCA/ICItIiA6ICh5ZWFyID4gOTk5OSA/ICIrIiA6ICIiKSkgKworICAgICAg
ICAgICAgKCIwMDAwMCIgKyBNYXRoLmFicyh5ZWFyKSkKKyAgICAgICAgICAgIC5zbGljZSgwIDw9
IHllYXIgJiYgeWVhciA8PSA5OTk5ID8gLTQgOiAtNikKKyAgICAgICAgKTsKKworICAgICAgICBs
ZW5ndGggPSByZXN1bHQubGVuZ3RoOworICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKKyAgICAg
ICAgICAgIHZhbHVlID0gcmVzdWx0W2xlbmd0aF07CisgICAgICAgICAgICAvLyBwYWQgbW9udGhz
LCBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgdG8gaGF2ZSB0d28KKyAgICAgICAg
ICAgIC8vIGRpZ2l0cy4KKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDEwKSB7CisgICAgICAgICAg
ICAgICAgcmVzdWx0W2xlbmd0aF0gPSAiMCIgKyB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAvLyBwYWQgbWlsbGlzZWNvbmRzIHRvIGhhdmUgdGhyZWUgZGlnaXRzLgor
ICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgeWVhciArICItIiArIHJlc3VsdC5zbGljZSgw
LCAyKS5qb2luKCItIikgKworICAgICAgICAgICAgIlQiICsgcmVzdWx0LnNsaWNlKDIpLmpvaW4o
IjoiKSArICIuIiArCisgICAgICAgICAgICAoIjAwMCIgKyB0aGlzLmdldFVUQ01pbGxpc2Vjb25k
cygpKS5zbGljZSgtMykgKyAiWiIKKyAgICAgICAgKTsKKyAgICB9OworfQorCisKKy8vIEVTNSAx
NS45LjUuNDQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNS40NAorLy8gVGhpcyBm
dW5jdGlvbiBwcm92aWRlcyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIERhdGUgb2JqZWN0
IGZvciB1c2UgYnkKKy8vIEpTT04uc3RyaW5naWZ5ICgxNS4xMi4zKS4KK3ZhciBkYXRlVG9KU09O
SXNTdXBwb3J0ZWQgPSBmYWxzZTsKK3RyeSB7CisgICAgZGF0ZVRvSlNPTklzU3VwcG9ydGVkID0g
KAorICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04gJiYKKyAgICAgICAgbmV3IERhdGUoTmFO
KS50b0pTT04oKSA9PT0gbnVsbCAmJgorICAgICAgICBuZXcgRGF0ZShuZWdhdGl2ZURhdGUpLnRv
SlNPTigpLmluZGV4T2YobmVnYXRpdmVZZWFyU3RyaW5nKSAhPT0gLTEgJiYKKyAgICAgICAgRGF0
ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyAvLyBnZW5lcmljCisgICAgICAgICAgICB0b0lTT1N0
cmluZzogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9KQorICAgICk7Cit9IGNhdGNoIChlKSB7Cit9CitpZiAoIWRhdGVU
b0pTT05Jc1N1cHBvcnRlZCkgeworICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9u
IHRvSlNPTihrZXkpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgdG9KU09OIG1ldGhvZCBpcyBjYWxs
ZWQgd2l0aCBhcmd1bWVudCBrZXksIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgLy8gc3RlcHMgYXJl
IHRha2VuOgorCisgICAgICAgIC8vIDEuICBMZXQgTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
VG9PYmplY3QsIGdpdmluZyBpdCB0aGUgdGhpcworICAgICAgICAvLyB2YWx1ZSBhcyBpdHMgYXJn
dW1lbnQuCisgICAgICAgIC8vIDIuIExldCB0diBiZSB0b1ByaW1pdGl2ZShPLCBoaW50IE51bWJl
cikuCisgICAgICAgIHZhciBvID0gT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgdHYgPSB0b1By
aW1pdGl2ZShvKSwKKyAgICAgICAgICAgIHRvSVNPOworICAgICAgICAvLyAzLiBJZiB0diBpcyBh
IE51bWJlciBhbmQgaXMgbm90IGZpbml0ZSwgcmV0dXJuIG51bGwuCisgICAgICAgIGlmICh0eXBl
b2YgdHYgPT09ICJudW1iZXIiICYmICFpc0Zpbml0ZSh0dikpIHsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIDQuIExldCB0b0lTTyBiZSB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mCisgICAgICAgIC8vIE8g
d2l0aCBhcmd1bWVudCAidG9JU09TdHJpbmciLgorICAgICAgICB0b0lTTyA9IG8udG9JU09TdHJp
bmc7CisgICAgICAgIC8vIDUuIElmIElzQ2FsbGFibGUodG9JU08pIGlzIGZhbHNlLCB0aHJvdyBh
IFR5cGVFcnJvciBleGNlcHRpb24uCisgICAgICAgIGlmICh0eXBlb2YgdG9JU08gIT0gImZ1bmN0
aW9uIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidG9JU09TdHJpbmcgcHJv
cGVydHkgaXMgbm90IGNhbGxhYmxlIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gNi4gUmV0dXJu
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCisg
ICAgICAgIC8vICB0b0lTTyB3aXRoIE8gYXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFuIGVtcHR5IGFy
Z3VtZW50IGxpc3QuCisgICAgICAgIHJldHVybiB0b0lTTy5jYWxsKG8pOworCisgICAgICAgIC8v
IE5PVEUgMSBUaGUgYXJndW1lbnQgaXMgaWdub3JlZC4KKworICAgICAgICAvLyBOT1RFIDIgVGhl
IHRvSlNPTiBmdW5jdGlvbiBpcyBpbnRlbnRpb25hbGx5IGdlbmVyaWM7IGl0IGRvZXMgbm90Cisg
ICAgICAgIC8vIHJlcXVpcmUgdGhhdCBpdHMgdGhpcyB2YWx1ZSBiZSBhIERhdGUgb2JqZWN0LiBU
aGVyZWZvcmUsIGl0IGNhbiBiZQorICAgICAgICAvLyB0cmFuc2ZlcnJlZCB0byBvdGhlciBraW5k
cyBvZiBvYmplY3RzIGZvciB1c2UgYXMgYSBtZXRob2QuIEhvd2V2ZXIsCisgICAgICAgIC8vIGl0
IGRvZXMgcmVxdWlyZSB0aGF0IGFueSBzdWNoIG9iamVjdCBoYXZlIGEgdG9JU09TdHJpbmcgbWV0
aG9kLiBBbgorICAgICAgICAvLyBvYmplY3QgaXMgZnJlZSB0byB1c2UgdGhlIGFyZ3VtZW50IGtl
eSB0byBmaWx0ZXIgaXRzCisgICAgICAgIC8vIHN0cmluZ2lmaWNhdGlvbi4KKyAgICB9OworfQor
CisvLyBFUzUgMTUuOS40LjIKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjkuNC4yCisv
LyBiYXNlZCBvbiB3b3JrIHNoYXJlZCBieSBEYW5pZWwgRnJpZXNlbiAoZGFudG1hbikKKy8vIGh0
dHA6Ly9naXN0LmdpdGh1Yi5jb20vMzAzMjQ5CitpZiAoIURhdGUucGFyc2UgfHwgIkRhdGUucGFy
c2UgaXMgYnVnZ3kiKSB7CisgICAgLy8gWFhYIGdsb2JhbCBhc3NpZ25tZW50IHdvbid0IHdvcmsg
aW4gZW1iZWRkaW5ncyB0aGF0IHVzZQorICAgIC8vIGFuIGFsdGVybmF0ZSBvYmplY3QgZm9yIHRo
ZSBjb250ZXh0LgorICAgIERhdGUgPSAoZnVuY3Rpb24oTmF0aXZlRGF0ZSkgeworCisgICAgICAg
IC8vIERhdGUubGVuZ3RoID09PSA3CisgICAgICAgIGZ1bmN0aW9uIERhdGUoWSwgTSwgRCwgaCwg
bSwgcywgbXMpIHsKKyAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwor
ICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBOYXRpdmVEYXRlKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGRhdGUgPSBsZW5ndGggPT0gMSAmJiBTdHJpbmcoWSkgPT09IFkgPyAvLyBpc1N0
cmluZyhZKQorICAgICAgICAgICAgICAgICAgICAvLyBXZSBleHBsaWNpdGx5IHBhc3MgaXQgdGhy
b3VnaCBwYXJzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3IE5hdGl2ZURhdGUoRGF0ZS5wYXJz
ZShZKSkgOgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIG1hbnVhbGx5IG1ha2Ug
Y2FsbHMgZGVwZW5kaW5nIG9uIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0
aCBoZXJlCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA3ID8gbmV3IE5hdGl2ZURhdGUo
WSwgTSwgRCwgaCwgbSwgcywgbXMpIDoKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDYg
PyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtLCBzKSA6CisgICAgICAgICAgICAgICAgICAg
IGxlbmd0aCA+PSA1ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwgbSkgOgorICAgICAgICAg
ICAgICAgICAgICBsZW5ndGggPj0gNCA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgpIDoKKyAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDMgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBEKSA6
CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSAyID8gbmV3IE5hdGl2ZURhdGUoWSwgTSkg
OgorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gMSA/IG5ldyBOYXRpdmVEYXRlKFkpIDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZSgpOworICAg
ICAgICAgICAgICAgIC8vIFByZXZlbnQgbWl4dXBzIHdpdGggdW5maXhlZCBEYXRlIG9iamVjdAor
ICAgICAgICAgICAgICAgIGRhdGUuY29uc3RydWN0b3IgPSBEYXRlOworICAgICAgICAgICAgICAg
IHJldHVybiBkYXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURh
dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyAxNS45
LjEuMTUgRGF0ZSBUaW1lIFN0cmluZyBGb3JtYXQuCisgICAgICAgIHZhciBpc29EYXRlRXhwcmVz
c2lvbiA9IG5ldyBSZWdFeHAoIl4iICsKKyAgICAgICAgICAgICIoXFxkezR9fFtcK1wtXVxcZHs2
fSkiICsgLy8gZm91ci1kaWdpdCB5ZWFyIGNhcHR1cmUgb3Igc2lnbiArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDYtZGlnaXQgZXh0ZW5kZWQgeWVhcgorICAgICAg
ICAgICAgIig/Oi0oXFxkezJ9KSIgKyAvLyBvcHRpb25hbCBtb250aCBjYXB0dXJlCisgICAgICAg
ICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIGRheSBjYXB0dXJlCisgICAgICAgICAg
ICAiKD86IiArIC8vIGNhcHR1cmUgaG91cnM6bWludXRlczpzZWNvbmRzLm1pbGxpc2Vjb25kcwor
ICAgICAgICAgICAgICAgICJUKFxcZHsyfSkiICsgLy8gaG91cnMgY2FwdHVyZQorICAgICAgICAg
ICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBjYXB0dXJlCisgICAgICAgICAgICAgICAg
Iig/OiIgKyAvLyBvcHRpb25hbCA6c2Vjb25kcy5taWxsaXNlY29uZHMKKyAgICAgICAgICAgICAg
ICAgICAgIjooXFxkezJ9KSIgKyAvLyBzZWNvbmRzIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAg
ICAgIig/OihcXC5cXGR7MSx9KSk/IiArIC8vIG1pbGxpc2Vjb25kcyBjYXB0dXJlCisgICAgICAg
ICAgICAgICAgIik/IiArCisgICAgICAgICAgICAiKCIgKyAvLyBjYXB0dXJlIFVUQyBvZmZzZXQg
Y29tcG9uZW50CisgICAgICAgICAgICAgICAgIlp8IiArIC8vIFVUQyBjYXB0dXJlCisgICAgICAg
ICAgICAgICAgIig/OiIgKyAvLyBvZmZzZXQgc3BlY2lmaWVyICsvLWhvdXJzOm1pbnV0ZXMKKyAg
ICAgICAgICAgICAgICAgICAgIihbLStdKSIgKyAvLyBzaWduIGNhcHR1cmUKKyAgICAgICAgICAg
ICAgICAgICAgIihcXGR7Mn0pIiArIC8vIGhvdXJzIG9mZnNldCBjYXB0dXJlCisgICAgICAgICAg
ICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBvZmZzZXQgY2FwdHVyZQorICAgICAg
ICAgICAgICAgICIpIiArCisgICAgICAgICAgICAiKT8pPyk/KT8iICsKKyAgICAgICAgIiQiKTsK
KworICAgICAgICB2YXIgbW9udGhzID0gWworICAgICAgICAgICAgMCwgMzEsIDU5LCA5MCwgMTIw
LCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQsIDM2NQorICAgICAgICBdOworCisg
ICAgICAgIGZ1bmN0aW9uIGRheUZyb21Nb250aCh5ZWFyLCBtb250aCkgeworICAgICAgICAgICAg
dmFyIHQgPSBtb250aCA+IDEgPyAxIDogMDsKKyAgICAgICAgICAgIHJldHVybiAoCisgICAgICAg
ICAgICAgICAgbW9udGhzW21vbnRoXSArCisgICAgICAgICAgICAgICAgTWF0aC5mbG9vcigoeWVh
ciAtIDE5NjkgKyB0KSAvIDQpIC0KKyAgICAgICAgICAgICAgICBNYXRoLmZsb29yKCh5ZWFyIC0g
MTkwMSArIHQpIC8gMTAwKSArCisgICAgICAgICAgICAgICAgTWF0aC5mbG9vcigoeWVhciAtIDE2
MDEgKyB0KSAvIDQwMCkgKworICAgICAgICAgICAgICAgIDM2NSAqICh5ZWFyIC0gMTk3MCkKKyAg
ICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0b1VUQyh0KSB7Cisg
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG5ldyBOYXRpdmVEYXRlKDE5NzAsIDAsIDEsIDAsIDAs
IDAsIHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvcHkgYW55IGN1c3RvbSBtZXRob2Rz
IGEgM3JkIHBhcnR5IGxpYnJhcnkgbWF5IGhhdmUgYWRkZWQKKyAgICAgICAgZm9yICh2YXIga2V5
IGluIE5hdGl2ZURhdGUpIHsKKyAgICAgICAgICAgIERhdGVba2V5XSA9IE5hdGl2ZURhdGVba2V5
XTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvcHkgIm5hdGl2ZSIgbWV0aG9kcyBleHBsaWNp
dGx5OyB0aGV5IG1heSBiZSBub24tZW51bWVyYWJsZQorICAgICAgICBEYXRlLm5vdyA9IE5hdGl2
ZURhdGUubm93OworICAgICAgICBEYXRlLlVUQyA9IE5hdGl2ZURhdGUuVVRDOworICAgICAgICBE
YXRlLnByb3RvdHlwZSA9IE5hdGl2ZURhdGUucHJvdG90eXBlOworICAgICAgICBEYXRlLnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciA9IERhdGU7CisKKyAgICAgICAgLy8gVXBncmFkZSBEYXRlLnBhcnNl
IHRvIGhhbmRsZSBzaW1wbGlmaWVkIElTTyA4NjAxIHN0cmluZ3MKKyAgICAgICAgRGF0ZS5wYXJz
ZSA9IGZ1bmN0aW9uIHBhcnNlKHN0cmluZykgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gaXNv
RGF0ZUV4cHJlc3Npb24uZXhlYyhzdHJpbmcpOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7Cisg
ICAgICAgICAgICAgICAgLy8gcGFyc2UgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgc2Vj
b25kcywgYW5kIG1pbGxpc2Vjb25kcworICAgICAgICAgICAgICAgIC8vIHByb3ZpZGUgZGVmYXVs
dCB2YWx1ZXMgaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgLy8gcGFyc2UgdGhlIFVUQyBv
ZmZzZXQgY29tcG9uZW50CisgICAgICAgICAgICAgICAgdmFyIHllYXIgPSBOdW1iZXIobWF0Y2hb
MV0pLAorICAgICAgICAgICAgICAgICAgICBtb250aCA9IE51bWJlcihtYXRjaFsyXSB8fCAxKSAt
IDEsCisgICAgICAgICAgICAgICAgICAgIGRheSA9IE51bWJlcihtYXRjaFszXSB8fCAxKSAtIDEs
CisgICAgICAgICAgICAgICAgICAgIGhvdXIgPSBOdW1iZXIobWF0Y2hbNF0gfHwgMCksCisgICAg
ICAgICAgICAgICAgICAgIG1pbnV0ZSA9IE51bWJlcihtYXRjaFs1XSB8fCAwKSwKKyAgICAgICAg
ICAgICAgICAgICAgc2Vjb25kID0gTnVtYmVyKG1hdGNoWzZdIHx8IDApLAorICAgICAgICAgICAg
ICAgICAgICBtaWxsaXNlY29uZCA9IE1hdGguZmxvb3IoTnVtYmVyKG1hdGNoWzddIHx8IDApICog
MTAwMCksCisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdGltZSB6b25lIGlzIG1pc3NlZCwg
bG9jYWwgb2Zmc2V0IHNob3VsZCBiZSB1c2VkCisgICAgICAgICAgICAgICAgICAgIC8vIChFUyA1
LjEgYnVnKQorICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWdzLmVjbWFzY3Jp
cHQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTIKKyAgICAgICAgICAgICAgICAgICAgaXNMb2NhbFRp
bWUgPSBCb29sZWFuKG1hdGNoWzRdICYmICFtYXRjaFs4XSksCisgICAgICAgICAgICAgICAgICAg
IHNpZ25PZmZzZXQgPSBtYXRjaFs5XSA9PT0gIi0iID8gMSA6IC0xLAorICAgICAgICAgICAgICAg
ICAgICBob3VyT2Zmc2V0ID0gTnVtYmVyKG1hdGNoWzEwXSB8fCAwKSwKKyAgICAgICAgICAgICAg
ICAgICAgbWludXRlT2Zmc2V0ID0gTnVtYmVyKG1hdGNoWzExXSB8fCAwKSwKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0OworICAgICAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICAg
ICAgaG91ciA8ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA+IDAgfHwgc2Vjb25k
ID4gMCB8fCBtaWxsaXNlY29uZCA+IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgMjQgOiAy
NQorICAgICAgICAgICAgICAgICAgICApICYmCisgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA8
IDYwICYmIHNlY29uZCA8IDYwICYmIG1pbGxpc2Vjb25kIDwgMTAwMCAmJgorICAgICAgICAgICAg
ICAgICAgICBtb250aCA+IC0xICYmIG1vbnRoIDwgMTIgJiYgaG91ck9mZnNldCA8IDI0ICYmCisg
ICAgICAgICAgICAgICAgICAgIG1pbnV0ZU9mZnNldCA8IDYwICYmIC8vIGRldGVjdCBpbnZhbGlk
IG9mZnNldHMKKyAgICAgICAgICAgICAgICAgICAgZGF5ID4gLTEgJiYKKyAgICAgICAgICAgICAg
ICAgICAgZGF5IDwgKAorICAgICAgICAgICAgICAgICAgICAgICAgZGF5RnJvbU1vbnRoKHllYXIs
IG1vbnRoICsgMSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgZGF5RnJvbU1vbnRoKHllYXIs
IG1vbnRoKQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9ICgKKyAgICAgICAgICAgICAgICAgICAgICAgIChkYXlG
cm9tTW9udGgoeWVhciwgbW9udGgpICsgZGF5KSAqIDI0ICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGhvdXIgKworICAgICAgICAgICAgICAgICAgICAgICAgaG91ck9mZnNldCAqIHNpZ25PZmZz
ZXQKKyAgICAgICAgICAgICAgICAgICAgKSAqIDYwOworICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0ICsgbWludXRlICsgbWludXRl
T2Zmc2V0ICogc2lnbk9mZnNldCkgKiA2MCArCisgICAgICAgICAgICAgICAgICAgICAgICBzZWNv
bmQKKyAgICAgICAgICAgICAgICAgICAgKSAqIDEwMDAgKyBtaWxsaXNlY29uZDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzTG9jYWxUaW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSB0b1VUQyhyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmICgtOC42NGUxNSA8PSByZXN1bHQgJiYgcmVzdWx0IDw9IDguNjRlMTUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOYXRpdmVEYXRlLnBhcnNlLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIERhdGU7CisgICAg
fSkoRGF0ZSk7Cit9CisKKy8vIEVTNSAxNS45LjQuNAorLy8gaHR0cDovL2VzNS5naXRodWIuY29t
LyN4MTUuOS40LjQKK2lmICghRGF0ZS5ub3cpIHsKKyAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5v
dygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOworICAgIH07Cit9CisK
KworLy8KKy8vIE51bWJlcgorLy8gPT09PT09CisvLworCisvLyBFUzUuMSAxNS43LjQuNQorLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNy40LjUKK2lmICghTnVtYmVyLnByb3RvdHlwZS50
b0ZpeGVkIHx8ICgwLjAwMDA4KS50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8ICgwLjkpLnRvRml4
ZWQoMCkgPT09ICcwJyB8fCAoMS4yNTUpLnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fCAoMTAwMDAw
MDAwMDAwMDAwMDEyOCkudG9GaXhlZCgwKSAhPT0gIjEwMDAwMDAwMDAwMDAwMDAxMjgiKSB7Cisg
ICAgLy8gSGlkZSB0aGVzZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucworICAgIChmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBiYXNlLCBzaXplLCBkYXRhLCBpOworCisgICAgICAgIGJhc2UgPSAx
ZTc7CisgICAgICAgIHNpemUgPSA2OworICAgICAgICBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBd
OworCisgICAgICAgIGZ1bmN0aW9uIG11bHRpcGx5KG4sIGMpIHsKKyAgICAgICAgICAgIHZhciBp
ID0gLTE7CisgICAgICAgICAgICB3aGlsZSAoKytpIDwgc2l6ZSkgeworICAgICAgICAgICAgICAg
IGMgKz0gbiAqIGRhdGFbaV07CisgICAgICAgICAgICAgICAgZGF0YVtpXSA9IGMgJSBiYXNlOwor
ICAgICAgICAgICAgICAgIGMgPSBNYXRoLmZsb29yKGMgLyBiYXNlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRpdmlkZShuKSB7CisgICAgICAgICAgICB2
YXIgaSA9IHNpemUsIGMgPSAwOworICAgICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAg
ICAgICAgICAgICAgYyArPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBNYXRo
LmZsb29yKGMgLyBuKTsKKyAgICAgICAgICAgICAgICBjID0gKGMgJSBuKSAqIGJhc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0b1N0cmluZygpIHsKKyAg
ICAgICAgICAgIHZhciBpID0gc2l6ZTsKKyAgICAgICAgICAgIHZhciBzID0gJyc7CisgICAgICAg
ICAgICB3aGlsZSAoLS1pID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocyAhPT0gJycgfHwg
aSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ID0g
U3RyaW5nKGRhdGFbaV0pOworICAgICAgICAgICAgICAgICAgICBpZiAocyA9PT0gJycpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHMgPSB0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgcyArPSAnMDAwMDAwMCcuc2xpY2UoMCwgNyAtIHQu
bGVuZ3RoKSArIHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIHBvdyh4LCBuLCBhY2MpIHsKKyAgICAgICAgICAgIHJldHVybiAobiA9PT0gMCA/
IGFjYyA6IChuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgs
IG4gLyAyLCBhY2MpKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBsb2coeCkgewor
ICAgICAgICAgICAgdmFyIG4gPSAwOworICAgICAgICAgICAgd2hpbGUgKHggPj0gNDA5Nikgewor
ICAgICAgICAgICAgICAgIG4gKz0gMTI7CisgICAgICAgICAgICAgICAgeCAvPSA0MDk2OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKHggPj0gMikgeworICAgICAgICAgICAgICAg
IG4gKz0gMTsKKyAgICAgICAgICAgICAgICB4IC89IDI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gbjsKKyAgICAgICAgfQorCisgICAgICAgIE51bWJlci5wcm90b3R5cGUudG9G
aXhlZCA9IGZ1bmN0aW9uIChmcmFjdGlvbkRpZ2l0cykgeworICAgICAgICAgICAgdmFyIGYsIHgs
IHMsIG0sIGUsIHosIGosIGs7CisKKyAgICAgICAgICAgIC8vIFRlc3QgZm9yIE5hTiBhbmQgcm91
bmQgZnJhY3Rpb25EaWdpdHMgZG93bgorICAgICAgICAgICAgZiA9IE51bWJlcihmcmFjdGlvbkRp
Z2l0cyk7CisgICAgICAgICAgICBmID0gZiAhPT0gZiA/IDAgOiBNYXRoLmZsb29yKGYpOworCisg
ICAgICAgICAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFJhbmdlRXJyb3IoIk51bWJlci50b0ZpeGVkIGNhbGxlZCB3aXRoIGludmFsaWQgbnVtYmVy
IG9mIGRlY2ltYWxzIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHggPSBOdW1iZXIo
dGhpcyk7CisKKyAgICAgICAgICAgIC8vIFRlc3QgZm9yIE5hTgorICAgICAgICAgICAgaWYgKHgg
IT09IHgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5hTiI7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIElmIGl0IGlzIHRvbyBiaWcgb3Igc21hbGwsIHJldHVybiB0aGUgc3Ry
aW5nIHZhbHVlIG9mIHRoZSBudW1iZXIKKyAgICAgICAgICAgIGlmICh4IDw9IC0xZTIxIHx8IHgg
Pj0gMWUyMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoeCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHMgPSAiIjsKKworICAgICAgICAgICAgaWYgKHggPCAwKSB7Cisg
ICAgICAgICAgICAgICAgcyA9ICItIjsKKyAgICAgICAgICAgICAgICB4ID0gLXg7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG0gPSAiMCI7CisKKyAgICAgICAgICAgIGlmICh4ID4gMWUt
MjEpIHsKKyAgICAgICAgICAgICAgICAvLyAxZS0yMSA8IHggPCAxZTIxCisgICAgICAgICAgICAg
ICAgLy8gLTcwIDwgbG9nMih4KSA8IDcwCisgICAgICAgICAgICAgICAgZSA9IGxvZyh4ICogcG93
KDIsIDY5LCAxKSkgLSA2OTsKKyAgICAgICAgICAgICAgICB6ID0gKGUgPCAwID8geCAqIHBvdygy
LCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpKTsKKyAgICAgICAgICAgICAgICB6ICo9IDB4MTAw
MDAwMDAwMDAwMDA7IC8vIE1hdGgucG93KDIsIDUyKTsKKyAgICAgICAgICAgICAgICBlID0gNTIg
LSBlOworCisgICAgICAgICAgICAgICAgLy8gLTE4IDwgZSA8IDEyMgorICAgICAgICAgICAgICAg
IC8vIHggPSB6IC8gMiBeIGUKKyAgICAgICAgICAgICAgICBpZiAoZSA+IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgbXVsdGlwbHkoMCwgeik7CisgICAgICAgICAgICAgICAgICAgIGogPSBmOwor
CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqID49IDcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG11bHRpcGx5KDFlNywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqIC09IDc7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBtdWx0aXBseShw
b3coMTAsIGosIDEpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaiA9IGUgLSAxOworCisgICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChqID49IDIzKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkaXZpZGUoMSA8PCAyMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqIC09IDIzOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGl2aWRlKDEgPDwgaik7
CisgICAgICAgICAgICAgICAgICAgIG11bHRpcGx5KDEsIDEpOworICAgICAgICAgICAgICAgICAg
ICBkaXZpZGUoMik7CisgICAgICAgICAgICAgICAgICAgIG0gPSB0b1N0cmluZygpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG11bHRpcGx5KDAsIHopOwor
ICAgICAgICAgICAgICAgICAgICBtdWx0aXBseSgxIDw8ICgtZSksIDApOworICAgICAgICAgICAg
ICAgICAgICBtID0gdG9TdHJpbmcoKSArICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwJy5zbGljZSgy
LCAyICsgZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoZiA+IDApIHsKKyAgICAgICAgICAgICAgICBrID0gbS5sZW5ndGg7CisKKyAgICAgICAg
ICAgICAgICBpZiAoayA8PSBmKSB7CisgICAgICAgICAgICAgICAgICAgIG0gPSBzICsgJzAuMDAw
MDAwMDAwMDAwMDAwMDAwMCcuc2xpY2UoMCwgZiAtIGsgKyAyKSArIG07CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbSA9IHMgKyBtLnNsaWNlKDAsIGsgLSBm
KSArICcuJyArIG0uc2xpY2UoayAtIGYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbSA9IHMgKyBtOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gbTsKKyAgICAgICAgfQorICAgIH0oKSk7Cit9CisKKworLy8KKy8v
IFN0cmluZworLy8gPT09PT09CisvLworCisKKy8vIEVTNSAxNS41LjQuMTQKKy8vIGh0dHA6Ly9l
czUuZ2l0aHViLmNvbS8jeDE1LjUuNC4xNAorCisvLyBbYnVnZml4LCBJRSBsdCA5LCBmaXJlZm94
IDQsIEtvbnF1ZXJvciwgT3BlcmEsIG9ic2N1cmUgYnJvd3NlcnNdCisvLyBNYW55IGJyb3dzZXJz
IGRvIG5vdCBzcGxpdCBwcm9wZXJseSB3aXRoIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb3IgdGhleQor
Ly8gZG8gbm90IHBlcmZvcm0gdGhlIHNwbGl0IGNvcnJlY3RseSB1bmRlciBvYnNjdXJlIGNvbmRp
dGlvbnMuCisvLyBTZWUgaHR0cDovL2Jsb2cuc3RldmVubGV2aXRoYW4uY29tL2FyY2hpdmVzL2Ny
b3NzLWJyb3dzZXItc3BsaXQKKy8vIEkndmUgdGVzdGVkIGluIG1hbnkgYnJvd3NlcnMgYW5kIHRo
aXMgc2VlbXMgdG8gY292ZXIgdGhlIGRldmlhbnQgb25lczoKKy8vICAgICdhYicuc3BsaXQoLyg/
OmFiKSovKSBzaG91bGQgYmUgWyIiLCAiIl0sIG5vdCBbIiJdCisvLyAgICAnLicuc3BsaXQoLygu
PykoLj8pLykgc2hvdWxkIGJlIFsiIiwgIi4iLCAiIiwgIiJdLCBub3QgWyIiLCAiIl0KKy8vICAg
ICd0ZXNzdCcuc3BsaXQoLyhzKSovKSBzaG91bGQgYmUgWyJ0IiwgdW5kZWZpbmVkLCAiZSIsICJz
IiwgInQiXSwgbm90CisvLyAgICAgICBbdW5kZWZpbmVkLCAidCIsIHVuZGVmaW5lZCwgImUiLCAu
Li5dCisvLyAgICAnJy5zcGxpdCgvLj8vKSBzaG91bGQgYmUgW10sIG5vdCBbIiJdCisvLyAgICAn
Licuc3BsaXQoLygpKCkvKSBzaG91bGQgYmUgWyIuIl0sIG5vdCBbIiIsICIiLCAiLiJdCisKK3Zh
ciBzdHJpbmdfc3BsaXQgPSBTdHJpbmcucHJvdG90eXBlLnNwbGl0OworaWYgKAorICAgICdhYicu
c3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT09IDIgfHwKKyAgICAnLicuc3BsaXQoLyguPykoLj8p
LykubGVuZ3RoICE9PSA0IHx8CisgICAgJ3Rlc3N0Jy5zcGxpdCgvKHMpKi8pWzFdID09PSAidCIg
fHwKKyAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGggfHwKKyAgICAnLicuc3BsaXQoLygpKCkvKS5s
ZW5ndGggPiAxCispIHsKKyAgICAoZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY29tcGxpYW50
RXhlY05wY2cgPSAvKCk/Py8uZXhlYygiIilbMV0gPT09IHZvaWQgMDsgLy8gTlBDRzogbm9ucGFy
dGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAKKworICAgICAgICBTdHJpbmcucHJvdG90eXBlLnNw
bGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHsKKyAgICAgICAgICAgIHZhciBzdHJp
bmcgPSB0aGlzOworICAgICAgICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdm9pZCAwICYmIGxpbWl0
ID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKworICAgICAgICAgICAgLy8gSWYg
YHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXQKKyAgICAgICAgICAg
IGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2VwYXJhdG9yKSAhPT0gIltvYmpl
Y3QgUmVnRXhwXSIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nX3NwbGl0LmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBvdXRw
dXQgPSBbXSwKKyAgICAgICAgICAgICAgICBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/
ICJpIiA6ICIiKSArCisgICAgICAgICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGlu
ZSAgPyAibSIgOiAiIikgKworICAgICAgICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5leHRl
bmRlZCAgID8gIngiIDogIiIpICsgLy8gUHJvcG9zZWQgZm9yIEVTNgorICAgICAgICAgICAgICAg
ICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgICAgID8gInkiIDogIiIpLCAvLyBGaXJlZm94IDMr
CisgICAgICAgICAgICAgICAgbGFzdExhc3RJbmRleCA9IDAsCisgICAgICAgICAgICAgICAgLy8g
TWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0
aCBhIGNvcHkKKyAgICAgICAgICAgICAgICBzZXBhcmF0b3IgPSBuZXcgUmVnRXhwKHNlcGFyYXRv
ci5zb3VyY2UsIGZsYWdzICsgImciKSwKKyAgICAgICAgICAgICAgICBzZXBhcmF0b3IyLCBtYXRj
aCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoOworICAgICAgICAgICAgc3RyaW5nICs9ICIiOyAvLyBU
eXBlLWNvbnZlcnQKKyAgICAgICAgICAgIGlmICghY29tcGxpYW50RXhlY05wY2cpIHsKKyAgICAg
ICAgICAgICAgICAvLyBEb2Vzbid0IG5lZWQgZmxhZ3MgZ3ksIGJ1dCB0aGV5IGRvbid0IGh1cnQK
KyAgICAgICAgICAgICAgICBzZXBhcmF0b3IyID0gbmV3IFJlZ0V4cCgiXiIgKyBzZXBhcmF0b3Iu
c291cmNlICsgIiQoPyFcXHMpIiwgZmxhZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
LyogVmFsdWVzIGZvciBgbGltaXRgLCBwZXIgdGhlIHNwZWM6CisgICAgICAgICAgICAgKiBJZiB1
bmRlZmluZWQ6IDQyOTQ5NjcyOTUgLy8gTWF0aC5wb3coMiwgMzIpIC0gMQorICAgICAgICAgICAg
ICogSWYgMCwgSW5maW5pdHksIG9yIE5hTjogMAorICAgICAgICAgICAgICogSWYgcG9zaXRpdmUg
bnVtYmVyOiBsaW1pdCA9IE1hdGguZmxvb3IobGltaXQpOyBpZiAobGltaXQgPiA0Mjk0OTY3Mjk1
KSBsaW1pdCAtPSA0Mjk0OTY3Mjk2OworICAgICAgICAgICAgICogSWYgbmVnYXRpdmUgbnVtYmVy
OiA0Mjk0OTY3Mjk2IC0gTWF0aC5mbG9vcihNYXRoLmFicyhsaW1pdCkpCisgICAgICAgICAgICAg
KiBJZiBvdGhlcjogVHlwZS1jb252ZXJ0LCB0aGVuIHVzZSB0aGUgYWJvdmUgcnVsZXMKKyAgICAg
ICAgICAgICAqLworICAgICAgICAgICAgbGltaXQgPSBsaW1pdCA9PT0gdm9pZCAwID8KKyAgICAg
ICAgICAgICAgICAtMSA+Pj4gMCA6IC8vIE1hdGgucG93KDIsIDMyKSAtIDEKKyAgICAgICAgICAg
ICAgICBsaW1pdCA+Pj4gMDsgLy8gVG9VaW50MzIobGltaXQpCisgICAgICAgICAgICB3aGlsZSAo
bWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdHJpbmcpKSB7CisgICAgICAgICAgICAgICAgLy8gYHNl
cGFyYXRvci5sYXN0SW5kZXhgIGlzIG5vdCByZWxpYWJsZSBjcm9zcy1icm93c2VyCisgICAgICAg
ICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2Ag
bWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgIGZvcgorICAgICAg
ICAgICAgICAgICAgICAvLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHMKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAx
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFswXS5yZXBsYWNlKHNlcGFyYXRvcjIs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdm9pZCAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtpXSA9IHZvaWQgMDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBw
bHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDsKKyAgICAgICAgICAg
ICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG91dHB1dC5sZW5ndGggPj0gbGltaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChzZXBhcmF0b3IubGFzdEluZGV4ID09PSBtYXRjaC5pbmRleCkgeworICAgICAg
ICAgICAgICAgICAgICBzZXBhcmF0b3IubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRl
IGxvb3AKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bGFzdExhc3RJbmRleCA9PT0gc3RyaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmIChs
YXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3IudGVzdCgiIikpIHsKKyAgICAgICAgICAgICAgICAgICAg
b3V0cHV0LnB1c2goIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGlt
aXQgPyBvdXRwdXQuc2xpY2UoMCwgbGltaXQpIDogb3V0cHV0OworICAgICAgICB9OworICAgIH0o
KSk7CisKKy8vIFtidWdmaXgsIGNocm9tZV0KKy8vIElmIHNlcGFyYXRvciBpcyB1bmRlZmluZWQs
IHRoZW4gdGhlIHJlc3VsdCBhcnJheSBjb250YWlucyBqdXN0IG9uZSBTdHJpbmcsCisvLyB3aGlj
aCBpcyB0aGUgdGhpcyB2YWx1ZSAoY29udmVydGVkIHRvIGEgU3RyaW5nKS4gSWYgbGltaXQgaXMg
bm90IHVuZGVmaW5lZCwKKy8vIHRoZW4gdGhlIG91dHB1dCBhcnJheSBpcyB0cnVuY2F0ZWQgc28g
dGhhdCBpdCBjb250YWlucyBubyBtb3JlIHRoYW4gbGltaXQKKy8vIGVsZW1lbnRzLgorLy8gIjAi
LnNwbGl0KHVuZGVmaW5lZCwgMCkgLT4gW10KK30gZWxzZSBpZiAoIjAiLnNwbGl0KHZvaWQgMCwg
MCkubGVuZ3RoKSB7CisgICAgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uKHNlcGFy
YXRvciwgbGltaXQpIHsKKyAgICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdm9pZCAwICYmIGxpbWl0
ID09PSAwKSByZXR1cm4gW107CisgICAgICAgIHJldHVybiBzdHJpbmdfc3BsaXQuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKKyAgICB9Cit9CisKKworLy8gRUNNQS0yNjIsIDNyZCBCLjIuMworLy8g
Tm90ZSBhbiBFQ01BU2NyaXB0IHN0YW5kYXJ0LCBhbHRob3VnaCBFQ01BU2NyaXB0IDNyZCBFZGl0
aW9uIGhhcyBhCisvLyBub24tbm9ybWF0aXZlIHNlY3Rpb24gc3VnZ2VzdGluZyB1bmlmb3JtIHNl
bWFudGljcyBhbmQgaXQgc2hvdWxkIGJlCisvLyBub3JtYWxpemVkIGFjcm9zcyBhbGwgYnJvd3Nl
cnMKKy8vIFtidWdmaXgsIElFIGx0IDldIElFIDwgOSBzdWJzdHIoKSB3aXRoIG5lZ2F0aXZlIHZh
bHVlIG5vdCB3b3JraW5nIGluIElFCitpZiAoIiIuc3Vic3RyICYmICIwYiIuc3Vic3RyKC0xKSAh
PT0gImIiKSB7CisgICAgdmFyIHN0cmluZ19zdWJzdHIgPSBTdHJpbmcucHJvdG90eXBlLnN1YnN0
cjsKKyAgICAvKioKKyAgICAgKiAgR2V0IHRoZSBzdWJzdHJpbmcgb2YgYSBzdHJpbmcKKyAgICAg
KiAgQHBhcmFtICB7aW50ZWdlcn0gIHN0YXJ0ICAgd2hlcmUgdG8gc3RhcnQgdGhlIHN1YnN0cmlu
ZworICAgICAqICBAcGFyYW0gIHtpbnRlZ2VyfSAgbGVuZ3RoICBob3cgbWFueSBjaGFyYWN0ZXJz
IHRvIHJldHVybgorICAgICAqICBAcmV0dXJuIHtzdHJpbmd9CisgICAgICovCisgICAgU3RyaW5n
LnByb3RvdHlwZS5zdWJzdHIgPSBmdW5jdGlvbihzdGFydCwgbGVuZ3RoKSB7CisgICAgICAgIHJl
dHVybiBzdHJpbmdfc3Vic3RyLmNhbGwoCisgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAg
c3RhcnQgPCAwID8gKChzdGFydCA9IHRoaXMubGVuZ3RoICsgc3RhcnQpIDwgMCA/IDAgOiBzdGFy
dCkgOiBzdGFydCwKKyAgICAgICAgICAgIGxlbmd0aAorICAgICAgICApOworICAgIH0KK30KKwor
Ly8gRVM1IDE1LjUuNC4yMAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNS40LjIwCit2
YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhBMFx1MTY4MFx1MTgwRVx1MjAwMFx1
MjAwMVx1MjAwMlx1MjAwMyIgKworICAgICJcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhc
dTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjgiICsKKyAgICAiXHUyMDI5XHVGRUZG
IjsKK2lmICghU3RyaW5nLnByb3RvdHlwZS50cmltIHx8IHdzLnRyaW0oKSkgeworICAgIC8vIGh0
dHA6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZlcy9mYXN0ZXItdHJpbS1qYXZhc2Ny
aXB0CisgICAgLy8gaHR0cDovL3BlcmZlY3Rpb25raWxscy5jb20vd2hpdGVzcGFjZS1kZXZpYXRp
b25zLworICAgIHdzID0gIlsiICsgd3MgKyAiXSI7CisgICAgdmFyIHRyaW1CZWdpblJlZ2V4cCA9
IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCisgICAgICAgIHRyaW1FbmRSZWdleHAg
PSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKKyAgICBTdHJpbmcucHJvdG90eXBlLnRyaW0g
PSBmdW5jdGlvbiB0cmltKCkgeworICAgICAgICBpZiAodGhpcyA9PT0gdm9pZCAwIHx8IHRoaXMg
PT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZl
cnQgIit0aGlzKyIgdG8gb2JqZWN0Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0aGlzKQorICAgICAgICAgICAgLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAiIikKKyAgICAg
ICAgICAgIC5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsKKyAgICB9OworfQorCisvLworLy8g
VXRpbAorLy8gPT09PT09CisvLworCisvLyBFUzUgOS40CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3g5LjQKKy8vIGh0dHA6Ly9qc3BlcmYuY29tL3RvLWludGVnZXIKKworZnVuY3Rpb24gdG9J
bnRlZ2VyKG4pIHsKKyAgICBuID0gK247CisgICAgaWYgKG4gIT09IG4pIHsgLy8gaXNOYU4KKyAg
ICAgICAgbiA9IDA7CisgICAgfSBlbHNlIGlmIChuICE9PSAwICYmIG4gIT09ICgxLzApICYmIG4g
IT09IC0oMS8wKSkgeworICAgICAgICBuID0gKG4gPiAwIHx8IC0xKSAqIE1hdGguZmxvb3IoTWF0
aC5hYnMobikpOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKworZnVuY3Rpb24gaXNQcmltaXRp
dmUoaW5wdXQpIHsKKyAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbnB1dDsKKyAgICByZXR1cm4gKAor
ICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fAorICAgICAgICB0eXBlID09PSAidW5kZWZpbmVkIiB8
fAorICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIgfHwKKyAgICAgICAgdHlwZSA9PT0gIm51bWJl
ciIgfHwKKyAgICAgICAgdHlwZSA9PT0gInN0cmluZyIKKyAgICApOworfQorCitmdW5jdGlvbiB0
b1ByaW1pdGl2ZShpbnB1dCkgeworICAgIHZhciB2YWwsIHZhbHVlT2YsIHRvU3RyaW5nOworICAg
IGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKKyAgICAgICAgcmV0dXJuIGlucHV0OworICAgIH0K
KyAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsKKyAgICBpZiAodHlwZW9mIHZhbHVlT2YgPT09
ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgdmFsID0gdmFsdWVPZi5jYWxsKGlucHV0KTsKKyAgICAg
ICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAg
ICAgIH0KKyAgICB9CisgICAgdG9TdHJpbmcgPSBpbnB1dC50b1N0cmluZzsKKyAgICBpZiAodHlw
ZW9mIHRvU3RyaW5nID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIHZhbCA9IHRvU3RyaW5nLmNh
bGwoaW5wdXQpOworICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkgeworICAgICAgICAgICAg
cmV0dXJuIHZhbDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7
Cit9CisKKy8vIEVTNSA5LjkKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDkuOQordmFyIHRv
T2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsKKyAgICBpZiAobyA9PSBudWxsKSB7IC8vIHRoaXMgbWF0
Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAorICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOworICAgIH0KKyAgICByZXR1cm4gT2Jq
ZWN0KG8pOworfTsKKworfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoaW0ubWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGltLm1pbi5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ZGMwZTI5MzcwN2ZkYmMzMmE2MTBmYTU4Zjk5YjllODVkN2MxYjI1Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGlt
Lm1pbi5qcwpAQCAtMCwwICsxLDIgQEAKKyhmdW5jdGlvbihkZWZpbml0aW9uKXtpZih0eXBlb2Yg
ZGVmaW5lPT0iZnVuY3Rpb24iKXtkZWZpbmUoZGVmaW5pdGlvbil9ZWxzZSBpZih0eXBlb2YgWVVJ
PT0iZnVuY3Rpb24iKXtZVUkuYWRkKCJlczUiLGRlZmluaXRpb24pfWVsc2V7ZGVmaW5pdGlvbigp
fX0pKGZ1bmN0aW9uKCl7aWYocGFyc2VJbnQoIjA4IikhPT04KXtwYXJzZUludD1mdW5jdGlvbihv
cmlnUGFyc2VJbnQpe3ZhciBoZXhSZWdleD0vXjBbeFhdLztyZXR1cm4gZnVuY3Rpb24gcGFyc2VJ
bnRFUzUoc3RyLHJhZGl4KXtzdHI9U3RyaW5nKHN0cikudHJpbSgpO2lmKCErcmFkaXgpe3JhZGl4
PWhleFJlZ2V4LnRlc3Qoc3RyKT8xNjoxMH1yZXR1cm4gb3JpZ1BhcnNlSW50KHN0cixyYWRpeCl9
fShwYXJzZUludCl9ZnVuY3Rpb24gRW1wdHkoKXt9aWYoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5k
KXtGdW5jdGlvbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbiBiaW5kKHRoYXQpe3ZhciB0YXJnZXQ9
dGhpcztpZih0eXBlb2YgdGFyZ2V0IT0iZnVuY3Rpb24iKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJG
dW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrdGFyZ2V0KX12
YXIgYXJncz1fQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzLDEpO3ZhciBiaW5kZXI9ZnVuY3Rp
b24oKXtpZih0aGlzIGluc3RhbmNlb2YgYm91bmQpe3ZhciByZXN1bHQ9dGFyZ2V0LmFwcGx5KHRo
aXMsYXJncy5jb25jYXQoX0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50cykpKTtpZihPYmplY3Qo
cmVzdWx0KT09PXJlc3VsdCl7cmV0dXJuIHJlc3VsdH1yZXR1cm4gdGhpc31lbHNle3JldHVybiB0
YXJnZXQuYXBwbHkodGhhdCxhcmdzLmNvbmNhdChfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRz
KSkpfX07dmFyIGJvdW5kTGVuZ3RoPU1hdGgubWF4KDAsdGFyZ2V0Lmxlbmd0aC1hcmdzLmxlbmd0
aCk7dmFyIGJvdW5kQXJncz1bXTtmb3IodmFyIGk9MDtpPGJvdW5kTGVuZ3RoO2krKyl7Ym91bmRB
cmdzLnB1c2goIiQiK2kpfXZhciBib3VuZD1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0
aW9uKCIrYm91bmRBcmdzLmpvaW4oIiwiKSsiKXtyZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKX0iKShiaW5kZXIpO2lmKHRhcmdldC5wcm90b3R5cGUpe0VtcHR5LnByb3RvdHlwZT10
YXJnZXQucHJvdG90eXBlO2JvdW5kLnByb3RvdHlwZT1uZXcgRW1wdHk7RW1wdHkucHJvdG90eXBl
PW51bGx9cmV0dXJuIGJvdW5kfX12YXIgY2FsbD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDt2YXIg
cHJvdG90eXBlT2ZBcnJheT1BcnJheS5wcm90b3R5cGU7dmFyIHByb3RvdHlwZU9mT2JqZWN0PU9i
amVjdC5wcm90b3R5cGU7dmFyIF9BcnJheV9zbGljZV89cHJvdG90eXBlT2ZBcnJheS5zbGljZTt2
YXIgX3RvU3RyaW5nPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmluZyk7dmFyIG93
bnM9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTt2YXIgZGVmaW5l
R2V0dGVyO3ZhciBkZWZpbmVTZXR0ZXI7dmFyIGxvb2t1cEdldHRlcjt2YXIgbG9va3VwU2V0dGVy
O3ZhciBzdXBwb3J0c0FjY2Vzc29ycztpZihzdXBwb3J0c0FjY2Vzc29ycz1vd25zKHByb3RvdHlw
ZU9mT2JqZWN0LCJfX2RlZmluZUdldHRlcl9fIikpe2RlZmluZUdldHRlcj1jYWxsLmJpbmQocHJv
dG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7ZGVmaW5lU2V0dGVyPWNhbGwuYmluZChw
cm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTtsb29rdXBHZXR0ZXI9Y2FsbC5iaW5k
KHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pO2xvb2t1cFNldHRlcj1jYWxsLmJp
bmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBTZXR0ZXJfXyl9aWYoWzEsMl0uc3BsaWNlKDAp
Lmxlbmd0aCE9Mil7dmFyIGFycmF5X3NwbGljZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO3ZhciBh
cnJheV9wdXNoPUFycmF5LnByb3RvdHlwZS5wdXNoO3ZhciBhcnJheV91bnNoaWZ0PUFycmF5LnBy
b3RvdHlwZS51bnNoaWZ0O2lmKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbWFrZUFycmF5KGwpe3ZhciBh
PVtdO3doaWxlKGwtLSl7YS51bnNoaWZ0KGwpfXJldHVybiBhfXZhciBhcnJheT1bXSxsZW5ndGhC
ZWZvcmU7YXJyYXkuc3BsaWNlLmJpbmQoYXJyYXksMCwwKS5hcHBseShudWxsLG1ha2VBcnJheSgy
MCkpO2FycmF5LnNwbGljZS5iaW5kKGFycmF5LDAsMCkuYXBwbHkobnVsbCxtYWtlQXJyYXkoMjYp
KTtsZW5ndGhCZWZvcmU9YXJyYXkubGVuZ3RoO2FycmF5LnNwbGljZSg1LDAsIlhYWCIpO2lmKGxl
bmd0aEJlZm9yZSsxPT1hcnJheS5sZW5ndGgpe3JldHVybiB0cnVlfX0oKSl7QXJyYXkucHJvdG90
eXBlLnNwbGljZT1mdW5jdGlvbihzdGFydCxkZWxldGVDb3VudCl7aWYoIWFyZ3VtZW50cy5sZW5n
dGgpe3JldHVybltdfWVsc2V7cmV0dXJuIGFycmF5X3NwbGljZS5hcHBseSh0aGlzLFtzdGFydD09
PXZvaWQgMD8wOnN0YXJ0LGRlbGV0ZUNvdW50PT09dm9pZCAwP3RoaXMubGVuZ3RoLXN0YXJ0OmRl
bGV0ZUNvdW50XS5jb25jYXQoX0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50cywyKSkpfX19ZWxz
ZXtBcnJheS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKHN0YXJ0LGRlbGV0ZUNvdW50KXt2YXIg
cmVzdWx0LGFyZ3M9X0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50cywyKSxhZGRFbGVtZW50c0Nv
dW50PWFyZ3MubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtyZXR1cm5bXX1pZihzdGFydD09
PXZvaWQgMCl7c3RhcnQ9MH1pZihkZWxldGVDb3VudD09PXZvaWQgMCl7ZGVsZXRlQ291bnQ9dGhp
cy5sZW5ndGgtc3RhcnR9aWYoYWRkRWxlbWVudHNDb3VudD4wKXtpZihkZWxldGVDb3VudDw9MCl7
aWYoc3RhcnQ9PXRoaXMubGVuZ3RoKXthcnJheV9wdXNoLmFwcGx5KHRoaXMsYXJncyk7cmV0dXJu
W119aWYoc3RhcnQ9PTApe2FycmF5X3Vuc2hpZnQuYXBwbHkodGhpcyxhcmdzKTtyZXR1cm5bXX19
cmVzdWx0PV9BcnJheV9zbGljZV8uY2FsbCh0aGlzLHN0YXJ0LHN0YXJ0K2RlbGV0ZUNvdW50KTth
cmdzLnB1c2guYXBwbHkoYXJncyxfQXJyYXlfc2xpY2VfLmNhbGwodGhpcyxzdGFydCtkZWxldGVD
b3VudCx0aGlzLmxlbmd0aCkpO2FyZ3MudW5zaGlmdC5hcHBseShhcmdzLF9BcnJheV9zbGljZV8u
Y2FsbCh0aGlzLDAsc3RhcnQpKTthcmdzLnVuc2hpZnQoMCx0aGlzLmxlbmd0aCk7YXJyYXlfc3Bs
aWNlLmFwcGx5KHRoaXMsYXJncyk7cmV0dXJuIHJlc3VsdH1yZXR1cm4gYXJyYXlfc3BsaWNlLmNh
bGwodGhpcyxzdGFydCxkZWxldGVDb3VudCl9fX1pZihbXS51bnNoaWZ0KDApIT0xKXt2YXIgYXJy
YXlfdW5zaGlmdD1BcnJheS5wcm90b3R5cGUudW5zaGlmdDtBcnJheS5wcm90b3R5cGUudW5zaGlm
dD1mdW5jdGlvbigpe2FycmF5X3Vuc2hpZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0
aGlzLmxlbmd0aH19aWYoIUFycmF5LmlzQXJyYXkpe0FycmF5LmlzQXJyYXk9ZnVuY3Rpb24gaXNB
cnJheShvYmope3JldHVybiBfdG9TdHJpbmcob2JqKT09IltvYmplY3QgQXJyYXldIn19dmFyIGJv
eGVkU3RyaW5nPU9iamVjdCgiYSIpLHNwbGl0U3RyaW5nPWJveGVkU3RyaW5nWzBdIT0iYSJ8fCEo
MCBpbiBib3hlZFN0cmluZyk7dmFyIGJveGVkRm9yRWFjaD10cnVlO2lmKEFycmF5LnByb3RvdHlw
ZS5mb3JFYWNoKXtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCJmb28iLGZ1bmN0aW9uKGl0
ZW0saSxvYmope2lmKHR5cGVvZiBvYmohPT0ib2JqZWN0Iilib3hlZEZvckVhY2g9ZmFsc2V9KX1p
ZighQXJyYXkucHJvdG90eXBlLmZvckVhY2h8fCFib3hlZEZvckVhY2gpe0FycmF5LnByb3RvdHlw
ZS5mb3JFYWNoPWZ1bmN0aW9uIGZvckVhY2goZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMp
LHNlbGY9c3BsaXRTdHJpbmcmJl90b1N0cmluZyh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhp
cy5zcGxpdCgiIik6b2JqZWN0LHRoaXNwPWFyZ3VtZW50c1sxXSxpPS0xLGxlbmd0aD1zZWxmLmxl
bmd0aD4+PjA7aWYoX3RvU3RyaW5nKGZ1bikhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpe3Rocm93IG5l
dyBUeXBlRXJyb3J9d2hpbGUoKytpPGxlbmd0aCl7aWYoaSBpbiBzZWxmKXtmdW4uY2FsbCh0aGlz
cCxzZWxmW2ldLGksb2JqZWN0KX19fX1pZighQXJyYXkucHJvdG90eXBlLm1hcCl7QXJyYXkucHJv
dG90eXBlLm1hcD1mdW5jdGlvbiBtYXAoZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNl
bGY9c3BsaXRTdHJpbmcmJl90b1N0cmluZyh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhpcy5z
cGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjAscmVzdWx0PUFycmF5KGxlbmd0
aCksdGhpc3A9YXJndW1lbnRzWzFdO2lmKF90b1N0cmluZyhmdW4pIT0iW29iamVjdCBGdW5jdGlv
bl0iKXt0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIil9Zm9yKHZh
ciBpPTA7aTxsZW5ndGg7aSsrKXtpZihpIGluIHNlbGYpcmVzdWx0W2ldPWZ1bi5jYWxsKHRoaXNw
LHNlbGZbaV0saSxvYmplY3QpfXJldHVybiByZXN1bHR9fWlmKCFBcnJheS5wcm90b3R5cGUuZmls
dGVyKXtBcnJheS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9uIGZpbHRlcihmdW4pe3ZhciBvYmpl
Y3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYmX3RvU3RyaW5nKHRoaXMpPT0iW29i
amVjdCBTdHJpbmddIj90aGlzLnNwbGl0KCIiKTpvYmplY3QsbGVuZ3RoPXNlbGYubGVuZ3RoPj4+
MCxyZXN1bHQ9W10sdmFsdWUsdGhpc3A9YXJndW1lbnRzWzFdO2lmKF90b1N0cmluZyhmdW4pIT0i
W29iamVjdCBGdW5jdGlvbl0iKXt0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1
bmN0aW9uIil9Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKXtpZihpIGluIHNlbGYpe3ZhbHVlPXNl
bGZbaV07aWYoZnVuLmNhbGwodGhpc3AsdmFsdWUsaSxvYmplY3QpKXtyZXN1bHQucHVzaCh2YWx1
ZSl9fX1yZXR1cm4gcmVzdWx0fX1pZighQXJyYXkucHJvdG90eXBlLmV2ZXJ5KXtBcnJheS5wcm90
b3R5cGUuZXZlcnk9ZnVuY3Rpb24gZXZlcnkoZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMp
LHNlbGY9c3BsaXRTdHJpbmcmJl90b1N0cmluZyh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhp
cy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjAsdGhpc3A9YXJndW1lbnRz
WzFdO2lmKF90b1N0cmluZyhmdW4pIT0iW29iamVjdCBGdW5jdGlvbl0iKXt0aHJvdyBuZXcgVHlw
ZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIil9Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsr
KXtpZihpIGluIHNlbGYmJiFmdW4uY2FsbCh0aGlzcCxzZWxmW2ldLGksb2JqZWN0KSl7cmV0dXJu
IGZhbHNlfX1yZXR1cm4gdHJ1ZX19aWYoIUFycmF5LnByb3RvdHlwZS5zb21lKXtBcnJheS5wcm90
b3R5cGUuc29tZT1mdW5jdGlvbiBzb21lKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlzKSxz
ZWxmPXNwbGl0U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMu
c3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wLHRoaXNwPWFyZ3VtZW50c1sx
XTtpZihfdG9TdHJpbmcoZnVuKSE9IltvYmplY3QgRnVuY3Rpb25dIil7dGhyb3cgbmV3IFR5cGVF
cnJvcihmdW4rIiBpcyBub3QgYSBmdW5jdGlvbiIpfWZvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7
aWYoaSBpbiBzZWxmJiZmdW4uY2FsbCh0aGlzcCxzZWxmW2ldLGksb2JqZWN0KSl7cmV0dXJuIHRy
dWV9fXJldHVybiBmYWxzZX19aWYoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2Upe0FycmF5LnByb3Rv
dHlwZS5yZWR1Y2U9ZnVuY3Rpb24gcmVkdWNlKGZ1bil7dmFyIG9iamVjdD10b09iamVjdCh0aGlz
KSxzZWxmPXNwbGl0U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3Ro
aXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+Pj4wO2lmKF90b1N0cmluZyhm
dW4pIT0iW29iamVjdCBGdW5jdGlvbl0iKXt0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5v
dCBhIGZ1bmN0aW9uIil9aWYoIWxlbmd0aCYmYXJndW1lbnRzLmxlbmd0aD09MSl7dGhyb3cgbmV3
IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIp
fXZhciBpPTA7dmFyIHJlc3VsdDtpZihhcmd1bWVudHMubGVuZ3RoPj0yKXtyZXN1bHQ9YXJndW1l
bnRzWzFdfWVsc2V7ZG97aWYoaSBpbiBzZWxmKXtyZXN1bHQ9c2VsZltpKytdO2JyZWFrfWlmKCsr
aT49bGVuZ3RoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0
aCBubyBpbml0aWFsIHZhbHVlIil9fXdoaWxlKHRydWUpfWZvcig7aTxsZW5ndGg7aSsrKXtpZihp
IGluIHNlbGYpe3Jlc3VsdD1mdW4uY2FsbCh2b2lkIDAscmVzdWx0LHNlbGZbaV0saSxvYmplY3Qp
fX1yZXR1cm4gcmVzdWx0fX1pZighQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KXtBcnJheS5w
cm90b3R5cGUucmVkdWNlUmlnaHQ9ZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuKXt2YXIgb2JqZWN0
PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJl90b1N0cmluZyh0aGlzKT09IltvYmpl
Y3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+PjA7
aWYoX3RvU3RyaW5nKGZ1bikhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpe3Rocm93IG5ldyBUeXBlRXJy
b3IoZnVuKyIgaXMgbm90IGEgZnVuY3Rpb24iKX1pZighbGVuZ3RoJiZhcmd1bWVudHMubGVuZ3Ro
PT0xKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRo
IG5vIGluaXRpYWwgdmFsdWUiKX12YXIgcmVzdWx0LGk9bGVuZ3RoLTE7aWYoYXJndW1lbnRzLmxl
bmd0aD49Mil7cmVzdWx0PWFyZ3VtZW50c1sxXX1lbHNle2Rve2lmKGkgaW4gc2VsZil7cmVzdWx0
PXNlbGZbaS0tXTticmVha31pZigtLWk8MCl7dGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmln
aHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9fXdoaWxlKHRydWUpfWlm
KGk8MCl7cmV0dXJuIHJlc3VsdH1kb3tpZihpIGluIHRoaXMpe3Jlc3VsdD1mdW4uY2FsbCh2b2lk
IDAscmVzdWx0LHNlbGZbaV0saSxvYmplY3QpfX13aGlsZShpLS0pO3JldHVybiByZXN1bHR9fWlm
KCFBcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8WzAsMV0uaW5kZXhPZigxLDIpIT0tMSl7QXJyYXku
cHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQpe3ZhciBzZWxmPXNwbGl0
U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMuc3BsaXQoIiIp
OnRvT2JqZWN0KHRoaXMpLGxlbmd0aD1zZWxmLmxlbmd0aD4+PjA7aWYoIWxlbmd0aCl7cmV0dXJu
LTF9dmFyIGk9MDtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2k9dG9JbnRlZ2VyKGFyZ3VtZW50c1sx
XSl9aT1pPj0wP2k6TWF0aC5tYXgoMCxsZW5ndGgraSk7Zm9yKDtpPGxlbmd0aDtpKyspe2lmKGkg
aW4gc2VsZiYmc2VsZltpXT09PXNvdWdodCl7cmV0dXJuIGl9fXJldHVybi0xfX1pZighQXJyYXku
cHJvdG90eXBlLmxhc3RJbmRleE9mfHxbMCwxXS5sYXN0SW5kZXhPZigwLC0zKSE9LTEpe0FycmF5
LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQpe3ZhciBz
ZWxmPXNwbGl0U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMu
c3BsaXQoIiIpOnRvT2JqZWN0KHRoaXMpLGxlbmd0aD1zZWxmLmxlbmd0aD4+PjA7aWYoIWxlbmd0
aCl7cmV0dXJuLTF9dmFyIGk9bGVuZ3RoLTE7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtpPU1hdGgu
bWluKGksdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpfWk9aT49MD9pOmxlbmd0aC1NYXRoLmFicyhp
KTtmb3IoO2k+PTA7aS0tKXtpZihpIGluIHNlbGYmJnNvdWdodD09PXNlbGZbaV0pe3JldHVybiBp
fX1yZXR1cm4tMX19aWYoIU9iamVjdC5rZXlzKXt2YXIgaGFzRG9udEVudW1CdWc9dHJ1ZSxkb250
RW51bXM9WyJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVPZiIsImhhc093blByb3Bl
cnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY29uc3RydWN0b3Ii
XSxkb250RW51bXNMZW5ndGg9ZG9udEVudW1zLmxlbmd0aDtmb3IodmFyIGtleSBpbnt0b1N0cmlu
ZzpudWxsfSl7aGFzRG9udEVudW1CdWc9ZmFsc2V9T2JqZWN0LmtleXM9ZnVuY3Rpb24ga2V5cyhv
YmplY3Qpe2lmKHR5cGVvZiBvYmplY3QhPSJvYmplY3QiJiZ0eXBlb2Ygb2JqZWN0IT0iZnVuY3Rp
b24ifHxvYmplY3Q9PT1udWxsKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxs
ZWQgb24gYSBub24tb2JqZWN0Iil9dmFyIGtleXM9W107Zm9yKHZhciBuYW1lIGluIG9iamVjdCl7
aWYob3ducyhvYmplY3QsbmFtZSkpe2tleXMucHVzaChuYW1lKX19aWYoaGFzRG9udEVudW1CdWcp
e2Zvcih2YXIgaT0wLGlpPWRvbnRFbnVtc0xlbmd0aDtpPGlpO2krKyl7dmFyIGRvbnRFbnVtPWRv
bnRFbnVtc1tpXTtpZihvd25zKG9iamVjdCxkb250RW51bSkpe2tleXMucHVzaChkb250RW51bSl9
fX1yZXR1cm4ga2V5c319dmFyIG5lZ2F0aXZlRGF0ZT0tNjIxOTg3NTUyZTUsbmVnYXRpdmVZZWFy
U3RyaW5nPSItMDAwMDAxIjtpZighRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmd8fG5ldyBEYXRl
KG5lZ2F0aXZlRGF0ZSkudG9JU09TdHJpbmcoKS5pbmRleE9mKG5lZ2F0aXZlWWVhclN0cmluZyk9
PT0tMSl7RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc9ZnVuY3Rpb24gdG9JU09TdHJpbmcoKXt2
YXIgcmVzdWx0LGxlbmd0aCx2YWx1ZSx5ZWFyLG1vbnRoO2lmKCFpc0Zpbml0ZSh0aGlzKSl7dGhy
b3cgbmV3IFJhbmdlRXJyb3IoIkRhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nIGNhbGxlZCBvbiBu
b24tZmluaXRlIHZhbHVlLiIpfXllYXI9dGhpcy5nZXRVVENGdWxsWWVhcigpO21vbnRoPXRoaXMu
Z2V0VVRDTW9udGgoKTt5ZWFyKz1NYXRoLmZsb29yKG1vbnRoLzEyKTttb250aD0obW9udGglMTIr
MTIpJTEyO3Jlc3VsdD1bbW9udGgrMSx0aGlzLmdldFVUQ0RhdGUoKSx0aGlzLmdldFVUQ0hvdXJz
KCksdGhpcy5nZXRVVENNaW51dGVzKCksdGhpcy5nZXRVVENTZWNvbmRzKCldO3llYXI9KHllYXI8
MD8iLSI6eWVhcj45OTk5PyIrIjoiIikrKCIwMDAwMCIrTWF0aC5hYnMoeWVhcikpLnNsaWNlKDA8
PXllYXImJnllYXI8PTk5OTk/LTQ6LTYpO2xlbmd0aD1yZXN1bHQubGVuZ3RoO3doaWxlKGxlbmd0
aC0tKXt2YWx1ZT1yZXN1bHRbbGVuZ3RoXTtpZih2YWx1ZTwxMCl7cmVzdWx0W2xlbmd0aF09IjAi
K3ZhbHVlfX1yZXR1cm4geWVhcisiLSIrcmVzdWx0LnNsaWNlKDAsMikuam9pbigiLSIpKyJUIity
ZXN1bHQuc2xpY2UoMikuam9pbigiOiIpKyIuIisoIjAwMCIrdGhpcy5nZXRVVENNaWxsaXNlY29u
ZHMoKSkuc2xpY2UoLTMpKyJaIn19dmFyIGRhdGVUb0pTT05Jc1N1cHBvcnRlZD1mYWxzZTt0cnl7
ZGF0ZVRvSlNPTklzU3VwcG9ydGVkPURhdGUucHJvdG90eXBlLnRvSlNPTiYmbmV3IERhdGUoTmFO
KS50b0pTT04oKT09PW51bGwmJm5ldyBEYXRlKG5lZ2F0aXZlRGF0ZSkudG9KU09OKCkuaW5kZXhP
ZihuZWdhdGl2ZVllYXJTdHJpbmcpIT09LTEmJkRhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0
b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0cnVlfX0pfWNhdGNoKGUpe31pZighZGF0ZVRv
SlNPTklzU3VwcG9ydGVkKXtEYXRlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24gdG9KU09OKGtl
eSl7dmFyIG89T2JqZWN0KHRoaXMpLHR2PXRvUHJpbWl0aXZlKG8pLHRvSVNPO2lmKHR5cGVvZiB0
dj09PSJudW1iZXIiJiYhaXNGaW5pdGUodHYpKXtyZXR1cm4gbnVsbH10b0lTTz1vLnRvSVNPU3Ry
aW5nO2lmKHR5cGVvZiB0b0lTTyE9ImZ1bmN0aW9uIil7dGhyb3cgbmV3IFR5cGVFcnJvcigidG9J
U09TdHJpbmcgcHJvcGVydHkgaXMgbm90IGNhbGxhYmxlIil9cmV0dXJuIHRvSVNPLmNhbGwobyl9
fWlmKCFEYXRlLnBhcnNlfHwiRGF0ZS5wYXJzZSBpcyBidWdneSIpe0RhdGU9ZnVuY3Rpb24oTmF0
aXZlRGF0ZSl7ZnVuY3Rpb24gRGF0ZShZLE0sRCxoLG0scyxtcyl7dmFyIGxlbmd0aD1hcmd1bWVu
dHMubGVuZ3RoO2lmKHRoaXMgaW5zdGFuY2VvZiBOYXRpdmVEYXRlKXt2YXIgZGF0ZT1sZW5ndGg9
PTEmJlN0cmluZyhZKT09PVk/bmV3IE5hdGl2ZURhdGUoRGF0ZS5wYXJzZShZKSk6bGVuZ3RoPj03
P25ldyBOYXRpdmVEYXRlKFksTSxELGgsbSxzLG1zKTpsZW5ndGg+PTY/bmV3IE5hdGl2ZURhdGUo
WSxNLEQsaCxtLHMpOmxlbmd0aD49NT9uZXcgTmF0aXZlRGF0ZShZLE0sRCxoLG0pOmxlbmd0aD49
ND9uZXcgTmF0aXZlRGF0ZShZLE0sRCxoKTpsZW5ndGg+PTM/bmV3IE5hdGl2ZURhdGUoWSxNLEQp
Omxlbmd0aD49Mj9uZXcgTmF0aXZlRGF0ZShZLE0pOmxlbmd0aD49MT9uZXcgTmF0aXZlRGF0ZShZ
KTpuZXcgTmF0aXZlRGF0ZTtkYXRlLmNvbnN0cnVjdG9yPURhdGU7cmV0dXJuIGRhdGV9cmV0dXJu
IE5hdGl2ZURhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpc29EYXRlRXhwcmVzc2lvbj1u
ZXcgUmVnRXhwKCJeIisiKFxcZHs0fXxbKy1dXFxkezZ9KSIrIig/Oi0oXFxkezJ9KSIrIig/Oi0o
XFxkezJ9KSIrIig/OiIrIlQoXFxkezJ9KSIrIjooXFxkezJ9KSIrIig/OiIrIjooXFxkezJ9KSIr
Iig/OihcXC5cXGR7MSx9KSk/IisiKT8iKyIoIisiWnwiKyIoPzoiKyIoWy0rXSkiKyIoXFxkezJ9
KSIrIjooXFxkezJ9KSIrIikiKyIpPyk/KT8pPyIrIiQiKTt2YXIgbW9udGhzPVswLDMxLDU5LDkw
LDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzQsMzY1XTtmdW5jdGlvbiBkYXlGcm9tTW9u
dGgoeWVhcixtb250aCl7dmFyIHQ9bW9udGg+MT8xOjA7cmV0dXJuIG1vbnRoc1ttb250aF0rTWF0
aC5mbG9vcigoeWVhci0xOTY5K3QpLzQpLU1hdGguZmxvb3IoKHllYXItMTkwMSt0KS8xMDApK01h
dGguZmxvb3IoKHllYXItMTYwMSt0KS80MDApKzM2NSooeWVhci0xOTcwKX1mdW5jdGlvbiB0b1VU
Qyh0KXtyZXR1cm4gTnVtYmVyKG5ldyBOYXRpdmVEYXRlKDE5NzAsMCwxLDAsMCwwLHQpKX1mb3Io
dmFyIGtleSBpbiBOYXRpdmVEYXRlKXtEYXRlW2tleV09TmF0aXZlRGF0ZVtrZXldfURhdGUubm93
PU5hdGl2ZURhdGUubm93O0RhdGUuVVRDPU5hdGl2ZURhdGUuVVRDO0RhdGUucHJvdG90eXBlPU5h
dGl2ZURhdGUucHJvdG90eXBlO0RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPURhdGU7RGF0ZS5w
YXJzZT1mdW5jdGlvbiBwYXJzZShzdHJpbmcpe3ZhciBtYXRjaD1pc29EYXRlRXhwcmVzc2lvbi5l
eGVjKHN0cmluZyk7aWYobWF0Y2gpe3ZhciB5ZWFyPU51bWJlcihtYXRjaFsxXSksbW9udGg9TnVt
YmVyKG1hdGNoWzJdfHwxKS0xLGRheT1OdW1iZXIobWF0Y2hbM118fDEpLTEsaG91cj1OdW1iZXIo
bWF0Y2hbNF18fDApLG1pbnV0ZT1OdW1iZXIobWF0Y2hbNV18fDApLHNlY29uZD1OdW1iZXIobWF0
Y2hbNl18fDApLG1pbGxpc2Vjb25kPU1hdGguZmxvb3IoTnVtYmVyKG1hdGNoWzddfHwwKSoxZTMp
LGlzTG9jYWxUaW1lPUJvb2xlYW4obWF0Y2hbNF0mJiFtYXRjaFs4XSksc2lnbk9mZnNldD1tYXRj
aFs5XT09PSItIj8xOi0xLGhvdXJPZmZzZXQ9TnVtYmVyKG1hdGNoWzEwXXx8MCksbWludXRlT2Zm
c2V0PU51bWJlcihtYXRjaFsxMV18fDApLHJlc3VsdDtpZihob3VyPChtaW51dGU+MHx8c2Vjb25k
PjB8fG1pbGxpc2Vjb25kPjA/MjQ6MjUpJiZtaW51dGU8NjAmJnNlY29uZDw2MCYmbWlsbGlzZWNv
bmQ8MWUzJiZtb250aD4tMSYmbW9udGg8MTImJmhvdXJPZmZzZXQ8MjQmJm1pbnV0ZU9mZnNldDw2
MCYmZGF5Pi0xJiZkYXk8ZGF5RnJvbU1vbnRoKHllYXIsbW9udGgrMSktZGF5RnJvbU1vbnRoKHll
YXIsbW9udGgpKXtyZXN1bHQ9KChkYXlGcm9tTW9udGgoeWVhcixtb250aCkrZGF5KSoyNCtob3Vy
K2hvdXJPZmZzZXQqc2lnbk9mZnNldCkqNjA7cmVzdWx0PSgocmVzdWx0K21pbnV0ZSttaW51dGVP
ZmZzZXQqc2lnbk9mZnNldCkqNjArc2Vjb25kKSoxZTMrbWlsbGlzZWNvbmQ7aWYoaXNMb2NhbFRp
bWUpe3Jlc3VsdD10b1VUQyhyZXN1bHQpfWlmKC04NjRlMTM8PXJlc3VsdCYmcmVzdWx0PD04NjRl
MTMpe3JldHVybiByZXN1bHR9fXJldHVybiBOYU59cmV0dXJuIE5hdGl2ZURhdGUucGFyc2UuYXBw
bHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gRGF0ZX0oRGF0ZSl9aWYoIURhdGUubm93KXtEYXRl
Lm5vdz1mdW5jdGlvbiBub3coKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19aWYoIU51bWJl
ci5wcm90b3R5cGUudG9GaXhlZHx8OGUtNS50b0ZpeGVkKDMpIT09IjAuMDAwInx8LjkudG9GaXhl
ZCgwKT09PSIwInx8MS4yNTUudG9GaXhlZCgyKSE9PSIxLjI1Inx8MHhkZTBiNmIzYTc2NDAwODAu
dG9GaXhlZCgwKSE9PSIxMDAwMDAwMDAwMDAwMDAwMTI4Iil7KGZ1bmN0aW9uKCl7dmFyIGJhc2Us
c2l6ZSxkYXRhLGk7YmFzZT0xZTc7c2l6ZT02O2RhdGE9WzAsMCwwLDAsMCwwXTtmdW5jdGlvbiBt
dWx0aXBseShuLGMpe3ZhciBpPS0xO3doaWxlKCsraTxzaXplKXtjKz1uKmRhdGFbaV07ZGF0YVtp
XT1jJWJhc2U7Yz1NYXRoLmZsb29yKGMvYmFzZSl9fWZ1bmN0aW9uIGRpdmlkZShuKXt2YXIgaT1z
aXplLGM9MDt3aGlsZSgtLWk+PTApe2MrPWRhdGFbaV07ZGF0YVtpXT1NYXRoLmZsb29yKGMvbik7
Yz1jJW4qYmFzZX19ZnVuY3Rpb24gdG9TdHJpbmcoKXt2YXIgaT1zaXplO3ZhciBzPSIiO3doaWxl
KC0taT49MCl7aWYocyE9PSIifHxpPT09MHx8ZGF0YVtpXSE9PTApe3ZhciB0PVN0cmluZyhkYXRh
W2ldKTtpZihzPT09IiIpe3M9dH1lbHNle3MrPSIwMDAwMDAwIi5zbGljZSgwLDctdC5sZW5ndGgp
K3R9fX1yZXR1cm4gc31mdW5jdGlvbiBwb3coeCxuLGFjYyl7cmV0dXJuIG49PT0wP2FjYzpuJTI9
PT0xP3Bvdyh4LG4tMSxhY2MqeCk6cG93KHgqeCxuLzIsYWNjKX1mdW5jdGlvbiBsb2coeCl7dmFy
IG49MDt3aGlsZSh4Pj00MDk2KXtuKz0xMjt4Lz00MDk2fXdoaWxlKHg+PTIpe24rPTE7eC89Mn1y
ZXR1cm4gbn1OdW1iZXIucHJvdG90eXBlLnRvRml4ZWQ9ZnVuY3Rpb24oZnJhY3Rpb25EaWdpdHMp
e3ZhciBmLHgscyxtLGUseixqLGs7Zj1OdW1iZXIoZnJhY3Rpb25EaWdpdHMpO2Y9ZiE9PWY/MDpN
YXRoLmZsb29yKGYpO2lmKGY8MHx8Zj4yMCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk51bWJlci50
b0ZpeGVkIGNhbGxlZCB3aXRoIGludmFsaWQgbnVtYmVyIG9mIGRlY2ltYWxzIil9eD1OdW1iZXIo
dGhpcyk7aWYoeCE9PXgpe3JldHVybiJOYU4ifWlmKHg8PS0xZTIxfHx4Pj0xZTIxKXtyZXR1cm4g
U3RyaW5nKHgpfXM9IiI7aWYoeDwwKXtzPSItIjt4PS14fW09IjAiO2lmKHg+MWUtMjEpe2U9bG9n
KHgqcG93KDIsNjksMSkpLTY5O3o9ZTwwP3gqcG93KDIsLWUsMSk6eC9wb3coMixlLDEpO3oqPTQ1
MDM1OTk2MjczNzA0OTY7ZT01Mi1lO2lmKGU+MCl7bXVsdGlwbHkoMCx6KTtqPWY7d2hpbGUoaj49
Nyl7bXVsdGlwbHkoMWU3LDApO2otPTd9bXVsdGlwbHkocG93KDEwLGosMSksMCk7aj1lLTE7d2hp
bGUoaj49MjMpe2RpdmlkZSgxPDwyMyk7ai09MjN9ZGl2aWRlKDE8PGopO211bHRpcGx5KDEsMSk7
ZGl2aWRlKDIpO209dG9TdHJpbmcoKX1lbHNle211bHRpcGx5KDAseik7bXVsdGlwbHkoMTw8LWUs
MCk7bT10b1N0cmluZygpKyIwLjAwMDAwMDAwMDAwMDAwMDAwMDAwIi5zbGljZSgyLDIrZil9fWlm
KGY+MCl7az1tLmxlbmd0aDtpZihrPD1mKXttPXMrIjAuMDAwMDAwMDAwMDAwMDAwMDAwMCIuc2xp
Y2UoMCxmLWsrMikrbX1lbHNle209cyttLnNsaWNlKDAsay1mKSsiLiIrbS5zbGljZShrLWYpfX1l
bHNle209cyttfXJldHVybiBtfX0pKCl9dmFyIHN0cmluZ19zcGxpdD1TdHJpbmcucHJvdG90eXBl
LnNwbGl0O2lmKCJhYiIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGghPT0yfHwiLiIuc3BsaXQoLygu
PykoLj8pLykubGVuZ3RoIT09NHx8InRlc3N0Ii5zcGxpdCgvKHMpKi8pWzFdPT09InQifHwiIi5z
cGxpdCgvLj8vKS5sZW5ndGh8fCIuIi5zcGxpdCgvKCkoKS8pLmxlbmd0aD4xKXsoZnVuY3Rpb24o
KXt2YXIgY29tcGxpYW50RXhlY05wY2c9LygpPz8vLmV4ZWMoIiIpWzFdPT09dm9pZCAwO1N0cmlu
Zy5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oc2VwYXJhdG9yLGxpbWl0KXt2YXIgc3RyaW5nPXRo
aXM7aWYoc2VwYXJhdG9yPT09dm9pZCAwJiZsaW1pdD09PTApcmV0dXJuW107aWYoT2JqZWN0LnBy
b3RvdHlwZS50b1N0cmluZy5jYWxsKHNlcGFyYXRvcikhPT0iW29iamVjdCBSZWdFeHBdIil7cmV0
dXJuIHN0cmluZ19zcGxpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIG91dHB1dD1bXSxmbGFn
cz0oc2VwYXJhdG9yLmlnbm9yZUNhc2U/ImkiOiIiKSsoc2VwYXJhdG9yLm11bHRpbGluZT8ibSI6
IiIpKyhzZXBhcmF0b3IuZXh0ZW5kZWQ/IngiOiIiKSsoc2VwYXJhdG9yLnN0aWNreT8ieSI6IiIp
LGxhc3RMYXN0SW5kZXg9MCxzZXBhcmF0b3I9bmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLGZs
YWdzKyJnIiksc2VwYXJhdG9yMixtYXRjaCxsYXN0SW5kZXgsbGFzdExlbmd0aDtzdHJpbmcrPSIi
O2lmKCFjb21wbGlhbnRFeGVjTnBjZyl7c2VwYXJhdG9yMj1uZXcgUmVnRXhwKCJeIitzZXBhcmF0
b3Iuc291cmNlKyIkKD8hXFxzKSIsZmxhZ3MpfWxpbWl0PWxpbWl0PT09dm9pZCAwPy0xPj4+MDps
aW1pdD4+PjA7d2hpbGUobWF0Y2g9c2VwYXJhdG9yLmV4ZWMoc3RyaW5nKSl7bGFzdEluZGV4PW1h
dGNoLmluZGV4K21hdGNoWzBdLmxlbmd0aDtpZihsYXN0SW5kZXg+bGFzdExhc3RJbmRleCl7b3V0
cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsbWF0Y2guaW5kZXgpKTtpZighY29t
cGxpYW50RXhlY05wY2cmJm1hdGNoLmxlbmd0aD4xKXttYXRjaFswXS5yZXBsYWNlKHNlcGFyYXRv
cjIsZnVuY3Rpb24oKXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGgtMjtpKyspe2lmKGFy
Z3VtZW50c1tpXT09PXZvaWQgMCl7bWF0Y2hbaV09dm9pZCAwfX19KX1pZihtYXRjaC5sZW5ndGg+
MSYmbWF0Y2guaW5kZXg8c3RyaW5nLmxlbmd0aCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHko
b3V0cHV0LG1hdGNoLnNsaWNlKDEpKX1sYXN0TGVuZ3RoPW1hdGNoWzBdLmxlbmd0aDtsYXN0TGFz
dEluZGV4PWxhc3RJbmRleDtpZihvdXRwdXQubGVuZ3RoPj1saW1pdCl7YnJlYWt9fWlmKHNlcGFy
YXRvci5sYXN0SW5kZXg9PT1tYXRjaC5pbmRleCl7c2VwYXJhdG9yLmxhc3RJbmRleCsrfX1pZihs
YXN0TGFzdEluZGV4PT09c3RyaW5nLmxlbmd0aCl7aWYobGFzdExlbmd0aHx8IXNlcGFyYXRvci50
ZXN0KCIiKSl7b3V0cHV0LnB1c2goIiIpfX1lbHNle291dHB1dC5wdXNoKHN0cmluZy5zbGljZShs
YXN0TGFzdEluZGV4KSl9cmV0dXJuIG91dHB1dC5sZW5ndGg+bGltaXQ/b3V0cHV0LnNsaWNlKDAs
bGltaXQpOm91dHB1dH19KSgpfWVsc2UgaWYoIjAiLnNwbGl0KHZvaWQgMCwwKS5sZW5ndGgpe1N0
cmluZy5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oc2VwYXJhdG9yLGxpbWl0KXtpZihzZXBhcmF0
b3I9PT12b2lkIDAmJmxpbWl0PT09MClyZXR1cm5bXTtyZXR1cm4gc3RyaW5nX3NwbGl0LmFwcGx5
KHRoaXMsYXJndW1lbnRzKX19aWYoIiIuc3Vic3RyJiYiMGIiLnN1YnN0cigtMSkhPT0iYiIpe3Zh
ciBzdHJpbmdfc3Vic3RyPVN0cmluZy5wcm90b3R5cGUuc3Vic3RyO1N0cmluZy5wcm90b3R5cGUu
c3Vic3RyPWZ1bmN0aW9uKHN0YXJ0LGxlbmd0aCl7cmV0dXJuIHN0cmluZ19zdWJzdHIuY2FsbCh0
aGlzLHN0YXJ0PDA/KHN0YXJ0PXRoaXMubGVuZ3RoK3N0YXJ0KTwwPzA6c3RhcnQ6c3RhcnQsbGVu
Z3RoKX19dmFyIHdzPSIgICAgXG4LXGZcciBceGEwXHUxNjgwXHUxODBlXHUyMDAwXHUyMDAxXHUy
MDAyXHUyMDAzIisiXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUy
MDJmXHUyMDVmXHUzMDAwXHUyMDI4IisiXHUyMDI5XHVmZWZmIjtpZighU3RyaW5nLnByb3RvdHlw
ZS50cmltfHx3cy50cmltKCkpe3dzPSJbIit3cysiXSI7dmFyIHRyaW1CZWdpblJlZ2V4cD1uZXcg
UmVnRXhwKCJeIit3cyt3cysiKiIpLHRyaW1FbmRSZWdleHA9bmV3IFJlZ0V4cCh3cyt3cysiKiQi
KTtTdHJpbmcucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24gdHJpbSgpe2lmKHRoaXM9PT12b2lkIDB8
fHRoaXM9PT1udWxsKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrdGhpcysi
IHRvIG9iamVjdCIpfXJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSh0cmltQmVnaW5SZWdleHAs
IiIpLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwiIil9fWZ1bmN0aW9uIHRvSW50ZWdlcihuKXtuPStu
O2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4w
fHwtMSkqTWF0aC5mbG9vcihNYXRoLmFicyhuKSl9cmV0dXJuIG59ZnVuY3Rpb24gaXNQcmltaXRp
dmUoaW5wdXQpe3ZhciB0eXBlPXR5cGVvZiBpbnB1dDtyZXR1cm4gaW5wdXQ9PT1udWxsfHx0eXBl
PT09InVuZGVmaW5lZCJ8fHR5cGU9PT0iYm9vbGVhbiJ8fHR5cGU9PT0ibnVtYmVyInx8dHlwZT09
PSJzdHJpbmcifWZ1bmN0aW9uIHRvUHJpbWl0aXZlKGlucHV0KXt2YXIgdmFsLHZhbHVlT2YsdG9T
dHJpbmc7aWYoaXNQcmltaXRpdmUoaW5wdXQpKXtyZXR1cm4gaW5wdXR9dmFsdWVPZj1pbnB1dC52
YWx1ZU9mO2lmKHR5cGVvZiB2YWx1ZU9mPT09ImZ1bmN0aW9uIil7dmFsPXZhbHVlT2YuY2FsbChp
bnB1dCk7aWYoaXNQcmltaXRpdmUodmFsKSl7cmV0dXJuIHZhbH19dG9TdHJpbmc9aW5wdXQudG9T
dHJpbmc7aWYodHlwZW9mIHRvU3RyaW5nPT09ImZ1bmN0aW9uIil7dmFsPXRvU3RyaW5nLmNhbGwo
aW5wdXQpO2lmKGlzUHJpbWl0aXZlKHZhbCkpe3JldHVybiB2YWx9fXRocm93IG5ldyBUeXBlRXJy
b3J9dmFyIHRvT2JqZWN0PWZ1bmN0aW9uKG8pe2lmKG89PW51bGwpe3Rocm93IG5ldyBUeXBlRXJy
b3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8gb2JqZWN0Iil9cmV0dXJuIE9iamVjdChvKX19KTsK
Ky8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzNS1zaGltLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9m
bGlnaHQvTElDRU5TRSBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGln
aHQvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWEwNjg5YzgwNTMwNjIxM2ExNzA0MWFiNWE1NTA0ZDgw
MzVlYjFkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9t
b2R1bGVzL2ZsaWdodC9MSUNFTlNFCkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykgMjAx
My0yMDE0IFR3aXR0ZXIsIEluYyBhbmQgb3RoZXJzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdy
YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29m
IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT
b2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg
aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1v
ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxs
Citjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0
aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl
cm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0
YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJ
REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lN
UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO
RlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBI
T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg
QVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg
T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9pbmRleC5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvaW5kZXguanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTg4NTlkMzU2NWUwOGE3NWRhODZlYzg2OWM0ZmRlOTcwNjBiZTc3NgotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQv
aW5kZXguanMKQEAgLTAsMCArMSwyOSBAQAorLyogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5j
LiBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UuIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9s
aWNlbnNlcy9NSVQgKi8KKworZGVmaW5lKAorCisgIFsKKyAgICAnLi9saWIvYWR2aWNlJywKKyAg
ICAnLi9saWIvY29tcG9uZW50JywKKyAgICAnLi9saWIvY29tcG9zZScsCisgICAgJy4vbGliL2Rl
YnVnJywKKyAgICAnLi9saWIvbG9nZ2VyJywKKyAgICAnLi9saWIvcmVnaXN0cnknLAorICAgICcu
L2xpYi91dGlscycKKyAgXSwKKworICBmdW5jdGlvbihhZHZpY2UsIGNvbXBvbmVudCwgY29tcG9z
ZSwgZGVidWcsIGxvZ2dlciwgcmVnaXN0cnksIHV0aWxzKSB7CisgICAgJ3VzZSBzdHJpY3QnOwor
CisgICAgcmV0dXJuIHsKKyAgICAgIGFkdmljZTogYWR2aWNlLAorICAgICAgY29tcG9uZW50OiBj
b21wb25lbnQsCisgICAgICBjb21wb3NlOiBjb21wb3NlLAorICAgICAgZGVidWc6IGRlYnVnLAor
ICAgICAgbG9nZ2VyOiBsb2dnZXIsCisgICAgICByZWdpc3RyeTogcmVnaXN0cnksCisgICAgICB1
dGlsczogdXRpbHMKKyAgICB9OworCisgIH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9hZHZpY2UuanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9hZHZpY2UuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzM1YjFiOTAxYzU5MWIwOWRkZTU2MTE1NWUxYzY0MTljYzM0ZmFiYgotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2Fk
dmljZS5qcwpAQCAtMCwwICsxLDY2IEBACisvKiBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMu
IExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZS4gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xp
Y2Vuc2VzL01JVCAqLworCitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJworICBdLAorCisg
IGZ1bmN0aW9uKHV0aWxzKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIGFkdmljZSA9
IHsKKworICAgICAgYXJvdW5kOiBmdW5jdGlvbihiYXNlLCB3cmFwcGVkKSB7CisgICAgICAgIHJl
dHVybiBmdW5jdGlvbiBjb21wb3NlZEFyb3VuZCgpIHsKKyAgICAgICAgICAvLyB1bnBhY2tpbmcg
YXJndW1lbnRzIGJ5IGhhbmQgYmVuY2htYXJrZWQgZmFzdGVyCisgICAgICAgICAgdmFyIGkgPSAw
LCBsID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShsICsgMSk7CisgICAgICAg
ICAgYXJnc1swXSA9IGJhc2UuYmluZCh0aGlzKTsKKyAgICAgICAgICBmb3IgKDsgaSA8IGw7IGkr
KykgeworICAgICAgICAgICAgYXJnc1tpICsgMV0gPSBhcmd1bWVudHNbaV07CisgICAgICAgICAg
fQorICAgICAgICAgIHJldHVybiB3cmFwcGVkLmFwcGx5KHRoaXMsIGFyZ3MpOworICAgICAgICB9
OworICAgICAgfSwKKworICAgICAgYmVmb3JlOiBmdW5jdGlvbihiYXNlLCBiZWZvcmUpIHsKKyAg
ICAgICAgdmFyIGJlZm9yZUZuID0gKHR5cGVvZiBiZWZvcmUgPT0gJ2Z1bmN0aW9uJykgPyBiZWZv
cmUgOiBiZWZvcmUub2JqW2JlZm9yZS5mbk5hbWVdOworICAgICAgICByZXR1cm4gZnVuY3Rpb24g
Y29tcG9zZWRCZWZvcmUoKSB7CisgICAgICAgICAgYmVmb3JlRm4uYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKKyAgICAgICAgICByZXR1cm4gYmFzZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAg
ICAgICB9OworICAgICAgfSwKKworICAgICAgYWZ0ZXI6IGZ1bmN0aW9uKGJhc2UsIGFmdGVyKSB7
CisgICAgICAgIHZhciBhZnRlckZuID0gKHR5cGVvZiBhZnRlciA9PSAnZnVuY3Rpb24nKSA/IGFm
dGVyIDogYWZ0ZXIub2JqW2FmdGVyLmZuTmFtZV07CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBj
b21wb3NlZEFmdGVyKCkgeworICAgICAgICAgIHZhciByZXMgPSAoYmFzZS51bmJvdW5kIHx8IGJh
c2UpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgYWZ0ZXJGbi5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH07CisgICAgICB9
LAorCisgICAgICAvLyBhIG1peGluIHRoYXQgYWxsb3dzIG90aGVyIG1peGlucyB0byBhdWdtZW50
IGV4aXN0aW5nIGZ1bmN0aW9ucyBieSBhZGRpbmcgYWRkaXRpb25hbAorICAgICAgLy8gY29kZSBi
ZWZvcmUsIGFmdGVyIG9yIGFyb3VuZC4KKyAgICAgIHdpdGhBZHZpY2U6IGZ1bmN0aW9uKCkgewor
ICAgICAgICBbJ2JlZm9yZScsICdhZnRlcicsICdhcm91bmQnXS5mb3JFYWNoKGZ1bmN0aW9uKG0p
IHsKKyAgICAgICAgICB0aGlzW21dID0gZnVuY3Rpb24obWV0aG9kLCBmbikgeworCisgICAgICAg
ICAgICB1dGlscy5tdXRhdGVQcm9wZXJ0eSh0aGlzLCBtZXRob2QsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNbbWV0aG9kXSA9PSAnZnVuY3Rpb24nKSB7CisgICAg
ICAgICAgICAgICAgdGhpc1ttZXRob2RdID0gYWR2aWNlW21dKHRoaXNbbWV0aG9kXSwgZm4pOwor
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXNbbWV0aG9kXSA9IGZu
OworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgfTsKKyAgICAgICAgfSwgdGhpcyk7CisgICAg
ICB9CisgICAgfTsKKworICAgIHJldHVybiBhZHZpY2U7CisgIH0KKyk7CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9iYXNlLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvYmFzZS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMWI0ZWI2MzU1M2E0Mzk4ZDBjNmVmNjIyNTJkYjc3NjFjNjA4YTc4Ci0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdo
dC9saWIvYmFzZS5qcwpAQCAtMCwwICsxLDMwOSBAQAorLyogQ29weXJpZ2h0IDIwMTMgVHdpdHRl
ciwgSW5jLiBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UuIGh0dHA6Ly9vcGVuc291cmNl
Lm9yZy9saWNlbnNlcy9NSVQgKi8KKworZGVmaW5lKAorCisgIFsKKyAgICAnLi91dGlscycsCisg
ICAgJy4vcmVnaXN0cnknLAorICAgICcuL2RlYnVnJworICBdLAorCisgIGZ1bmN0aW9uKHV0aWxz
LCByZWdpc3RyeSwgZGVidWcpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvLyBjb21tb24g
bWl4aW4gYWxsb2NhdGVzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgLSB1c2VkIGJ5IGFsbCBjb21wb25l
bnQgcHJvdG90eXBlcworICAgIC8vIGNhbGxiYWNrIGNvbnRleHQgaXMgYm91bmQgdG8gY29tcG9u
ZW50CisgICAgdmFyIGNvbXBvbmVudElkID0gMDsKKworICAgIGZ1bmN0aW9uIHRlYXJkb3duSW5z
dGFuY2UoaW5zdGFuY2VJbmZvKSB7CisgICAgICBpbnN0YW5jZUluZm8uZXZlbnRzLnNsaWNlKCku
Zm9yRWFjaChmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgYXJncyA9IFtldmVudC50eXBl
XTsKKworICAgICAgICBldmVudC5lbGVtZW50ICYmIGFyZ3MudW5zaGlmdChldmVudC5lbGVtZW50
KTsKKyAgICAgICAgKHR5cGVvZiBldmVudC5jYWxsYmFjayA9PSAnZnVuY3Rpb24nKSAmJiBhcmdz
LnB1c2goZXZlbnQuY2FsbGJhY2spOworCisgICAgICAgIHRoaXMub2ZmLmFwcGx5KHRoaXMsIGFy
Z3MpOworICAgICAgfSwgaW5zdGFuY2VJbmZvLmluc3RhbmNlKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBjaGVja1NlcmlhbGl6YWJsZSh0eXBlLCBkYXRhKSB7CisgICAgICB0cnkgeworICAgICAg
ICB3aW5kb3cucG9zdE1lc3NhZ2UoZGF0YSwgJyonKTsKKyAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgY29uc29sZS5sb2coJ3Vuc2VyaWFsaXphYmxlIGRhdGEgZm9yIGV2ZW50Jyx0eXBlLCc6
JyxkYXRhKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgIFsnVGhlIGV2ZW50
JywgdHlwZSwgJ29uIGNvbXBvbmVudCcsIHRoaXMudG9TdHJpbmcoKSwgJ3dhcyB0cmlnZ2VyZWQg
d2l0aCBub24tc2VyaWFsaXphYmxlIGRhdGEnXS5qb2luKCcgJykKKyAgICAgICAgKTsKKyAgICAg
IH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbml0QXR0cmlidXRlcyhhdHRycykgeworICAgICAg
dmFyIGRlZmluZWRLZXlzID0gW10sIGluY29taW5nS2V5czsKKworICAgICAgdGhpcy5hdHRyID0g
bmV3IHRoaXMuYXR0ckRlZjsKKworICAgICAgaWYgKGRlYnVnLmVuYWJsZWQgJiYgd2luZG93LmNv
bnNvbGUpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuYXR0ckRlZi5wcm90b3R5cGUp
IHsKKyAgICAgICAgICBkZWZpbmVkS2V5cy5wdXNoKGtleSk7CisgICAgICAgIH0KKyAgICAgICAg
aW5jb21pbmdLZXlzID0gT2JqZWN0LmtleXMoYXR0cnMpOworCisgICAgICAgIGZvciAodmFyIGkg
PSBpbmNvbWluZ0tleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICBpZiAo
ZGVmaW5lZEtleXMuaW5kZXhPZihpbmNvbWluZ0tleXNbaV0pID09IC0xKSB7CisgICAgICAgICAg
ICBjb25zb2xlLndhcm4oJ1Bhc3NlZCB1bnVzZWQgYXR0cmlidXRlcyBpbmNsdWRpbmcgIicgKyBp
bmNvbWluZ0tleXNbaV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICciIHRvIGNvbXBvbmVu
dCAiJyArIHRoaXMudG9TdHJpbmcoKSArICciLicpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGZvciAodmFyIGtleSBpbiB0aGlz
LmF0dHJEZWYucHJvdG90eXBlKSB7CisgICAgICAgIGlmICh0eXBlb2YgYXR0cnNba2V5XSAgPT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICBpZiAodGhpcy5hdHRyW2tleV0gPT09IG51bGwpIHsK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgYXR0cmlidXRlICInICsga2V5
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBub3Qgc3BlY2lmaWVkIGluIGF0dGFj
aFRvIGZvciBjb21wb25lbnQgIicgKyB0aGlzLnRvU3RyaW5nKCkgKyAnIi4nKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5hdHRyW2tleV0gPSBhdHRyc1tr
ZXldOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmF0dHJba2V5XSA9PSAn
ZnVuY3Rpb24nKSB7CisgICAgICAgICAgdGhpcy5hdHRyW2tleV0gPSB0aGlzLmF0dHJba2V5XS5j
YWxsKHRoaXMpOworICAgICAgICB9CisgICAgICB9CisKKyAgICB9CisKKyAgICBmdW5jdGlvbiBp
bml0RGVwcmVjYXRlZEF0dHJpYnV0ZXMoYXR0cnMpIHsKKyAgICAgIC8vIG1lcmdlIGRlZmF1bHRz
IHdpdGggc3VwcGxpZWQgb3B0aW9ucworICAgICAgLy8gcHV0IG9wdGlvbnMgaW4gYXR0ci5fX3By
b3RvX18gdG8gYXZvaWQgbWVyZ2Ugb3ZlcmhlYWQKKyAgICAgIHZhciBhdHRyID0gT2JqZWN0LmNy
ZWF0ZShhdHRycyk7CisKKyAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRlZmF1bHRzKSB7Cisg
ICAgICAgIGlmICghYXR0cnMuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgIGF0dHJb
a2V5XSA9IHRoaXMuZGVmYXVsdHNba2V5XTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICB0
aGlzLmF0dHIgPSBhdHRyOworCisgICAgICBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRzIHx8IHt9
KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICBpZiAodGhpcy5kZWZhdWx0c1trZXld
ID09PSBudWxsICYmIHRoaXMuYXR0cltrZXldID09PSBudWxsKSB7CisgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdSZXF1aXJlZCBhdHRyaWJ1dGUgIicgKyBrZXkgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAnIiBub3Qgc3BlY2lmaWVkIGluIGF0dGFjaFRvIGZvciBjb21wb25lbnQgIicg
KyB0aGlzLnRvU3RyaW5nKCkgKyAnIi4nKTsKKyAgICAgICAgfQorICAgICAgfSwgdGhpcyk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gcHJveHlFdmVudFRvKHRhcmdldEV2ZW50KSB7CisgICAgICBy
ZXR1cm4gZnVuY3Rpb24oZSwgZGF0YSkgeworICAgICAgICAkKGUudGFyZ2V0KS50cmlnZ2VyKHRh
cmdldEV2ZW50LCBkYXRhKTsKKyAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gd2l0aEJh
c2UoKSB7CisKKyAgICAgIC8vIGRlbGVnYXRlIHRyaWdnZXIsIGJpbmQgYW5kIHVuYmluZCB0byBh
biBlbGVtZW50CisgICAgICAvLyBpZiAkZWxlbWVudCBub3Qgc3VwcGxpZWQsIHVzZSBjb21wb25l
bnQncyBub2RlCisgICAgICAvLyBvdGhlciBhcmd1bWVudHMgYXJlIHBhc3NlZCBvbgorICAgICAg
Ly8gZXZlbnQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSB0eXBlCisgICAg
ICAvLyBvZiB0aGUgZXZlbnQsIG9yIGEgaGFzaCBzcGVjaWZ5aW5nIGJvdGggdGhlIHR5cGUKKyAg
ICAgIC8vIGFuZCBhIGRlZmF1bHQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkLgorICAgICAgdGhpcy50
cmlnZ2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciAkZWxlbWVudCwgdHlwZSwgZGF0YSwg
ZXZlbnQsIGRlZmF1bHRGbjsKKyAgICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3VtZW50cy5sZW5n
dGggLSAxLCBsYXN0QXJnID0gYXJndW1lbnRzW2xhc3RJbmRleF07CisKKyAgICAgICAgaWYgKHR5
cGVvZiBsYXN0QXJnICE9ICdzdHJpbmcnICYmICEobGFzdEFyZyAmJiBsYXN0QXJnLmRlZmF1bHRC
ZWhhdmlvcikpIHsKKyAgICAgICAgICBsYXN0SW5kZXgtLTsKKyAgICAgICAgICBkYXRhID0gbGFz
dEFyZzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXN0SW5kZXggPT0gMSkgeworICAgICAg
ICAgICRlbGVtZW50ID0gJChhcmd1bWVudHNbMF0pOworICAgICAgICAgIGV2ZW50ID0gYXJndW1l
bnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4kbm9k
ZTsKKyAgICAgICAgICBldmVudCA9IGFyZ3VtZW50c1swXTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChldmVudC5kZWZhdWx0QmVoYXZpb3IpIHsKKyAgICAgICAgICBkZWZhdWx0Rm4gPSBldmVu
dC5kZWZhdWx0QmVoYXZpb3I7CisgICAgICAgICAgZXZlbnQgPSAkLkV2ZW50KGV2ZW50LnR5cGUp
OworICAgICAgICB9CisKKyAgICAgICAgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQ7CisKKyAg
ICAgICAgaWYgKGRlYnVnLmVuYWJsZWQgJiYgd2luZG93LnBvc3RNZXNzYWdlKSB7CisgICAgICAg
ICAgY2hlY2tTZXJpYWxpemFibGUuY2FsbCh0aGlzLCB0eXBlLCBkYXRhKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdHRyLmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHsK
KyAgICAgICAgICBkYXRhID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMuYXR0ci5ldmVudERhdGEs
IGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgJGVsZW1lbnQudHJpZ2dlcigoZXZlbnQgfHwg
dHlwZSksIGRhdGEpOworCisgICAgICAgIGlmIChkZWZhdWx0Rm4gJiYgIWV2ZW50LmlzRGVmYXVs
dFByZXZlbnRlZCgpKSB7CisgICAgICAgICAgKHRoaXNbZGVmYXVsdEZuXSB8fCBkZWZhdWx0Rm4p
LmNhbGwodGhpcywgZXZlbnQsIGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICRl
bGVtZW50OworICAgICAgfTsKKworCisgICAgICB0aGlzLm9uID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciAkZWxlbWVudCwgdHlwZSwgY2FsbGJhY2ssIG9yaWdpbmFsQ2I7CisgICAgICAgIHZh
ciBsYXN0SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoIC0gMSwgb3JpZ2luID0gYXJndW1lbnRzW2xh
c3RJbmRleF07CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW4gPT0gJ29iamVjdCcpIHsKKyAg
ICAgICAgICAvL2RlbGVnYXRlIGNhbGxiYWNrCisgICAgICAgICAgb3JpZ2luYWxDYiA9IHV0aWxz
LmRlbGVnYXRlKAorICAgICAgICAgICAgdGhpcy5yZXNvbHZlRGVsZWdhdGVSdWxlcyhvcmlnaW4p
CisgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3JpZ2luID09ICdzdHJp
bmcnKSB7CisgICAgICAgICAgb3JpZ2luYWxDYiA9IHByb3h5RXZlbnRUbyhvcmlnaW4pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgIG9yaWdpbmFsQ2IgPSBvcmlnaW47CisgICAgICAgIH0K
KworICAgICAgICBpZiAobGFzdEluZGV4ID09IDIpIHsKKyAgICAgICAgICAkZWxlbWVudCA9ICQo
YXJndW1lbnRzWzBdKTsKKyAgICAgICAgICB0eXBlID0gYXJndW1lbnRzWzFdOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKKyAgICAgICAgICB0eXBl
ID0gYXJndW1lbnRzWzBdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5h
bENiICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9yaWdpbmFsQ2IgIT0gJ29iamVjdCcpIHsKKyAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBiaW5kIHRvICInICsgdHlwZSArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICciIGJlY2F1c2UgdGhlIGdpdmVuIGNhbGxiYWNrIGlz
IG5vdCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpOworICAgICAgICB9CisKKyAgICAgICAgY2Fs
bGJhY2sgPSBvcmlnaW5hbENiLmJpbmQodGhpcyk7CisgICAgICAgIGNhbGxiYWNrLnRhcmdldCA9
IG9yaWdpbmFsQ2I7CisgICAgICAgIGNhbGxiYWNrLmNvbnRleHQgPSB0aGlzOworCisgICAgICAg
ICRlbGVtZW50Lm9uKHR5cGUsIGNhbGxiYWNrKTsKKworICAgICAgICAvLyBzdG9yZSBldmVyeSBi
b3VuZCB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFjaworICAgICAgICBvcmlnaW5hbENiLmJvdW5kIHx8
IChvcmlnaW5hbENiLmJvdW5kID0gW10pOworICAgICAgICBvcmlnaW5hbENiLmJvdW5kLnB1c2go
Y2FsbGJhY2spOworCisgICAgICAgIHJldHVybiBjYWxsYmFjazsKKyAgICAgIH07CisKKyAgICAg
IHRoaXMub2ZmID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciAkZWxlbWVudCwgdHlwZSwgY2Fs
bGJhY2s7CisgICAgICAgIHZhciBsYXN0SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsKKwor
ICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tsYXN0SW5kZXhdID09ICdmdW5jdGlvbicpIHsK
KyAgICAgICAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1tsYXN0SW5kZXhdOworICAgICAgICAgIGxh
c3RJbmRleCAtPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxhc3RJbmRleCA9PSAxKSB7
CisgICAgICAgICAgJGVsZW1lbnQgPSAkKGFyZ3VtZW50c1swXSk7CisgICAgICAgICAgdHlwZSA9
IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkZWxlbWVudCA9IHRo
aXMuJG5vZGU7CisgICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1swXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgIC8vdGhpcyBjYWxsYmFjayBtYXkgYmUg
dGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9yIGEgYm91bmQgdmVyc2lvbgorICAgICAgICAgIHZhciBi
b3VuZEZ1bmN0aW9ucyA9IGNhbGxiYWNrLnRhcmdldCA/IGNhbGxiYWNrLnRhcmdldC5ib3VuZCA6
IGNhbGxiYWNrLmJvdW5kIHx8IFtdOworICAgICAgICAgIC8vc2V0IGNhbGxiYWNrIHRvIHZlcnNp
b24gYm91bmQgYWdhaW5zdCB0aGlzIGluc3RhbmNlCisgICAgICAgICAgYm91bmRGdW5jdGlvbnMg
JiYgYm91bmRGdW5jdGlvbnMuc29tZShmdW5jdGlvbihmbiwgaSwgYXJyKSB7CisgICAgICAgICAg
ICBpZiAoZm4uY29udGV4dCAmJiAodGhpcy5pZGVudGl0eSA9PSBmbi5jb250ZXh0LmlkZW50aXR5
KSkgeworICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgICBjYWxs
YmFjayA9IGZuOworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgICAkZWxlbWVudC5vZmYodHlwZSwgY2FsbGJhY2sp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgZXZlbnRz
IG9mIGB0aGlzYCBpbnN0YW5jZQorICAgICAgICAgIC8vIGFuZCB1bmJpbmQgdXNpbmcgdGhlIGNh
bGxiYWNrCisgICAgICAgICAgcmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKS5ldmVudHMu
Zm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IGV2ZW50
LnR5cGUpIHsKKyAgICAgICAgICAgICAgJGVsZW1lbnQub2ZmKHR5cGUsIGV2ZW50LmNhbGxiYWNr
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiAkZWxlbWVudDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMucmVzb2x2ZURlbGVnYXRlUnVs
ZXMgPSBmdW5jdGlvbihydWxlSW5mbykgeworICAgICAgICB2YXIgcnVsZXMgPSB7fTsKKworICAg
ICAgICBPYmplY3Qua2V5cyhydWxlSW5mbykuZm9yRWFjaChmdW5jdGlvbihyKSB7CisgICAgICAg
ICAgaWYgKCEociBpbiB0aGlzLmF0dHIpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0NvbXBvbmVudCAiJyArIHRoaXMudG9TdHJpbmcoKSArICciIHdhbnRzIHRvIGxpc3RlbiBvbiAi
JyArIHIgKyAnIiBidXQgbm8gc3VjaCBhdHRyaWJ1dGUgd2FzIGRlZmluZWQuJyk7CisgICAgICAg
ICAgfQorICAgICAgICAgIHJ1bGVzW3RoaXMuYXR0cltyXV0gPSAodHlwZW9mIHJ1bGVJbmZvW3Jd
ID09ICdzdHJpbmcnKSA/IHByb3h5RXZlbnRUbyhydWxlSW5mb1tyXSkgOiBydWxlSW5mb1tyXTsK
KyAgICAgICAgfSwgdGhpcyk7CisKKyAgICAgICAgcmV0dXJuIHJ1bGVzOworICAgICAgfTsKKwor
ICAgICAgdGhpcy5zZWxlY3QgPSBmdW5jdGlvbihhdHRyaWJ1dGVLZXkpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuJG5vZGUuZmluZCh0aGlzLmF0dHJbYXR0cmlidXRlS2V5XSk7CisgICAgICB9Owor
CisgICAgICAvLyBOZXctc3R5bGUgYXR0cmlidXRlcworCisgICAgICB0aGlzLmF0dHJpYnV0ZXMg
PSBmdW5jdGlvbihhdHRycykgeworCisgICAgICAgIHZhciBBdHRyaWJ1dGVzID0gZnVuY3Rpb24o
KSB7fTsKKworICAgICAgICBpZiAodGhpcy5hdHRyRGVmKSB7CisgICAgICAgICAgQXR0cmlidXRl
cy5wcm90b3R5cGUgPSBuZXcgdGhpcy5hdHRyRGVmOworICAgICAgICB9CisKKyAgICAgICAgZm9y
ICh2YXIgbmFtZSBpbiBhdHRycykgeworICAgICAgICAgIEF0dHJpYnV0ZXMucHJvdG90eXBlW25h
bWVdID0gYXR0cnNbbmFtZV07CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmF0dHJEZWYgPSBB
dHRyaWJ1dGVzOworICAgICAgfTsKKworICAgICAgLy8gRGVwcmVjYXRlZCBhdHRyaWJ1dGVzCisK
KyAgICAgIHRoaXMuZGVmYXVsdEF0dHJzID0gZnVuY3Rpb24oZGVmYXVsdHMpIHsKKyAgICAgICAg
dXRpbHMucHVzaCh0aGlzLmRlZmF1bHRzLCBkZWZhdWx0cywgdHJ1ZSkgfHwgKHRoaXMuZGVmYXVs
dHMgPSBkZWZhdWx0cyk7CisgICAgICB9OworCisgICAgICB0aGlzLmluaXRpYWxpemUgPSBmdW5j
dGlvbihub2RlLCBhdHRycykgeworICAgICAgICBhdHRycyA9IGF0dHJzIHx8IHt9OworICAgICAg
ICB0aGlzLmlkZW50aXR5IHx8ICh0aGlzLmlkZW50aXR5ID0gY29tcG9uZW50SWQrKyk7CisKKyAg
ICAgICAgaWYgKCFub2RlKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQg
bmVlZHMgYSBub2RlJyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS5qcXVlcnkpIHsK
KyAgICAgICAgICB0aGlzLm5vZGUgPSBub2RlWzBdOworICAgICAgICAgIHRoaXMuJG5vZGUgPSBu
b2RlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMubm9kZSA9IG5vZGU7CisgICAg
ICAgICAgdGhpcy4kbm9kZSA9ICQobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhp
cy5hdHRyRGVmKSB7CisgICAgICAgICAgaW5pdEF0dHJpYnV0ZXMuY2FsbCh0aGlzLCBhdHRycyk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaW5pdERlcHJlY2F0ZWRBdHRyaWJ1dGVzLmNh
bGwodGhpcywgYXR0cnMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICB9OworCisgICAgICB0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRlYXJk
b3duSW5zdGFuY2UocmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKSk7CisgICAgICB9Owor
ICAgIH0KKworICAgIHJldHVybiB3aXRoQmFzZTsKKyAgfQorKTsKZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2NvbXBvbmVudC5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2NvbXBvbmVu
dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNjFmODgwMTEzODg1Y2JjZjViMzI1Y2M0NjAyYzQ2NDI0N2FmNWM4
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVz
L2ZsaWdodC9saWIvY29tcG9uZW50LmpzCkBAIC0wLDAgKzEsMTI3IEBACisvKiBDb3B5cmlnaHQg
MjAxMyBUd2l0dGVyLCBJbmMuIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZS4gaHR0cDov
L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCAqLworCitkZWZpbmUoCisKKyAgWworICAgICcu
L2FkdmljZScsCisgICAgJy4vdXRpbHMnLAorICAgICcuL2NvbXBvc2UnLAorICAgICcuL2Jhc2Un
LAorICAgICcuL3JlZ2lzdHJ5JywKKyAgICAnLi9sb2dnZXInLAorICAgICcuL2RlYnVnJworICBd
LAorCisgIGZ1bmN0aW9uKGFkdmljZSwgdXRpbHMsIGNvbXBvc2UsIHdpdGhCYXNlLCByZWdpc3Ry
eSwgd2l0aExvZ2dpbmcsIGRlYnVnKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIGZ1
bmN0aW9uTmFtZVJlZ0V4ID0gL2Z1bmN0aW9uICguKj8pXHM/XCgvOworCisgICAgLy8gdGVhcmRv
d24gZm9yIGFsbCBpbnN0YW5jZXMgb2YgdGhpcyBjb25zdHJ1Y3RvcgorICAgIGZ1bmN0aW9uIHRl
YXJkb3duQWxsKCkgeworICAgICAgdmFyIGNvbXBvbmVudEluZm8gPSByZWdpc3RyeS5maW5kQ29t
cG9uZW50SW5mbyh0aGlzKTsKKworICAgICAgY29tcG9uZW50SW5mbyAmJiBPYmplY3Qua2V5cyhj
b21wb25lbnRJbmZvLmluc3RhbmNlcykuZm9yRWFjaChmdW5jdGlvbihrKSB7CisgICAgICAgIHZh
ciBpbmZvID0gY29tcG9uZW50SW5mby5pbnN0YW5jZXNba107CisgICAgICAgIC8vIEl0J3MgcG9z
c2libGUgdGhhdCBhIHByZXZpb3VzIHRlYXJkb3duIGNhdXNlZCBhbm90aGVyIGNvbXBvbmVudCB0
byB0ZWFyZG93biwKKyAgICAgICAgLy8gc28gd2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIGluc3Rh
bmNlcyBvYmplY3QgaXMgYXMgaXQgd2FzLgorICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLmluc3Rh
bmNlKSB7CisgICAgICAgICAgaW5mby5pbnN0YW5jZS50ZWFyZG93bigpOworICAgICAgICB9Cisg
ICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhdHRhY2hUbyhzZWxlY3Rvci8qLCBvcHRp
b25zIGFyZ3MgKi8pIHsKKyAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5j
aG1hcmtlZCBmYXN0ZXIKKyAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAgIHZh
ciBhcmdzID0gbmV3IEFycmF5KGwgLSAxKTsKKyAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbDsg
aSsrKSB7CisgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOworICAgICAgfQorCisg
ICAgICBpZiAoIXNlbGVjdG9yKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50
IG5lZWRzIHRvIGJlIGF0dGFjaFRvXCdkIGEgalF1ZXJ5IG9iamVjdCwgbmF0aXZlIG5vZGUgb3Ig
c2VsZWN0b3Igc3RyaW5nJyk7CisgICAgICB9CisKKyAgICAgIHZhciBvcHRpb25zID0gdXRpbHMu
bWVyZ2UuYXBwbHkodXRpbHMsIGFyZ3MpOworICAgICAgdmFyIGNvbXBvbmVudEluZm8gPSByZWdp
c3RyeS5maW5kQ29tcG9uZW50SW5mbyh0aGlzKTsKKworICAgICAgJChzZWxlY3RvcikuZWFjaChm
dW5jdGlvbihpLCBub2RlKSB7CisgICAgICAgIGlmIChjb21wb25lbnRJbmZvICYmIGNvbXBvbmVu
dEluZm8uaXNBdHRhY2hlZFRvKG5vZGUpKSB7CisgICAgICAgICAgLy8gYWxyZWFkeSBhdHRhY2hl
ZAorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIChuZXcgdGhpcykuaW5p
dGlhbGl6ZShub2RlLCBvcHRpb25zKTsKKyAgICAgIH0uYmluZCh0aGlzKSk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcHJldHR5UHJpbnRNaXhpbnMoKSB7CisgICAgICAvL2NvdWxkIGJlIGNhbGxl
ZCBmcm9tIGNvbnN0cnVjdG9yIG9yIGNvbnN0cnVjdG9yLnByb3RvdHlwZQorICAgICAgdmFyIG1p
eGVkSW4gPSB0aGlzLm1peGVkSW4gfHwgdGhpcy5wcm90b3R5cGUubWl4ZWRJbiB8fCBbXTsKKyAg
ICAgIHJldHVybiBtaXhlZEluLm1hcChmdW5jdGlvbihtaXhpbikgeworICAgICAgICBpZiAobWl4
aW4ubmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgLy8gZnVuY3Rpb24gbmFtZSBwcm9wZXJ0eSBu
b3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciwgdXNlIHJlZ2V4CisgICAgICAgICAgdmFyIG0g
PSBtaXhpbi50b1N0cmluZygpLm1hdGNoKGZ1bmN0aW9uTmFtZVJlZ0V4KTsKKyAgICAgICAgICBy
ZXR1cm4gKG0gJiYgbVsxXSkgPyBtWzFdIDogJyc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgcmV0dXJuIChtaXhpbi5uYW1lICE9ICd3aXRoQmFzZScpID8gbWl4aW4ubmFtZSA6ICcnOwor
ICAgICAgICB9CisgICAgICB9KS5maWx0ZXIoQm9vbGVhbikuam9pbignLCAnKTsKKyAgICB9Owor
CisKKyAgICAvLyBkZWZpbmUgdGhlIGNvbnN0cnVjdG9yIGZvciBhIGN1c3RvbSBjb21wb25lbnQg
dHlwZQorICAgIC8vIHRha2VzIGFuIHVubGltaXRlZCBudW1iZXIgb2YgbWl4aW4gZnVuY3Rpb25z
IGFzIGFyZ3VtZW50cworICAgIC8vIHR5cGljYWwgYXBpIGNhbGwgd2l0aCAzIG1peGluczogZGVm
aW5lKHRpbWVsaW5lLCB3aXRoVHdlZXRDYXBhYmlsaXR5LCB3aXRoU2Nyb2xsQ2FwYWJpbGl0eSk7
CisgICAgZnVuY3Rpb24gZGVmaW5lKC8qbWl4aW5zKi8pIHsKKyAgICAgIC8vIHVucGFja2luZyBh
cmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgIHZhciBsID0gYXJndW1l
bnRzLmxlbmd0aDsKKyAgICAgIHZhciBtaXhpbnMgPSBuZXcgQXJyYXkobCk7CisgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICBtaXhpbnNbaV0gPSBhcmd1bWVudHNb
aV07CisgICAgICB9CisKKyAgICAgIHZhciBDb21wb25lbnQgPSBmdW5jdGlvbigpIHt9OworCisg
ICAgICBDb21wb25lbnQudG9TdHJpbmcgPSBDb21wb25lbnQucHJvdG90eXBlLnRvU3RyaW5nID0g
cHJldHR5UHJpbnRNaXhpbnM7CisgICAgICBpZiAoZGVidWcuZW5hYmxlZCkgeworICAgICAgICBD
b21wb25lbnQuZGVzY3JpYmUgPSBDb21wb25lbnQucHJvdG90eXBlLmRlc2NyaWJlID0gQ29tcG9u
ZW50LnRvU3RyaW5nKCk7CisgICAgICB9CisKKyAgICAgIC8vICdvcHRpb25zJyBpcyBvcHRpb25h
bCBoYXNoIHRvIGJlIG1lcmdlZCB3aXRoICdkZWZhdWx0cycgaW4gdGhlIGNvbXBvbmVudCBkZWZp
bml0aW9uCisgICAgICBDb21wb25lbnQuYXR0YWNoVG8gPSBhdHRhY2hUbzsKKyAgICAgIC8vIGVu
YWJsZXMgZXh0ZW5zaW9uIG9mIGV4aXN0aW5nICJiYXNlIiBDb21wb25lbnRzCisgICAgICBDb21w
b25lbnQubWl4aW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG5ld0NvbXBvbmVudCA9IGRl
ZmluZSgpOyAvL1RPRE86IGZpeCBwcmV0dHkgcHJpbnQKKyAgICAgICAgdmFyIG5ld1Byb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoQ29tcG9uZW50LnByb3RvdHlwZSk7CisgICAgICAgIG5ld1Byb3Rv
dHlwZS5taXhlZEluID0gW10uY29uY2F0KENvbXBvbmVudC5wcm90b3R5cGUubWl4ZWRJbik7Cisg
ICAgICAgIG5ld1Byb3RvdHlwZS5kZWZhdWx0cyA9IHV0aWxzLm1lcmdlKENvbXBvbmVudC5wcm90
b3R5cGUuZGVmYXVsdHMpOworICAgICAgICBuZXdQcm90b3R5cGUuYXR0ckRlZiA9IENvbXBvbmVu
dC5wcm90b3R5cGUuYXR0ckRlZjsKKyAgICAgICAgY29tcG9zZS5taXhpbihuZXdQcm90b3R5cGUs
IGFyZ3VtZW50cyk7CisgICAgICAgIG5ld0NvbXBvbmVudC5wcm90b3R5cGUgPSBuZXdQcm90b3R5
cGU7CisgICAgICAgIG5ld0NvbXBvbmVudC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBuZXdDb21w
b25lbnQ7CisgICAgICAgIHJldHVybiBuZXdDb21wb25lbnQ7CisgICAgICB9OworICAgICAgQ29t
cG9uZW50LnRlYXJkb3duQWxsID0gdGVhcmRvd25BbGw7CisKKyAgICAgIC8vIHByZXBlbmQgY29t
bW9uIG1peGlucyB0byBzdXBwbGllZCBsaXN0LCB0aGVuIG1peGluIGFsbCBmbGF2b3JzCisgICAg
ICBpZiAoZGVidWcuZW5hYmxlZCkgeworICAgICAgICBtaXhpbnMudW5zaGlmdCh3aXRoTG9nZ2lu
Zyk7CisgICAgICB9CisgICAgICBtaXhpbnMudW5zaGlmdCh3aXRoQmFzZSwgYWR2aWNlLndpdGhB
ZHZpY2UsIHJlZ2lzdHJ5LndpdGhSZWdpc3RyYXRpb24pOworICAgICAgY29tcG9zZS5taXhpbihD
b21wb25lbnQucHJvdG90eXBlLCBtaXhpbnMpOworCisgICAgICByZXR1cm4gQ29tcG9uZW50Owor
ICAgIH0KKworICAgIGRlZmluZS50ZWFyZG93bkFsbCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmVn
aXN0cnkuY29tcG9uZW50cy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24oYykgeworICAgICAgICBj
LmNvbXBvbmVudC50ZWFyZG93bkFsbCgpOworICAgICAgfSk7CisgICAgICByZWdpc3RyeS5yZXNl
dCgpOworICAgIH07CisKKyAgICByZXR1cm4gZGVmaW5lOworICB9CispOwpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvY29tcG9zZS5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2NvbXBv
c2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzgyNTUwY2YyZjNhZTEzNzI0ZjdkOTNkZThiMjk3MTM4NjdkYjJk
MAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9mbGlnaHQvbGliL2NvbXBvc2UuanMKQEAgLTAsMCArMSw0MSBAQAorLyogQ29weXJpZ2h0IDIw
MTMgVHdpdHRlciwgSW5jLiBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UuIGh0dHA6Ly9v
cGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgKi8KKworZGVmaW5lKAorCisgIFsKKyAgICAnLi91
dGlscycKKyAgXSwKKworICBmdW5jdGlvbih1dGlscykgeworICAgICd1c2Ugc3RyaWN0JzsKKwor
ICAgIHZhciBkb250TG9jayA9IFsnbWl4ZWRJbicsICdhdHRyRGVmJ107CisKKyAgICBmdW5jdGlv
biBzZXRXcml0YWJpbGl0eShvYmosIHdyaXRhYmxlKSB7CisgICAgICBPYmplY3Qua2V5cyhvYmop
LmZvckVhY2goZnVuY3Rpb24gKGtleSkgeworICAgICAgICBpZiAoZG9udExvY2suaW5kZXhPZihr
ZXkpIDwgMCkgeworICAgICAgICAgIHV0aWxzLnByb3BlcnR5V3JpdGFiaWxpdHkob2JqLCBrZXks
IHdyaXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
bWl4aW4oYmFzZSwgbWl4aW5zKSB7CisgICAgICBiYXNlLm1peGVkSW4gPSBiYXNlLmhhc093blBy
b3BlcnR5KCdtaXhlZEluJykgPyBiYXNlLm1peGVkSW4gOiBbXTsKKworICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBtaXhpbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJhc2UubWl4ZWRJ
bi5pbmRleE9mKG1peGluc1tpXSkgPT0gLTEpIHsKKyAgICAgICAgICBzZXRXcml0YWJpbGl0eShi
YXNlLCBmYWxzZSk7CisgICAgICAgICAgbWl4aW5zW2ldLmNhbGwoYmFzZSk7CisgICAgICAgICAg
YmFzZS5taXhlZEluLnB1c2gobWl4aW5zW2ldKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAg
ICBzZXRXcml0YWJpbGl0eShiYXNlLCB0cnVlKTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAg
ICAgbWl4aW46IG1peGluCisgICAgfTsKKworICB9CispOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvZGVidWcuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9kZWJ1Zy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iZTgzMzBmNzgwNDFiMjg0OGMwMmIzNmJmZDA2NmMxNTJjN2ZmNDNlCi0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIv
ZGVidWcuanMKQEAgLTAsMCArMSwxNjMgQEAKKy8qIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIElu
Yy4gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlLiBodHRwOi8vb3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvTUlUICovCisKK2RlZmluZSgKKworICBbJy4vcmVnaXN0cnknXSwKKworICBmdW5j
dGlvbihyZWdpc3RyeSkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIFNlYXJjaCBvYmplY3QgbW9k
ZWwKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwor
ICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpIHsKKyAgICAg
IG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworICAgICAgdmFyIG9iaiA9IG9wdGlvbnMub2JqIHx8
IHdpbmRvdzsKKyAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICgob2JqID09IHdpbmRv
dykgPyAnd2luZG93JyA6ICcnKTsKKyAgICAgIHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKG9iaik7
CisgICAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHsKKyAgICAgICAgaWYgKCh0ZXN0
c1t1dGlsXSB8fCB1dGlsKShzZWFyY2hUZXJtLCBvYmosIHByb3ApKSB7CisgICAgICAgICAgY29u
c29sZS5sb2coW3BhdGgsICcuJywgcHJvcF0uam9pbignJyksICctPicsIFsnKCcsIHR5cGVvZiBv
YmpbcHJvcF0sICcpJ10uam9pbignJyksIG9ialtwcm9wXSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmpbcHJvcF0pID09ICdbb2JqZWN0
IE9iamVjdF0nICYmIChvYmpbcHJvcF0gIT0gb2JqKSAmJiBwYXRoLnNwbGl0KCcuJykuaW5kZXhP
Zihwcm9wKSA9PSAtMSkgeworICAgICAgICAgIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIHtv
Ymo6IG9ialtwcm9wXSwgcGF0aDogW3BhdGgscHJvcF0uam9pbignLicpfSk7CisgICAgICAgIH0K
KyAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNlYXJjaCh1dGlsLCBleHBlY3RlZCwg
c2VhcmNoVGVybSwgb3B0aW9ucykgeworICAgICAgaWYgKCFleHBlY3RlZCB8fCB0eXBlb2Ygc2Vh
cmNoVGVybSA9PSBleHBlY3RlZCkgeworICAgICAgICB0cmF2ZXJzZSh1dGlsLCBzZWFyY2hUZXJt
LCBvcHRpb25zKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoW3NlYXJj
aFRlcm0sICdtdXN0IGJlJywgZXhwZWN0ZWRdLmpvaW4oJyAnKSk7CisgICAgICB9CisgICAgfQor
CisgICAgdmFyIHRlc3RzID0geworICAgICAgJ25hbWUnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBv
YmosIHByb3ApIHtyZXR1cm4gc2VhcmNoVGVybSA9PSBwcm9wO30sCisgICAgICAnbmFtZUNvbnRh
aW5zJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIHByb3AuaW5kZXhP
ZihzZWFyY2hUZXJtKSA+IC0xO30sCisgICAgICAndHlwZSc6IGZ1bmN0aW9uKHNlYXJjaFRlcm0s
IG9iaiwgcHJvcCkge3JldHVybiBvYmpbcHJvcF0gaW5zdGFuY2VvZiBzZWFyY2hUZXJtO30sCisg
ICAgICAndmFsdWUnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4gb2Jq
W3Byb3BdID09PSBzZWFyY2hUZXJtO30sCisgICAgICAndmFsdWVDb2VyY2VkJzogZnVuY3Rpb24o
c2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIG9ialtwcm9wXSA9PSBzZWFyY2hUZXJtO30K
KyAgICB9OworCisgICAgZnVuY3Rpb24gYnlOYW1lKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFy
Y2goJ25hbWUnLCAnc3RyaW5nJywgc2VhcmNoVGVybSwgb3B0aW9ucyk7fQorICAgIGZ1bmN0aW9u
IGJ5TmFtZUNvbnRhaW5zKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ25hbWVDb250YWlu
cycsICdzdHJpbmcnLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9CisgICAgZnVuY3Rpb24gYnlUeXBl
KHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3R5cGUnLCAnZnVuY3Rpb24nLCBzZWFyY2hU
ZXJtLCBvcHRpb25zKTt9CisgICAgZnVuY3Rpb24gYnlWYWx1ZShzZWFyY2hUZXJtLCBvcHRpb25z
KSB7c2VhcmNoKCd2YWx1ZScsIG51bGwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO30KKyAgICBmdW5j
dGlvbiBieVZhbHVlQ29lcmNlZChzZWFyY2hUZXJtLCBvcHRpb25zKSB7c2VhcmNoKCd2YWx1ZUNv
ZXJjZWQnLCBudWxsLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9CisgICAgZnVuY3Rpb24gY3VzdG9t
KGZuLCBvcHRpb25zKSB7dHJhdmVyc2UoZm4sIG51bGwsIG9wdGlvbnMpO30KKworICAgIC8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIEV2ZW50IGxv
Z2dpbmcKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KworICAgIHZhciBBTEwgPSAnYWxsJzsgLy9ubyBmaWx0ZXIKKworICAgIC8vbG9nIG5vdGhpbmcg
YnkgZGVmYXVsdAorICAgIHZhciBsb2dGaWx0ZXIgPSB7CisgICAgICBldmVudE5hbWVzOiBbXSwK
KyAgICAgIGFjdGlvbnM6IFtdCisgICAgfQorCisgICAgZnVuY3Rpb24gZmlsdGVyRXZlbnRMb2dz
QnlBY3Rpb24oLyphY3Rpb25zKi8pIHsKKyAgICAgIHZhciBhY3Rpb25zID0gW10uc2xpY2UuY2Fs
bChhcmd1bWVudHMpOworCisgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcy5sZW5ndGggfHwgKGxv
Z0ZpbHRlci5ldmVudE5hbWVzID0gQUxMKTsKKyAgICAgIGxvZ0ZpbHRlci5hY3Rpb25zID0gYWN0
aW9ucy5sZW5ndGggPyBhY3Rpb25zIDogQUxMOworICAgICAgc2F2ZUxvZ0ZpbHRlcigpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGZpbHRlckV2ZW50TG9nc0J5TmFtZSgvKmV2ZW50TmFtZXMqLykg
eworICAgICAgdmFyIGV2ZW50TmFtZXMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisKKyAg
ICAgIGxvZ0ZpbHRlci5hY3Rpb25zLmxlbmd0aCB8fCAobG9nRmlsdGVyLmFjdGlvbnMgPSBBTEwp
OworICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBldmVudE5hbWVzLmxlbmd0aCA/IGV2ZW50
TmFtZXMgOiBBTEw7CisgICAgICBzYXZlTG9nRmlsdGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gaGlkZUFsbEV2ZW50TG9ncygpIHsKKyAgICAgIGxvZ0ZpbHRlci5hY3Rpb25zID0gW107Cisg
ICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9IFtdOworICAgICAgc2F2ZUxvZ0ZpbHRlcigpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHNob3dBbGxFdmVudExvZ3MoKSB7CisgICAgICBsb2dGaWx0
ZXIuYWN0aW9ucyA9IEFMTDsKKyAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzID0gQUxMOworICAg
ICAgc2F2ZUxvZ0ZpbHRlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNhdmVMb2dGaWx0ZXIo
KSB7CisgICAgICB0cnkgeworICAgICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSkgeworICAg
ICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsb2dGaWx0ZXJfZXZlbnROYW1lcycsIGxvZ0Zp
bHRlci5ldmVudE5hbWVzKTsKKyAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9nRmls
dGVyX2FjdGlvbnMnLCBsb2dGaWx0ZXIuYWN0aW9ucyk7CisgICAgICAgIH0KKyAgICAgIH0gY2F0
Y2ggKGlnbm9yZWQpIHt9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJldHJpZXZlTG9nRmlsdGVy
KCkgeworICAgICAgdmFyIGV2ZW50TmFtZXMsIGFjdGlvbnM7CisgICAgICB0cnkgeworICAgICAg
ICBldmVudE5hbWVzID0gKHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiYgbG9jYWxTdG9yYWdlLmdldEl0
ZW0oJ2xvZ0ZpbHRlcl9ldmVudE5hbWVzJykpOworICAgICAgICBhY3Rpb25zID0gKHdpbmRvdy5s
b2NhbFN0b3JhZ2UgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ0ZpbHRlcl9hY3Rpb25zJykp
OworICAgICAgfSBjYXRjaCAoaWdub3JlZCkgeworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgICBldmVudE5hbWVzICYmIChsb2dGaWx0ZXIuZXZlbnROYW1lcyA9IGV2ZW50TmFtZXMpOwor
ICAgICAgYWN0aW9ucyAmJiAobG9nRmlsdGVyLmFjdGlvbnMgPSBhY3Rpb25zKTsKKworICAgICAg
Ly8gcmVjb25zdGl0dXRlIGFycmF5cyBpbiBwbGFjZQorICAgICAgT2JqZWN0LmtleXMobG9nRmls
dGVyKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKKyAgICAgICAgdmFyIHRoaXNQcm9wID0gbG9nRmls
dGVyW2tdOworICAgICAgICBpZiAodHlwZW9mIHRoaXNQcm9wID09ICdzdHJpbmcnICYmIHRoaXNQ
cm9wICE9PSBBTEwpIHsKKyAgICAgICAgICBsb2dGaWx0ZXJba10gPSB0aGlzUHJvcCA/IHRoaXNQ
cm9wLnNwbGl0KCcsJykgOiBbXTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAg
cmV0dXJuIHsKKworICAgICAgZW5hYmxlOiBmdW5jdGlvbihlbmFibGUpIHsKKyAgICAgICAgdGhp
cy5lbmFibGVkID0gISFlbmFibGU7CisKKyAgICAgICAgaWYgKGVuYWJsZSAmJiB3aW5kb3cuY29u
c29sZSkgeworICAgICAgICAgIGNvbnNvbGUuaW5mbygnQm9vdGluZyBpbiBERUJVRyBtb2RlJyk7
CisgICAgICAgICAgY29uc29sZS5pbmZvKCdZb3UgY2FuIGNvbmZpZ3VyZSBldmVudCBsb2dnaW5n
IHdpdGggREVCVUcuZXZlbnRzLmxvZ0FsbCgpL2xvZ05vbmUoKS9sb2dCeU5hbWUoKS9sb2dCeUFj
dGlvbigpJyk7CisgICAgICAgIH0KKworICAgICAgICByZXRyaWV2ZUxvZ0ZpbHRlcigpOworCisg
ICAgICAgIHdpbmRvdy5ERUJVRyA9IHRoaXM7CisgICAgICB9LAorCisgICAgICByZWdpc3RyeTog
cmVnaXN0cnksCisKKyAgICAgIGZpbmQ6IHsKKyAgICAgICAgYnlOYW1lOiBieU5hbWUsCisgICAg
ICAgIGJ5TmFtZUNvbnRhaW5zOiBieU5hbWVDb250YWlucywKKyAgICAgICAgYnlUeXBlOiBieVR5
cGUsCisgICAgICAgIGJ5VmFsdWU6IGJ5VmFsdWUsCisgICAgICAgIGJ5VmFsdWVDb2VyY2VkOiBi
eVZhbHVlQ29lcmNlZCwKKyAgICAgICAgY3VzdG9tOiBjdXN0b20KKyAgICAgIH0sCisKKyAgICAg
IGV2ZW50czogeworICAgICAgICBsb2dGaWx0ZXI6IGxvZ0ZpbHRlciwKKworICAgICAgICAvLyBB
Y2NlcHRzIGFueSBudW1iZXIgb2YgYWN0aW9uIGFyZ3MKKyAgICAgICAgLy8gZS5nLiBERUJVRy5l
dmVudHMubG9nQnlBY3Rpb24oIm9uIiwgIm9mZiIpCisgICAgICAgIGxvZ0J5QWN0aW9uOiBmaWx0
ZXJFdmVudExvZ3NCeUFjdGlvbiwKKworICAgICAgICAvLyBBY2NlcHRzIGFueSBudW1iZXIgb2Yg
ZXZlbnQgbmFtZSBhcmdzIChpbmMuIHJlZ2V4IG9yIHdpbGRjYXJkcykKKyAgICAgICAgLy8gZS5n
LiBERUJVRy5ldmVudHMubG9nQnlOYW1lKC91aS4qLywgIipUaHJlYWQqIik7CisgICAgICAgIGxv
Z0J5TmFtZTogZmlsdGVyRXZlbnRMb2dzQnlOYW1lLAorCisgICAgICAgIGxvZ0FsbDogc2hvd0Fs
bEV2ZW50TG9ncywKKyAgICAgICAgbG9nTm9uZTogaGlkZUFsbEV2ZW50TG9ncworICAgICAgfQor
ICAgIH07CisgIH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2Rl
X21vZHVsZXMvZmxpZ2h0L2xpYi9sb2dnZXIuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9sb2dnZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTUyYTI4OWVjZDg2
NDE4ZjYyNDAwOTFmOTNmNDE1ZWU4MjFhMjMwNQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2xvZ2dlci5qcwpAQCAtMCww
ICsxLDk4IEBACisvKiBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMuIExpY2Vuc2VkIHVuZGVy
IFRoZSBNSVQgTGljZW5zZS4gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCAqLwor
CitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJworICBdLAorCisgIGZ1bmN0aW9uKHV0aWxz
KSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIGFjdGlvblN5bWJvbHMgPSB7CisgICAg
ICBvbjogJzwtJywKKyAgICAgIHRyaWdnZXI6ICctPicsCisgICAgICBvZmY6ICd4ICcKKyAgICB9
OworCisgICAgZnVuY3Rpb24gZWxlbVRvU3RyaW5nKGVsZW0pIHsKKyAgICAgIHZhciB0YWdTdHIg
PSBlbGVtLnRhZ05hbWUgPyBlbGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6IGVsZW0udG9TdHJp
bmcoKTsKKyAgICAgIHZhciBjbGFzc1N0ciA9IGVsZW0uY2xhc3NOYW1lID8gJy4nICsgKGVsZW0u
Y2xhc3NOYW1lKSA6ICcnOworICAgICAgdmFyIHJlc3VsdCA9IHRhZ1N0ciArIGNsYXNzU3RyOwor
ICAgICAgcmV0dXJuIGVsZW0udGFnTmFtZSA/IFsnXCcnLCAnXCcnXS5qb2luKHJlc3VsdCkgOiBy
ZXN1bHQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9nKGFjdGlvbiwgY29tcG9uZW50LCBldmVu
dEFyZ3MpIHsKKyAgICAgIGlmICghd2luZG93LkRFQlVHIHx8ICF3aW5kb3cuREVCVUcuZW5hYmxl
ZCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB2YXIgbmFtZSwgZXZlbnRUeXBl
LCBlbGVtLCBmbiwgcGF5bG9hZCwgbG9nRmlsdGVyLCB0b1JlZ0V4cCwgYWN0aW9uTG9nZ2FibGUs
IG5hbWVMb2dnYWJsZSwgaW5mbzsKKworICAgICAgaWYgKHR5cGVvZiBldmVudEFyZ3NbZXZlbnRB
cmdzLmxlbmd0aCAtIDFdID09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgZm4gPSBldmVudEFyZ3Mu
cG9wKCk7CisgICAgICAgIGZuID0gZm4udW5ib3VuZCB8fCBmbjsgLy8gdXNlIHVuYm91bmQgdmVy
c2lvbiBpZiBhbnkgKGJldHRlciBpbmZvKQorICAgICAgfQorCisgICAgICBpZiAoZXZlbnRBcmdz
Lmxlbmd0aCA9PSAxKSB7CisgICAgICAgIGVsZW0gPSBjb21wb25lbnQuJG5vZGVbMF07CisgICAg
ICAgIGV2ZW50VHlwZSA9IGV2ZW50QXJnc1swXTsKKyAgICAgIH0gZWxzZSBpZiAoKGV2ZW50QXJn
cy5sZW5ndGggPT0gMikgJiYgdHlwZW9mIGV2ZW50QXJnc1sxXSA9PSAnb2JqZWN0JyAmJiAhZXZl
bnRBcmdzWzFdLnR5cGUpIHsKKyAgICAgICAgLy8yIGFyZ3MsIGZpcnN0IGFyZyBpcyBub3QgZWxl
bQorICAgICAgICBlbGVtID0gY29tcG9uZW50LiRub2RlWzBdOworICAgICAgICBldmVudFR5cGUg
PSBldmVudEFyZ3NbMF07CisgICAgICAgIGlmIChhY3Rpb24gPT0gInRyaWdnZXIiKSB7CisgICAg
ICAgICAgcGF5bG9hZCA9IGV2ZW50QXJnc1sxXTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8yKyBhcmdzLCBmaXJzdCBhcmcgaXMgZWxlbQorICAgICAgICBlbGVtID0gZXZl
bnRBcmdzWzBdOworICAgICAgICBldmVudFR5cGUgPSBldmVudEFyZ3NbMV07CisgICAgICAgIGlm
IChhY3Rpb24gPT0gInRyaWdnZXIiKSB7CisgICAgICAgICAgcGF5bG9hZCA9IGV2ZW50QXJnc1sy
XTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBuYW1lID0gdHlwZW9mIGV2ZW50VHlwZSA9
PSAnb2JqZWN0JyA/IGV2ZW50VHlwZS50eXBlIDogZXZlbnRUeXBlOworCisgICAgICBsb2dGaWx0
ZXIgPSBERUJVRy5ldmVudHMubG9nRmlsdGVyOworCisgICAgICAvLyBubyByZWdleCBmb3IgeW91
LCBhY3Rpb25zLi4uCisgICAgICBhY3Rpb25Mb2dnYWJsZSA9IGxvZ0ZpbHRlci5hY3Rpb25zID09
ICdhbGwnIHx8IChsb2dGaWx0ZXIuYWN0aW9ucy5pbmRleE9mKGFjdGlvbikgPiAtMSk7CisgICAg
ICAvLyBldmVudCBuYW1lIGZpbHRlciBhbGxvdyB3aWxkY2FyZHMgb3IgcmVnZXguLi4KKyAgICAg
IHRvUmVnRXhwID0gZnVuY3Rpb24oZXhwcikgeworICAgICAgICByZXR1cm4gZXhwci50ZXN0ID8g
ZXhwciA6IG5ldyBSZWdFeHAoJ14nICsgZXhwci5yZXBsYWNlKC9cKi9nLCAnLionKSArICckJyk7
CisgICAgICB9OworICAgICAgbmFtZUxvZ2dhYmxlID0KKyAgICAgICAgbG9nRmlsdGVyLmV2ZW50
TmFtZXMgPT0gJ2FsbCcgfHwKKyAgICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMuc29tZShmdW5j
dGlvbihlKSB7cmV0dXJuIHRvUmVnRXhwKGUpLnRlc3QobmFtZSk7fSk7CisKKyAgICAgIGlmIChh
Y3Rpb25Mb2dnYWJsZSAmJiBuYW1lTG9nZ2FibGUpIHsKKyAgICAgICAgaW5mbyA9IFthY3Rpb25T
eW1ib2xzW2FjdGlvbl0sIGFjdGlvbiwgJ1snICsgbmFtZSArICddJ107CisgICAgICAgIHBheWxv
YWQgJiYgaW5mby5wdXNoKHBheWxvYWQpOworICAgICAgICBpbmZvLnB1c2goZWxlbVRvU3RyaW5n
KGVsZW0pKTsKKyAgICAgICAgaW5mby5wdXNoKGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5kZXNjcmli
ZS5zcGxpdCgnICcpLnNsaWNlKDAsMykuam9pbignICcpKTsKKyAgICAgICAgY29uc29sZS5ncm91
cENvbGxhcHNlZCAmJiBhY3Rpb24gPT0gJ3RyaWdnZXInICYmIGNvbnNvbGUuZ3JvdXBDb2xsYXBz
ZWQoYWN0aW9uLCBuYW1lKTsKKyAgICAgICAgY29uc29sZS5pbmZvLmFwcGx5KGNvbnNvbGUsIGlu
Zm8pOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHdpdGhMb2dnaW5nKCkgeworICAg
ICAgdGhpcy5iZWZvcmUoJ3RyaWdnZXInLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCd0cmln
Z2VyJywgdGhpcywgdXRpbHMudG9BcnJheShhcmd1bWVudHMpKTsKKyAgICAgIH0pOworICAgICAg
aWYgKGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQpIHsKKyAgICAgICAgdGhpcy5hZnRlcigndHJpZ2dl
cicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTsKKyAgICAgICAg
fSk7CisgICAgICB9CisgICAgICB0aGlzLmJlZm9yZSgnb24nLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgbG9nKCdvbicsIHRoaXMsIHV0aWxzLnRvQXJyYXkoYXJndW1lbnRzKSk7CisgICAgICB9KTsK
KyAgICAgIHRoaXMuYmVmb3JlKCdvZmYnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCdvZmYn
LCB0aGlzLCB1dGlscy50b0FycmF5KGFyZ3VtZW50cykpOworICAgICAgfSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHdpdGhMb2dnaW5nOworICB9CispOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9yZWdpc3RyeS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zNjAwYjU4Njk3MTJmY2NiYWRhY2Q0ZmVkYjVlZGVmNmYyMDgxMzVjCi0tLSAvZGV2
L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9s
aWIvcmVnaXN0cnkuanMKQEAgLTAsMCArMSwyMjQgQEAKKy8qIENvcHlyaWdodCAyMDEzIFR3aXR0
ZXIsIEluYy4gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlLiBodHRwOi8vb3BlbnNvdXJj
ZS5vcmcvbGljZW5zZXMvTUlUICovCisKK2RlZmluZSgKKworICBbXSwKKworICBmdW5jdGlvbigp
IHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBmdW5jdGlvbiBwYXJzZUV2ZW50QXJncyhpbnN0
YW5jZSwgYXJncykgeworICAgICAgdmFyIGVsZW1lbnQsIHR5cGUsIGNhbGxiYWNrOworICAgICAg
dmFyIGVuZCA9IGFyZ3MubGVuZ3RoOworCisgICAgICBpZiAodHlwZW9mIGFyZ3NbZW5kIC0gMV0g
PT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgZW5kIC09IDE7CisgICAgICAgIGNhbGxiYWNrID0g
YXJnc1tlbmRdOworICAgICAgfQorCisgICAgICBpZiAodHlwZW9mIGFyZ3NbZW5kIC0gMV0gPT09
ICdvYmplY3QnKSB7CisgICAgICAgIGVuZCAtPSAxOworICAgICAgfQorCisgICAgICBpZiAoZW5k
ID09IDIpIHsKKyAgICAgICAgZWxlbWVudCA9IGFyZ3NbMF07CisgICAgICAgIHR5cGUgPSBhcmdz
WzFdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxlbWVudCA9IGluc3RhbmNlLm5vZGU7Cisg
ICAgICAgIHR5cGUgPSBhcmdzWzBdOworICAgICAgfQorCisgICAgICByZXR1cm4geworICAgICAg
ICBlbGVtZW50OiBlbGVtZW50LAorICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICBjYWxsYmFj
azogY2FsbGJhY2sKKyAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gbWF0Y2hFdmVudChh
LCBiKSB7CisgICAgICByZXR1cm4gKAorICAgICAgICAoYS5lbGVtZW50ID09IGIuZWxlbWVudCkg
JiYKKyAgICAgICAgKGEudHlwZSA9PSBiLnR5cGUpICYmCisgICAgICAgIChiLmNhbGxiYWNrID09
IG51bGwgfHwgKGEuY2FsbGJhY2sgPT0gYi5jYWxsYmFjaykpCisgICAgICApOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIFJlZ2lzdHJ5KCkgeworCisgICAgICB2YXIgcmVnaXN0cnkgPSB0aGlzOwor
CisgICAgICAodGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmNvbXBvbmVu
dHMgPSBbXTsKKyAgICAgICAgdGhpcy5hbGxJbnN0YW5jZXMgPSB7fTsKKyAgICAgICAgdGhpcy5l
dmVudHMgPSBbXTsKKyAgICAgIH0pLmNhbGwodGhpcyk7CisKKyAgICAgIGZ1bmN0aW9uIENvbXBv
bmVudEluZm8oY29tcG9uZW50KSB7CisgICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50
OworICAgICAgICB0aGlzLmF0dGFjaGVkVG8gPSBbXTsKKyAgICAgICAgdGhpcy5pbnN0YW5jZXMg
PSB7fTsKKworICAgICAgICB0aGlzLmFkZEluc3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsK
KyAgICAgICAgICB2YXIgaW5zdGFuY2VJbmZvID0gbmV3IEluc3RhbmNlSW5mbyhpbnN0YW5jZSk7
CisgICAgICAgICAgdGhpcy5pbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldID0gaW5zdGFuY2VJ
bmZvOworICAgICAgICAgIHRoaXMuYXR0YWNoZWRUby5wdXNoKGluc3RhbmNlLm5vZGUpOworCisg
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlSW5mbzsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlz
LnJlbW92ZUluc3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKKyAgICAgICAgICBkZWxldGUg
dGhpcy5pbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldOworICAgICAgICAgIHZhciBpbmRleE9m
Tm9kZSA9IHRoaXMuYXR0YWNoZWRUby5pbmRleE9mKGluc3RhbmNlLm5vZGUpOworICAgICAgICAg
IChpbmRleE9mTm9kZSA+IC0xKSAmJiB0aGlzLmF0dGFjaGVkVG8uc3BsaWNlKGluZGV4T2ZOb2Rl
LCAxKTsKKworICAgICAgICAgIGlmICghT2JqZWN0LmtleXModGhpcy5pbnN0YW5jZXMpLmxlbmd0
aCkgeworICAgICAgICAgICAgLy9pZiBJIGhvbGQgbm8gbW9yZSBpbnN0YW5jZXMgcmVtb3ZlIG1l
IGZyb20gcmVnaXN0cnkKKyAgICAgICAgICAgIHJlZ2lzdHJ5LnJlbW92ZUNvbXBvbmVudEluZm8o
dGhpcyk7CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRoaXMuaXNBdHRhY2hl
ZFRvID0gZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgIHJldHVybiB0aGlzLmF0dGFjaGVkVG8u
aW5kZXhPZihub2RlKSA+IC0xOworICAgICAgICB9OworICAgICAgfQorCisgICAgICBmdW5jdGlv
biBJbnN0YW5jZUluZm8oaW5zdGFuY2UpIHsKKyAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3Rh
bmNlOworICAgICAgICB0aGlzLmV2ZW50cyA9IFtdOworCisgICAgICAgIHRoaXMuYWRkQmluZCA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgdGhpcy5ldmVudHMucHVzaChldmVudCk7Cisg
ICAgICAgICAgcmVnaXN0cnkuZXZlbnRzLnB1c2goZXZlbnQpOworICAgICAgICB9OworCisgICAg
ICAgIHRoaXMucmVtb3ZlQmluZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgZm9yICh2
YXIgaSA9IDAsIGU7IGUgPSB0aGlzLmV2ZW50c1tpXTsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
bWF0Y2hFdmVudChlLCBldmVudCkpIHsKKyAgICAgICAgICAgICAgdGhpcy5ldmVudHMuc3BsaWNl
KGksIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgIH0K
KworICAgICAgdGhpcy5hZGRJbnN0YW5jZSA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgICAg
IHZhciBjb21wb25lbnQgPSB0aGlzLmZpbmRDb21wb25lbnRJbmZvKGluc3RhbmNlKTsKKworICAg
ICAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICAgIGNvbXBvbmVudCA9IG5ldyBDb21wb25l
bnRJbmZvKGluc3RhbmNlLmNvbnN0cnVjdG9yKTsKKyAgICAgICAgICB0aGlzLmNvbXBvbmVudHMu
cHVzaChjb21wb25lbnQpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGluc3QgPSBjb21wb25l
bnQuYWRkSW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAgICAgIHRoaXMuYWxsSW5zdGFuY2VzW2lu
c3RhbmNlLmlkZW50aXR5XSA9IGluc3Q7CisKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudDsKKyAg
ICAgIH07CisKKyAgICAgIHRoaXMucmVtb3ZlSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkg
eworICAgICAgICAvL3JlbW92ZSBmcm9tIGNvbXBvbmVudCBpbmZvCisgICAgICAgIHZhciBjb21w
b25lbnRJbmZvID0gdGhpcy5maW5kQ29tcG9uZW50SW5mbyhpbnN0YW5jZSk7CisgICAgICAgIGNv
bXBvbmVudEluZm8gJiYgY29tcG9uZW50SW5mby5yZW1vdmVJbnN0YW5jZShpbnN0YW5jZSk7CisK
KyAgICAgICAgLy9yZW1vdmUgZnJvbSByZWdpc3RyeQorICAgICAgICBkZWxldGUgdGhpcy5hbGxJ
bnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldOworICAgICAgfTsKKworICAgICAgdGhpcy5yZW1v
dmVDb21wb25lbnRJbmZvID0gZnVuY3Rpb24oY29tcG9uZW50SW5mbykgeworICAgICAgICB2YXIg
aW5kZXggPSB0aGlzLmNvbXBvbmVudHMuaW5kZXhPZihjb21wb25lbnRJbmZvKTsKKyAgICAgICAg
KGluZGV4ID4gLTEpICYmIHRoaXMuY29tcG9uZW50cy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAg
fTsKKworICAgICAgdGhpcy5maW5kQ29tcG9uZW50SW5mbyA9IGZ1bmN0aW9uKHdoaWNoKSB7Cisg
ICAgICAgIHZhciBjb21wb25lbnQgPSB3aGljaC5hdHRhY2hUbyA/IHdoaWNoIDogd2hpY2guY29u
c3RydWN0b3I7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGM7IGMgPSB0aGlzLmNvbXBvbmVu
dHNbaV07IGkrKykgeworICAgICAgICAgIGlmIChjLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KSB7
CisgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZmluZEluc3RhbmNlSW5mbyA9
IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmFsbEluc3RhbmNlc1tp
bnN0YW5jZS5pZGVudGl0eV0gfHwgbnVsbDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZ2V0Qm91
bmRFdmVudE5hbWVzID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
ZmluZEluc3RhbmNlSW5mbyhpbnN0YW5jZSkuZXZlbnRzLm1hcChmdW5jdGlvbihldikgeworICAg
ICAgICAgIHJldHVybiBldi50eXBlOworICAgICAgICB9KTsKKyAgICAgIH07CisKKyAgICAgIHRo
aXMuZmluZEluc3RhbmNlSW5mb0J5Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IFtdOworICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmFsbEluc3RhbmNlcykuZm9y
RWFjaChmdW5jdGlvbihrKSB7CisgICAgICAgICAgdmFyIHRoaXNJbnN0YW5jZUluZm8gPSB0aGlz
LmFsbEluc3RhbmNlc1trXTsKKyAgICAgICAgICBpZiAodGhpc0luc3RhbmNlSW5mby5pbnN0YW5j
ZS5ub2RlID09PSBub2RlKSB7CisgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzSW5zdGFuY2VJ
bmZvKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIHRoaXMpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgfTsKKworICAgICAgdGhpcy5vbiA9IGZ1bmN0aW9uKGNvbXBvbmVudE9uKSB7
CisgICAgICAgIHZhciBpbnN0YW5jZSA9IHJlZ2lzdHJ5LmZpbmRJbnN0YW5jZUluZm8odGhpcyks
IGJvdW5kQ2FsbGJhY2s7CisKKyAgICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5k
IGJlbmNobWFya2VkIGZhc3RlcgorICAgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGkg
PSAxOworICAgICAgICB2YXIgb3RoZXJBcmdzID0gbmV3IEFycmF5KGwgLSAxKTsKKyAgICAgICAg
Zm9yICg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICBvdGhlckFyZ3NbaSAtIDFdID0gYXJndW1l
bnRzW2ldOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluc3RhbmNlKSB7CisgICAgICAgICAg
Ym91bmRDYWxsYmFjayA9IGNvbXBvbmVudE9uLmFwcGx5KG51bGwsIG90aGVyQXJncyk7CisgICAg
ICAgICAgaWYgKGJvdW5kQ2FsbGJhY2spIHsKKyAgICAgICAgICAgIG90aGVyQXJnc1tvdGhlckFy
Z3MubGVuZ3RoIC0gMV0gPSBib3VuZENhbGxiYWNrOworICAgICAgICAgIH0KKyAgICAgICAgICB2
YXIgZXZlbnQgPSBwYXJzZUV2ZW50QXJncyh0aGlzLCBvdGhlckFyZ3MpOworICAgICAgICAgIGlu
c3RhbmNlLmFkZEJpbmQoZXZlbnQpOworICAgICAgICB9CisgICAgICB9OworCisgICAgICB0aGlz
Lm9mZiA9IGZ1bmN0aW9uKC8qZWwsIHR5cGUsIGNhbGxiYWNrKi8pIHsKKyAgICAgICAgdmFyIGV2
ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgYXJndW1lbnRzKSwKKyAgICAgICAgICAgIGluc3Rh
bmNlID0gcmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKTsKKworICAgICAgICBpZiAoaW5z
dGFuY2UpIHsKKyAgICAgICAgICBpbnN0YW5jZS5yZW1vdmVCaW5kKGV2ZW50KTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vcmVtb3ZlIGZyb20gZ2xvYmFsIGV2ZW50IHJlZ2lzdHJ5CisgICAgICAg
IGZvciAodmFyIGkgPSAwLCBlOyBlID0gcmVnaXN0cnkuZXZlbnRzW2ldOyBpKyspIHsKKyAgICAg
ICAgICBpZiAobWF0Y2hFdmVudChlLCBldmVudCkpIHsKKyAgICAgICAgICAgIHJlZ2lzdHJ5LmV2
ZW50cy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9OworCisg
ICAgICAvLyBkZWJ1ZyB0b29scyBtYXkgd2FudCB0byBhZGQgYWR2aWNlIHRvIHRyaWdnZXIKKyAg
ICAgIHJlZ2lzdHJ5LnRyaWdnZXIgPSBmdW5jdGlvbigpIHt9OworCisgICAgICB0aGlzLnRlYXJk
b3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJlZ2lzdHJ5LnJlbW92ZUluc3RhbmNlKHRoaXMp
OworICAgICAgfTsKKworICAgICAgdGhpcy53aXRoUmVnaXN0cmF0aW9uID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICByZWdpc3RyeS5hZGRJbnN0YW5jZSh0aGlzKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhp
cy5hcm91bmQoJ29uJywgcmVnaXN0cnkub24pOworICAgICAgICB0aGlzLmFmdGVyKCdvZmYnLCBy
ZWdpc3RyeS5vZmYpOworICAgICAgICAvL2RlYnVnIHRvb2xzIG1heSB3YW50IHRvIGFkZCBhZHZp
Y2UgdG8gdHJpZ2dlcgorICAgICAgICB3aW5kb3cuREVCVUcgJiYgREVCVUcuZW5hYmxlZCAmJiB0
aGlzLmFmdGVyKCd0cmlnZ2VyJywgcmVnaXN0cnkudHJpZ2dlcik7CisgICAgICAgIHRoaXMuYWZ0
ZXIoJ3RlYXJkb3duJywge29iajogcmVnaXN0cnksIGZuTmFtZTogJ3RlYXJkb3duJ30pOworICAg
ICAgfTsKKworICAgIH0KKworICAgIHJldHVybiBuZXcgUmVnaXN0cnk7CisgIH0KKyk7CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi91
dGlscy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGli
L3V0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMTBiNTc0ZjJmN2E2OGRjY2E0NDA0ZDQ2ZDEyMWRmMWI1
Yzg4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21v
ZHVsZXMvZmxpZ2h0L2xpYi91dGlscy5qcwpAQCAtMCwwICsxLDMwNCBAQAorLyogQ29weXJpZ2h0
IDIwMTMgVHdpdHRlciwgSW5jLiBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UuIGh0dHA6
Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgKi8KKworZGVmaW5lKAorCisgIFsnLi9kZWJ1
ZyddLAorCisgIGZ1bmN0aW9uKGRlYnVnKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFy
IERFRkFVTFRfSU5URVJWQUwgPSAxMDA7CisKKyAgICBmdW5jdGlvbiBjYW5Xcml0ZVByb3RlY3Qo
KSB7CisgICAgICB2YXIgd3JpdGVQcm90ZWN0U3VwcG9ydGVkID0gZGVidWcuZW5hYmxlZCAmJiAh
T2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlKCdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InKTsK
KyAgICAgIGlmICh3cml0ZVByb3RlY3RTdXBwb3J0ZWQpIHsKKyAgICAgICAgLy9JRTggZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yIGlzIGJ1aWx0LWluIGJ1dCB0aHJvd3MgZXhlcHRpb24gb24gbm9u
IERPTSBvYmplY3RzCisgICAgICAgIHRyeSB7CisgICAgICAgICAgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihPYmplY3QsICdrZXlzJyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4g
d3JpdGVQcm90ZWN0U3VwcG9ydGVkOworICAgIH0KKworICAgIHZhciB1dGlscyA9IHsKKworICAg
ICAgaXNEb21PYmo6IGZ1bmN0aW9uKG9iaikgeworICAgICAgICByZXR1cm4gISEob2JqLm5vZGVU
eXBlIHx8IChvYmogPT09IHdpbmRvdykpOworICAgICAgfSwKKworICAgICAgdG9BcnJheTogZnVu
Y3Rpb24ob2JqLCBmcm9tKSB7CisgICAgICAgIGZyb20gPSBmcm9tIHx8IDA7CisgICAgICAgIHZh
ciBsZW4gPSBvYmoubGVuZ3RoLCBhcnIgPSBuZXcgQXJyYXkobGVuIC0gZnJvbSk7CisgICAgICAg
IGZvciAodmFyIGkgPSBmcm9tOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICBhcnJbaSAtIGZy
b21dID0gb2JqW2ldOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhcnI7CisgICAgICB9LAor
CisgICAgICAvLyByZXR1cm5zIG5ldyBvYmplY3QgcmVwcmVzZW50aW5nIG11bHRpcGxlIG9iamVj
dHMgbWVyZ2VkIHRvZ2V0aGVyCisgICAgICAvLyBvcHRpb25hbCBmaW5hbCBhcmd1bWVudCBpcyBi
b29sZWFuIHdoaWNoIHNwZWNpZmllcyBpZiBtZXJnZSBpcyByZWN1cnNpdmUKKyAgICAgIC8vIG9y
aWdpbmFsIG9iamVjdHMgYXJlIHVubW9kaWZpZWQKKyAgICAgIC8vCisgICAgICAvLyB1c2FnZToK
KyAgICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OworICAgICAgLy8gICB2YXIgZXh0cmEg
PSB7YjozLCBjOjR9OworICAgICAgLy8gICBtZXJnZShiYXNlLCBleHRyYSk7IC8ve2E6MiwgYjoz
LCBjOjR9CisgICAgICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2fQorICAgICAgLy8KKyAgICAgIC8v
ICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OworICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YjozLCBj
OjR9OworICAgICAgLy8gICB2YXIgZXh0cmFFeHRyYSA9IHthOjQsIGQ6OX07CisgICAgICAvLyAg
IG1lcmdlKGJhc2UsIGV4dHJhLCBleHRyYUV4dHJhKTsgLy97YTo0LCBiOjMsIGM6NC4gZDogOX0K
KyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9CisgICAgICAvLworICAgICAgLy8gICB2YXIg
YmFzZSA9IHthOjIsIGI6e2JiOjQsIGNjOjV9fTsKKyAgICAgIC8vICAgdmFyIGV4dHJhID0ge2E6
NCwgYjp7Y2M6NywgZGQ6MX19OworICAgICAgLy8gICBtZXJnZShiYXNlLCBleHRyYSwgdHJ1ZSk7
IC8ve2E6NCwgYjp7YmI6NCwgY2M6NywgZGQ6MX19CisgICAgICAvLyAgIGJhc2U7IC8ve2E6Miwg
Yjo2fQorCisgICAgICBtZXJnZTogZnVuY3Rpb24oLypvYmoxLCBvYmoyLC4uLi5kZWVwQ29weSov
KSB7CisgICAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBm
YXN0ZXIKKyAgICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoLAorICAgICAgICAgICAgYXJn
cyA9IG5ldyBBcnJheShsICsgMSk7CisKKyAgICAgICAgaWYgKGwgPT09IDApIHsKKyAgICAgICAg
ICByZXR1cm4ge307CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7
IGkrKykgeworICAgICAgICAgIGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldOworICAgICAgICB9
CisKKyAgICAgICAgLy9zdGFydCB3aXRoIGVtcHR5IG9iamVjdCBzbyBhIGNvcHkgaXMgY3JlYXRl
ZAorICAgICAgICBhcmdzWzBdID0ge307CisKKyAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGgg
LSAxXSA9PT0gdHJ1ZSkgeworICAgICAgICAgIC8vanF1ZXJ5IGV4dGVuZCByZXF1aXJlcyBkZWVw
IGNvcHkgYXMgZmlyc3QgYXJnCisgICAgICAgICAgYXJncy5wb3AoKTsKKyAgICAgICAgICBhcmdz
LnVuc2hpZnQodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJC5leHRlbmQuYXBw
bHkodW5kZWZpbmVkLCBhcmdzKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIHVwZGF0ZXMgYmFzZSBp
biBwbGFjZSBieSBjb3B5aW5nIHByb3BlcnRpZXMgb2YgZXh0cmEgdG8gaXQKKyAgICAgIC8vIG9w
dGlvbmFsbHkgY2xvYmJlciBwcm90ZWN0ZWQKKyAgICAgIC8vIHVzYWdlOgorICAgICAgLy8gICB2
YXIgYmFzZSA9IHthOjIsIGI6Nn07CisgICAgICAvLyAgIHZhciBleHRyYSA9IHtjOjR9OworICAg
ICAgLy8gICBwdXNoKGJhc2UsIGV4dHJhKTsgLy97YToyLCBiOjYsIGM6NH0KKyAgICAgIC8vICAg
YmFzZTsgLy97YToyLCBiOjYsIGM6NH0KKyAgICAgIC8vCisgICAgICAvLyAgIHZhciBiYXNlID0g
e2E6MiwgYjo2fTsKKyAgICAgIC8vICAgdmFyIGV4dHJhID0ge2I6IDQgYzo0fTsKKyAgICAgIC8v
ICAgcHVzaChiYXNlLCBleHRyYSwgdHJ1ZSk7IC8vRXJyb3IgKCJ1dGlscy5wdXNoIGF0dGVtcHRl
ZCB0byBvdmVyd3JpdGUgJ2InIHdoaWxlIHJ1bm5pbmcgaW4gcHJvdGVjdGVkIG1vZGUiKQorICAg
ICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Nn0KKyAgICAgIC8vCisgICAgICAvLyBvYmplY3RzIHdp
dGggdGhlIHNhbWUga2V5IHdpbGwgbWVyZ2UgcmVjdXJzaXZlbHkgd2hlbiBwcm90ZWN0IGlzIGZh
bHNlCisgICAgICAvLyBlZzoKKyAgICAgIC8vIHZhciBiYXNlID0ge2E6MTYsIGI6e2JiOjQsIGNj
OjEwfX07CisgICAgICAvLyB2YXIgZXh0cmEgPSB7Yjp7Y2M6MjUsIGRkOjE5fSwgYzo1fTsKKyAg
ICAgIC8vIHB1c2goYmFzZSwgZXh0cmEpOyAvL3thOjE2LCB7YmI6NCwgY2M6MjUsIGRkOjE5fSwg
Yzo1fQorICAgICAgLy8KKyAgICAgIHB1c2g6IGZ1bmN0aW9uKGJhc2UsIGV4dHJhLCBwcm90ZWN0
KSB7CisgICAgICAgIGlmIChiYXNlKSB7CisgICAgICAgICAgT2JqZWN0LmtleXMoZXh0cmEgfHwg
e30pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAgICAgICBpZiAoYmFzZVtrZXldICYm
IHByb3RlY3QpIHsKKyAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1dGlscy5wdXNoIGF0
dGVtcHRlZCB0byBvdmVyd3JpdGUgIicgKyBrZXkgKyAnIiB3aGlsZSBydW5uaW5nIGluIHByb3Rl
Y3RlZCBtb2RlJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgYmFz
ZVtrZXldID09ICdvYmplY3QnICYmIHR5cGVvZiBleHRyYVtrZXldID09ICdvYmplY3QnKSB7Cisg
ICAgICAgICAgICAgIC8vIHJlY3Vyc2UKKyAgICAgICAgICAgICAgdGhpcy5wdXNoKGJhc2Vba2V5
XSwgZXh0cmFba2V5XSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvLyBu
byBwcm90ZWN0LCBzbyBleHRyYSB3aW5zCisgICAgICAgICAgICAgIGJhc2Vba2V5XSA9IGV4dHJh
W2tleV07CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gYmFzZTsKKyAgICAgIH0sCisKKyAgICAgIC8vIElmIG9iai5rZXkgcG9p
bnRzIHRvIGFuIGVudW1lcmFibGUgcHJvcGVydHksIHJldHVybiBpdHMgdmFsdWUKKyAgICAgIC8v
IElmIG9iai5rZXkgcG9pbnRzIHRvIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHksIHJldHVybiB1
bmRlZmluZWQKKyAgICAgIGdldEVudW1lcmFibGVQcm9wZXJ0eTogZnVuY3Rpb24ob2JqLCBrZXkp
IHsKKyAgICAgICAgcmV0dXJuIG9iai5wcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpID8gb2JqW2tl
eV0gOiB1bmRlZmluZWQ7CisgICAgICB9LAorCisgICAgICAvLyBidWlsZCBhIGZ1bmN0aW9uIGZy
b20gb3RoZXIgZnVuY3Rpb24ocykKKyAgICAgIC8vIHV0aWxzLmNvbXBvc2UoYSxiLGMpIC0+IGEo
YihjKCkpKTsKKyAgICAgIC8vIGltcGxlbWVudGF0aW9uIGxpZnRlZCBmcm9tIHVuZGVyc2NvcmUu
anMgKGMpIDIwMDktMjAxMiBKZXJlbXkgQXNoa2VuYXMKKyAgICAgIGNvbXBvc2U6IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgZnVuY3MgPSBhcmd1bWVudHM7CisKKyAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKCkgeworICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOworCisgICAgICAgICAg
Zm9yICh2YXIgaSA9IGZ1bmNzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAg
ICBhcmdzID0gW2Z1bmNzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpXTsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgICByZXR1cm4gYXJnc1swXTsKKyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAgICAgIC8v
IENhbiBvbmx5IHVuaXF1ZSBhcnJheXMgb2YgaG9tb2dlbmVvdXMgcHJpbWl0aXZlcywgZS5nLiBh
biBhcnJheSBvZiBvbmx5IHN0cmluZ3MsIGFuIGFycmF5IG9mIG9ubHkgYm9vbGVhbnMsIG9yIGFu
IGFycmF5IG9mIG9ubHkgbnVtZXJpY3MKKyAgICAgIHVuaXF1ZUFycmF5OiBmdW5jdGlvbihhcnJh
eSkgeworICAgICAgICB2YXIgdSA9IHt9LCBhID0gW107CisKKyAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICBpZiAodS5oYXNP
d25Qcm9wZXJ0eShhcnJheVtpXSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
IH0KKworICAgICAgICAgIGEucHVzaChhcnJheVtpXSk7CisgICAgICAgICAgdVthcnJheVtpXV0g
PSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGE7CisgICAgICB9LAorCisgICAgICBk
ZWJvdW5jZTogZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7CisgICAgICAgIGlmICh0
eXBlb2Ygd2FpdCAhPSAnbnVtYmVyJykgeworICAgICAgICAgIHdhaXQgPSBERUZBVUxUX0lOVEVS
VkFMOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRpbWVvdXQsIHJlc3VsdDsKKworICAgICAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdz
ID0gYXJndW1lbnRzOworICAgICAgICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkgeworICAg
ICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAgICAg
ICAgfQorICAgICAgICAgIH07CisgICAgICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYg
IXRpbWVvdXQ7CisKKyAgICAgICAgICB0aW1lb3V0ICYmIGNsZWFyVGltZW91dCh0aW1lb3V0KTsK
KyAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CisKKyAgICAgICAg
ICBpZiAoY2FsbE5vdykgeworICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0
LCBhcmdzKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9OworICAgICAgfSwKKworICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHsK
KyAgICAgICAgaWYgKHR5cGVvZiB3YWl0ICE9ICdudW1iZXInKSB7CisgICAgICAgICAgd2FpdCA9
IERFRkFVTFRfSU5URVJWQUw7CisgICAgICAgIH0KKworICAgICAgICB2YXIgY29udGV4dCwgYXJn
cywgdGltZW91dCwgdGhyb3R0bGluZywgbW9yZSwgcmVzdWx0OworICAgICAgICB2YXIgd2hlbkRv
bmUgPSB0aGlzLmRlYm91bmNlKGZ1bmN0aW9uKCkgeworICAgICAgICAgIG1vcmUgPSB0aHJvdHRs
aW5nID0gZmFsc2U7CisgICAgICAgIH0sIHdhaXQpOworCisgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICBjb250ZXh0ID0gdGhpczsgYXJncyA9IGFyZ3VtZW50czsKKyAgICAg
ICAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRpbWVvdXQgPSBudWxs
OworICAgICAgICAgICAgaWYgKG1vcmUpIHsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5h
cHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoZW5Eb25l
KCk7CisgICAgICAgICAgfTsKKworICAgICAgICAgIGlmICghdGltZW91dCkgeworICAgICAgICAg
ICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpOworICAgICAgICAgIH0KKworICAg
ICAgICAgIGlmICh0aHJvdHRsaW5nKSB7CisgICAgICAgICAgICBtb3JlID0gdHJ1ZTsKKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3R0bGluZyA9IHRydWU7CisgICAgICAgICAg
ICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAgICAgIH0KKworICAg
ICAgICAgIHdoZW5Eb25lKCk7CisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsK
KyAgICAgIH0sCisKKyAgICAgIGNvdW50VGhlbjogZnVuY3Rpb24obnVtLCBiYXNlKSB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAoIS0tbnVtKSB7IHJldHVybiBi
YXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KKyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAg
ICAgIGRlbGVnYXRlOiBmdW5jdGlvbihydWxlcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24o
ZSwgZGF0YSkgeworICAgICAgICAgIHZhciB0YXJnZXQgPSAkKGUudGFyZ2V0KSwgcGFyZW50Owor
CisgICAgICAgICAgT2JqZWN0LmtleXMocnVsZXMpLmZvckVhY2goZnVuY3Rpb24oc2VsZWN0b3Ip
IHsKKyAgICAgICAgICAgIGlmICghZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICYmIChwYXJlbnQg
PSB0YXJnZXQuY2xvc2VzdChzZWxlY3RvcikpLmxlbmd0aCkgeworICAgICAgICAgICAgICBkYXRh
ID0gZGF0YSB8fCB7fTsKKyAgICAgICAgICAgICAgZGF0YS5lbCA9IHBhcmVudFswXTsKKyAgICAg
ICAgICAgICAgcmV0dXJuIHJ1bGVzW3NlbGVjdG9yXS5hcHBseSh0aGlzLCBbZSwgZGF0YV0pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHRoaXMpOworICAgICAgICB9OworICAgICAgfSwK
KworICAgICAgLy8gZW5zdXJlcyB0aGF0IGEgZnVuY3Rpb24gd2lsbCBvbmx5IGJlIGNhbGxlZCBv
bmNlLgorICAgICAgLy8gdXNhZ2U6CisgICAgICAvLyB3aWxsIG9ubHkgY3JlYXRlIHRoZSBhcHBs
aWNhdGlvbiBvbmNlCisgICAgICAvLyAgIHZhciBpbml0aWFsaXplID0gdXRpbHMub25jZShjcmVh
dGVBcHBsaWNhdGlvbikKKyAgICAgIC8vICAgICBpbml0aWFsaXplKCk7CisgICAgICAvLyAgICAg
aW5pdGlhbGl6ZSgpOworICAgICAgLy8KKyAgICAgIC8vIHdpbGwgb25seSBkZWxldGUgYSByZWNv
cmQgb25jZQorICAgICAgLy8gICB2YXIgbXlIYW5sZGVyID0gZnVuY3Rpb24gKCkgeworICAgICAg
Ly8gICAgICQuYWpheCh7dHlwZTogJ0RFTEVURScsIHVybDogJ3NvbWV1cmwuY29tJywgZGF0YTog
e2lkOiAxfX0pOworICAgICAgLy8gICB9OworICAgICAgLy8gICB0aGlzLm9uKCdjbGljaycsIHV0
aWxzLm9uY2UobXlIYW5kbGVyKSk7CisgICAgICAvLworICAgICAgb25jZTogZnVuY3Rpb24oZnVu
YykgeworICAgICAgICB2YXIgcmFuLCByZXN1bHQ7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgICAgICAgIGlmIChyYW4pIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgcmFuID0gdHJ1ZTsKKyAgICAgICAgICByZXN1bHQgPSBm
dW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9OworICAgICAgfSwKKworICAgICAgcHJvcGVydHlXcml0YWJpbGl0eTogZnVuY3Rp
b24ob2JqLCBwcm9wLCB3cml0YWJsZSkgeworICAgICAgICBpZiAoY2FuV3JpdGVQcm90ZWN0KCkg
JiYgb2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7CisgICAgICAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KG9iaiwgcHJvcCwgeyB3cml0YWJsZTogd3JpdGFibGUgfSk7CisgICAgICAgIH0KKyAg
ICAgIH0sCisKKyAgICAgIC8vIFByb3BlcnR5IGxvY2tpbmcvdW5sb2NraW5nCisgICAgICBtdXRh
dGVQcm9wZXJ0eTogZnVuY3Rpb24ob2JqLCBwcm9wLCBvcCkgeworICAgICAgICB2YXIgd3JpdGFi
bGU7CisKKyAgICAgICAgaWYgKCFjYW5Xcml0ZVByb3RlY3QoKSB8fCAhb2JqLmhhc093blByb3Bl
cnR5KHByb3ApKSB7CisgICAgICAgICAgb3AuY2FsbChvYmopOworICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHdyaXRhYmxlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihvYmosIHByb3ApLndyaXRhYmxlOworCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShvYmosIHByb3AsIHsgd3JpdGFibGU6IHRydWUgfSk7CisgICAgICAgIG9wLmNhbGwob2Jq
KTsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB3cml0YWJsZTog
d3JpdGFibGUgfSk7CisKKyAgICAgIH0KKworICAgIH07CisKKyAgICByZXR1cm4gdXRpbHM7Cisg
IH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMv
anF1ZXJ5L1JFQURNRS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9q
cXVlcnkvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhMzE3NGE3NzgxZTA4OTI4ZDM5MTZlNTY3YWJm
ZWJkNmU5NTAwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvanF1ZXJ5L1JFQURNRS5tZApAQCAtMCwwICsxLDY1IEBACisjIGpRdWVyeQor
Cis+IGpRdWVyeSBpcyBhIGZhc3QsIHNtYWxsLCBhbmQgZmVhdHVyZS1yaWNoIEphdmFTY3JpcHQg
bGlicmFyeS4KKworRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQgc3RhcnRlZCBhbmQgaG93
IHRvIHVzZSBqUXVlcnksIHBsZWFzZSBzZWUgW2pRdWVyeSdzIGRvY3VtZW50YXRpb25dKGh0dHA6
Ly9hcGkuanF1ZXJ5LmNvbS8pLgorRm9yIHNvdXJjZSBmaWxlcyBhbmQgaXNzdWVzLCBwbGVhc2Ug
dmlzaXQgdGhlIFtqUXVlcnkgcmVwb10oaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkp
LgorCisjIyBJbmNsdWRpbmcgalF1ZXJ5CisKK0JlbG93IGFyZSBzb21lIG9mIHRoZSBtb3N0IGNv
bW1vbiB3YXlzIHRvIGluY2x1ZGUgalF1ZXJ5LgorCisjIyMgQnJvd3NlcgorCisjIyMjIFNjcmlw
dCB0YWcKKworYGBgaHRtbAorPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2px
dWVyeS0yLjIuMC5taW4uanMiPjwvc2NyaXB0PgorYGBgCisKKyMjIyMgQmFiZWwKKworW0JhYmVs
XShodHRwOi8vYmFiZWxqcy5pby8pIGlzIGEgbmV4dCBnZW5lcmF0aW9uIEphdmFTY3JpcHQgY29t
cGlsZXIuIE9uZSBvZiB0aGUgZmVhdHVyZXMgaXMgdGhlIGFiaWxpdHkgdG8gdXNlIEVTNi9FUzIw
MTUgbW9kdWxlcyBub3csIGV2ZW4gdGhvdWdoIGJyb3dzZXJzIGRvIG5vdCB5ZXQgc3VwcG9ydCB0
aGlzIGZlYXR1cmUgbmF0aXZlbHkuCisKK2BgYGpzCitpbXBvcnQgJCBmcm9tICJqcXVlcnkiOwor
YGBgCisKKyMjIyMgQnJvd3NlcmlmeS9XZWJwYWNrCisKK1RoZXJlIGFyZSBzZXZlcmFsIHdheXMg
dG8gdXNlIFtCcm93c2VyaWZ5XShodHRwOi8vYnJvd3NlcmlmeS5vcmcvKSBhbmQgW1dlYnBhY2td
KGh0dHBzOi8vd2VicGFjay5naXRodWIuaW8vKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNp
bmcgdGhlc2UgdG9vbHMsIHBsZWFzZSByZWZlciB0byB0aGUgY29ycmVzcG9uZGluZyBwcm9qZWN0
J3MgZG9jdW1lbnRpb24uIEluIHRoZSBzY3JpcHQsIGluY2x1ZGluZyBqUXVlcnkgd2lsbCB1c3Vh
bGx5IGxvb2sgbGlrZSB0aGlzLi4uCisKK2BgYGpzCit2YXIgJCA9IHJlcXVpcmUoImpxdWVyeSIp
OworYGBgCisKKyMjIyMgQU1EIChBc3luY2hyb25vdXMgTW9kdWxlIERlZmluaXRpb24pCisKK0FN
RCBpcyBhIG1vZHVsZSBmb3JtYXQgYnVpbHQgZm9yIHRoZSBicm93c2VyLiBGb3IgbW9yZSBpbmZv
cm1hdGlvbiwgd2UgcmVjb21tZW5kIFtyZXF1aXJlLmpzJyBkb2N1bWVudGF0aW9uXShodHRwOi8v
cmVxdWlyZWpzLm9yZy9kb2NzL3doeWFtZC5odG1sKS4KKworYGBganMKK2RlZmluZShbImpxdWVy
eSJdLCBmdW5jdGlvbigkKSB7CisKK30pOworYGBgCisKKyMjIyBOb2RlCisKK1RvIGluY2x1ZGUg
alF1ZXJ5IGluIFtOb2RlXShub2RlanMub3JnKSwgZmlyc3QgaW5zdGFsbCB3aXRoIG5wbS4KKwor
YGBgc2gKK25wbSBpbnN0YWxsIGpxdWVyeQorYGBgCisKK0ZvciBqUXVlcnkgdG8gd29yayBpbiBO
b2RlLCBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQgaXMgcmVxdWlyZWQuIFNpbmNlIG5vIHN1Y2gg
d2luZG93IGV4aXN0cyBuYXRpdmVseSBpbiBOb2RlLCBvbmUgY2FuIGJlIG1vY2tlZCBieSB0b29s
cyBzdWNoIGFzIFtqc2RvbV0oaHR0cHM6Ly9naXRodWIuY29tL3RtcHZhci9qc2RvbSkuIFRoaXMg
Y2FuIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKworYGBganMKK3JlcXVpcmUoImpz
ZG9tIikuZW52KCIiLCBmdW5jdGlvbihlcnIsIHdpbmRvdykgeworCWlmIChlcnIpIHsKKwkJY29u
c29sZS5lcnJvcihlcnIpOworCQlyZXR1cm47CisJfQorCisJdmFyICQgPSByZXF1aXJlKCJqcXVl
cnkiKSh3aW5kb3cpOworfSk7CitgYGAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1
OGE1YTk1MGRjZGNmM2NhYWYwNGZjOWY2YjFkY2NkNTMxNmE5ZmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5
LmpzCkBAIC0wLDAgKzEsOTgxNCBAQAorLyohCisgKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5
IHYyLjIuNAorICogaHR0cDovL2pxdWVyeS5jb20vCisgKgorICogSW5jbHVkZXMgU2l6emxlLmpz
CisgKiBodHRwOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRh
dGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxp
Y2Vuc2UKKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiAyMDE2LTA1
LTIwVDE3OjIzWgorICovCisKKyhmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkgeworCisgICAg
aWYgKCB0eXBlb2YgbW9kdWxlID09PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMg
PT09ICJvYmplY3QiICkgeworICAgICAgICAvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxp
a2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgCisgICAgICAgIC8vIGlzIHBy
ZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuCisgICAgICAgIC8vIEZv
ciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1l
bnRgCisgICAgICAgIC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1v
ZHVsZS5leHBvcnRzLgorICAgICAgICAvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0
aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLgorICAgICAgICAvLyBlLmcuIHZhciBqUXVl
cnkgPSByZXF1aXJlKCJqcXVlcnkiKSh3aW5kb3cpOworICAgICAgICAvLyBTZWUgdGlja2V0ICMx
NDU0OSBmb3IgbW9yZSBpbmZvLgorICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1
bWVudCA/CisgICAgICAgICAgICBmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6CisgICAgICAgICAg
ICBmdW5jdGlvbiggdyApIHsKKyAgICAgICAgICAgICAgICBpZiAoICF3LmRvY3VtZW50ICkgewor
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICJqUXVlcnkgcmVxdWlyZXMgYSB3
aW5kb3cgd2l0aCBhIGRvY3VtZW50IiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFjdG9yeSggdyApOworICAgICAgICAgICAgfTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBmYWN0b3J5KCBnbG9iYWwgKTsKKyAgICB9CisKKy8vIFBhc3MgdGhpcyBpZiB3aW5k
b3cgaXMgbm90IGRlZmluZWQgeWV0Cit9KHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8g
d2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7CisKKy8vIFN1cHBv
cnQ6IEZpcmVmb3ggMTgrCisvLyBDYW4ndCBiZSBpbiBzdHJpY3QgbW9kZSwgc2V2ZXJhbCBsaWJz
IGluY2x1ZGluZyBBU1AuTkVUIHRyYWNlCisvLyB0aGUgc3RhY2sgdmlhIGFyZ3VtZW50cy5jYWxs
ZXIuY2FsbGVlIGFuZCBGaXJlZm94IGRpZXMgaWYKKy8vIHlvdSB0cnkgdG8gdHJhY2UgdGhyb3Vn
aCAidXNlIHN0cmljdCIgY2FsbCBjaGFpbnMuICgjMTMzMzUpCisvLyJ1c2Ugc3RyaWN0IjsKK3Zh
ciBhcnIgPSBbXTsKKwordmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OworCit2YXIgc2xp
Y2UgPSBhcnIuc2xpY2U7CisKK3ZhciBjb25jYXQgPSBhcnIuY29uY2F0OworCit2YXIgcHVzaCA9
IGFyci5wdXNoOworCit2YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mOworCit2YXIgY2xhc3MydHlw
ZSA9IHt9OworCit2YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nOworCit2YXIgaGFz
T3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTsKKwordmFyIHN1cHBvcnQgPSB7fTsKKwor
CisKK3ZhcgorICAgIHZlcnNpb24gPSAiMi4yLjQiLAorCisgICAgLy8gRGVmaW5lIGEgbG9jYWwg
Y29weSBvZiBqUXVlcnkKKyAgICBqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQg
KSB7CisKKyAgICAgICAgLy8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUg
aW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCisgICAgICAgIC8vIE5lZWQgaW5pdCBpZiBqUXVl
cnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVk
ZWQpCisgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0
ICk7CisgICAgfSwKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xCisgICAgLy8gTWFrZSBz
dXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQCisgICAgcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xb
XHNcdUZFRkZceEEwXSskL2csCisKKyAgICAvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNh
bWVsaXppbmcKKyAgICBybXNQcmVmaXggPSAvXi1tcy0vLAorICAgIHJkYXNoQWxwaGEgPSAvLShb
XGRhLXpdKS9naSwKKworICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFj
ayB0byByZXBsYWNlKCkKKyAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkg
eworICAgICAgICByZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7CisgICAgfTsKKworalF1ZXJ5
LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsKKworICAgIC8vIFRoZSBjdXJyZW50IHZlcnNpb24g
b2YgalF1ZXJ5IGJlaW5nIHVzZWQKKyAgICBqcXVlcnk6IHZlcnNpb24sCisKKyAgICBjb25zdHJ1
Y3RvcjogalF1ZXJ5LAorCisgICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxlY3RvcgorICAg
IHNlbGVjdG9yOiAiIiwKKworICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBv
YmplY3QgaXMgMAorICAgIGxlbmd0aDogMCwKKworICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApOworICAgIH0sCisKKyAgICAvLyBHZXQg
dGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCisgICAgLy8gR2V0
IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkKKyAgICBnZXQ6
IGZ1bmN0aW9uKCBudW0gKSB7CisgICAgICAgIHJldHVybiBudW0gIT0gbnVsbCA/CisKKyAgICAg
ICAgICAgIC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXQKKyAgICAg
ICAgICAgICggbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0g
XSApIDoKKworICAgICAgICAgICAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVh
biBhcnJheQorICAgICAgICAgICAgc2xpY2UuY2FsbCggdGhpcyApOworICAgIH0sCisKKyAgICAv
LyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrCisg
ICAgLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpCisgICAgcHVzaFN0
YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7CisKKyAgICAgICAgLy8gQnVpbGQgYSBuZXcgalF1ZXJ5
IG1hdGNoZWQgZWxlbWVudCBzZXQKKyAgICAgICAgdmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhp
cy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApOworCisgICAgICAgIC8vIEFkZCB0aGUgb2xkIG9iamVj
dCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCisgICAgICAgIHJldC5wcmV2T2JqZWN0
ID0gdGhpczsKKyAgICAgICAgcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7CisKKyAgICAgICAg
Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKKyAgICAgICAgcmV0dXJuIHJl
dDsKKyAgICB9LAorCisgICAgLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50
IGluIHRoZSBtYXRjaGVkIHNldC4KKyAgICBlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7Cisg
ICAgICAgIHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTsKKyAgICB9LAorCisg
ICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgICAg
ICByZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOworICAgICAgICB9ICkgKTsK
KyAgICB9LAorCisgICAgc2xpY2U6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5w
dXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApOworICAgIH0sCisKKyAg
ICBmaXJzdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVxKCAwICk7CisgICAg
fSwKKworICAgIGxhc3Q6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5lcSggLTEg
KTsKKyAgICB9LAorCisgICAgZXE6IGZ1bmN0aW9uKCBpICkgeworICAgICAgICB2YXIgbGVuID0g
dGhpcy5sZW5ndGgsCisgICAgICAgICAgICBqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApOwor
ICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlz
WyBqIF0gXSA6IFtdICk7CisgICAgfSwKKworICAgIGVuZDogZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpOworICAgIH0sCisK
KyAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFy
cmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuCisgICAgcHVzaDogcHVzaCwK
KyAgICBzb3J0OiBhcnIuc29ydCwKKyAgICBzcGxpY2U6IGFyci5zcGxpY2UKK307CisKK2pRdWVy
eS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG9wdGlv
bnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLAorICAgICAgICB0YXJnZXQg
PSBhcmd1bWVudHNbIDAgXSB8fCB7fSwKKyAgICAgICAgaSA9IDEsCisgICAgICAgIGxlbmd0aCA9
IGFyZ3VtZW50cy5sZW5ndGgsCisgICAgICAgIGRlZXAgPSBmYWxzZTsKKworICAgIC8vIEhhbmRs
ZSBhIGRlZXAgY29weSBzaXR1YXRpb24KKyAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29s
ZWFuIiApIHsKKyAgICAgICAgZGVlcCA9IHRhcmdldDsKKworICAgICAgICAvLyBTa2lwIHRoZSBi
b29sZWFuIGFuZCB0aGUgdGFyZ2V0CisgICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8
IHt9OworICAgICAgICBpKys7CisgICAgfQorCisgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJn
ZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCisgICAg
aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIHRh
cmdldCApICkgeworICAgICAgICB0YXJnZXQgPSB7fTsKKyAgICB9CisKKyAgICAvLyBFeHRlbmQg
alF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKKyAgICBpZiAoIGkg
PT09IGxlbmd0aCApIHsKKyAgICAgICAgdGFyZ2V0ID0gdGhpczsKKyAgICAgICAgaS0tOworICAg
IH0KKworICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworCisgICAgICAgIC8vIE9ubHkg
ZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKKyAgICAgICAgaWYgKCAoIG9wdGlv
bnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7CisKKyAgICAgICAgICAgIC8vIEV4dGVu
ZCB0aGUgYmFzZSBvYmplY3QKKyAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsK
KyAgICAgICAgICAgICAgICBzcmMgPSB0YXJnZXRbIG5hbWUgXTsKKyAgICAgICAgICAgICAgICBj
b3B5ID0gb3B0aW9uc1sgbmFtZSBdOworCisgICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZl
ci1lbmRpbmcgbG9vcAorICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkgewor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBh
cnJheXMKKyAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1Bs
YWluT2JqZWN0KCBjb3B5ICkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCBjb3B5SXNBcnJheSA9
IGpRdWVyeS5pc0FycmF5KCBjb3B5ICkgKSApICkgeworCisgICAgICAgICAgICAgICAgICAgIGlm
ICggY29weUlzQXJyYXkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5SXNBcnJheSA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5Lmlz
QXJyYXkoIHNyYyApID8gc3JjIDogW107CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2Jq
ZWN0KCBzcmMgKSA/IHNyYyA6IHt9OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCisg
ICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwg
Y2xvbmUsIGNvcHkgKTsKKworICAgICAgICAgICAgICAgIC8vIERvbid0IGJyaW5nIGluIHVuZGVm
aW5lZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBS
ZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdAorICAgIHJldHVybiB0YXJnZXQ7Cit9OworCitqUXVl
cnkuZXh0ZW5kKCB7CisKKyAgICAvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24g
dGhlIHBhZ2UKKyAgICBleHBhbmRvOiAialF1ZXJ5IiArICggdmVyc2lvbiArIE1hdGgucmFuZG9t
KCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKKworICAgIC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVh
ZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlCisgICAgaXNSZWFkeTogdHJ1ZSwKKworICAgIGVy
cm9yOiBmdW5jdGlvbiggbXNnICkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIG1zZyApOwor
ICAgIH0sCisKKyAgICBub29wOiBmdW5jdGlvbigpIHt9LAorCisgICAgaXNGdW5jdGlvbjogZnVu
Y3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gImZ1
bmN0aW9uIjsKKyAgICB9LAorCisgICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSwKKworICAgIGlz
V2luZG93OiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgJiYg
b2JqID09PSBvYmoud2luZG93OworICAgIH0sCisKKyAgICBpc051bWVyaWM6IGZ1bmN0aW9uKCBv
YmogKSB7CisKKyAgICAgICAgLy8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBw
b3NpdGl2ZXMgKG51bGx8dHJ1ZXxmYWxzZXwiIikKKyAgICAgICAgLy8gLi4uYnV0IG1pc2ludGVy
cHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAo
IjB4Li4uIikKKyAgICAgICAgLy8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFO
CisgICAgICAgIC8vIGFkZGluZyAxIGNvcnJlY3RzIGxvc3Mgb2YgcHJlY2lzaW9uIGZyb20gcGFy
c2VGbG9hdCAoIzE1MTAwKQorICAgICAgICB2YXIgcmVhbFN0cmluZ09iaiA9IG9iaiAmJiBvYmou
dG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuICFqUXVlcnkuaXNBcnJheSggb2JqICkgJiYgKCBy
ZWFsU3RyaW5nT2JqIC0gcGFyc2VGbG9hdCggcmVhbFN0cmluZ09iaiApICsgMSApID49IDA7Cisg
ICAgfSwKKworICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgIHZh
ciBrZXk7CisKKyAgICAgICAgLy8gTm90IHBsYWluIG9iamVjdHM6CisgICAgICAgIC8vIC0gQW55
IG9iamVjdCBvciB2YWx1ZSB3aG9zZSBpbnRlcm5hbCBbW0NsYXNzXV0gcHJvcGVydHkgaXMgbm90
ICJbb2JqZWN0IE9iamVjdF0iCisgICAgICAgIC8vIC0gRE9NIG5vZGVzCisgICAgICAgIC8vIC0g
d2luZG93CisgICAgICAgIGlmICggalF1ZXJ5LnR5cGUoIG9iaiApICE9PSAib2JqZWN0IiB8fCBv
Ymoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdCBvd24gY29uc3RydWN0b3Ig
cHJvcGVydHkgbXVzdCBiZSBPYmplY3QKKyAgICAgICAgaWYgKCBvYmouY29uc3RydWN0b3IgJiYK
KyAgICAgICAgICAgICAgICAhaGFzT3duLmNhbGwoIG9iaiwgImNvbnN0cnVjdG9yIiApICYmCisg
ICAgICAgICAgICAgICAgIWhhc093bi5jYWxsKCBvYmouY29uc3RydWN0b3IucHJvdG90eXBlIHx8
IHt9LCAiaXNQcm90b3R5cGVPZiIgKSApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0
bHksIHNvIHRvIHNwZWVkIHVwLAorICAgICAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4g
YWxsIHByb3BlcnRpZXMgYXJlIG93bgorICAgICAgICBmb3IgKCBrZXkgaW4gb2JqICkge30KKwor
ICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwoIG9iaiwga2V5
ICk7CisgICAgfSwKKworICAgIGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAg
ICAgIHZhciBuYW1lOworICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAor
CisgICAgdHlwZTogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgaWYgKCBvYmogPT0gbnVsbCAp
IHsKKyAgICAgICAgICAgIHJldHVybiBvYmogKyAiIjsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFN1cHBvcnQ6IEFuZHJvaWQ8NC4wLCBpT1M8NiAoZnVuY3Rpb25pc2ggUmVnRXhwKQorICAgICAg
ICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG9iaiA9PT0gImZ1bmN0
aW9uIiA/CisgICAgICAgICAgICBjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8
ICJvYmplY3QiIDoKKyAgICAgICAgICAgIHR5cGVvZiBvYmo7CisgICAgfSwKKworICAgIC8vIEV2
YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CisgICAgZ2xvYmFsRXZhbDogZnVu
Y3Rpb24oIGNvZGUgKSB7CisgICAgICAgIHZhciBzY3JpcHQsCisgICAgICAgICAgICBpbmRpcmVj
dCA9IGV2YWw7CisKKyAgICAgICAgY29kZSA9IGpRdWVyeS50cmltKCBjb2RlICk7CisKKyAgICAg
ICAgaWYgKCBjb2RlICkgeworCisgICAgICAgICAgICAvLyBJZiB0aGUgY29kZSBpbmNsdWRlcyBh
IHZhbGlkLCBwcm9sb2d1ZSBwb3NpdGlvbgorICAgICAgICAgICAgLy8gc3RyaWN0IG1vZGUgcHJh
Z21hLCBleGVjdXRlIGNvZGUgYnkgaW5qZWN0aW5nIGEKKyAgICAgICAgICAgIC8vIHNjcmlwdCB0
YWcgaW50byB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICBpZiAoIGNvZGUuaW5kZXhPZiggInVz
ZSBzdHJpY3QiICkgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCggInNjcmlwdCIgKTsKKyAgICAgICAgICAgICAgICBzY3JpcHQudGV4dCA9
IGNvZGU7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0
ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7CisgICAgICAgICAgICB9IGVsc2Ug
eworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhdm9pZCB0aGUgRE9NIG5vZGUgY3Jl
YXRpb24sIGluc2VydGlvbgorICAgICAgICAgICAgICAgIC8vIGFuZCByZW1vdmFsIGJ5IHVzaW5n
IGFuIGluZGlyZWN0IGdsb2JhbCBldmFsCisKKyAgICAgICAgICAgICAgICBpbmRpcmVjdCggY29k
ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIC8vIENvbnZlcnQg
ZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKKyAg
ICAvLyBTdXBwb3J0OiBJRTktMTErCisgICAgLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRo
ZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKQorICAgIGNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmlu
ZyApIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsICJtcy0iICku
cmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApOworICAgIH0sCisKKyAgICBub2RlTmFt
ZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1l
ICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpOwor
ICAgIH0sCisKKyAgICBlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHsKKyAgICAgICAg
dmFyIGxlbmd0aCwgaSA9IDA7CisKKyAgICAgICAgaWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7
CisgICAgICAgICAgICBsZW5ndGggPSBvYmoubGVuZ3RoOworICAgICAgICAgICAgZm9yICggOyBp
IDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5jYWxsKCBv
YmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGZvciAoIGkgaW4gb2JqICkgeworICAgICAgICAgICAgICAgIGlmICgg
Y2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkgeworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gb2JqOworICAgIH0sCisKKyAgICAvLyBTdXBw
b3J0OiBBbmRyb2lkPDQuMQorICAgIHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICBy
ZXR1cm4gdGV4dCA9PSBudWxsID8KKyAgICAgICAgICAgICIiIDoKKyAgICAgICAgICAgICggdGV4
dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7CisgICAgfSwKKworICAgIC8vIHJlc3VsdHMg
aXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKKyAgICBtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIs
IHJlc3VsdHMgKSB7CisgICAgICAgIHZhciByZXQgPSByZXN1bHRzIHx8IFtdOworCisgICAgICAg
IGlmICggYXJyICE9IG51bGwgKSB7CisgICAgICAgICAgICBpZiAoIGlzQXJyYXlMaWtlKCBPYmpl
Y3QoIGFyciApICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsCisgICAg
ICAgICAgICAgICAgICAgIHR5cGVvZiBhcnIgPT09ICJzdHJpbmciID8KKyAgICAgICAgICAgICAg
ICAgICAgWyBhcnIgXSA6IGFycgorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHB1c2guY2FsbCggcmV0LCBhcnIgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSwKKworICAgIGluQXJy
YXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7CisgICAgICAgIHJldHVybiBhcnIgPT0gbnVs
bCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTsKKyAgICB9LAorCisgICAgbWVy
Z2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgeworICAgICAgICB2YXIgbGVuID0gK3NlY29u
ZC5sZW5ndGgsCisgICAgICAgICAgICBqID0gMCwKKyAgICAgICAgICAgIGkgPSBmaXJzdC5sZW5n
dGg7CisKKyAgICAgICAgZm9yICggOyBqIDwgbGVuOyBqKysgKSB7CisgICAgICAgICAgICBmaXJz
dFsgaSsrIF0gPSBzZWNvbmRbIGogXTsKKyAgICAgICAgfQorCisgICAgICAgIGZpcnN0Lmxlbmd0
aCA9IGk7CisKKyAgICAgICAgcmV0dXJuIGZpcnN0OworICAgIH0sCisKKyAgICBncmVwOiBmdW5j
dGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7CisgICAgICAgIHZhciBjYWxsYmFja0lu
dmVyc2UsCisgICAgICAgICAgICBtYXRjaGVzID0gW10sCisgICAgICAgICAgICBpID0gMCwKKyAg
ICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKKyAgICAgICAgICAgIGNhbGxiYWNrRXhw
ZWN0ID0gIWludmVydDsKKworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBz
YXZpbmcgdGhlIGl0ZW1zCisgICAgICAgIC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0
aW9uCisgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgY2Fs
bGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7CisgICAgICAgICAgICBp
ZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7CisgICAgICAgICAgICAg
ICAgbWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICB9LAorCisgICAgLy8gYXJnIGlzIGZvciBp
bnRlcm5hbCB1c2FnZSBvbmx5CisgICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBh
cmcgKSB7CisgICAgICAgIHZhciBsZW5ndGgsIHZhbHVlLAorICAgICAgICAgICAgaSA9IDAsCisg
ICAgICAgICAgICByZXQgPSBbXTsKKworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwg
dHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlcworICAgICAg
ICBpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkgeworICAgICAgICAgICAgbGVuZ3RoID0gZWxl
bXMubGVuZ3RoOworICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAg
ICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldC5wdXNoKCB2YWx1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZm9yICggaSBpbiBlbGVtcyApIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKKworICAgICAgICAgICAg
ICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2go
IHZhbHVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworICAgICAgICByZXR1cm4gY29u
Y2F0LmFwcGx5KCBbXSwgcmV0ICk7CisgICAgfSwKKworICAgIC8vIEEgZ2xvYmFsIEdVSUQgY291
bnRlciBmb3Igb2JqZWN0cworICAgIGd1aWQ6IDEsCisKKyAgICAvLyBCaW5kIGEgZnVuY3Rpb24g
dG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKKyAgICAvLyBh
cmd1bWVudHMuCisgICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKKyAgICAgICAg
dmFyIHRtcCwgYXJncywgcHJveHk7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0g
InN0cmluZyIgKSB7CisgICAgICAgICAgICB0bXAgPSBmblsgY29udGV4dCBdOworICAgICAgICAg
ICAgY29udGV4dCA9IGZuOworICAgICAgICAgICAgZm4gPSB0bXA7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBp
biB0aGUgc3BlYworICAgICAgICAvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdp
bGwganVzdCByZXR1cm4gdW5kZWZpbmVkLgorICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlv
biggZm4gKSApIHsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBTaW11bGF0ZWQgYmluZAorICAgICAgICBhcmdzID0gc2xpY2UuY2FsbCggYXJn
dW1lbnRzLCAyICk7CisgICAgICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwo
IGFyZ3VtZW50cyApICkgKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBTZXQgdGhlIGd1aWQg
b2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQg
Y2FuIGJlIHJlbW92ZWQKKyAgICAgICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8
IGpRdWVyeS5ndWlkKys7CisKKyAgICAgICAgcmV0dXJuIHByb3h5OworICAgIH0sCisKKyAgICBu
b3c6IERhdGUubm93LAorCisgICAgLy8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29y
ZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyCisgICAgLy8gcHJvcGVydGllcyB0byBp
dCBzbyBpdCBuZWVkcyB0byBleGlzdC4KKyAgICBzdXBwb3J0OiBzdXBwb3J0Cit9ICk7CisKKy8v
IEpTSGludCB3b3VsZCBlcnJvciBvbiB0aGlzIGNvZGUgZHVlIHRvIHRoZSBTeW1ib2wgbm90IGJl
aW5nIGRlZmluZWQgaW4gRVM1LgorLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmpzaGludHJj
IHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsCisvLyB1bmd1YXJkZWQg
aW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8ganVzdCBkaXNhYmxlIEpTSGludCBm
b3IgdGhlc2UKKy8vIHRocmVlIGxpbmVzLgorLyoganNoaW50IGlnbm9yZTogc3RhcnQgKi8KK2lm
ICggdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiApIHsKKyAgICBqUXVlcnkuZm5bIFN5bWJv
bC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTsKK30KKy8qIGpzaGludCBpZ25v
cmU6IGVuZCAqLworCisvLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXAKK2pRdWVyeS5lYWNo
KCAiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVj
dCBFcnJvciBTeW1ib2wiLnNwbGl0KCAiICIgKSwKK2Z1bmN0aW9uKCBpLCBuYW1lICkgeworICAg
IGNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBuYW1lICsgIl0iIF0gPSBuYW1lLnRvTG93ZXJDYXNl
KCk7Cit9ICk7CisKK2Z1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7CisKKyAgICAvLyBTdXBw
b3J0OiBpT1MgOC4yIChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcikKKyAgICAvLyBgaW5g
IGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpCisgICAgLy8gaGFzT3du
IGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzCisgICAgLy8gcmVnYXJkaW5n
IE5vZGVsaXN0IGxlbmd0aCBpbiBJRQorICAgIHZhciBsZW5ndGggPSAhIW9iaiAmJiAibGVuZ3Ro
IiBpbiBvYmogJiYgb2JqLmxlbmd0aCwKKyAgICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmog
KTsKKworICAgIGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCBqUXVlcnkuaXNXaW5kb3coIG9i
aiApICkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGUg
PT09ICJhcnJheSIgfHwgbGVuZ3RoID09PSAwIHx8CisgICAgICAgIHR5cGVvZiBsZW5ndGggPT09
ICJudW1iZXIiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqOworfQordmFy
IFNpenpsZSA9CisvKiEKKyAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjIuMQorICog
aHR0cDovL3NpenpsZWpzLmNvbS8KKyAqCisgKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24g
YW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNl
CisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogMjAxNS0xMC0xNwor
ICovCisoZnVuY3Rpb24oIHdpbmRvdyApIHsKKwordmFyIGksCisgICAgc3VwcG9ydCwKKyAgICBF
eHByLAorICAgIGdldFRleHQsCisgICAgaXNYTUwsCisgICAgdG9rZW5pemUsCisgICAgY29tcGls
ZSwKKyAgICBzZWxlY3QsCisgICAgb3V0ZXJtb3N0Q29udGV4dCwKKyAgICBzb3J0SW5wdXQsCisg
ICAgaGFzRHVwbGljYXRlLAorCisgICAgLy8gTG9jYWwgZG9jdW1lbnQgdmFycworICAgIHNldERv
Y3VtZW50LAorICAgIGRvY3VtZW50LAorICAgIGRvY0VsZW0sCisgICAgZG9jdW1lbnRJc0hUTUws
CisgICAgcmJ1Z2d5UVNBLAorICAgIHJidWdneU1hdGNoZXMsCisgICAgbWF0Y2hlcywKKyAgICBj
b250YWlucywKKworICAgIC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGEKKyAgICBleHBhbmRvID0g
InNpenpsZSIgKyAxICogbmV3IERhdGUoKSwKKyAgICBwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9j
dW1lbnQsCisgICAgZGlycnVucyA9IDAsCisgICAgZG9uZSA9IDAsCisgICAgY2xhc3NDYWNoZSA9
IGNyZWF0ZUNhY2hlKCksCisgICAgdG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgY29t
cGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEs
IGIgKSB7CisgICAgICAgIGlmICggYSA9PT0gYiApIHsKKyAgICAgICAgICAgIGhhc0R1cGxpY2F0
ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSwKKworICAgIC8v
IEdlbmVyYWwtcHVycG9zZSBjb25zdGFudHMKKyAgICBNQVhfTkVHQVRJVkUgPSAxIDw8IDMxLAor
CisgICAgLy8gSW5zdGFuY2UgbWV0aG9kcworICAgIGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVy
dHksCisgICAgYXJyID0gW10sCisgICAgcG9wID0gYXJyLnBvcCwKKyAgICBwdXNoX25hdGl2ZSA9
IGFyci5wdXNoLAorICAgIHB1c2ggPSBhcnIucHVzaCwKKyAgICBzbGljZSA9IGFyci5zbGljZSwK
KyAgICAvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBu
YXRpdmUKKyAgICAvLyBodHRwOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzUKKyAg
ICBpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7CisgICAgICAgIHZhciBpID0gMCwK
KyAgICAgICAgICAgIGxlbiA9IGxpc3QubGVuZ3RoOworICAgICAgICBmb3IgKCA7IGkgPCBsZW47
IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gLTE7CisgICAgfSwKKworICAgIGJvb2xlYW5zID0gImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8
YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxs
b29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIiwKKworICAgIC8vIFJl
Z3VsYXIgZXhwcmVzc2lvbnMKKworICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2Vs
ZWN0b3JzLyN3aGl0ZXNwYWNlCisgICAgd2hpdGVzcGFjZSA9ICJbXFx4MjBcXHRcXHJcXG5cXGZd
IiwKKworICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1
ZS1kZWYtaWRlbnRpZmllcgorICAgIGlkZW50aWZpZXIgPSAiKD86XFxcXC58W1xcdy1dfFteXFx4
MDAtXFx4YTBdKSsiLAorCisgICAgLy8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53
My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzCisgICAgYXR0cmlidXRlcyA9
ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBpZGVudGlmaWVyICsgIikoPzoiICsgd2hpdGVz
cGFjZSArCisgICAgICAgIC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpCisgICAgICAgICIqKFsqXiR8
IX5dPz0pIiArIHdoaXRlc3BhY2UgKworICAgICAgICAvLyAiQXR0cmlidXRlIHZhbHVlcyBtdXN0
IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3Ig
Y2FwdHVyZSA0XSIKKyAgICAgICAgIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpc
XFxcLnxbXlxcXFxcIl0pKilcInwoIiArIGlkZW50aWZpZXIgKyAiKSl8KSIgKyB3aGl0ZXNwYWNl
ICsKKyAgICAgICAgIipcXF0iLAorCisgICAgcHNldWRvcyA9ICI6KCIgKyBpZGVudGlmaWVyICsg
IikoPzpcXCgoIiArCisgICAgICAgIC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9y
cyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6Cisg
ICAgICAgIC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KQor
ICAgICAgICAiKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkq
KVwiKXwiICsKKyAgICAgICAgLy8gMi4gc2ltcGxlIChjYXB0dXJlIDYpCisgICAgICAgICIoKD86
XFxcXC58W15cXFxcKClbXFxdXXwiICsgYXR0cmlidXRlcyArICIpKil8IiArCisgICAgICAgIC8v
IDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMikKKyAgICAgICAgIi4qIiArCisgICAgICAgICIp
XFwpfCkiLAorCisgICAgLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVz
cGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcg
dGhlIGxhdHRlcgorICAgIHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArICIr
IiwgImciICksCisgICAgcnRyaW0gPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIit8
KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIgKyB3aGl0ZXNwYWNlICsgIiskIiwgImciICksCisK
KyAgICByY29tbWEgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiosIiArIHdoaXRl
c3BhY2UgKyAiKiIgKSwKKyAgICByY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0
ZXNwYWNlICsgIiooWz4rfl18IiArIHdoaXRlc3BhY2UgKyAiKSIgKyB3aGl0ZXNwYWNlICsgIioi
ICksCisKKyAgICByYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCggIj0iICsgd2hpdGVzcGFj
ZSArICIqKFteXFxdJ1wiXSo/KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLCAiZyIgKSwKKworICAg
IHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksCisgICAgcmlkZW50aWZpZXIgPSBuZXcg
UmVnRXhwKCAiXiIgKyBpZGVudGlmaWVyICsgIiQiICksCisKKyAgICBtYXRjaEV4cHIgPSB7Cisg
ICAgICAgICJJRCI6IG5ldyBSZWdFeHAoICJeIygiICsgaWRlbnRpZmllciArICIpIiApLAorICAg
ICAgICAiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxcLigiICsgaWRlbnRpZmllciArICIpIiApLAor
ICAgICAgICAiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGlkZW50aWZpZXIgKyAifFsqXSkiICks
CisgICAgICAgICJBVFRSIjogbmV3IFJlZ0V4cCggIl4iICsgYXR0cmlidXRlcyApLAorICAgICAg
ICAiUFNFVURPIjogbmV3IFJlZ0V4cCggIl4iICsgcHNldWRvcyApLAorICAgICAgICAiQ0hJTEQi
OiBuZXcgUmVnRXhwKCAiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9m
LXR5cGUpKD86XFwoIiArIHdoaXRlc3BhY2UgKworICAgICAgICAgICAgIiooZXZlbnxvZGR8KChb
Ky1dfCkoXFxkKilufCkiICsgd2hpdGVzcGFjZSArICIqKD86KFsrLV18KSIgKyB3aGl0ZXNwYWNl
ICsKKyAgICAgICAgICAgICIqKFxcZCspfCkpIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpIiwgImki
ICksCisgICAgICAgICJib29sIjogbmV3IFJlZ0V4cCggIl4oPzoiICsgYm9vbGVhbnMgKyAiKSQi
LCAiaSIgKSwKKyAgICAgICAgLy8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5p
cygpCisgICAgICAgIC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGAK
KyAgICAgICAgIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAi
Kls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArCisgICAg
ICAgICAgICB3aGl0ZXNwYWNlICsgIiooKD86LVxcZCk/XFxkKikiICsgd2hpdGVzcGFjZSArICIq
XFwpfCkoPz1bXi1dfCQpIiwgImkiICkKKyAgICB9LAorCisgICAgcmlucHV0cyA9IC9eKD86aW5w
dXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCisgICAgcmhlYWRlciA9IC9eaFxkJC9pLAor
CisgICAgcm5hdGl2ZSA9IC9eW157XStce1xzKlxbbmF0aXZlIFx3LywKKworICAgIC8vIEVhc2ls
eS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9ycworICAg
IHJxdWlja0V4cHIgPSAvXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLAorCisgICAg
cnNpYmxpbmcgPSAvWyt+XS8sCisgICAgcmVzY2FwZSA9IC8nfFxcL2csCisKKyAgICAvLyBDU1Mg
ZXNjYXBlcyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1j
aGFyYWN0ZXJzCisgICAgcnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggIlxcXFwoW1xcZGEtZl17MSw2
fSIgKyB3aGl0ZXNwYWNlICsgIj98KCIgKyB3aGl0ZXNwYWNlICsgIil8LikiLCAiaWciICksCisg
ICAgZnVuZXNjYXBlID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkg
eworICAgICAgICB2YXIgaGlnaCA9ICIweCIgKyBlc2NhcGVkIC0gMHgxMDAwMDsKKyAgICAgICAg
Ly8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnQKKyAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveDwy
NAorICAgICAgICAvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9u
IG9mICsiMHgiCisgICAgICAgIHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNw
YWNlID8KKyAgICAgICAgICAgIGVzY2FwZWQgOgorICAgICAgICAgICAgaGlnaCA8IDAgPworICAg
ICAgICAgICAgICAgIC8vIEJNUCBjb2RlcG9pbnQKKyAgICAgICAgICAgICAgICBTdHJpbmcuZnJv
bUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDoKKyAgICAgICAgICAgICAgICAvLyBTdXBwbGVt
ZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcikKKyAgICAgICAgICAgICAgICBT
dHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAw
eERDMDAgKTsKKyAgICB9LAorCisgICAgLy8gVXNlZCBmb3IgaWZyYW1lcworICAgIC8vIFNlZSBz
ZXREb2N1bWVudCgpCisgICAgLy8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2Vz
IGEgIlBlcm1pc3Npb24gRGVuaWVkIgorICAgIC8vIGVycm9yIGluIElFCisgICAgdW5sb2FkSGFu
ZGxlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZXREb2N1bWVudCgpOworICAgIH07CisKKy8v
IE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApCit0cnkgeworICAgIHB1c2gu
YXBwbHkoCisgICAgICAgIChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2Rl
cyApKSwKKyAgICAgICAgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMKKyAgICApOworICAgIC8vIFN1
cHBvcnQ6IEFuZHJvaWQ8NC4wCisgICAgLy8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5h
cHBseQorICAgIGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7
Cit9IGNhdGNoICggZSApIHsKKyAgICBwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/CisKKyAg
ICAgICAgLy8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGUKKyAgICAgICAgZnVuY3Rpb24oIHRh
cmdldCwgZWxzICkgeworICAgICAgICAgICAgcHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xp
Y2UuY2FsbChlbHMpICk7CisgICAgICAgIH0gOgorCisgICAgICAgIC8vIFN1cHBvcnQ6IElFPDkK
KyAgICAgICAgLy8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseQorICAgICAgICBmdW5jdGlvbigg
dGFyZ2V0LCBlbHMgKSB7CisgICAgICAgICAgICB2YXIgaiA9IHRhcmdldC5sZW5ndGgsCisgICAg
ICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5s
ZW5ndGgKKyAgICAgICAgICAgIHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge30K
KyAgICAgICAgICAgIHRhcmdldC5sZW5ndGggPSBqIC0gMTsKKyAgICAgICAgfQorICAgIH07Cit9
CisKK2Z1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7
CisgICAgdmFyIG0sIGksIGVsZW0sIG5pZCwgbmlkc2VsZWN0LCBtYXRjaCwgZ3JvdXBzLCBuZXdT
ZWxlY3RvciwKKyAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRv
Y3VtZW50LAorCisgICAgICAgIC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRl
eHQgZGVmYXVsdHMgdG8gZG9jdW1lbnQKKyAgICAgICAgbm9kZVR5cGUgPSBjb250ZXh0ID8gY29u
dGV4dC5ub2RlVHlwZSA6IDk7CisKKyAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKKworICAg
IC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250
ZXh0CisgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciIHx8ICFzZWxlY3RvciB8
fAorICAgICAgICBub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAh
PT0gMTEgKSB7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgfQorCisgICAgLy8gVHJ5
IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBI
VE1MIGRvY3VtZW50cworICAgIGlmICggIXNlZWQgKSB7CisKKyAgICAgICAgaWYgKCAoIGNvbnRl
eHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9
PSBkb2N1bWVudCApIHsKKyAgICAgICAgICAgIHNldERvY3VtZW50KCBjb250ZXh0ICk7CisgICAg
ICAgIH0KKyAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CisKKyAgICAgICAg
aWYgKCBkb2N1bWVudElzSFRNTCApIHsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHNlbGVjdG9y
IGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhICJnZXQqQnkqIiBET00gbWV0aG9k
CisgICAgICAgICAgICAvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hl
cmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpCisgICAgICAgICAgICBpZiAoIG5vZGVUeXBlICE9
PSAxMSAmJiAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkgeworCisgICAg
ICAgICAgICAgICAgLy8gSUQgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICBpZiAoIChtID0gbWF0
Y2hbMV0pICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIERvY3VtZW50IGNvbnRleHQKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCBub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggKGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJr
aXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9u
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRj
aCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0uaWQgPT09IG0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vIEVsZW1lbnQgY29udGV4dAorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBi
eSBuYW1lIGluc3RlYWQgb2YgSUQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmV3Q29u
dGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyggY29udGV4dCwgZWxlbSApICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5pZCA9PT0gbSApIHsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBUeXBlIHNlbGVjdG9yCisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNl
bGVjdG9yICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisKKyAgICAg
ICAgICAgICAgICAvLyBDbGFzcyBzZWxlY3RvcgorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJgorICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCBtICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUYWtl
IGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsCisgICAgICAgICAgICBpZiAoIHN1cHBvcnQu
cXNhICYmCisgICAgICAgICAgICAgICAgIWNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF0g
JiYKKyAgICAgICAgICAgICAgICAoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVj
dG9yICkpICkgeworCisgICAgICAgICAgICAgICAgaWYgKCBub2RlVHlwZSAhPT0gMSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgICAgICAgICAg
ICAgIG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7CisKKyAgICAgICAgICAgICAgICAvLyBxU0EgbG9v
a3Mgb3V0c2lkZSBFbGVtZW50IGNvbnRleHQsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQKKyAg
ICAgICAgICAgICAgICAvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB3b3JrYXJv
dW5kIHRlY2huaXF1ZQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OAorICAgICAg
ICAgICAgICAgIC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzCisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0IiApIHsK
KworICAgICAgICAgICAgICAgICAgICAvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5n
IGl0IGZpcnN0IGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICBpZiAoIChuaWQgPSBj
b250ZXh0LmdldEF0dHJpYnV0ZSggImlkIiApKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5pZCA9IG5pZC5yZXBsYWNlKCByZXNjYXBlLCAiXFwkJiIgKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRl
KCAiaWQiLCAobmlkID0gZXhwYW5kbykgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdAorICAg
ICAgICAgICAgICAgICAgICBncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKyAgICAgICAg
ICAgICAgICAgICAgaSA9IGdyb3Vwcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIG5pZHNl
bGVjdCA9IHJpZGVudGlmaWVyLnRlc3QoIG5pZCApID8gIiMiICsgbmlkIDogIltpZD0nIiArIG5p
ZCArICInXSI7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JvdXBzW2ldID0gbmlkc2VsZWN0ICsgIiAiICsgdG9TZWxlY3Rvcigg
Z3JvdXBzW2ldICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggIiwiICk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzCisgICAgICAgICAgICAgICAg
ICAgIG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0
KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIG5ld1NlbGVjdG9y
ICkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaC5hcHBseSggcmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250
ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yICkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAg
ICAgICAgICAgICAgfSBjYXRjaCAoIHFzYUVycm9yICkgeworICAgICAgICAgICAgICAgICAgICB9
IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuaWQgPT09IGV4cGFuZG8g
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUo
ICJpZCIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEFsbCBvdGhlcnMKKyAgICByZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBy
dHJpbSwgIiQxIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7Cit9CisKKy8qKgorICogQ3Jl
YXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplCisgKiBAcmV0dXJucyB7ZnVuY3Rp
b24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5n
IGl0IG9uIGl0c2VsZiB3aXRoCisgKiAgcHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVk
KSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0
aCkKKyAqICBkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5CisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUNh
Y2hlKCkgeworICAgIHZhciBrZXlzID0gW107CisKKyAgICBmdW5jdGlvbiBjYWNoZSgga2V5LCB2
YWx1ZSApIHsKKyAgICAgICAgLy8gVXNlIChrZXkgKyAiICIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3
aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpCisgICAgICAg
IGlmICgga2V5cy5wdXNoKCBrZXkgKyAiICIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7CisgICAg
ICAgICAgICAvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKKyAgICAgICAgICAg
IGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IChjYWNoZVsga2V5ICsgIiAiIF0gPSB2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiBjYWNoZTsK
K30KKworLyoqCisgKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZQor
ICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmsKKyAqLworZnVuY3Rp
b24gbWFya0Z1bmN0aW9uKCBmbiApIHsKKyAgICBmblsgZXhwYW5kbyBdID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gZm47Cit9CisKKy8qKgorICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnQK
KyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBkaXYgYW5kIGV4cGVj
dHMgYSBib29sZWFuIHJlc3VsdAorICovCitmdW5jdGlvbiBhc3NlcnQoIGZuICkgeworICAgIHZh
ciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAgIHRyeSB7CisgICAg
ICAgIHJldHVybiAhIWZuKCBkaXYgKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICAvLyBSZW1vdmUgZnJvbSBpdHMgcGFy
ZW50IGJ5IGRlZmF1bHQKKyAgICAgICAgaWYgKCBkaXYucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgIGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBkaXYgKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQorICAgICAgICBkaXYgPSBudWxsOworICAgIH0KK30K
KworLyoqCisgKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVk
IGF0dHJzCisgKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBh
dHRyaWJ1dGVzCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3
aWxsIGJlIGFwcGxpZWQKKyAqLworZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciAp
IHsKKyAgICB2YXIgYXJyID0gYXR0cnMuc3BsaXQoInwiKSwKKyAgICAgICAgaSA9IGFyci5sZW5n
dGg7CisKKyAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgRXhwci5hdHRySGFuZGxlWyBhcnJb
aV0gXSA9IGhhbmRsZXI7CisgICAgfQorfQorCisvKioKKyAqIENoZWNrcyBkb2N1bWVudCBvcmRl
ciBvZiB0d28gc2libGluZ3MKKyAqIEBwYXJhbSB7RWxlbWVudH0gYQorICogQHBhcmFtIHtFbGVt
ZW50fSBiCisgKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJl
Y2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGIKKyAqLworZnVuY3Rpb24gc2li
bGluZ0NoZWNrKCBhLCBiICkgeworICAgIHZhciBjdXIgPSBiICYmIGEsCisgICAgICAgIGRpZmYg
PSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmCisgICAgICAg
ICAgICAoIH5iLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApIC0KKyAgICAgICAgICAgICgg
fmEuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICk7CisKKyAgICAvLyBVc2UgSUUgc291cmNl
SW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKKyAgICBpZiAoIGRpZmYgKSB7CisgICAg
ICAgIHJldHVybiBkaWZmOworICAgIH0KKworICAgIC8vIENoZWNrIGlmIGIgZm9sbG93cyBhCisg
ICAgaWYgKCBjdXIgKSB7CisgICAgICAgIHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykg
KSB7CisgICAgICAgICAgICBpZiAoIGN1ciA9PT0gYiApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYSA/
IDEgOiAtMTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVk
b3MgZm9yIGlucHV0IHR5cGVzCisgKiBAcGFyYW0ge1N0cmluZ30gdHlwZQorICovCitmdW5jdGlv
biBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAg
ICAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7CisgICAg
fTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9y
IGJ1dHRvbnMKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUJ1
dHRvblBzZXVkbyggdHlwZSApIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICByZXR1
cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmIGVsZW0udHlwZSA9
PT0gdHlwZTsKKyAgICB9OworfQorCisvKioKKyAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2Ug
aW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHMKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuCisgKi8K
K2Z1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgeworICAgIHJldHVybiBtYXJr
RnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgeworICAgICAgICBhcmd1bWVudCA9ICthcmd1
bWVudDsKKyAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hl
cyApIHsKKyAgICAgICAgICAgIHZhciBqLAorICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcyA9
IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAgICAgaSA9IG1h
dGNoSW5kZXhlcy5sZW5ndGg7CisKKyAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5k
IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcworICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisK
Ky8qKgorICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dAor
ICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHQKKyAqIEByZXR1cm5zIHtFbGVtZW50
fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2Ug
YSBmYWxzeSB2YWx1ZQorICovCitmdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHsKKyAg
ICByZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAh
PT0gInVuZGVmaW5lZCIgJiYgY29udGV4dDsKK30KKworLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBm
b3IgY29udmVuaWVuY2UKK3N1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9OworCisvKioKKyAq
IERldGVjdHMgWE1MIG5vZGVzCisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVs
ZW1lbnQgb3IgYSBkb2N1bWVudAorICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0g
aXMgYSBub24tSFRNTCBYTUwgbm9kZQorICovCitpc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgIC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2Fz
ZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKKyAgICAvLyAoc3VjaCBhcyBsb2FkaW5nIGlm
cmFtZXMgaW4gSUUgLSAjNDgzMykKKyAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAo
ZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDsKKyAgICByZXR1cm4g
ZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBm
YWxzZTsKK307CisKKy8qKgorICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNl
IGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50CisgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0
fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBk
b2N1bWVudAorICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVu
dAorICovCitzZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2Rl
ICkgeworICAgIHZhciBoYXNDb21wYXJlLCBwYXJlbnQsCisgICAgICAgIGRvYyA9IG5vZGUgPyBu
b2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYzsKKworICAgIC8vIFJldHVy
biBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkCisgICAgaWYgKCBk
b2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxl
bWVudCApIHsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50OworICAgIH0KKworICAgIC8vIFVwZGF0
ZSBnbG9iYWwgdmFyaWFibGVzCisgICAgZG9jdW1lbnQgPSBkb2M7CisgICAgZG9jRWxlbSA9IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICBkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9j
dW1lbnQgKTsKKworICAgIC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2UKKyAgICAvLyBBY2Nlc3Np
bmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzICJwZXJtaXNzaW9uIGRlbmll
ZCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KQorICAgIGlmICggKHBhcmVudCA9IGRvY3VtZW50LmRl
ZmF1bHRWaWV3KSAmJiBwYXJlbnQudG9wICE9PSBwYXJlbnQgKSB7CisgICAgICAgIC8vIFN1cHBv
cnQ6IElFIDExCisgICAgICAgIGlmICggcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAg
ICAgICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciggInVubG9hZCIsIHVubG9hZEhhbmRsZXIs
IGZhbHNlICk7CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHkKKyAgICAgICAg
fSBlbHNlIGlmICggcGFyZW50LmF0dGFjaEV2ZW50ICkgeworICAgICAgICAgICAgcGFyZW50LmF0
dGFjaEV2ZW50KCAib251bmxvYWQiLCB1bmxvYWRIYW5kbGVyICk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvKiBBdHRyaWJ1dGVzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgLy8gU3Vw
cG9ydDogSUU8OAorICAgIC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJu
cyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllcworICAgIC8vIChleGNlcHRpbmcgSUU4IGJv
b2xlYW5zKQorICAgIHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkg
eworICAgICAgICBkaXYuY2xhc3NOYW1lID0gImkiOworICAgICAgICByZXR1cm4gIWRpdi5nZXRB
dHRyaWJ1dGUoImNsYXNzTmFtZSIpOworICAgIH0pOworCisgICAgLyogZ2V0RWxlbWVudChzKUJ5
KgorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlU
YWdOYW1lKCIqIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzCisgICAgc3VwcG9ydC5nZXRFbGVtZW50
c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICBkaXYuYXBwZW5k
Q2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7CisgICAgICAgIHJldHVybiAhZGl2
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoOworICAgIH0pOworCisgICAgLy8gU3Vw
cG9ydDogSUU8OQorICAgIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUu
dGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApOworCisgICAgLy8gU3VwcG9y
dDogSUU8MTAKKyAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRz
IGJ5IG5hbWUKKyAgICAvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3Qg
cGljayB1cCBwcm9ncmFtYXRpY2FsbHktc2V0IG5hbWVzLAorICAgIC8vIHNvIHVzZSBhIHJvdW5k
YWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdAorICAgIHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2Vy
dChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICBkb2NFbGVtLmFwcGVuZENoaWxkKCBkaXYgKS5p
ZCA9IGV4cGFuZG87CisgICAgICAgIHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUg
fHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoOworICAgIH0p
OworCisgICAgLy8gSUQgZmluZCBhbmQgZmlsdGVyCisgICAgaWYgKCBzdXBwb3J0LmdldEJ5SWQg
KSB7CisgICAgICAgIEV4cHIuZmluZFsiSUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsK
KyAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRl
ZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworICAgICAgICAgICAgICAgIHZhciBtID0gY29u
dGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbSA/IFsg
bSBdIDogW107CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIEV4cHIuZmlsdGVy
WyJJRCJdID0gZnVuY3Rpb24oIGlkICkgeworICAgICAgICAgICAgdmFyIGF0dHJJZCA9IGlkLnJl
cGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJp
ZCIpID09PSBhdHRySWQ7CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIFN1cHBvcnQ6IElFNi83CisgICAgICAgIC8vIGdldEVsZW1lbnRCeUlkIGlz
IG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXQKKyAgICAgICAgZGVsZXRlIEV4cHIuZmlu
ZFsiSUQiXTsKKworICAgICAgICBFeHByLmZpbHRlclsiSUQiXSA9ICBmdW5jdGlvbiggaWQgKSB7
CisgICAgICAgICAgICB2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2Nh
cGUgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICB2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmlu
ZWQiICYmCisgICAgICAgICAgICAgICAgICAgIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7Cisg
ICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH0KKworICAgIC8vIFRhZworICAgIEV4cHIu
ZmluZFsiVEFHIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID8KKyAgICAgICAgZnVu
Y3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKKworICAgICAgICAg
ICAgLy8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROCisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSA6
CisKKyAgICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAgICAgICAgICAgIHZhciBl
bGVtLAorICAgICAgICAgICAgICAgIHRtcCA9IFtdLAorICAgICAgICAgICAgICAgIGkgPSAwLAor
ICAgICAgICAgICAgICAgIC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlRO
IGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b28KKyAgICAgICAgICAgICAgICBy
ZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7CisKKyAgICAgICAg
ICAgIC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMKKyAgICAgICAgICAgIGlmICggdGFn
ID09PSAiKiIgKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsr
XSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdG1w
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIH07
CisKKyAgICAvLyBDbGFzcworICAgIEV4cHIuZmluZFsiQ0xBU1MiXSA9IHN1cHBvcnQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkgeworICAg
ICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09ICJ1bmRl
ZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyogUVNBL21hdGNoZXNTZWxlY3RvcgorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworICAg
IC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnQKKworICAgIC8vIG1hdGNoZXNTZWxl
Y3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCisg
ICAgcmJ1Z2d5TWF0Y2hlcyA9IFtdOworCisgICAgLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxz
ZSB3aGVuIHRydWUgKENocm9tZSAyMSkKKyAgICAvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2Yg
YSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3IKKyAgICAvLyB3aGVuZXZlciBgZG9j
dW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lCisgICAgLy8gU28s
IHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9p
ZCB0aGUgSUUgZXJyb3IKKyAgICAvLyBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQv
MTMzNzgKKyAgICByYnVnZ3lRU0EgPSBbXTsKKworICAgIGlmICggKHN1cHBvcnQucXNhID0gcm5h
dGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkgeworICAgICAgICAvLyBC
dWlsZCBRU0EgcmVnZXgKKyAgICAgICAgLy8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERp
ZWdvIFBlcmluaQorICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgICAg
IC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2UKKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseQorICAg
ICAgICAgICAgLy8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsCisgICAgICAg
ICAgICAvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaAorICAgICAgICAgICAg
Ly8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTkKKyAgICAgICAgICAgIGRvY0Vs
ZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlubmVySFRNTCA9ICI8YSBpZD0nIiArIGV4cGFuZG8gKyAi
Jz48L2E+IiArCisgICAgICAgICAgICAgICAgIjxzZWxlY3QgaWQ9JyIgKyBleHBhbmRvICsgIi1c
clxcJyBtc2FsbG93Y2FwdHVyZT0nJz4iICsKKyAgICAgICAgICAgICAgICAiPG9wdGlvbiBzZWxl
Y3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJ
RTgsIE9wZXJhIDExLTEyLjE2CisgICAgICAgICAgICAvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxl
Y3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9CisgICAgICAgICAg
ICAvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCAic2Fm
ZSIgZm9yIFdpblJUCisgICAgICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2Vu
LXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvbgorICAgICAgICAg
ICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5n
dGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICJbKl4kXT0iICsgd2hpdGVz
cGFjZSArICIqKD86Jyd8XCJcIikiICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IElFOAorICAgICAgICAgICAgLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCAidmFs
dWUiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKKyAgICAgICAgICAgIGlmICggIWRpdi5xdWVy
eVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJi
dWdneVFTQS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKig/OnZhbHVlfCIgKyBib29sZWFu
cyArICIpIiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJv
bWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjku
OCsKKyAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCAiW2lkfj0iICsgZXhw
YW5kbyArICItXSIgKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2go
In49Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlYmtpdC9PcGVyYSAtIDpj
aGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzCisgICAgICAgICAg
ICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDky
OS8jY2hlY2tlZAorICAgICAgICAgICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxs
IG5vdCBzZWUgbGF0ZXIgdGVzdHMKKyAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9y
QWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVz
aCgiOmNoZWNrZWQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3VwcG9ydDog
U2FmYXJpIDgrLCBpT1MgOCsKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzY4NTEKKyAgICAgICAgICAgIC8vIEluLXBhZ2UgYHNlbGVjdG9y
I2lkIHNpYmluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlscworICAgICAgICAgICAgaWYgKCAh
ZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoICJhIyIgKyBleHBhbmRvICsgIisqIiApLmxlbmd0aCApIHsK
KyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgiLiMuK1srfl0iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAg
ICAgICAgICAvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHMKKyAgICAgICAgICAgIC8v
IFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5l
ckhUTUwgYXNzaWdubWVudAorICAgICAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiaW5wdXQiKTsKKyAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUi
LCAiaGlkZGVuIiApOworICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0
dHJpYnV0ZSggIm5hbWUiLCAiRCIgKTsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4Cisg
ICAgICAgICAgICAvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGUK
KyAgICAgICAgICAgIGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3Ro
ICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAibmFtZSIgKyB3aGl0ZXNwYWNl
ICsgIipbKl4kfCF+XT89IiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGRiAz
LjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1l
bnRzIGFyZSBzdGlsbCBlbmFibGVkKQorICAgICAgICAgICAgLy8gSUU4IHRocm93cyBlcnJvciBo
ZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHMKKyAgICAgICAgICAgIGlmICggIWRpdi5x
dWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBy
YnVnZ3lRU0EucHVzaCggIjplbmFibGVkIiwgIjpkaXNhYmxlZCIgKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21t
YSBpbnZhbGlkIHBzZXVkb3MKKyAgICAgICAgICAgIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4
Iik7CisgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgiLC4qOiIpOworICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICBpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCgg
KG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHwKKyAgICAgICAgZG9jRWxlbS53ZWJraXRNYXRj
aGVzU2VsZWN0b3IgfHwKKyAgICAgICAgZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwKKyAg
ICAgICAgZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8CisgICAgICAgIGRvY0VsZW0ubXNNYXRj
aGVzU2VsZWN0b3IpICkpICkgeworCisgICAgICAgIGFzc2VydChmdW5jdGlvbiggZGl2ICkgewor
ICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hl
c1NlbGVjdG9yCisgICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQor
ICAgICAgICAgICAgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZGl2
LCAiZGl2IiApOworCisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhj
ZXB0aW9uCisgICAgICAgICAgICAvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxz
ZSBpbnN0ZWFkCisgICAgICAgICAgICBtYXRjaGVzLmNhbGwoIGRpdiwgIltzIT0nJ106eCIgKTsK
KyAgICAgICAgICAgIHJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOworICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICByYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBS
ZWdFeHAoIHJidWdneVFTQS5qb2luKCJ8IikgKTsKKyAgICByYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5
TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8IikgKTsK
KworICAgIC8qIENvbnRhaW5zCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgIGhhc0NvbXBhcmUg
PSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTsKKworICAg
IC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlcgorICAgIC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4
Y2x1c2l2ZQorICAgIC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxm
CisgICAgY29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250
YWlucyApID8KKyAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICB2YXIgYWRv
d24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLAorICAgICAgICAg
ICAgICAgIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlOworICAgICAgICAgICAgcmV0dXJuIGEgPT09
IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoCisgICAgICAgICAgICAg
ICAgYWRvd24uY29udGFpbnMgPworICAgICAgICAgICAgICAgICAgICBhZG93bi5jb250YWlucygg
YnVwICkgOgorICAgICAgICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYm
IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTYKKyAgICAgICAgICAgICkpOwor
ICAgICAgICB9IDoKKyAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgICAgICBpZiAo
IGIgKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggYiA9PT0gYSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Owor
CisgICAgLyogU29ydGluZworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworICAgIC8vIERvY3VtZW50
IG9yZGVyIHNvcnRpbmcKKyAgICBzb3J0T3JkZXIgPSBoYXNDb21wYXJlID8KKyAgICBmdW5jdGlv
biggYSwgYiApIHsKKworICAgICAgICAvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbAorICAg
ICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBTb3J0IG9uIG1l
dGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uCisgICAgICAgIHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAh
Yi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjsKKyAgICAgICAgaWYgKCBjb21wYXJlICkgeworICAg
ICAgICAgICAgcmV0dXJuIGNvbXBhcmU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxjdWxh
dGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50Cisg
ICAgICAgIGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRv
Y3VtZW50IHx8IGIgKSA/CisgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBi
ICkgOgorCisgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25u
ZWN0ZWQKKyAgICAgICAgICAgIDE7CisKKyAgICAgICAgLy8gRGlzY29ubmVjdGVkIG5vZGVzCisg
ICAgICAgIGlmICggY29tcGFyZSAmIDEgfHwKKyAgICAgICAgICAgICghc3VwcG9ydC5zb3J0RGV0
YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHsK
KworICAgICAgICAgICAgLy8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRl
ZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50CisgICAgICAgICAgICBpZiAoIGEgPT09IGRvY3Vt
ZW50IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZl
cnJlZERvYywgYSkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09
IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNYWludGFp
biBvcmlnaW5hbCBvcmRlcgorICAgICAgICAgICAgcmV0dXJuIHNvcnRJbnB1dCA/CisgICAgICAg
ICAgICAgICAgKCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwg
YiApICkgOgorICAgICAgICAgICAgICAgIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
Y29tcGFyZSAmIDQgPyAtMSA6IDE7CisgICAgfSA6CisgICAgZnVuY3Rpb24oIGEsIGIgKSB7Cisg
ICAgICAgIC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWwKKyAgICAgICAg
aWYgKCBhID09PSBiICkgeworICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1ciwKKyAgICAgICAg
ICAgIGkgPSAwLAorICAgICAgICAgICAgYXVwID0gYS5wYXJlbnROb2RlLAorICAgICAgICAgICAg
YnVwID0gYi5wYXJlbnROb2RlLAorICAgICAgICAgICAgYXAgPSBbIGEgXSwKKyAgICAgICAgICAg
IGJwID0gWyBiIF07CisKKyAgICAgICAgLy8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRv
Y3VtZW50cyBvciBkaXNjb25uZWN0ZWQKKyAgICAgICAgaWYgKCAhYXVwIHx8ICFidXAgKSB7Cisg
ICAgICAgICAgICByZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6CisgICAgICAgICAgICAgICAg
YiA9PT0gZG9jdW1lbnQgPyAxIDoKKyAgICAgICAgICAgICAgICBhdXAgPyAtMSA6CisgICAgICAg
ICAgICAgICAgYnVwID8gMSA6CisgICAgICAgICAgICAgICAgc29ydElucHV0ID8KKyAgICAgICAg
ICAgICAgICAoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBi
ICkgKSA6CisgICAgICAgICAgICAgICAgMDsKKworICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJl
IHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVjaworICAgICAgICB9IGVsc2UgaWYgKCBh
dXAgPT09IGJ1cCApIHsKKyAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2Yg
dGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uCisgICAgICAgIGN1ciA9IGE7CisgICAgICAg
IHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHsKKyAgICAgICAgICAgIGFwLnVuc2hp
ZnQoIGN1ciApOworICAgICAgICB9CisgICAgICAgIGN1ciA9IGI7CisgICAgICAgIHdoaWxlICgg
KGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHsKKyAgICAgICAgICAgIGJwLnVuc2hpZnQoIGN1ciAp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9y
IGEgZGlzY3JlcGFuY3kKKyAgICAgICAgd2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7CisgICAg
ICAgICAgICBpKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaSA/CisgICAgICAgICAg
ICAvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0
b3IKKyAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOgorCisgICAgICAg
ICAgICAvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3QKKyAgICAg
ICAgICAgIGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6CisgICAgICAgICAgICBicFtpXSA9
PT0gcHJlZmVycmVkRG9jID8gMSA6CisgICAgICAgICAgICAwOworICAgIH07CisKKyAgICByZXR1
cm4gZG9jdW1lbnQ7Cit9OworCitTaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVt
ZW50cyApIHsKKyAgICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyAp
OworfTsKKworU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkg
eworICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAorICAgIGlmICggKCBlbGVtLm93
bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgc2V0RG9jdW1l
bnQoIGVsZW0gKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2Vs
ZWN0b3JzIGFyZSBxdW90ZWQKKyAgICBleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVv
dGVzLCAiPSckMSddIiApOworCisgICAgaWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBk
b2N1bWVudElzSFRNTCAmJgorICAgICAgICAhY29tcGlsZXJDYWNoZVsgZXhwciArICIgIiBdICYm
CisgICAgICAgICggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciAp
ICkgJiYKKyAgICAgICAgKCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIg
KSApICkgeworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgcmV0ID0gbWF0Y2hlcy5j
YWxsKCBlbGVtLCBleHByICk7CisKKyAgICAgICAgICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0
b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKKyAgICAgICAgICAgIGlmICgg
cmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHwKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1l
bnQKKyAgICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOQorICAgICAgICAgICAg
ICAgICAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkg
eworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
Y2F0Y2ggKGUpIHt9CisgICAgfQorCisgICAgcmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQs
IG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsKK307CisKK1NpenpsZS5jb250YWlucyA9IGZ1
bmN0aW9uKCBjb250ZXh0LCBlbGVtICkgeworICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5l
ZWRlZAorICAgIGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBk
b2N1bWVudCApIHsKKyAgICAgICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKKyAgICB9CisgICAg
cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7Cit9OworCitTaXp6bGUuYXR0ciA9IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRl
ZAorICAgIGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCAp
IHsKKyAgICAgICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsKKyAgICB9CisKKyAgICB2YXIgZm4gPSBF
eHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLAorICAgICAgICAvLyBEb24ndCBn
ZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNykK
KyAgICAgICAgdmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50
b0xvd2VyQ2FzZSgpICkgPworICAgICAgICAgICAgZm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElz
SFRNTCApIDoKKyAgICAgICAgICAgIHVuZGVmaW5lZDsKKworICAgIHJldHVybiB2YWwgIT09IHVu
ZGVmaW5lZCA/CisgICAgICAgIHZhbCA6CisgICAgICAgIHN1cHBvcnQuYXR0cmlidXRlcyB8fCAh
ZG9jdW1lbnRJc0hUTUwgPworICAgICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6
CisgICAgICAgICAgICAodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwu
c3BlY2lmaWVkID8KKyAgICAgICAgICAgICAgICB2YWwudmFsdWUgOgorICAgICAgICAgICAgICAg
IG51bGw7Cit9OworCitTaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgeworICAgIHRocm93
IG5ldyBFcnJvciggIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIgKyBt
c2cgKTsKK307CisKKy8qKgorICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGlj
YXRlcworICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHMKKyAqLworU2l6emxlLnVuaXF1ZVNv
cnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKKyAgICB2YXIgZWxlbSwKKyAgICAgICAgZHVwbGlj
YXRlcyA9IFtdLAorICAgICAgICBqID0gMCwKKyAgICAgICAgaSA9IDA7CisKKyAgICAvLyBVbmxl
c3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNl
bmNlCisgICAgaGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlczsKKyAgICBz
b3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTsKKyAg
ICByZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApOworCisgICAgaWYgKCBoYXNEdXBsaWNhdGUgKSB7
CisgICAgICAgIHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkgeworICAgICAgICAgICAg
aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7CisgICAgICAgICAgICAgICAgaiA9IGR1cGxp
Y2F0ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdoaWxl
ICggai0tICkgeworICAgICAgICAgICAgcmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwg
MSApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGlu
ZyB0byByZWxlYXNlIG9iamVjdHMKKyAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVy
eS9zaXp6bGUvcHVsbC8yMjUKKyAgICBzb3J0SW5wdXQgPSBudWxsOworCisgICAgcmV0dXJuIHJl
c3VsdHM7Cit9OworCisvKioKKyAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhl
IHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzCisgKiBAcGFyYW0ge0FycmF5fEVs
ZW1lbnR9IGVsZW0KKyAqLworZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgdmFyIG5vZGUsCisgICAgICAgIHJldCA9ICIiLAorICAgICAgICBpID0gMCwK
KyAgICAgICAgbm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlOworCisgICAgaWYgKCAhbm9kZVR5cGUg
KSB7CisgICAgICAgIC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFu
IGFycmF5CisgICAgICAgIHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkgeworICAgICAgICAg
ICAgLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXMKKyAgICAgICAgICAgIHJldCArPSBn
ZXRUZXh0KCBub2RlICk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0g
MSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7CisgICAgICAgIC8vIFVz
ZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHMKKyAgICAgICAgLy8gaW5uZXJUZXh0IHVzYWdlIHJl
bW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1MykKKyAgICAg
ICAgaWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gInN0cmluZyIgKSB7CisgICAgICAg
ICAgICByZXR1cm4gZWxlbS50ZXh0Q29udGVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlbgorICAgICAgICAgICAgZm9yICggZWxlbSA9IGVs
ZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisgICAgICAg
ICAgICAgICAgcmV0ICs9IGdldFRleHQoIGVsZW0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgewor
ICAgICAgICByZXR1cm4gZWxlbS5ub2RlVmFsdWU7CisgICAgfQorICAgIC8vIERvIG5vdCBpbmNs
dWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2RlcworCisgICAgcmV0dXJu
IHJldDsKK307CisKK0V4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0geworCisgICAgLy8gQ2FuIGJl
IGFkanVzdGVkIGJ5IHRoZSB1c2VyCisgICAgY2FjaGVMZW5ndGg6IDUwLAorCisgICAgY3JlYXRl
UHNldWRvOiBtYXJrRnVuY3Rpb24sCisKKyAgICBtYXRjaDogbWF0Y2hFeHByLAorCisgICAgYXR0
ckhhbmRsZToge30sCisKKyAgICBmaW5kOiB7fSwKKworICAgIHJlbGF0aXZlOiB7CisgICAgICAg
ICI+IjogeyBkaXI6ICJwYXJlbnROb2RlIiwgZmlyc3Q6IHRydWUgfSwKKyAgICAgICAgIiAiOiB7
IGRpcjogInBhcmVudE5vZGUiIH0sCisgICAgICAgICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxp
bmciLCBmaXJzdDogdHJ1ZSB9LAorICAgICAgICAifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5n
IiB9CisgICAgfSwKKworICAgIHByZUZpbHRlcjogeworICAgICAgICAiQVRUUiI6IGZ1bmN0aW9u
KCBtYXRjaCApIHsKKyAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVu
ZXNjYXBlLCBmdW5lc2NhcGUgKTsKKworICAgICAgICAgICAgLy8gTW92ZSB0aGUgZ2l2ZW4gdmFs
dWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWQKKyAgICAgICAgICAgIG1h
dGNoWzNdID0gKCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxh
Y2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisKKyAgICAgICAgICAgIGlmICggbWF0Y2hbMl0g
PT09ICJ+PSIgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hbM10gPSAiICIgKyBtYXRjaFszXSAr
ICIgIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAw
LCA0ICk7CisgICAgICAgIH0sCisKKyAgICAgICAgIkNISUxEIjogZnVuY3Rpb24oIG1hdGNoICkg
eworICAgICAgICAgICAgLyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwclsiQ0hJTEQiXQorICAgICAg
ICAgICAgICAgIDEgdHlwZSAob25seXxudGh8Li4uKQorICAgICAgICAgICAgICAgIDIgd2hhdCAo
Y2hpbGR8b2YtdHlwZSkKKyAgICAgICAgICAgICAgICAzIGFyZ3VtZW50IChldmVufG9kZHxcZCp8
XGQqbihbKy1dXGQrKT98Li4uKQorICAgICAgICAgICAgICAgIDQgeG4tY29tcG9uZW50IG9mIHhu
K3kgYXJndW1lbnQgKFsrLV0/XGQqbnwpCisgICAgICAgICAgICAgICAgNSBzaWduIG9mIHhuLWNv
bXBvbmVudAorICAgICAgICAgICAgICAgIDYgeCBvZiB4bi1jb21wb25lbnQKKyAgICAgICAgICAg
ICAgICA3IHNpZ24gb2YgeS1jb21wb25lbnQKKyAgICAgICAgICAgICAgICA4IHkgb2YgeS1jb21w
b25lbnQKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnRv
TG93ZXJDYXNlKCk7CisKKyAgICAgICAgICAgIGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9
PT0gIm50aCIgKSB7CisgICAgICAgICAgICAgICAgLy8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnQK
KyAgICAgICAgICAgICAgICBpZiAoICFtYXRjaFszXSApIHsKKyAgICAgICAgICAgICAgICAgICAg
U2l6emxlLmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElM
RAorICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3Bl
Y3RpdmVseSB0byAwLzEKKyAgICAgICAgICAgICAgICBtYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8g
bWF0Y2hbNV0gKyAobWF0Y2hbNl0gfHwgMSkgOiAyICogKCBtYXRjaFszXSA9PT0gImV2ZW4iIHx8
IG1hdGNoWzNdID09PSAib2RkIiApICk7CisgICAgICAgICAgICAgICAgbWF0Y2hbNV0gPSArKCAo
IG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gIm9kZCIgKTsKKworICAgICAg
ICAgICAgLy8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzCisgICAgICAgICAgICB9IGVs
c2UgaWYgKCBtYXRjaFszXSApIHsKKyAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNo
WzBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAg
ICAgfSwKKworICAgICAgICAiUFNFVURPIjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAgICAg
ICAgdmFyIGV4Y2VzcywKKyAgICAgICAgICAgICAgICB1bnF1b3RlZCA9ICFtYXRjaFs2XSAmJiBt
YXRjaFsyXTsKKworICAgICAgICAgICAgaWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCggbWF0
Y2hbMF0gKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXMKKyAgICAgICAg
ICAgIGlmICggbWF0Y2hbM10gKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBtYXRjaFs0
XSB8fCBtYXRjaFs1XSB8fCAiIjsKKworICAgICAgICAgICAgLy8gU3RyaXAgZXhjZXNzIGNoYXJh
Y3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHMKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHVu
cXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJgorICAgICAgICAgICAgICAgIC8v
IEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCisgICAgICAgICAgICAgICAg
KGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJgorICAgICAgICAgICAgICAg
IC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcworICAgICAgICAgICAg
ICAgIChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCAiKSIsIHVucXVvdGVkLmxlbmd0aCAtIGV4
Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHsKKworICAgICAgICAgICAgICAgIC8vIGV4Y2Vz
cyBpcyBhIG5lZ2F0aXZlIGluZGV4CisgICAgICAgICAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFsw
XS5zbGljZSggMCwgZXhjZXNzICk7CisgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSB1bnF1b3Rl
ZC5zbGljZSggMCwgZXhjZXNzICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJl
dHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5
cGUgYW5kIGFyZ3VtZW50KQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZmlsdGVyOiB7CisKKyAgICAgICAgIlRBRyI6IGZ1
bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkgeworICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0g
bm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJD
YXNlKCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gIioiID8KKyAg
ICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOgorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5u
b2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lOworICAg
ICAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgIkNMQVNTIjogZnVuY3Rpb24o
IGNsYXNzTmFtZSApIHsKKyAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xh
c3NOYW1lICsgIiAiIF07CisKKyAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuIHx8CisgICAgICAg
ICAgICAgICAgKHBhdHRlcm4gPSBuZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIg
KyBjbGFzc05hbWUgKyAiKCIgKyB3aGl0ZXNwYWNlICsgInwkKSIgKSkgJiYKKyAgICAgICAgICAg
ICAgICBjbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09
ICJzdHJpbmciICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAh
PT0gInVuZGVmaW5lZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIgKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICAiQVRUUiI6IGZ1bmN0aW9u
KCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVt
LCBuYW1lICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBudWxsICkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICIhPSI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICggIW9wZXJhdG9yICkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gIiI7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/
IHJlc3VsdCA9PT0gY2hlY2sgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIiE9
IiA/IHJlc3VsdCAhPT0gY2hlY2sgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0g
Il49IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDoKKyAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZigg
Y2hlY2sgKSA+IC0xIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICIkPSIgPyBj
aGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOgorICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIn49IiA/ICggIiAiICsgcmVzdWx0LnJlcGxhY2Uo
IHJ3aGl0ZXNwYWNlLCAiICIgKSArICIgIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6CisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAifD0iID8gcmVzdWx0ID09PSBjaGVjayB8fCBy
ZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyAiLSIgOgorICAg
ICAgICAgICAgICAgICAgICBmYWxzZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgIkNISUxEIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFz
dCApIHsKKyAgICAgICAgICAgIHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09ICJu
dGgiLAorICAgICAgICAgICAgICAgIGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSAibGFz
dCIsCisgICAgICAgICAgICAgICAgb2ZUeXBlID0gd2hhdCA9PT0gIm9mLXR5cGUiOworCisgICAg
ICAgICAgICByZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/CisKKyAgICAgICAgICAg
ICAgICAvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pCisgICAgICAgICAgICAgICAgZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTsK
KyAgICAgICAgICAgICAgICB9IDoKKworICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBj
b250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZSwgdW5pcXVlQ2Fj
aGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICBkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyAibmV4dFNpYmxpbmciIDogInByZXZp
b3VzU2libGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVu
dE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNhY2hlID0g
IXhtbCAmJiAhb2ZUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGZhbHNlOwor
CisgICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50ICkgeworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHNpbXBsZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoIGRpciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBu
b2RlWyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IG9mVHlwZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLm5vZGVUeXBlID09PSAxICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVyc2UgZGlyZWN0aW9uIGZv
ciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFydCA9IGRpciA9IHR5cGUgPT09ICJvbmx5IiAmJiAhc3RhcnQgJiYg
Im5leHRTaWJsaW5nIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZp
cnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRg
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlv
dXNseS1jYWNoZWQgaW5kZXgKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmlu
IGEgZ3ppcC1mcmllbmRseSB3YXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0g
cGFyZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyQ2FjaGUgPSBub2RlWyBl
eHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcw
OSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVb
IG5vZGUudW5pcXVlSUQgXSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0
ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVb
IDEgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gbm9kZUluZGV4ICYmIGNh
Y2hlWyAyIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVJbmRleCAm
JiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIg
XSB8fAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNl
ZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgeworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24g
YHBhcmVudGAgYW5kIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRp
cnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVs
ZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB1c2VDYWNoZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaW4g
YSBnemlwLWZyaWVuZGx5IHdheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
ID0gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IG5v
ZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAo
alF1ZXJ5IGdoLTE3MDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNh
Y2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUg
XSB8fCBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gY2Fj
aGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaWZmID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHhtbCA6bnRoLWNoaWxkKC4uLikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBv
ciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBkaWZmID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3Rh
cnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9ICsrbm9k
ZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggb2ZUeXBlID8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgPT09IG5hbWUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsrZGlmZiApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHVzZUNhY2hlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hl
ID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25s
eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbmQg
YWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hl
WyBub2RlLnVuaXF1ZUlEIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGVbIHR5cGUg
XSA9IFsgZGlycnVucywgZGlmZiBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bm9kZSA9PT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmNvcnBvcmF0
ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgZGlmZiAtPSBsYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+
PSAwICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgICJQU0VVRE8iOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHsK
KyAgICAgICAgICAgIC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQor
ICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xh
c3NlcworICAgICAgICAgICAgLy8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNh
c2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnMKKyAgICAg
ICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3MK
KyAgICAgICAgICAgIHZhciBhcmdzLAorICAgICAgICAgICAgICAgIGZuID0gRXhwci5wc2V1ZG9z
WyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHwK
KyAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgcHNldWRvOiAi
ICsgcHNldWRvICk7CisKKyAgICAgICAgICAgIC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNl
dWRvIHRvIGluZGljYXRlIHRoYXQKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVk
IHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uCisgICAgICAgICAgICAvLyBqdXN0IGFzIFNp
enpsZSBkb2VzCisgICAgICAgICAgICBpZiAoIGZuWyBleHBhbmRvIF0gKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZuKCBhcmd1bWVudCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMKKyAgICAgICAgICAg
IGlmICggZm4ubGVuZ3RoID4gMSApIHsKKyAgICAgICAgICAgICAgICBhcmdzID0gWyBwc2V1ZG8s
IHBzZXVkbywgIiIsIGFyZ3VtZW50IF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4cHIuc2V0
RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/CisgICAgICAg
ICAgICAgICAgICAgIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGkgPSBtYXRjaGVkLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGluZGV4T2YoIHNl
ZWQsIG1hdGNoZWRbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkWyBpZHgg
XSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBlbGVt
LCAwLCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBmbjsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBwc2V1ZG9zOiB7
CisgICAgICAgIC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvcworICAgICAgICAibm90Ijog
bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgIC8vIFRyaW0g
dGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlCisgICAgICAgICAgICAvLyB0byBhdm9pZCB0
cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZworICAgICAgICAgICAgLy8gc3BhY2VzIGFzIGNv
bWJpbmF0b3JzCisgICAgICAgICAgICB2YXIgaW5wdXQgPSBbXSwKKyAgICAgICAgICAgICAgICBy
ZXN1bHRzID0gW10sCisgICAgICAgICAgICAgICAgbWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9y
LnJlcGxhY2UoIHJ0cmltLCAiJDEiICkgKTsKKworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJb
IGV4cGFuZG8gXSA/CisgICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVk
LCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbGVt
LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVs
bCwgeG1sLCBbXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNlZWQubGVuZ3RoOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0
Y2hlcmAKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
KSA6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW5wdXRbMF0gPSBlbGVtOworICAgICAgICAgICAgICAgICAgICBt
YXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7CisgICAgICAgICAgICAgICAgICAg
IC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpCisgICAgICAgICAgICAgICAg
ICAgIGlucHV0WzBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHRz
LnBvcCgpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0pLAorCisgICAgICAgICJoYXMi
OiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiBTaXp6bGUoIHNlbGVj
dG9yLCBlbGVtICkubGVuZ3RoID4gMDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pLAorCisg
ICAgICAgICJjb250YWlucyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHsKKyAgICAg
ICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkg
KS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pLAorCisg
ICAgICAgIC8vICJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygp
IHNlbGVjdG9yCisgICAgICAgIC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxh
bmd1YWdlIHZhbHVlCisgICAgICAgIC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMs
CisgICAgICAgIC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRl
bHkgZm9sbG93ZWQgYnkgIi0iLgorICAgICAgICAvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0
IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRp
dmVseS4KKyAgICAgICAgLy8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEg
dmFsaWQgbGFuZ3VhZ2UgbmFtZS4iCisgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3Nl
bGVjdG9ycy8jbGFuZy1wc2V1ZG8KKyAgICAgICAgImxhbmciOiBtYXJrRnVuY3Rpb24oIGZ1bmN0
aW9uKCBsYW5nICkgeworICAgICAgICAgICAgLy8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQg
aWRlbnRpZmllcgorICAgICAgICAgICAgaWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8ICIi
KSApIHsKKyAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBsYW5nOiAi
ICsgbGFuZyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFuZyA9IGxhbmcucmVwbGFj
ZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciBlbGVtTGFuZzsKKyAg
ICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW1MYW5nID0g
ZG9jdW1lbnRJc0hUTUwgPworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5sYW5nIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IGVs
ZW0uZ2V0QXR0cmlidXRlKCJsYW5nIikpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArICIt
IiApID09PSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSB3aGls
ZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSks
CisKKyAgICAgICAgLy8gTWlzY2VsbGFuZW91cworICAgICAgICAidGFyZ2V0IjogZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5k
b3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHJldHVybiBoYXNoICYmIGhhc2guc2xpY2Uo
IDEgKSA9PT0gZWxlbS5pZDsKKyAgICAgICAgfSwKKworICAgICAgICAicm9vdCI6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGRvY0VsZW07CisgICAgICAg
IH0sCisKKyAgICAgICAgImZvY3VzIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0Zv
Y3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYg
fHwgfmVsZW0udGFiSW5kZXgpOworICAgICAgICB9LAorCisgICAgICAgIC8vIEJvb2xlYW4gcHJv
cGVydGllcworICAgICAgICAiZW5hYmxlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAg
ICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlOworICAgICAgICB9LAorCisgICAgICAg
ICJkaXNhYmxlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0u
ZGlzYWJsZWQgPT09IHRydWU7CisgICAgICAgIH0sCisKKyAgICAgICAgImNoZWNrZWQiOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCBy
ZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50cworICAgICAgICAgICAgLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2No
ZWNrZWQKKyAgICAgICAgICAgIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNh
c2UoKTsKKyAgICAgICAgICAgIHJldHVybiAobm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgISFlbGVt
LmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gIm9wdGlvbiIgJiYgISFlbGVtLnNlbGVjdGVkKTsK
KyAgICAgICAgfSwKKworICAgICAgICAic2VsZWN0ZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICAgICAgICAgIC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRl
ZmF1bHQKKyAgICAgICAgICAgIC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKKyAg
ICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgIGVsZW0u
cGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBD
b250ZW50cworICAgICAgICAiZW1wdHkiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvCisgICAgICAg
ICAgICAvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVz
ICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksCisgICAgICAgICAgICAvLyAgIGJ1
dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBl
dGMuKQorICAgICAgICAgICAgLy8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRl
cyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlbgorICAgICAgICAgICAgZm9yICggZWxlbSA9
IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorCisgICAgICAgICJwYXJlbnQiOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJd
KCBlbGVtICk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRWxlbWVudC9pbnB1dCB0eXBlcwor
ICAgICAgICAiaGVhZGVyIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4g
cmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisgICAgICAgIH0sCisKKyAgICAgICAgImlu
cHV0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gcmlucHV0cy50ZXN0
KCBlbGVtLm5vZGVOYW1lICk7CisgICAgICAgIH0sCisKKyAgICAgICAgImJ1dHRvbiI6IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5
cGUgPT09ICJidXR0b24iIHx8IG5hbWUgPT09ICJidXR0b24iOworICAgICAgICB9LAorCisgICAg
ICAgICJ0ZXh0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgYXR0cjsKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIg
JiYKKyAgICAgICAgICAgICAgICBlbGVtLnR5cGUgPT09ICJ0ZXh0IiAmJgorCisgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydDogSUU8OAorICAgICAgICAgICAgICAgIC8vIE5ldyBIVE1MNSBhdHRy
aWJ1dGUgdmFsdWVzIChlLmcuLCAic2VhcmNoIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSAi
dGV4dCIKKyAgICAgICAgICAgICAgICAoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUi
KSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09ICJ0ZXh0IiApOworICAgICAgICB9
LAorCisgICAgICAgIC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb24KKyAgICAgICAgImZpcnN0Ijog
Y3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBb
IDAgXTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImxhc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNl
dWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKyAgICAgICAgICAgIHJldHVy
biBbIGxlbmd0aCAtIDEgXTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImVxIjogY3JlYXRlUG9z
aXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkg
eworICAgICAgICAgICAgcmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGgg
OiBhcmd1bWVudCBdOworICAgICAgICB9KSwKKworICAgICAgICAiZXZlbiI6IGNyZWF0ZVBvc2l0
aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworICAgICAgICAg
ICAgdmFyIGkgPSAwOworICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7
CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAgIH0pLAorCisgICAgICAg
ICJvZGQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxl
bmd0aCApIHsKKyAgICAgICAgICAgIHZhciBpID0gMTsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8
IGxlbmd0aDsgaSArPSAyICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBp
ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAg
ICAgICB9KSwKKworICAgICAgICAibHQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9u
KCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisgICAgICAgICAgICB2YXIgaSA9
IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7CisgICAgICAgICAg
ICBmb3IgKCA7IC0taSA+PSAwOyApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVz
aCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsK
KyAgICAgICAgfSksCisKKyAgICAgICAgImd0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5j
dGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgdmFy
IGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OworICAgICAg
ICAgICAgZm9yICggOyArK2kgPCBsZW5ndGg7ICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5k
ZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJ
bmRleGVzOworICAgICAgICB9KQorICAgIH0KK307CisKK0V4cHIucHNldWRvc1sibnRoIl0gPSBF
eHByLnBzZXVkb3NbImVxIl07CisKKy8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zCitm
b3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNz
d29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHsKKyAgICBFeHByLnBzZXVkb3NbIGkgXSA9IGNy
ZWF0ZUlucHV0UHNldWRvKCBpICk7Cit9Citmb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNl
dDogdHJ1ZSB9ICkgeworICAgIEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRv
KCBpICk7Cit9CisKKy8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVycworZnVu
Y3Rpb24gc2V0RmlsdGVycygpIHt9CitzZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVy
cyA9IEV4cHIucHNldWRvczsKK0V4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7CisK
K3Rva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9u
bHkgKSB7CisgICAgdmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsCisgICAgICAgIHNv
RmFyLCBncm91cHMsIHByZUZpbHRlcnMsCisgICAgICAgIGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNl
bGVjdG9yICsgIiAiIF07CisKKyAgICBpZiAoIGNhY2hlZCApIHsKKyAgICAgICAgcmV0dXJuIHBh
cnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKKyAgICB9CisKKyAgICBzb0ZhciA9IHNl
bGVjdG9yOworICAgIGdyb3VwcyA9IFtdOworICAgIHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRl
cjsKKworICAgIHdoaWxlICggc29GYXIgKSB7CisKKyAgICAgICAgLy8gQ29tbWEgYW5kIGZpcnN0
IHJ1bgorICAgICAgICBpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0Zh
ciApKSApIHsKKyAgICAgICAgICAgIGlmICggbWF0Y2ggKSB7CisgICAgICAgICAgICAgICAgLy8g
RG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWQKKyAgICAgICAgICAgICAgICBz
b0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0ZhcjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7CisgICAgICAg
IH0KKworICAgICAgICBtYXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgLy8gQ29tYmluYXRvcnMK
KyAgICAgICAgaWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7Cisg
ICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKKyAgICAgICAgICAgIHRva2Vucy5w
dXNoKHsKKyAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hlZCwKKyAgICAgICAgICAgICAgICAv
LyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKKyAgICAgICAgICAgICAgICB0
eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgIiAiICkKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZpbHRlcnMKKyAgICAgICAgZm9yICggdHlwZSBpbiBFeHByLmZpbHRl
ciApIHsKKyAgICAgICAgICAgIGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYygg
c29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKKyAgICAgICAgICAgICAgICAobWF0
Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKKyAgICAgICAgICAgICAgICBt
YXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKKyAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaGVkLAorICAgICAgICAgICAgICAgICAgICB0
eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgICAgICBtYXRjaGVzOiBtYXRjaAorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQu
bGVuZ3RoICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFtYXRj
aGVkICkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBS
ZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKKyAgICAvLyBpZiB3ZSdyZSBq
dXN0IHBhcnNpbmcKKyAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0
b2tlbnMKKyAgICByZXR1cm4gcGFyc2VPbmx5ID8KKyAgICAgICAgc29GYXIubGVuZ3RoIDoKKyAg
ICAgICAgc29GYXIgPworICAgICAgICAgICAgU2l6emxlLmVycm9yKCBzZWxlY3RvciApIDoKKyAg
ICAgICAgICAgIC8vIENhY2hlIHRoZSB0b2tlbnMKKyAgICAgICAgICAgIHRva2VuQ2FjaGUoIHNl
bGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOworfTsKKworZnVuY3Rpb24gdG9TZWxlY3Rvcigg
dG9rZW5zICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwK
KyAgICAgICAgc2VsZWN0b3IgPSAiIjsKKyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAg
ICAgICAgc2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlOworICAgIH0KKyAgICByZXR1cm4gc2Vs
ZWN0b3I7Cit9CisKK2Z1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3Is
IGJhc2UgKSB7CisgICAgdmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLAorICAgICAgICBjaGVja05v
bkVsZW1lbnRzID0gYmFzZSAmJiBkaXIgPT09ICJwYXJlbnROb2RlIiwKKyAgICAgICAgZG9uZU5h
bWUgPSBkb25lKys7CisKKyAgICByZXR1cm4gY29tYmluYXRvci5maXJzdCA/CisgICAgICAgIC8v
IENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAorICAgICAg
ICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgd2hpbGUgKCAo
ZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSA6CisKKyAgICAgICAgLy8gQ2hlY2sgYWdhaW5zdCBhbGwg
YW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzCisgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250
ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRl
ckNhY2hlLAorICAgICAgICAgICAgICAgIG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBd
OworCisgICAgICAgICAgICAvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5v
ZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmcKKyAgICAg
ICAgICAgIGlmICggeG1sICkgeworICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVt
WyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0g
MSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBt
YXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8
IChlbGVtWyBleHBhbmRvIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1
cHBvcnQ6IElFIDw5IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuZCBhZ2Fp
bnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHwgKG91
dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9KTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsgZGlyIF0pICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBd
ID09PSBkb25lTmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc2ln
biB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1l
bnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXdDYWNoZVsgMiBdID0g
b2xkQ2FjaGVbIDIgXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1w
cm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bmlxdWVDYWNoZVsgZGlyIF0gPSBuZXdDYWNoZTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUg
dG8ga2VlcCBjaGVja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKG5ld0Nh
Y2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKK30KKworZnVu
Y3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgeworICAgIHJldHVybiBtYXRjaGVycy5s
ZW5ndGggPiAxID8KKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAg
ICAgICAgICAgIHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKCBp
LS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQs
IHhtbCApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0gOgorICAgICAgICBtYXRjaGVyc1swXTsKK30KKworZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0
cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgeworICAgIHZhciBpID0gMCwKKyAgICAg
ICAgbGVuID0gY29udGV4dHMubGVuZ3RoOworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewor
ICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwg
bWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKKyAgICB2YXIgZWxlbSwKKyAgICAgICAgbmV3
VW5tYXRjaGVkID0gW10sCisgICAgICAgIGkgPSAwLAorICAgICAgICBsZW4gPSB1bm1hdGNoZWQu
bGVuZ3RoLAorICAgICAgICBtYXBwZWQgPSBtYXAgIT0gbnVsbDsKKworICAgIGZvciAoIDsgaSA8
IGxlbjsgaSsrICkgeworICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKKyAg
ICAgICAgICAgIGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkg
eworICAgICAgICAgICAgICAgIG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7CisgICAgICAgICAg
ICAgICAgaWYgKCBtYXBwZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcC5wdXNoKCBpICk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmls
dGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVj
dG9yICkgeworICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkg
eworICAgICAgICBwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApOworICAgIH0K
KyAgICBpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHsKKyAgICAg
ICAgcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApOwor
ICAgIH0KKyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBj
b250ZXh0LCB4bWwgKSB7CisgICAgICAgIHZhciB0ZW1wLCBpLCBlbGVtLAorICAgICAgICAgICAg
cHJlTWFwID0gW10sCisgICAgICAgICAgICBwb3N0TWFwID0gW10sCisgICAgICAgICAgICBwcmVl
eGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAorCisgICAgICAgICAgICAvLyBHZXQgaW5pdGlhbCBl
bGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAorICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8
IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwgY29udGV4dC5ub2RlVHlwZSA/IFsg
Y29udGV4dCBdIDogY29udGV4dCwgW10gKSwKKworICAgICAgICAgICAgLy8gUHJlZmlsdGVyIHRv
IGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3lu
Y2hyb25pemF0aW9uCisgICAgICAgICAgICBtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVk
IHx8ICFzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICBjb25kZW5zZSggZWxlbXMsIHByZU1h
cCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisgICAgICAgICAgICAgICAgZWxlbXMsCisK
KyAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8KKyAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9z
dEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAorICAgICAgICAgICAgICAgIHBvc3RGaW5k
ZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID8K
KworICAgICAgICAgICAgICAgICAgICAvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBu
ZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgW10gOgorCisgICAgICAgICAgICAgICAgICAg
IC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHRzIDoKKyAgICAgICAgICAgICAgICBtYXRjaGVySW47CisKKyAgICAgICAgLy8gRmlu
ZCBwcmltYXJ5IG1hdGNoZXMKKyAgICAgICAgaWYgKCBtYXRjaGVyICkgeworICAgICAgICAgICAg
bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKKyAgICAgICAgaWYgKCBwb3N0RmlsdGVy
ICkgeworICAgICAgICAgICAgdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7
CisgICAgICAgICAgICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7CisKKyAg
ICAgICAgICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFj
ayB0byBtYXRjaGVySW4KKyAgICAgICAgICAgIGkgPSB0ZW1wLmxlbmd0aDsKKyAgICAgICAgICAg
IHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSB0ZW1wW2ldKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRj
aGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2VlZCApIHsKKyAgICAgICAgICAgIGlm
ICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBwb3N0
RmluZGVyICkgeworICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJP
dXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4
dHMKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFtdOworICAgICAgICAgICAgICAgICAgICBp
ID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNl
IGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwb3N0
RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20g
c2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWQKKyAgICAgICAgICAgICAg
ICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwg
ZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIGVs
ZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtYXRjaGVyT3V0ID0gY29uZGVuc2UoCisgICAgICAgICAg
ICAgICAgbWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/CisgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6CisgICAgICAg
ICAgICAgICAgICAgIG1hdGNoZXJPdXQKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAo
IHBvc3RGaW5kZXIgKSB7CisgICAgICAgICAgICAgICAgcG9zdEZpbmRlciggbnVsbCwgcmVzdWx0
cywgbWF0Y2hlck91dCwgeG1sICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0pOworfQorCitmdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5z
ICkgeworICAgIHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosCisgICAgICAgIGxlbiA9IHRv
a2Vucy5sZW5ndGgsCisgICAgICAgIGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRv
a2Vuc1swXS50eXBlIF0sCisgICAgICAgIGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRp
dmUgfHwgRXhwci5yZWxhdGl2ZVsiICJdLAorICAgICAgICBpID0gbGVhZGluZ1JlbGF0aXZlID8g
MSA6IDAsCisKKyAgICAgICAgLy8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhh
dCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocykKKyAgICAg
ICAgbWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICByZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0OworICAgICAgICB9LCBpbXBsaWNp
dFJlbGF0aXZlLCB0cnVlICksCisgICAgICAgIG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0
b3IoIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YoIGNoZWNr
Q29udGV4dCwgZWxlbSApID4gLTE7CisgICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUg
KSwKKyAgICAgICAgbWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7
CisgICAgICAgICAgICB2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNv
bnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgKKyAgICAgICAgICAgICAgICAoY2hl
Y2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPworICAgICAgICAgICAgICAgICAgICBtYXRj
aENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDoKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApOworICAgICAgICAgICAgLy8gQXZv
aWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpCisgICAgICAgICAgICBjaGVja0Nv
bnRleHQgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfSBdOworCisg
ICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgIGlmICggKG1hdGNoZXIgPSBFeHBy
LnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsKKyAgICAgICAgICAgIG1hdGNoZXJzID0g
WyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tl
bnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOworCisgICAgICAg
ICAgICAvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlcgor
ICAgICAgICAgICAgaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7CisgICAgICAgICAgICAgICAg
Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhh
bmRsaW5nCisgICAgICAgICAgICAgICAgaiA9ICsraTsKKyAgICAgICAgICAgICAgICBmb3IgKCA7
IGogPCBsZW47IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZl
WyB0b2tlbnNbal0udHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHNldE1hdGNoZXIoCisgICAgICAgICAgICAgICAgICAgIGkgPiAxICYmIGVsZW1lbnRN
YXRjaGVyKCBtYXRjaGVycyApLAorICAgICAgICAgICAgICAgICAgICBpID4gMSAmJiB0b1NlbGVj
dG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3
YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVu
dCBgKmAKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5j
b25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09ICIgIiA/ICIqIiA6ICIiIH0p
CisgICAgICAgICAgICAgICAgICAgICkucmVwbGFjZSggcnRyaW0sICIkMSIgKSwKKyAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgaSA8IGogJiYgbWF0Y2hl
ckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksCisgICAgICAgICAgICAgICAgICAg
IGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGog
KSkgKSwKKyAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMg
KQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaGVy
cy5wdXNoKCBtYXRjaGVyICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZWxlbWVu
dE1hdGNoZXIoIG1hdGNoZXJzICk7Cit9CisKK2Z1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRj
aGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHsKKyAgICB2YXIgYnlTZXQgPSBz
ZXRNYXRjaGVycy5sZW5ndGggPiAwLAorICAgICAgICBieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hl
cnMubGVuZ3RoID4gMCwKKyAgICAgICAgc3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNv
bnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkgeworICAgICAgICAgICAgdmFyIGVsZW0s
IGosIG1hdGNoZXIsCisgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50ID0gMCwKKyAgICAgICAg
ICAgICAgICBpID0gIjAiLAorICAgICAgICAgICAgICAgIHVubWF0Y2hlZCA9IHNlZWQgJiYgW10s
CisgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IFtdLAorICAgICAgICAgICAgICAgIGNvbnRl
eHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LAorICAgICAgICAgICAgICAgIC8vIFdlIG11c3Qg
YWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHQKKyAg
ICAgICAgICAgICAgICBlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsiVEFH
Il0oICIqIiwgb3V0ZXJtb3N0ICksCisgICAgICAgICAgICAgICAgLy8gVXNlIGludGVnZXIgZGly
cnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXIKKyAgICAgICAgICAgICAgICBk
aXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1h
dGgucmFuZG9tKCkgfHwgMC4xKSwKKyAgICAgICAgICAgICAgICBsZW4gPSBlbGVtcy5sZW5ndGg7
CisKKyAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgeworICAgICAgICAgICAgICAgIG91dGVy
bW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9z
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHBhc3Npbmcg
ZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHMKKyAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IElFPDksIFNhZmFyaQorICAgICAgICAgICAgLy8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVy
dGllcyAoSUU6ICJsZW5ndGgiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBi
eSBpZAorICAgICAgICAgICAgZm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkg
IT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggYnlFbGVtZW50ICYmIGVsZW0g
KSB7CisgICAgICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAo
ICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXREb2N1bWVudCggZWxlbSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgeG1sID0gIWRvY3VtZW50SXNIVE1MOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQg
fHwgZG9jdW1lbnQsIHhtbCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJy
dW5zID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Ig
c2V0IGZpbHRlcnMKKyAgICAgICAgICAgICAgICBpZiAoIGJ5U2V0ICkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNo
ZXJzCisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDb3VudC0tOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTGVuZ3RoZW4gdGhlIGFycmF5IGZv
ciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdAorICAgICAgICAgICAgICAgICAgICBpZiAo
IHNlZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bm1hdGNoZWQucHVzaCggZWxlbSAp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNp
dGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgCisgICAgICAgICAgICAv
LyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLgorICAgICAgICAgICAgbWF0Y2hlZENvdW50
ICs9IGk7CisKKyAgICAgICAgICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBl
bGVtZW50cworICAgICAgICAgICAgLy8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVy
ZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YAorICAgICAg
ICAgICAgLy8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVu
dHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlCisgICAgICAgICAgICAvLyBubyBl
bGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLgorICAgICAgICAgICAgLy8gSW5jcmVtZW50aW5n
IGFuIGluaXRpYWxseS1zdHJpbmcgIjAiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmlu
ZyBvbmx5IGluIHRoYXQKKyAgICAgICAgICAgIC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGlu
IGEgIjAwIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc28K
KyAgICAgICAgICAgIC8vIG51bWVyaWNhbGx5IHplcm8uCisgICAgICAgICAgICBpZiAoIGJ5U2V0
ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHsKKyAgICAgICAgICAgICAgICBqID0gMDsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwg
eG1sICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBzZWVkICkg
eworICAgICAgICAgICAgICAgICAgICAvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8g
ZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nCisgICAgICAgICAgICAgICAgICAgIGlmICgg
bWF0Y2hlZENvdW50ID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0t
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISh1bm1hdGNoZWRbaV0gfHwg
c2V0TWF0Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1h
dGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVz
IHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgIHNldE1hdGNo
ZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHMKKyAgICAgICAgICAgICAgICBwdXNo
LmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7CisKKyAgICAgICAgICAgICAgICAvLyBTZWVk
bGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMg
c3RpcHVsYXRlIHNvcnRpbmcKKyAgICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCAmJiAhc2Vl
ZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgKCBtYXRj
aGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgU2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBn
bG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVycworICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7
CisgICAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7CisgICAgICAgICAgICAg
ICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB1bm1hdGNoZWQ7CisgICAgICAgIH07CisKKyAgICByZXR1cm4gYnlT
ZXQgPworICAgICAgICBtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoKKyAgICAgICAgc3Vw
ZXJNYXRjaGVyOworfQorCitjb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2Vs
ZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworICAgIHZhciBpLAorICAg
ICAgICBzZXRNYXRjaGVycyA9IFtdLAorICAgICAgICBlbGVtZW50TWF0Y2hlcnMgPSBbXSwKKyAg
ICAgICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsKKworICAgIGlm
ICggIWNhY2hlZCApIHsKKyAgICAgICAgLy8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNp
dmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50CisgICAg
ICAgIGlmICggIW1hdGNoICkgeworICAgICAgICAgICAgbWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0
b3IgKTsKKyAgICAgICAgfQorICAgICAgICBpID0gbWF0Y2gubGVuZ3RoOworICAgICAgICB3aGls
ZSAoIGktLSApIHsKKyAgICAgICAgICAgIGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRj
aFtpXSApOworICAgICAgICAgICAgaWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHsKKyAgICAgICAg
ICAgICAgICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0
aW9uCisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJv
bUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApOworCisgICAg
ICAgIC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvbgorICAgICAgICBjYWNoZWQuc2Vs
ZWN0b3IgPSBzZWxlY3RvcjsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlZDsKK307CisKKy8qKgor
ICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUn
cyBjb21waWxlZAorICogIHNlbGVjdG9yIGZ1bmN0aW9ucworICogQHBhcmFtIHtTdHJpbmd8RnVu
Y3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWQKKyAqICBzZWxlY3Rv
ciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlCisgKiBAcGFyYW0ge0VsZW1lbnR9
IGNvbnRleHQKKyAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXQorICogQHBhcmFtIHtBcnJheX0g
W3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3QKKyAqLworc2VsZWN0ID0g
U2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2Vl
ZCApIHsKKyAgICB2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKKyAgICAgICAgY29t
cGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgJiYgc2VsZWN0b3IsCisgICAg
ICAgIG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVj
dG9yIHx8IHNlbGVjdG9yKSApOworCisgICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107CisKKyAg
ICAvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxl
Y3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZAorICAgIC8vICh0aGUgbGF0dGVyIG9mIHdoaWNo
IGd1YXJhbnRlZXMgdXMgY29udGV4dCkKKyAgICBpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHsK
KworICAgICAgICAvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxl
Y3RvciBpcyBhbiBJRAorICAgICAgICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNl
KCAwICk7CisgICAgICAgIGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5z
WzBdKS50eXBlID09PSAiSUQiICYmCisgICAgICAgICAgICAgICAgc3VwcG9ydC5nZXRCeUlkICYm
IGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYKKyAgICAgICAgICAg
ICAgICBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgeworCisgICAgICAgICAgICBj
b250ZXh0ID0gKCBFeHByLmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5l
c2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdOworICAgICAgICAgICAgaWYg
KCAhY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgICAg
ICAgICAgLy8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnks
IHNvIHN0ZXAgdXAgYSBsZXZlbAorICAgICAgICAgICAgfSBlbHNlIGlmICggY29tcGlsZWQgKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNo
aWZ0KCkudmFsdWUubGVuZ3RoICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGZXRjaCBhIHNl
ZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCisgICAgICAgIGkgPSBtYXRjaEV4cHJb
Im5lZWRzQ29udGV4dCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDsKKyAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKwor
ICAgICAgICAgICAgLy8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvcgorICAgICAgICAgICAg
aWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIChmaW5kID0gRXhw
ci5maW5kWyB0eXBlIF0pICkgeworICAgICAgICAgICAgICAgIC8vIFNlYXJjaCwgZXhwYW5kaW5n
IGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9ycworICAgICAgICAgICAgICAg
IGlmICggKHNlZWQgPSBmaW5kKAorICAgICAgICAgICAgICAgICAgICB0b2tlbi5tYXRjaGVzWzBd
LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksCisgICAgICAgICAgICAgICAgICAgIHJz
aWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFy
ZW50Tm9kZSApIHx8IGNvbnRleHQKKyAgICAgICAgICAgICAgICApKSApIHsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNh
biByZXR1cm4gZWFybHkKKyAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNwbGljZSggaSwgMSAp
OworICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0
b3IoIHRva2VucyApOworICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBh
IGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkCisgICAgLy8gUHJvdmlk
ZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxl
Y3RvciBhYm92ZQorICAgICggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkg
KSgKKyAgICAgICAgc2VlZCwKKyAgICAgICAgY29udGV4dCwKKyAgICAgICAgIWRvY3VtZW50SXNI
VE1MLAorICAgICAgICByZXN1bHRzLAorICAgICAgICAhY29udGV4dCB8fCByc2libGluZy50ZXN0
KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250
ZXh0CisgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0czsKK307CisKKy8vIE9uZS10aW1lIGFzc2ln
bm1lbnRzCisKKy8vIFNvcnQgc3RhYmlsaXR5CitzdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRv
LnNwbGl0KCIiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCIiKSA9PT0gZXhwYW5kbzsKKworLy8g
U3VwcG9ydDogQ2hyb21lIDE0LTM1KworLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRo
ZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgorc3VwcG9ydC5kZXRl
Y3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7CisKKy8vIEluaXRpYWxpemUgYWdhaW5zdCB0
aGUgZGVmYXVsdCBkb2N1bWVudAorc2V0RG9jdW1lbnQoKTsKKworLy8gU3VwcG9ydDogV2Via2l0
PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNykKKy8v
IERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKgorc3VwcG9y
dC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdjEgKSB7CisgICAgLy8gU2hvdWxk
IHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpCisgICAgcmV0dXJuIGRpdjEuY29t
cGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpICkgJiAx
OworfSk7CisKKy8vIFN1cHBvcnQ6IElFPDgKKy8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5
ICJpbnRlcnBvbGF0aW9uIgorLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy
YXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweAoraWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYg
KSB7CisgICAgZGl2LmlubmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKKyAgICByZXR1cm4g
ZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09ICIjIiA7Cit9KSApIHsKKyAg
ICBhZGRIYW5kbGUoICJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIiwgZnVuY3Rpb24oIGVsZW0sIG5h
bWUsIGlzWE1MICkgeworICAgICAgICBpZiAoICFpc1hNTCApIHsKKyAgICAgICAgICAgIHJldHVy
biBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSAidHlwZSIg
PyAxIDogMiApOworICAgICAgICB9CisgICAgfSk7Cit9CisKKy8vIFN1cHBvcnQ6IElFPDkKKy8v
IFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpCitpZiAo
ICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAgIGRp
di5pbm5lckhUTUwgPSAiPGlucHV0Lz4iOworICAgIGRpdi5maXJzdENoaWxkLnNldEF0dHJpYnV0
ZSggInZhbHVlIiwgIiIgKTsKKyAgICByZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRl
KCAidmFsdWUiICkgPT09ICIiOworfSkgKSB7CisgICAgYWRkSGFuZGxlKCAidmFsdWUiLCBmdW5j
dGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisgICAgICAgIGlmICggIWlzWE1MICYmIGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiApIHsKKyAgICAgICAgICAgIHJldHVy
biBlbGVtLmRlZmF1bHRWYWx1ZTsKKyAgICAgICAgfQorICAgIH0pOworfQorCisvLyBTdXBwb3J0
OiBJRTw5CisvLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdl
dEF0dHJpYnV0ZSBsaWVzCitpZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICByZXR1
cm4gZGl2LmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSA9PSBudWxsOworfSkgKSB7CisgICAgYWRk
SGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworICAgICAg
ICB2YXIgdmFsOworICAgICAgICBpZiAoICFpc1hNTCApIHsKKyAgICAgICAgICAgIHJldHVybiBl
bGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOgorICAgICAgICAgICAg
ICAgICAgICAodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVj
aWZpZWQgPworICAgICAgICAgICAgICAgICAgICB2YWwudmFsdWUgOgorICAgICAgICAgICAgICAg
IG51bGw7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworcmV0dXJuIFNpenpsZTsKKworfSkoIHdp
bmRvdyApOworCisKKworalF1ZXJ5LmZpbmQgPSBTaXp6bGU7CitqUXVlcnkuZXhwciA9IFNpenps
ZS5zZWxlY3RvcnM7CitqUXVlcnkuZXhwclsgIjoiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOwor
alF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7Citq
UXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OworalF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlz
WE1MOworalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOworCisKKwordmFyIGRpciA9
IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkgeworICAgIHZhciBtYXRjaGVkID0gW10sCisg
ICAgICAgIHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDsKKworICAgIHdoaWxlICggKCBl
bGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkgeworICAgICAgICBp
ZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICBpZiAoIHRydW5jYXRlICYm
IGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBlbGVtICk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIG1hdGNoZWQ7Cit9OworCisKK3ZhciBzaWJsaW5ncyA9IGZ1
bmN0aW9uKCBuLCBlbGVtICkgeworICAgIHZhciBtYXRjaGVkID0gW107CisKKyAgICBmb3IgKCA7
IG47IG4gPSBuLm5leHRTaWJsaW5nICkgeworICAgICAgICBpZiAoIG4ubm9kZVR5cGUgPT09IDEg
JiYgbiAhPT0gZWxlbSApIHsKKyAgICAgICAgICAgIG1hdGNoZWQucHVzaCggbiApOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIG1hdGNoZWQ7Cit9OworCisKK3ZhciBybmVlZHNDb250
ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0OworCit2YXIgcnNpbmdsZVRhZyA9
ICggL148KFtcdy1dKylccypcLz8+KD86PFwvXDE+fCkkLyApOworCisKKwordmFyIHJpc1NpbXBs
ZSA9IC9eLlteOiNcW1wuLF0qJC87CisKKy8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0
aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90CitmdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBx
dWFsaWZpZXIsIG5vdCApIHsKKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIg
KSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVs
ZW0sIGkgKSB7CisgICAgICAgICAgICAvKiBqc2hpbnQgLVcwMTggKi8KKyAgICAgICAgICAgIHJl
dHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDsKKyAgICAgICAg
fSApOworCisgICAgfQorCisgICAgaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7CisgICAgICAg
IHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICAgICAgcmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDsKKyAgICAgICAgfSAp
OworCisgICAgfQorCisgICAgaWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSAic3RyaW5nIiApIHsK
KyAgICAgICAgaWYgKCByaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7CisgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7CisgICAg
ICAgIH0KKworICAgICAgICBxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVs
ZW1lbnRzICk7CisgICAgfQorCisgICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVy
LCBlbGVtICkgPiAtMSApICE9PSBub3Q7CisgICAgfSApOworfQorCitqUXVlcnkuZmlsdGVyID0g
ZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7CisgICAgdmFyIGVsZW0gPSBlbGVtc1sgMCBd
OworCisgICAgaWYgKCBub3QgKSB7CisgICAgICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIp
IjsKKyAgICB9CisKKyAgICByZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5
cGUgPT09IDEgPworICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4
cHIgKSA/IFsgZWxlbSBdIDogW10gOgorICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHBy
LCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0
dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7CisgICAgICAgIH0gKSApOworfTsKKworalF1ZXJ5LmZu
LmV4dGVuZCggeworICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgdmFy
IGksCisgICAgICAgICAgICBsZW4gPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIHJldCA9IFtd
LAorICAgICAgICAgICAgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0
b3IgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBq
UXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gKSApOworICAgICAgICB9CisKKyAgICAgICAgZm9yICggaSA9IDA7
IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2Vs
ZlsgaSBdLCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5lZWRlZCBiZWNhdXNlICQo
IHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3Ig
KQorICAgICAgICByZXQgPSB0aGlzLnB1c2hTdGFjayggbGVuID4gMSA/IGpRdWVyeS51bmlxdWUo
IHJldCApIDogcmV0ICk7CisgICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgPyB0
aGlzLnNlbGVjdG9yICsgIiAiICsgc2VsZWN0b3IgOiBzZWxlY3RvcjsKKyAgICAgICAgcmV0dXJu
IHJldDsKKyAgICB9LAorICAgIGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAg
ICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZh
bHNlICkgKTsKKyAgICB9LAorICAgIG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAg
ICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRy
dWUgKSApOworICAgIH0sCisgICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAg
cmV0dXJuICEhd2lubm93KAorICAgICAgICAgICAgdGhpcywKKworICAgICAgICAgICAgLy8gSWYg
dGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAg
aW4gdGhlIHJldHVybmVkIHNldAorICAgICAgICAgICAgLy8gc28gJCgicDpmaXJzdCIpLmlzKCJw
Omxhc3QiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gInAiLgorICAgICAg
ICAgICAgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiAmJiBybmVlZHNDb250ZXh0LnRlc3Qo
IHNlbGVjdG9yICkgPworICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IgKSA6CisgICAg
ICAgICAgICAgICAgc2VsZWN0b3IgfHwgW10sCisgICAgICAgICAgICBmYWxzZQorICAgICAgICAp
Lmxlbmd0aDsKKyAgICB9Cit9ICk7CisKKworLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3QK
KworCisvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkK
K3ZhciByb290alF1ZXJ5LAorCisgICAgLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1M
IHN0cmluZ3MKKyAgICAvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2
aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCisgICAgLy8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24g
KCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpCisgICAgcnF1aWNrRXhwciA9IC9eKD86XHMqKDxb
XHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sCisKKyAgICBpbml0ID0galF1ZXJ5LmZuLmluaXQg
PSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7CisgICAgICAgIHZhciBtYXRj
aCwgZWxlbTsKKworICAgICAgICAvLyBIQU5ETEU6ICQoIiIpLCAkKG51bGwpLCAkKHVuZGVmaW5l
ZCksICQoZmFsc2UpCisgICAgICAgIGlmICggIXNlbGVjdG9yICkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMg
YW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnkKKyAgICAgICAgLy8gc28gbWlncmF0ZSBjYW4gc3VwcG9y
dCBqUXVlcnkuc3ViIChnaC0yMTAxKQorICAgICAgICByb290ID0gcm9vdCB8fCByb290alF1ZXJ5
OworCisgICAgICAgIC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKKyAgICAgICAgaWYgKCB0eXBlb2Yg
c2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgaWYgKCBzZWxlY3RvclsgMCBd
ID09PSAiPCIgJiYKKyAgICAgICAgICAgICAgICBzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0g
MSBdID09PSAiPiIgJiYKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5sZW5ndGggPj0gMyApIHsK
KworICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQg
ZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCisgICAgICAgICAg
ICAgICAgbWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07CisKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9y
ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBz
dXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWQKKyAgICAgICAgICAgIGlmICggbWF0
Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSkKKyAgICAgICAgICAgICAgICBpZiAoIG1hdGNo
WyAxIF0gKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNl
b2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXQKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBp
ZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1l
cmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKAorICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hbIDEgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgJiYgY29udGV4dC5ub2Rl
VHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICkgKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpCisgICAgICAgICAgICAg
ICAgICAgIGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxh
aW5PYmplY3QoIGNvbnRleHQgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG1h
dGNoIGluIGNvbnRleHQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9w
ZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0
Y2ggXSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBtYXRjaCBd
KCBjb250ZXh0WyBtYXRjaCBdICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAu
Li5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRy
KCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgICAgICAgICAgLy8gSEFO
RExFOiAkKCNpZCkKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBCbGFja2JlcnJ5IDQuNgorICAgICAgICAgICAgICAg
ICAgICAvLyBnRUJJRCByZXR1cm5zIG5vZGVzIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgKCM2
OTYzKQorICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkg
eworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0
bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5s
ZW5ndGggPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1sgMCBdID0gZWxlbTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9
IGRvY3VtZW50OworICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7CisKKyAgICAgICAgICAg
IC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQorICAgICAgICAgICAgLy8gKHdoaWNoIGlzIGp1
c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICku
ZmluZCggc2VsZWN0b3IgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBIQU5ETEU6ICQo
RE9NRWxlbWVudCkKKyAgICAgICAgfSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7Cisg
ICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzWyAwIF0gPSBzZWxlY3RvcjsKKyAgICAgICAg
ICAgIHRoaXMubGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAg
IC8vIEhBTkRMRTogJChmdW5jdGlvbikKKyAgICAgICAgLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50
IHJlYWR5CisgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciAp
ICkgeworICAgICAgICAgICAgcmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/CisgICAg
ICAgICAgICAgICAgcm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6CisKKyAgICAgICAgICAgICAgICAv
LyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50CisgICAgICAgICAg
ICAgICAgc2VsZWN0b3IoIGpRdWVyeSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBzZWxl
Y3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdGhpcy5zZWxlY3Rv
ciA9IHNlbGVjdG9yLnNlbGVjdG9yOworICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gc2VsZWN0
b3IuY29udGV4dDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBqUXVlcnkubWFrZUFycmF5
KCBzZWxlY3RvciwgdGhpcyApOworICAgIH07CisKKy8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24g
dGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb24KK2luaXQucHJvdG90
eXBlID0galF1ZXJ5LmZuOworCisvLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlCityb290
alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApOworCisKK3ZhciBycGFyZW50c3ByZXYgPSAvXig/
OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKKworICAgIC8vIE1ldGhvZHMgZ3VhcmFudGVl
ZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0
CisgICAgZ3VhcmFudGVlZFVuaXF1ZSA9IHsKKyAgICAgICAgY2hpbGRyZW46IHRydWUsCisgICAg
ICAgIGNvbnRlbnRzOiB0cnVlLAorICAgICAgICBuZXh0OiB0cnVlLAorICAgICAgICBwcmV2OiB0
cnVlCisgICAgfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGhhczogZnVuY3Rpb24oIHRh
cmdldCApIHsKKyAgICAgICAgdmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLAor
ICAgICAgICAgICAgbCA9IHRhcmdldHMubGVuZ3RoOworCisgICAgICAgIHJldHVybiB0aGlzLmZp
bHRlciggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgICAgICBm
b3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFp
bnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAg
ICB9LAorCisgICAgY2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHsKKyAg
ICAgICAgdmFyIGN1ciwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbCA9IHRoaXMu
bGVuZ3RoLAorICAgICAgICAgICAgbWF0Y2hlZCA9IFtdLAorICAgICAgICAgICAgcG9zID0gcm5l
ZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSAic3Ry
aW5nIiA/CisgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQgfHwgdGhp
cy5jb250ZXh0ICkgOgorICAgICAgICAgICAgICAgIDA7CisKKyAgICAgICAgZm9yICggOyBpIDwg
bDsgaSsrICkgeworICAgICAgICAgICAgZm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3Vy
ICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKworICAgICAgICAgICAgICAg
IC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50cworICAgICAgICAgICAgICAgIGlmICgg
Y3VyLm5vZGVUeXBlIDwgMTEgJiYgKCBwb3MgPworICAgICAgICAgICAgICAgICAgICBwb3MuaW5k
ZXgoIGN1ciApID4gLTEgOgorCisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHBhc3Mgbm9u
LWVsZW1lbnRzIHRvIFNpenpsZQorICAgICAgICAgICAgICAgICAgICBjdXIubm9kZVR5cGUgPT09
IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3Rv
ciggY3VyLCBzZWxlY3RvcnMgKSApICkgeworCisgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQu
cHVzaCggY3VyICk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6
IG1hdGNoZWQgKTsKKyAgICB9LAorCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBh
biBlbGVtZW50IHdpdGhpbiB0aGUgc2V0CisgICAgaW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkgewor
CisgICAgICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50CisgICAgICAg
IGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sg
MCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJbmRleCBpbiBzZWxlY3RvcgorICAgICAgICBpZiAoIHR5
cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBpbmRleE9mLmNh
bGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAorICAgICAgICByZXR1
cm4gaW5kZXhPZi5jYWxsKCB0aGlzLAorCisgICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZlcyBh
IGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKKyAgICAgICAgICAgIGVs
ZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbQorICAgICAgICApOworICAgIH0sCisKKyAgICBh
ZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
cHVzaFN0YWNrKAorICAgICAgICAgICAgalF1ZXJ5LnVuaXF1ZVNvcnQoCisgICAgICAgICAgICAg
ICAgalF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkg
KQorICAgICAgICAgICAgKQorICAgICAgICApOworICAgIH0sCisKKyAgICBhZGRCYWNrOiBmdW5j
dGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0g
bnVsbCA/CisgICAgICAgICAgICB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmls
dGVyKCBzZWxlY3RvciApCisgICAgICAgICk7CisgICAgfQorfSApOworCitmdW5jdGlvbiBzaWJs
aW5nKCBjdXIsIGRpciApIHsKKyAgICB3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1
ci5ub2RlVHlwZSAhPT0gMSApIHt9CisgICAgcmV0dXJuIGN1cjsKK30KKworalF1ZXJ5LmVhY2go
IHsKKyAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgcGFyZW50ID0g
ZWxlbS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlw
ZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOworICAgIH0sCisgICAgcGFyZW50czogZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJwYXJlbnROb2RlIiApOworICAg
IH0sCisgICAgcGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisgICAg
ICAgIHJldHVybiBkaXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50aWwgKTsKKyAgICB9LAorICAg
IG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gc2libGluZyggZWxlbSwg
Im5leHRTaWJsaW5nIiApOworICAgIH0sCisgICAgcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOworICAgIH0s
CisgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVs
ZW0sICJuZXh0U2libGluZyIgKTsKKyAgICB9LAorICAgIHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICByZXR1cm4gZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOworICAg
IH0sCisgICAgbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAg
IHJldHVybiBkaXIoIGVsZW0sICJuZXh0U2libGluZyIsIHVudGlsICk7CisgICAgfSwKKyAgICBw
cmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGRp
ciggZWxlbSwgInByZXZpb3VzU2libGluZyIsIHVudGlsICk7CisgICAgfSwKKyAgICBzaWJsaW5n
czogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBh
cmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7CisgICAgfSwKKyAgICBjaGlsZHJl
bjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJz
dENoaWxkICk7CisgICAgfSwKKyAgICBjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgIHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBqUXVlcnkubWVyZ2UoIFtdLCBlbGVt
LmNoaWxkTm9kZXMgKTsKKyAgICB9Cit9LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7CisgICAgalF1
ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgeworICAgICAgICB2
YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApOworCisgICAgICAgIGlm
ICggbmFtZS5zbGljZSggLTUgKSAhPT0gIlVudGlsIiApIHsKKyAgICAgICAgICAgIHNlbGVjdG9y
ID0gdW50aWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBz
ZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBtYXRjaGVkID0galF1ZXJ5LmZp
bHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdGhp
cy5sZW5ndGggPiAxICkgeworCisgICAgICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlcworICAg
ICAgICAgICAgaWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkgeworICAgICAgICAgICAg
ICAgIGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVz
CisgICAgICAgICAgICBpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAg
ICAgICAgICAgbWF0Y2hlZC5yZXZlcnNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTsKKyAgICB9OworfSApOwor
dmFyIHJub3R3aGl0ZSA9ICggL1xTKy9nICk7CisKKworCisvLyBDb252ZXJ0IFN0cmluZy1mb3Jt
YXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcworZnVuY3Rpb24gY3JlYXRl
T3B0aW9ucyggb3B0aW9ucyApIHsKKyAgICB2YXIgb2JqZWN0ID0ge307CisgICAgalF1ZXJ5LmVh
Y2goIG9wdGlvbnMubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyAp
IHsKKyAgICAgICAgb2JqZWN0WyBmbGFnIF0gPSB0cnVlOworICAgIH0gKTsKKyAgICByZXR1cm4g
b2JqZWN0OworfQorCisvKgorICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9s
bG93aW5nIHBhcmFtZXRlcnM6CisgKgorICogIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Yg
c3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKKyAqICAgICAgICAg
IHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBv
YmplY3QKKyAqCisgKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFu
IGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZQorICogImZpcmVkIiBtdWx0aXBsZSB0aW1l
cy4KKyAqCisgKiBQb3NzaWJsZSBvcHRpb25zOgorICoKKyAqICBvbmNlOiAgICAgICAgICAgd2ls
bCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBh
IERlZmVycmVkKQorICoKKyAqICBtZW1vcnk6ICAgICAgICAgd2lsbCBrZWVwIHRyYWNrIG9mIHBy
ZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAorICogICAgICAg
ICAgICAgICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGgg
dGhlIGxhdGVzdCAibWVtb3JpemVkIgorICogICAgICAgICAgICAgICAgICB2YWx1ZXMgKGxpa2Ug
YSBEZWZlcnJlZCkKKyAqCisgKiAgdW5pcXVlOiAgICAgICAgIHdpbGwgZW5zdXJlIGEgY2FsbGJh
Y2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQorICoK
KyAqICBzdG9wT25GYWxzZTogICAgaW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayBy
ZXR1cm5zIGZhbHNlCisgKgorICovCitqUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlv
bnMgKSB7CisKKyAgICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRv
IE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkCisgICAgLy8gKHdlIGNoZWNrIGluIGNhY2hlIGZp
cnN0KQorICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPworICAgICAg
ICBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOgorICAgICAgICBqUXVlcnkuZXh0ZW5kKCB7fSwg
b3B0aW9ucyApOworCisgICAgdmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRs
eSBmaXJpbmcKKyAgICAgICAgZmlyaW5nLAorCisgICAgICAgIC8vIExhc3QgZmlyZSB2YWx1ZSBm
b3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzCisgICAgICAgIG1lbW9yeSwKKworICAgICAgICAvLyBG
bGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZAorICAgICAgICBmaXJlZCwKKwor
ICAgICAgICAvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nCisgICAgICAgIGxvY2tlZCwKKworICAg
ICAgICAvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAorICAgICAgICBsaXN0ID0gW10sCisKKyAgICAg
ICAgLy8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHMKKyAgICAg
ICAgcXVldWUgPSBbXSwKKworICAgICAgICAvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNh
bGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZCkKKyAgICAgICAgZmlyaW5n
SW5kZXggPSAtMSwKKworICAgICAgICAvLyBGaXJlIGNhbGxiYWNrcworICAgICAgICBmaXJlID0g
ZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZworICAg
ICAgICAgICAgbG9ja2VkID0gb3B0aW9ucy5vbmNlOworCisgICAgICAgICAgICAvLyBFeGVjdXRl
IGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucywKKyAgICAgICAgICAgIC8vIHJl
c3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXMKKyAgICAg
ICAgICAgIGZpcmVkID0gZmlyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAoIDsgcXVldWUu
bGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkgeworICAgICAgICAgICAgICAgIG1lbW9yeSA9IHF1
ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlz
dC5sZW5ndGggKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGNhbGxiYWNrIGFuZCBj
aGVjayBmb3IgZWFybHkgdGVybWluYXRpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXN0
WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFs
c2UgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRh
dGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmlu
Z0luZGV4ID0gbGlzdC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0
aCBpdAorICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7CisgICAgICAgICAgICAg
ICAgbWVtb3J5ID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpcmluZyA9
IGZhbHNlOworCisgICAgICAgICAgICAvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBm
b3IgZ29vZAorICAgICAgICAgICAgaWYgKCBsb2NrZWQgKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxz
CisgICAgICAgICAgICAgICAgaWYgKCBtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgIGxp
c3QgPSBbXTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMg
c3BlbnQKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaXN0
ID0gIiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorCisg
ICAgICAgIC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0CisgICAgICAgIHNlbGYgPSB7CisKKyAg
ICAgICAgICAgIC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3Mg
dG8gdGhlIGxpc3QKKyAgICAgICAgICAgIGFkZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBsaXN0ICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgbWVt
b3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nCisgICAgICAg
ICAgICAgICAgICAgIGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHF1ZXVlLnB1c2goIG1lbW9yeSApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgKCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhcmcgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy51bmlxdWUgfHwg
IXNlbGYuaGFzKCBhcmcgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3QucHVzaCggYXJnICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAm
JiBqUXVlcnkudHlwZSggYXJnICkgIT09ICJzdHJpbmciICkgeworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEluc3BlY3QgcmVjdXJzaXZlbHkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkKCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgICAgICAgICAgICAgIH0gKSgg
YXJndW1lbnRzICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtZW1vcnkgJiYgIWZpcmlu
ZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhl
IGxpc3QKKyAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICggaW5kZXgg
PSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyaW5nSW5kZXgtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGEgZ2l2
ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICAvLyBJZiBubyBhcmd1bWVu
dCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRh
Y2hlZC4KKyAgICAgICAgICAgIGhhczogZnVuY3Rpb24oIGZuICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBmbiA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pbkFycmF5KCBmbiwgbGlz
dCApID4gLTEgOgorICAgICAgICAgICAgICAgICAgICBsaXN0Lmxlbmd0aCA+IDA7CisgICAgICAg
ICAgICB9LAorCisgICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBs
aXN0CisgICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYg
KCBsaXN0ICkgeworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW107CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgLy8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZAorICAgICAgICAgICAgLy8gQWJvcnQg
YW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zCisgICAgICAgICAgICAvLyBDbGVhciBhbGwg
Y2FsbGJhY2tzIGFuZCB2YWx1ZXMKKyAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGxvY2tlZCA9IHF1ZXVlID0gW107CisgICAgICAgICAgICAgICAgbGlz
dCA9IG1lbW9yeSA9ICIiOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIWxpc3Q7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBEaXNhYmxl
IC5maXJlCisgICAgICAgICAgICAvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBt
ZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KQorICAgICAgICAgICAgLy8gQWJv
cnQgYW55IHBlbmRpbmcgZXhlY3V0aW9ucworICAgICAgICAgICAgbG9jazogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgbG9ja2VkID0gcXVldWUgPSBbXTsKKyAgICAgICAgICAgICAgICBp
ZiAoICFtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBtZW1vcnkgPSAiIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgbG9ja2VkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gISFsb2NrZWQ7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBDYWxs
IGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCisgICAg
ICAgICAgICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAhbG9ja2VkICkgeworICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncyB8
fCBbXTsKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/
IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCgg
YXJncyApOworICAgICAgICAgICAgICAgICAgICBpZiAoICFmaXJpbmcgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorCisg
ICAgICAgICAgICAvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3Vt
ZW50cworICAgICAgICAgICAgZmlyZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgc2Vs
Zi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBUbyBrbm93IGlmIHRoZSBjYWxs
YmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UKKyAgICAgICAgICAg
IGZpcmVkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFmaXJlZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgIHJldHVybiBzZWxmOworfTsKKworCitqUXVl
cnkuZXh0ZW5kKCB7CisKKyAgICBEZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7CisgICAgICAg
IHZhciB0dXBsZXMgPSBbCisKKyAgICAgICAgICAgICAgICAvLyBhY3Rpb24sIGFkZCBsaXN0ZW5l
ciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGUKKyAgICAgICAgICAgICAgICBbICJyZXNvbHZl
IiwgImRvbmUiLCBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksICJyZXNvbHZlZCIg
XSwKKyAgICAgICAgICAgICAgICBbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3Mo
ICJvbmNlIG1lbW9yeSIgKSwgInJlamVjdGVkIiBdLAorICAgICAgICAgICAgICAgIFsgIm5vdGlm
eSIsICJwcm9ncmVzcyIsIGpRdWVyeS5DYWxsYmFja3MoICJtZW1vcnkiICkgXQorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgIHN0YXRlID0gInBlbmRpbmciLAorICAgICAgICAgICAgcHJvbWlz
ZSA9IHsKKyAgICAgICAgICAgICAgICBzdGF0ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
IGFsd2F5czogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLmRvbmUo
IGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0
aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIGZucyA9IGFyZ3VtZW50czsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBmbnNbIGkg
XSApICYmIGZuc1sgaSBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmZXJy
ZWRbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9yd2FyZGluZyBhY3Rpb25zIHRvIG5l
d0RlZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWyAxIF0g
XSggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXR1
cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0
dXJuZWQucHJvbWlzZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuZWQucHJvbWlzZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5kb25lKCBuZXdEZWZlci5yZXNvbHZlICkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdEZWZlclsgdHVwbGVbIDAgXSArICJXaXRoIiBdKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgPT09IHByb21pc2UgPyBuZXdE
ZWZlci5wcm9taXNlKCkgOiB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgICAgICAgICAg
fSApOworICAgICAgICAgICAgICAgICAgICAgICAgZm5zID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICAgICAgfSApLnByb21pc2UoKTsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgLy8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZAorICAgICAgICAgICAgICAgIC8v
IElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBv
YmplY3QKKyAgICAgICAgICAgICAgICBwcm9taXNlOiBmdW5jdGlvbiggb2JqICkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHBy
b21pc2UgKSA6IHByb21pc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIGRlZmVycmVkID0ge307CisKKyAgICAgICAgLy8gS2VlcCBwaXBlIGZvciBiYWNr
LWNvbXBhdAorICAgICAgICBwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47CisKKyAgICAgICAg
Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kcworICAgICAgICBqUXVlcnkuZWFjaCggdHVwbGVz
LCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7CisgICAgICAgICAgICB2YXIgbGlzdCA9IHR1cGxlWyAy
IF0sCisgICAgICAgICAgICAgICAgc3RhdGVTdHJpbmcgPSB0dXBsZVsgMyBdOworCisgICAgICAg
ICAgICAvLyBwcm9taXNlWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBsaXN0LmFkZAorICAg
ICAgICAgICAgcHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7CisKKyAgICAgICAgICAg
IC8vIEhhbmRsZSBzdGF0ZQorICAgICAgICAgICAgaWYgKCBzdGF0ZVN0cmluZyApIHsKKyAgICAg
ICAgICAgICAgICBsaXN0LmFkZCggZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gc3RhdGUgPSBbIHJlc29sdmVkIHwgcmVqZWN0ZWQgXQorICAgICAgICAgICAgICAgICAgICBz
dGF0ZSA9IHN0YXRlU3RyaW5nOworCisgICAgICAgICAgICAgICAgLy8gWyByZWplY3RfbGlzdCB8
IHJlc29sdmVfbGlzdCBdLmRpc2FibGU7IHByb2dyZXNzX2xpc3QubG9jaworICAgICAgICAgICAg
ICAgIH0sIHR1cGxlc1sgaSBeIDEgXVsgMiBdLmRpc2FibGUsIHR1cGxlc1sgMiBdWyAyIF0ubG9j
ayApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8
IHJlamVjdCB8IG5vdGlmeSBdCisgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyAiV2l0
aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBwcm9taXNlIDogdGhpcywgYXJndW1lbnRzICk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9OworICAgICAgICAgICAg
ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyAiV2l0aCIgXSA9IGxpc3QuZmlyZVdpdGg7CisgICAgICAg
IH0gKTsKKworICAgICAgICAvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2UKKyAgICAgICAg
cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApOworCisgICAgICAgIC8vIENhbGwgZ2l2ZW4gZnVu
YyBpZiBhbnkKKyAgICAgICAgaWYgKCBmdW5jICkgeworICAgICAgICAgICAgZnVuYy5jYWxsKCBk
ZWZlcnJlZCwgZGVmZXJyZWQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCBkb25lIQor
ICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CisgICAgfSwKKworICAgIC8vIERlZmVycmVkIGhlbHBl
cgorICAgIHdoZW46IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVO
ICovICkgeworICAgICAgICB2YXIgaSA9IDAsCisgICAgICAgICAgICByZXNvbHZlVmFsdWVzID0g
c2xpY2UuY2FsbCggYXJndW1lbnRzICksCisgICAgICAgICAgICBsZW5ndGggPSByZXNvbHZlVmFs
dWVzLmxlbmd0aCwKKworICAgICAgICAgICAgLy8gdGhlIGNvdW50IG9mIHVuY29tcGxldGVkIHN1
Ym9yZGluYXRlcworICAgICAgICAgICAgcmVtYWluaW5nID0gbGVuZ3RoICE9PSAxIHx8CisgICAg
ICAgICAgICAgICAgKCBzdWJvcmRpbmF0ZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5h
dGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAwLAorCisgICAgICAgICAgICAvLyB0aGUgbWFzdGVy
IERlZmVycmVkLgorICAgICAgICAgICAgLy8gSWYgcmVzb2x2ZVZhbHVlcyBjb25zaXN0IG9mIG9u
bHkgYSBzaW5nbGUgRGVmZXJyZWQsIGp1c3QgdXNlIHRoYXQuCisgICAgICAgICAgICBkZWZlcnJl
ZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVkKCksCisK
KyAgICAgICAgICAgIC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3IgYm90aCByZXNvbHZlIGFuZCBwcm9n
cmVzcyB2YWx1ZXMKKyAgICAgICAgICAgIHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4
dHMsIHZhbHVlcyApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkg
eworICAgICAgICAgICAgICAgICAgICBjb250ZXh0c1sgaSBdID0gdGhpczsKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwo
IGFyZ3VtZW50cyApIDogdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWVzID09
PSBwcm9ncmVzc1ZhbHVlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm5v
dGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICggISggLS1yZW1haW5pbmcgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgcHJv
Z3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250ZXh0czsKKworICAgICAg
ICAvLyBBZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGluYXRlczsgdHJlYXQgb3RoZXJz
IGFzIHJlc29sdmVkCisgICAgICAgIGlmICggbGVuZ3RoID4gMSApIHsKKyAgICAgICAgICAgIHBy
b2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAgICAgICAgICAgIHByb2dyZXNz
Q29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworICAgICAgICAgICAgcmVzb2x2ZUNvbnRl
eHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0
aDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpR
dWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSApICkgeworICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHBy
b2dyZXNzVmFsdWVzICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgLmRvbmUoIHVwZGF0ZUZ1
bmMoIGksIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApICkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5mYWlsKCBkZWZlcnJlZC5yZWplY3QgKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmluZzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSdyZSBub3Qgd2Fp
dGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCisgICAgICAgIGlmICggIXJlbWFp
bmluZyApIHsKKyAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4
dHMsIHJlc29sdmVWYWx1ZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWZlcnJl
ZC5wcm9taXNlKCk7CisgICAgfQorfSApOworCisKKy8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERP
TSByZWFkeQordmFyIHJlYWR5TGlzdDsKKworalF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZu
ICkgeworCisgICAgLy8gQWRkIHRoZSBjYWxsYmFjaworICAgIGpRdWVyeS5yZWFkeS5wcm9taXNl
KCkuZG9uZSggZm4gKTsKKworICAgIHJldHVybiB0aGlzOworfTsKKworalF1ZXJ5LmV4dGVuZCgg
eworCisgICAgLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNl
IGl0IG9jY3Vycy4KKyAgICBpc1JlYWR5OiBmYWxzZSwKKworICAgIC8vIEEgY291bnRlciB0byB0
cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKKyAgICAvLyB0aGUgcmVhZHkg
ZXZlbnQgZmlyZXMuIFNlZSAjNjc4MQorICAgIHJlYWR5V2FpdDogMSwKKworICAgIC8vIEhvbGQg
KG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVudAorICAgIGhvbGRSZWFkeTogZnVuY3Rpb24oIGhv
bGQgKSB7CisgICAgICAgIGlmICggaG9sZCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeVdh
aXQrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeSggdHJ1ZSAp
OworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVh
ZHkKKyAgICByZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7CisKKyAgICAgICAgLy8gQWJvcnQgaWYg
dGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeQorICAgICAgICBp
ZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSAp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbWVtYmVy
IHRoYXQgdGhlIERPTSBpcyByZWFkeQorICAgICAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7CisK
KyAgICAgICAgLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQs
IGFuZCB3YWl0IGlmIG5lZWQgYmUKKyAgICAgICAgaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1
ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCisgICAg
ICAgIHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTsKKworICAg
ICAgICAvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHMKKyAgICAgICAgaWYgKCBqUXVl
cnkuZm4udHJpZ2dlckhhbmRsZXIgKSB7CisgICAgICAgICAgICBqUXVlcnkoIGRvY3VtZW50ICku
dHJpZ2dlckhhbmRsZXIoICJyZWFkeSIgKTsKKyAgICAgICAgICAgIGpRdWVyeSggZG9jdW1lbnQg
KS5vZmYoICJyZWFkeSIgKTsKKyAgICAgICAgfQorICAgIH0KK30gKTsKKworLyoqCisgKiBUaGUg
cmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZAorICovCitmdW5jdGlv
biBjb21wbGV0ZWQoKSB7CisgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggIkRPTUNv
bnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQgKTsKKyAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5l
ciggImxvYWQiLCBjb21wbGV0ZWQgKTsKKyAgICBqUXVlcnkucmVhZHkoKTsKK30KKworalF1ZXJ5
LnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiggb2JqICkgeworICAgIGlmICggIXJlYWR5TGlzdCAp
IHsKKworICAgICAgICByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTsKKworICAgICAgICAv
LyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZAorICAgICAg
ICAvLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4KKyAgICAg
ICAgLy8gU3VwcG9ydDogSUU5LTEwIG9ubHkKKyAgICAgICAgLy8gT2xkZXIgSUUgc29tZXRpbWVz
IHNpZ25hbHMgImludGVyYWN0aXZlIiB0b28gc29vbgorICAgICAgICBpZiAoIGRvY3VtZW50LnJl
YWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgfHwKKyAgICAgICAgICAgICggZG9jdW1lbnQucmVhZHlT
dGF0ZSAhPT0gImxvYWRpbmciICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwg
KSApIHsKKworICAgICAgICAgICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93
IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5CisgICAgICAgICAgICB3aW5k
b3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7CisKKyAgICAgICAgfSBlbHNlIHsKKworICAg
ICAgICAgICAgLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFjaworICAgICAgICAgICAgZG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQgKTsK
KworICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwg
YWx3YXlzIHdvcmsKKyAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAibG9hZCIs
IGNvbXBsZXRlZCApOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZWFkeUxpc3QucHJv
bWlzZSggb2JqICk7Cit9OworCisvLyBLaWNrIG9mZiB0aGUgRE9NIHJlYWR5IGNoZWNrIGV2ZW4g
aWYgdGhlIHVzZXIgZG9lcyBub3QKK2pRdWVyeS5yZWFkeS5wcm9taXNlKCk7CisKKworCisKKy8v
IE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVj
dGlvbgorLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBh
IGZ1bmN0aW9uCit2YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwg
Y2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAgbGVu
ID0gZWxlbXMubGVuZ3RoLAorICAgICAgICBidWxrID0ga2V5ID09IG51bGw7CisKKyAgICAvLyBT
ZXRzIG1hbnkgdmFsdWVzCisgICAgaWYgKCBqUXVlcnkudHlwZSgga2V5ICkgPT09ICJvYmplY3Qi
ICkgeworICAgICAgICBjaGFpbmFibGUgPSB0cnVlOworICAgICAgICBmb3IgKCBpIGluIGtleSAp
IHsKKyAgICAgICAgICAgIGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1w
dHlHZXQsIHJhdyApOworICAgICAgICB9CisKKyAgICAvLyBTZXRzIG9uZSB2YWx1ZQorICAgIH0g
ZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgIGNoYWluYWJsZSA9IHRy
dWU7CisKKyAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAg
ICAgICAgICByYXcgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBidWxrICkgewor
CisgICAgICAgICAgICAvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBz
ZXQKKyAgICAgICAgICAgIGlmICggcmF3ICkgeworICAgICAgICAgICAgICAgIGZuLmNhbGwoIGVs
ZW1zLCB2YWx1ZSApOworICAgICAgICAgICAgICAgIGZuID0gbnVsbDsKKworICAgICAgICAgICAg
Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlcworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWxrID0gZm47CisgICAgICAgICAgICAgICAgZm4g
PSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggZm4gKSB7CisgICAg
ICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAgICBmbigKKyAg
ICAgICAgICAgICAgICAgICAgZWxlbXNbIGkgXSwga2V5LCByYXcgPworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0s
IGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjaGFpbmFibGUgPworICAgICAg
ICBlbGVtcyA6CisKKyAgICAgICAgLy8gR2V0cworICAgICAgICBidWxrID8KKyAgICAgICAgICAg
IGZuLmNhbGwoIGVsZW1zICkgOgorICAgICAgICAgICAgbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtl
eSApIDogZW1wdHlHZXQ7Cit9OwordmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7
CisKKyAgICAvLyBBY2NlcHRzIG9ubHk6CisgICAgLy8gIC0gTm9kZQorICAgIC8vICAgIC0gTm9k
ZS5FTEVNRU5UX05PREUKKyAgICAvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERQorICAgIC8vICAt
IE9iamVjdAorICAgIC8vICAgIC0gQW55CisgICAgLyoganNoaW50IC1XMDE4ICovCisgICAgcmV0
dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtv
d25lci5ub2RlVHlwZSApOworfTsKKworCisKKworZnVuY3Rpb24gRGF0YSgpIHsKKyAgICB0aGlz
LmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7Cit9CisKK0RhdGEudWlkID0g
MTsKKworRGF0YS5wcm90b3R5cGUgPSB7CisKKyAgICByZWdpc3RlcjogZnVuY3Rpb24oIG93bmVy
LCBpbml0aWFsICkgeworICAgICAgICB2YXIgdmFsdWUgPSBpbml0aWFsIHx8IHt9OworCisgICAg
ICAgIC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9v
cGVkIG92ZXIKKyAgICAgICAgLy8gdXNlIHBsYWluIGFzc2lnbm1lbnQKKyAgICAgICAgaWYgKCBv
d25lci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgIG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZh
bHVlOworCisgICAgICAgIC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJs
ZSwgbm9uLXdyaXRhYmxlIHByb3BlcnR5CisgICAgICAgIC8vIGNvbmZpZ3VyYWJpbGl0eSBtdXN0
IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlCisgICAgICAgIC8vIGRlbGV0ZWQg
d2l0aCB0aGUgZGVsZXRlIG9wZXJhdG9yCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHsKKyAgICAgICAgICAg
ICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCisgICAg
ICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAgICAgICAgICB9ICk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKKyAgICB9LAorICAgIGNh
Y2hlOiBmdW5jdGlvbiggb3duZXIgKSB7CisKKyAgICAgICAgLy8gV2UgY2FuIGFjY2VwdCBkYXRh
IGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsCisgICAgICAgIC8vIGJ1
dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuCisgICAgICAgIC8vIEFsd2F5cyByZXR1cm4gYW4g
ZW1wdHkgb2JqZWN0LgorICAgICAgICBpZiAoICFhY2NlcHREYXRhKCBvd25lciApICkgeworICAg
ICAgICAgICAgcmV0dXJuIHt9OworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhl
IG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlCisgICAgICAgIHZhciB2YWx1ZSA9IG93
bmVyWyB0aGlzLmV4cGFuZG8gXTsKKworICAgICAgICAvLyBJZiBub3QsIGNyZWF0ZSBvbmUKKyAg
ICAgICAgaWYgKCAhdmFsdWUgKSB7CisgICAgICAgICAgICB2YWx1ZSA9IHt9OworCisgICAgICAg
ICAgICAvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVy
biBicm93c2VycywKKyAgICAgICAgICAgIC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUu
CisgICAgICAgICAgICAvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC4KKyAgICAgICAg
ICAgIGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIElm
IGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXIK
KyAgICAgICAgICAgICAgICAvLyB1c2UgcGxhaW4gYXNzaWdubWVudAorICAgICAgICAgICAgICAg
IGlmICggb3duZXIubm9kZVR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgIG93bmVyWyB0aGlz
LmV4cGFuZG8gXSA9IHZhbHVlOworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHNlY3Vy
ZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5CisgICAgICAgICAgICAgICAgLy8gY29u
ZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmUKKyAgICAg
ICAgICAgICAgICAvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkCisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCBv
d25lciwgdGhpcy5leHBhbmRvLCB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFs
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKKyAgICAgICAg
ICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9LAorICAgIHNldDogZnVuY3Rpb24o
IG93bmVyLCBkYXRhLCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHByb3AsCisgICAgICAgICAgICBj
YWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7CisKKyAgICAgICAgLy8gSGFuZGxlOiBbIG93bmVy
LCBrZXksIHZhbHVlIF0gYXJncworICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5n
IiApIHsKKyAgICAgICAgICAgIGNhY2hlWyBkYXRhIF0gPSB2YWx1ZTsKKworICAgICAgICAvLyBI
YW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJncworICAgICAgICB9IGVsc2Ugewor
CisgICAgICAgICAgICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNh
Y2hlIG9iamVjdAorICAgICAgICAgICAgZm9yICggcHJvcCBpbiBkYXRhICkgeworICAgICAgICAg
ICAgICAgIGNhY2hlWyBwcm9wIF0gPSBkYXRhWyBwcm9wIF07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGNhY2hlOworICAgIH0sCisgICAgZ2V0OiBmdW5jdGlvbigg
b3duZXIsIGtleSApIHsKKyAgICAgICAgcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID8KKyAgICAg
ICAgICAgIHRoaXMuY2FjaGUoIG93bmVyICkgOgorICAgICAgICAgICAgb3duZXJbIHRoaXMuZXhw
YW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsga2V5IF07CisgICAgfSwKKyAgICBhY2Nl
c3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHN0b3JlZDsK
KworICAgICAgICAvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6CisgICAgICAgIC8vCisgICAgICAg
IC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWQKKyAgICAgICAgLy8gICAyLiBBIHN0cmluZyBr
ZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFRha2UgdGhlICJyZWFkIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBk
ZXRlcm1pbmUKKyAgICAgICAgLy8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkg
ZWl0aGVyOgorICAgICAgICAvLworICAgICAgICAvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2Jq
ZWN0CisgICAgICAgIC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXkKKyAgICAgICAg
Ly8KKyAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fAorICAgICAgICAgICAgICAgICgg
KCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVk
ICkgKSB7CisKKyAgICAgICAgICAgIHN0b3JlZCA9IHRoaXMuZ2V0KCBvd25lciwga2V5ICk7CisK
KyAgICAgICAgICAgIHJldHVybiBzdG9yZWQgIT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAg
ICAgc3RvcmVkIDogdGhpcy5nZXQoIG93bmVyLCBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKSApOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3Ig
Ym90aCBhIGtleSBhbmQgdmFsdWUKKyAgICAgICAgLy8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4
dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6CisgICAgICAgIC8vCisgICAgICAg
IC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXMKKyAgICAgICAgLy8gICAyLiBBIGtleSBh
bmQgdmFsdWUKKyAgICAgICAgLy8KKyAgICAgICAgdGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVl
ICk7CisKKyAgICAgICAgLy8gU2luY2UgdGhlICJzZXQiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3Np
YmxlIGVudHJ5IHBvaW50cworICAgICAgICAvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFz
ZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl0KKyAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1
bmRlZmluZWQgPyB2YWx1ZSA6IGtleTsKKyAgICB9LAorICAgIHJlbW92ZTogZnVuY3Rpb24oIG93
bmVyLCBrZXkgKSB7CisgICAgICAgIHZhciBpLCBuYW1lLCBjYW1lbCwKKyAgICAgICAgICAgIGNh
Y2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCisgICAgICAgIGlmICggY2FjaGUgPT09IHVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICgga2V5ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyKCBvd25l
ciApOworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQgYXJyYXkg
b3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzCisgICAgICAgICAgICBpZiAoIGpRdWVy
eS5pc0FycmF5KCBrZXkgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIElmICJuYW1lIiBpcyBh
biBhcnJheSBvZiBrZXlzLi4uCisgICAgICAgICAgICAgICAgLy8gV2hlbiBkYXRhIGlzIGluaXRp
YWxseSBjcmVhdGVkLCB2aWEgKCJrZXkiLCAidmFsIikgc2lnbmF0dXJlLAorICAgICAgICAgICAg
ICAgIC8vIGtleXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gY2FtZWxDYXNlLgorICAgICAgICAgICAg
ICAgIC8vIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIF9ob3dfIGEga2V5IHdhcyBhZGRl
ZCwgcmVtb3ZlCisgICAgICAgICAgICAgICAgLy8gYm90aCBwbGFpbiBrZXkgYW5kIGNhbWVsQ2Fz
ZSBrZXkuICMxMjc4NgorICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBvbmx5IHBlbmFsaXpl
IHRoZSBhcnJheSBhcmd1bWVudCBwYXRoLgorICAgICAgICAgICAgICAgIG5hbWUgPSBrZXkuY29u
Y2F0KCBrZXkubWFwKCBqUXVlcnkuY2FtZWxDYXNlICkgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgY2FtZWwgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTsKKworICAg
ICAgICAgICAgICAgIC8vIFRyeSB0aGUgc3RyaW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1
bGF0aW9uCisgICAgICAgICAgICAgICAgaWYgKCBrZXkgaW4gY2FjaGUgKSB7CisgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSBbIGtleSwgY2FtZWwgXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlz
dHMsIHVzZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4g
YXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IGNhbWVsOworICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSBpbiBjYWNoZSA/Cisg
ICAgICAgICAgICAgICAgICAgICAgICBbIG5hbWUgXSA6ICggbmFtZS5tYXRjaCggcm5vdHdoaXRl
ICkgfHwgW10gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGkgPSBuYW1lLmxlbmd0aDsKKworICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAg
ICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBuYW1lWyBpIF0gXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1v
cmUgZGF0YQorICAgICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5
T2JqZWN0KCBjYWNoZSApICkgeworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD0g
MzUtNDUrCisgICAgICAgICAgICAvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJz
IHdoZW4gZGVsZXRpbmcgcHJvcGVydGllcworICAgICAgICAgICAgLy8gZnJvbSBET00gbm9kZXMs
IHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZAorICAgICAgICAgICAgLy8gaHR0cHM6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNworICAgICAgICAg
ICAgaWYgKCBvd25lci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgICAgICBvd25lclsgdGhpcy5l
eHBhbmRvIF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9LAorICAgIGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHsKKyAgICAgICAgdmFy
IGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworICAgICAgICByZXR1cm4gY2FjaGUgIT09
IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7CisgICAgfQorfTsK
K3ZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7CisKK3ZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7
CisKKworCisvLyAgSW1wbGVtZW50YXRpb24gU3VtbWFyeQorLy8KKy8vICAxLiBFbmZvcmNlIEFQ
SSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoCisv
LyAgMi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRo
ZSBzdG9yYWdlCisvLyAgICAgIHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS4KKy8vICAzLiBV
c2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0ICJwcml2YXRlIiBhbmQgInVz
ZXIiIGRhdGEuCisvLyAgNC4gX05ldmVyXyBleHBvc2UgInByaXZhdGUiIGRhdGEgdG8gdXNlciBj
b2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSkKKy8vICA1LiBBdm9pZCBleHBvc2lu
ZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJv
cGVydGllcykKKy8vICA2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24g
dXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTQKKwordmFyIHJicmFjZSA9IC9eKD86XHtbXHdcV10q
XH18XFtbXHdcV10qXF0pJC8sCisgICAgcm11bHRpRGFzaCA9IC9bQS1aXS9nOworCitmdW5jdGlv
biBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkgeworICAgIHZhciBuYW1lOworCisgICAgLy8g
SWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueQorICAgIC8v
IGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQorICAgIGlmICggZGF0YSA9PT0g
dW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgIG5hbWUgPSAiZGF0
YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJCYiICkudG9Mb3dlckNhc2UoKTsKKyAg
ICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CisKKyAgICAgICAgaWYgKCB0
eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgIGRhdGEgPSBkYXRhID09PSAidHJ1ZSIgPyB0cnVlIDoKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9
PT0gIm51bGwiID8gbnVsbCA6CisKKyAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjb252ZXJ0
IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmcKKyAgICAgICAgICAg
ICAgICAgICAgK2RhdGEgKyAiIiA9PT0gZGF0YSA/ICtkYXRhIDoKKyAgICAgICAgICAgICAgICAg
ICAgcmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CisgICAg
ICAgICAgICAgICAgICAgIGRhdGE7CisgICAgICAgICAgICB9IGNhdGNoICggZSApIHt9CisKKyAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdl
ZCBsYXRlcgorICAgICAgICAgICAgZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBoYXNE
YXRhOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEo
IGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7CisgICAgfSwKKworICAgIGRhdGE6
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgeworICAgICAgICByZXR1cm4gZGF0YVVzZXIu
YWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7CisgICAgfSwKKworICAgIHJlbW92ZURhdGE6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAgICBkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5h
bWUgKTsKKyAgICB9LAorCisgICAgLy8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRh
IGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWQKKyAgICAvLyB3aXRoIGRpcmVjdCBj
YWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC4KKyAgICBf
ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7CisgICAgICAgIHJldHVybiBkYXRh
UHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTsKKyAgICB9LAorCisgICAgX3JlbW92ZURh
dGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGVs
ZW0sIG5hbWUgKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBkYXRh
OiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGksIG5hbWUsIGRhdGEsCisg
ICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdLAorICAgICAgICAgICAgYXR0cnMgPSBlbGVtICYm
IGVsZW0uYXR0cmlidXRlczsKKworICAgICAgICAvLyBHZXRzIGFsbCB2YWx1ZXMKKyAgICAgICAg
aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5sZW5ndGgg
KSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApOworCisgICAg
ICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVs
ZW0sICJoYXNEYXRhQXR0cnMiICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGkgPSBhdHRycy5s
ZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTExKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGF0dHJzWyBpIF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSA9IGF0dHJzWyBpIF0ubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5hbWUuaW5kZXhPZiggImRhdGEtIiApID09PSAwICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBk
YXRhWyBuYW1lIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZGF0YVByaXYuc2V0KCBlbGVtLCAiaGFzRGF0YUF0dHJzIiwgdHJ1ZSApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBTZXRzIG11bHRpcGxlIHZhbHVlcworICAgICAgICBpZiAoIHR5
cGVvZiBrZXkgPT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCgg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTsK
KyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRo
aXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBkYXRhLCBjYW1lbEtleTsK
KworICAgICAgICAgICAgLy8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRj
aGVzKSBpcyBub3QgZW1wdHkKKyAgICAgICAgICAgIC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBl
bGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlCisgICAgICAgICAgICAvLyBgdmFs
dWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdAor
ICAgICAgICAgICAgLy8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlz
WyAwIF0gd2hpY2ggd2lsbAorICAgICAgICAgICAgLy8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFu
IGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS4KKyAgICAgICAgICAgIGlmICgg
ZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICAgICAgLy8gQXR0
ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZQorICAgICAgICAgICAgICAgIC8vIHdpdGgg
dGhlIGtleSBhcy1pcworICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0s
IGtleSApIHx8CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgZGFzaGVkIGtl
eSBpZiBpdCBleGlzdHMgKGdoLTI3NzkpCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
Zm9yIDIuMi54IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgZGF0YVVzZXIuZ2V0KCBlbGVtLCBr
ZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0kJiIgKS50b0xvd2VyQ2FzZSgpICk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2Ft
ZWxLZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTsKKworICAgICAgICAgICAgICAgIC8vIEF0
dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGUKKyAgICAgICAgICAgICAgICAvLyB3aXRo
IHRoZSBrZXkgY2FtZWxpemVkCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2VyLmdldCgg
ZWxlbSwgY2FtZWxLZXkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byAiZGlzY292ZXIiIHRoZSBkYXRhIGlu
CisgICAgICAgICAgICAgICAgLy8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRycworICAgICAgICAg
ICAgICAgIGRhdGEgPSBkYXRhQXR0ciggZWxlbSwgY2FtZWxLZXksIHVuZGVmaW5lZCApOworICAg
ICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZXQg
dGhlIGRhdGEuLi4KKyAgICAgICAgICAgIGNhbWVsS2V5ID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5
ICk7CisgICAgICAgICAgICB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAg
ICAgLy8gRmlyc3QsIGF0dGVtcHQgdG8gc3RvcmUgYSBjb3B5IG9yIHJlZmVyZW5jZSBvZiBhbnkK
KyAgICAgICAgICAgICAgICAvLyBkYXRhIHRoYXQgbWlnaHQndmUgYmVlbiBzdG9yZSB3aXRoIGEg
Y2FtZWxDYXNlZCBrZXkuCisgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBkYXRhVXNlci5nZXQo
IHRoaXMsIGNhbWVsS2V5ICk7CisKKyAgICAgICAgICAgICAgICAvLyBGb3IgSFRNTDUgZGF0YS0q
IGF0dHJpYnV0ZSBpbnRlcm9wLCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAgICAgLy8gc3RvcmUg
cHJvcGVydHkgbmFtZXMgd2l0aCBkYXNoZXMgaW4gYSBjYW1lbENhc2UgZm9ybS4KKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBhcHBseSB0byBhbGwgcHJvcGVydGllcy4uLioKKyAg
ICAgICAgICAgICAgICBkYXRhVXNlci5zZXQoIHRoaXMsIGNhbWVsS2V5LCB2YWx1ZSApOworCisg
ICAgICAgICAgICAgICAgLy8gKi4uLiBJbiB0aGUgY2FzZSBvZiBwcm9wZXJ0aWVzIHRoYXQgbWln
aHQgX2FjdHVhbGx5XworICAgICAgICAgICAgICAgIC8vIGhhdmUgZGFzaGVzLCB3ZSBuZWVkIHRv
IGFsc28gc3RvcmUgYSBjb3B5IG9mIHRoYXQKKyAgICAgICAgICAgICAgICAvLyB1bmNoYW5nZWQg
cHJvcGVydHkuCisgICAgICAgICAgICAgICAgaWYgKCBrZXkuaW5kZXhPZiggIi0iICkgPiAtMSAm
JiBkYXRhICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFVc2VyLnNl
dCggdGhpcywga2V5LCB2YWx1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
KTsKKyAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0
cnVlICk7CisgICAgfSwKKworICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZGF0YVVzZXIu
cmVtb3ZlKCB0aGlzLCBrZXkgKTsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworCitqUXVl
cnkuZXh0ZW5kKCB7CisgICAgcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgewor
ICAgICAgICB2YXIgcXVldWU7CisKKyAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAg
dHlwZSA9ICggdHlwZSB8fCAiZngiICkgKyAicXVldWUiOworICAgICAgICAgICAgcXVldWUgPSBk
YXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTsKKworICAgICAgICAgICAgLy8gU3BlZWQgdXAgZGVx
dWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cAorICAg
ICAgICAgICAgaWYgKCBkYXRhICkgeworICAgICAgICAgICAgICAgIGlmICggIXF1ZXVlIHx8IGpR
dWVyeS5pc0FycmF5KCBkYXRhICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0gZGF0
YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKCBk
YXRhICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHF1ZXVlIHx8IFtdOworICAgICAgICB9CisgICAgfSwKKworICAgIGRlcXVldWU6IGZ1bmN0
aW9uKCBlbGVtLCB0eXBlICkgeworICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOworCisgICAg
ICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLAorICAgICAgICAgICAg
c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCisgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0
KCksCisgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSAp
LAorICAgICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGpRdWVy
eS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7CisgICAgICAgICAgICB9OworCisgICAgICAgIC8vIElm
IHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2Vu
dGluZWwKKyAgICAgICAgaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3MiICkgeworICAgICAgICAgICAg
Zm4gPSBxdWV1ZS5zaGlmdCgpOworICAgICAgICAgICAgc3RhcnRMZW5ndGgtLTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggZm4gKSB7CisKKyAgICAgICAgICAgIC8vIEFkZCBhIHByb2dyZXNz
IHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKKyAgICAgICAgICAg
IC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKKyAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ4
IiApIHsKKyAgICAgICAgICAgICAgICBxdWV1ZS51bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3Rv
cCBmdW5jdGlvbgorICAgICAgICAgICAgZGVsZXRlIGhvb2tzLnN0b3A7CisgICAgICAgICAgICBm
bi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAh
c3RhcnRMZW5ndGggJiYgaG9va3MgKSB7CisgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlKCk7
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVl
dWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmUKKyAgICBfcXVldWVIb29r
czogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CisgICAgICAgIHZhciBrZXkgPSB0eXBlICsgInF1
ZXVlSG9va3MiOworICAgICAgICByZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBk
YXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwgeworICAgICAgICAgICAgZW1wdHk6IGpRdWVyeS5D
YWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKS5hZGQoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgInF1ZXVlIiwga2V5IF0gKTsKKyAg
ICAgICAgICAgIH0gKQorICAgICAgICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZm4uZXh0
ZW5kKCB7CisgICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICB2YXIg
c2V0dGVyID0gMjsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsK
KyAgICAgICAgICAgIGRhdGEgPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9ICJmeCI7CisgICAg
ICAgICAgICBzZXR0ZXItLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggYXJndW1lbnRzLmxl
bmd0aCA8IHNldHRlciApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNb
IDAgXSwgdHlwZSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVuZGVm
aW5lZCA/CisgICAgICAgICAgICB0aGlzIDoKKyAgICAgICAgICAgIHRoaXMuZWFjaCggZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0
eXBlLCBkYXRhICk7CisKKyAgICAgICAgICAgICAgICAvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhp
cyBxdWV1ZQorICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSAp
OworCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWyAwIF0gIT09
ICJpbnByb2dyZXNzIiApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRo
aXMsIHR5cGUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9ICk7CisgICAgfSwK
KyAgICBkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSAp
OworICAgICAgICB9ICk7CisgICAgfSwKKyAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSAp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICB9
LAorCisgICAgLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRh
aW4gdHlwZQorICAgIC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KQor
ICAgIHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7CisgICAgICAgIHZhciB0bXAsCisg
ICAgICAgICAgICBjb3VudCA9IDEsCisgICAgICAgICAgICBkZWZlciA9IGpRdWVyeS5EZWZlcnJl
ZCgpLAorICAgICAgICAgICAgZWxlbWVudHMgPSB0aGlzLAorICAgICAgICAgICAgaSA9IHRoaXMu
bGVuZ3RoLAorICAgICAgICAgICAgcmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGlmICggISggLS1jb3VudCApICkgeworICAgICAgICAgICAgICAgICAgICBkZWZlci5yZXNv
bHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7
CisgICAgICAgICAgICBvYmogPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsK
KyAgICAgICAgfQorICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOworCisgICAgICAgIHdoaWxl
ICggaS0tICkgeworICAgICAgICAgICAgdG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBd
LCB0eXBlICsgInF1ZXVlSG9va3MiICk7CisgICAgICAgICAgICBpZiAoIHRtcCAmJiB0bXAuZW1w
dHkgKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICB0bXAuZW1w
dHkuYWRkKCByZXNvbHZlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVz
b2x2ZSgpOworICAgICAgICByZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7CisgICAgfQorfSAp
OwordmFyIHBudW0gPSAoIC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8gKS5z
b3VyY2U7CisKK3ZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggIl4oPzooWystXSk9fCkoIiArIHBu
dW0gKyAiKShbYS16JV0qKSQiLCAiaSIgKTsKKworCit2YXIgY3NzRXhwYW5kID0gWyAiVG9wIiwg
IlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdOworCit2YXIgaXNIaWRkZW4gPSBmdW5jdGlvbigg
ZWxlbSwgZWwgKSB7CisKKyAgICAgICAgLy8gaXNIaWRkZW4gbWlnaHQgYmUgY2FsbGVkIGZyb20g
alF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjsKKyAgICAgICAgLy8gaW4gdGhhdCBjYXNlLCBlbGVtZW50
IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50CisgICAgICAgIGVsZW0gPSBlbCB8fCBlbGVtOworICAg
ICAgICByZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJub25lIiB8fAor
ICAgICAgICAgICAgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7
CisgICAgfTsKKworCisKK2Z1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0
cywgdHdlZW4gKSB7CisgICAgdmFyIGFkanVzdGVkLAorICAgICAgICBzY2FsZSA9IDEsCisgICAg
ICAgIG1heEl0ZXJhdGlvbnMgPSAyMCwKKyAgICAgICAgY3VycmVudFZhbHVlID0gdHdlZW4gPwor
ICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB0d2Vlbi5jdXIoKTsgfSA6CisgICAgICAg
ICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsICIiICk7IH0s
CisgICAgICAgIGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSwKKyAgICAgICAgdW5pdCA9IHZhbHVl
UGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8g
IiIgOiAicHgiICksCisKKyAgICAgICAgLy8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMg
cmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXMKKyAgICAgICAgaW5pdGlhbElu
VW5pdCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09ICJweCIgJiYgK2lu
aXRpYWwgKSAmJgorICAgICAgICAgICAgcmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBw
cm9wICkgKTsKKworICAgIGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0g
IT09IHVuaXQgKSB7CisKKyAgICAgICAgLy8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5
LmNzcworICAgICAgICB1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07CisKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvbgor
ICAgICAgICB2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTsKKworICAgICAgICAvLyBJdGVy
YXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAorICAgICAg
ICBpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTsKKworICAgICAgICBkbyB7CisKKyAgICAg
ICAgICAgIC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50aWwg
d2UgZ2V0ICpzb21ldGhpbmcqLgorICAgICAgICAgICAgLy8gVXNlIHN0cmluZyBmb3IgZG91Ymxp
bmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVsb3cK
KyAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgfHwgIi41IjsKKworICAgICAgICAgICAgLy8gQWRq
dXN0IGFuZCBhcHBseQorICAgICAgICAgICAgaW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQg
LyBzY2FsZTsKKyAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbElu
VW5pdCArIHVuaXQgKTsKKworICAgICAgICAvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVy
byBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKQorICAgICAgICAvLyBCcmVhayB0aGUgbG9vcCBpZiBz
Y2FsZSBpcyB1bmNoYW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2UndmUganVzdCBoYWQgZW5vdWdo
LgorICAgICAgICB9IHdoaWxlICgKKyAgICAgICAgICAgIHNjYWxlICE9PSAoIHNjYWxlID0gY3Vy
cmVudFZhbHVlKCkgLyBpbml0aWFsICkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25z
CisgICAgICAgICk7CisgICAgfQorCisgICAgaWYgKCB2YWx1ZVBhcnRzICkgeworICAgICAgICBp
bml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDsKKworICAgICAg
ICAvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWQKKyAgICAgICAg
YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gPworICAgICAgICAgICAgaW5pdGlhbEluVW5pdCAr
ICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDoKKyAgICAgICAgICAg
ICt2YWx1ZVBhcnRzWyAyIF07CisgICAgICAgIGlmICggdHdlZW4gKSB7CisgICAgICAgICAgICB0
d2Vlbi51bml0ID0gdW5pdDsKKyAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5p
dDsKKyAgICAgICAgICAgIHR3ZWVuLmVuZCA9IGFkanVzdGVkOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBhZGp1c3RlZDsKK30KK3ZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVj
a2JveHxyYWRpbykkL2kgKTsKKwordmFyIHJ0YWdOYW1lID0gKCAvPChbXHc6LV0rKS8gKTsKKwor
dmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTsKKworCisK
Ky8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDAp
Cit2YXIgd3JhcE1hcCA9IHsKKworICAgIC8vIFN1cHBvcnQ6IElFOQorICAgIG9wdGlvbjogWyAx
LCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iIF0sCisKKyAgICAv
LyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZQor
ICAgIC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNo
b3J0ZW4KKyAgICAvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQg
ZWxlbWVudHMuCisgICAgdGhlYWQ6IFsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0sCisgICAg
Y29sOiBbIDIsICI8dGFibGU+PGNvbGdyb3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+IiBdLAor
ICAgIHRyOiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAorICAg
IHRkOiBbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBd
LAorCisgICAgX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KK307CisKKy8vIFN1cHBvcnQ6IElFOQor
d3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOworCit3cmFwTWFwLnRib2R5ID0gd3Jh
cE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFw
LnRoZWFkOword3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7CisKKworZnVuY3Rpb24gZ2V0QWxsKCBj
b250ZXh0LCB0YWcgKSB7CisKKyAgICAvLyBTdXBwb3J0OiBJRTktMTErCisgICAgLy8gVXNlIHR5
cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2Jq
ZWN0cyAoIzE1MTUxKQorICAgIHZhciByZXQgPSB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5
VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgPworICAgICAgICAgICAgY29udGV4dC5nZXRFbGVtZW50
c0J5VGFnTmFtZSggdGFnIHx8ICIqIiApIDoKKyAgICAgICAgICAgIHR5cGVvZiBjb250ZXh0LnF1
ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiID8KKyAgICAgICAgICAgICAgICBjb250ZXh0
LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCAiKiIgKSA6CisgICAgICAgICAgICBbXTsKKworICAg
IHJldHVybiB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250
ZXh0LCB0YWcgKSA/CisgICAgICAgIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApIDoK
KyAgICAgICAgcmV0OworfQorCisKKy8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBi
ZWVuIGV2YWx1YXRlZAorZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRz
ICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAgbCA9IGVsZW1zLmxlbmd0aDsKKworICAgIGZv
ciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgZGF0YVByaXYuc2V0KAorICAgICAgICAgICAg
ZWxlbXNbIGkgXSwKKyAgICAgICAgICAgICJnbG9iYWxFdmFsIiwKKyAgICAgICAgICAgICFyZWZF
bGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sICJnbG9iYWxFdmFsIiAp
CisgICAgICAgICk7CisgICAgfQorfQorCisKK3ZhciByaHRtbCA9IC88fCYjP1x3KzsvOworCitm
dW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9u
LCBpZ25vcmVkICkgeworICAgIHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGos
CisgICAgICAgIGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCisg
ICAgICAgIG5vZGVzID0gW10sCisgICAgICAgIGkgPSAwLAorICAgICAgICBsID0gZWxlbXMubGVu
Z3RoOworCisgICAgZm9yICggOyBpIDwgbDsgaSsrICkgeworICAgICAgICBlbGVtID0gZWxlbXNb
IGkgXTsKKworICAgICAgICBpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHsKKworICAgICAgICAg
ICAgLy8gQWRkIG5vZGVzIGRpcmVjdGx5CisgICAgICAgICAgICBpZiAoIGpRdWVyeS50eXBlKCBl
bGVtICkgPT09ICJvYmplY3QiICkgeworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5k
cm9pZDw0LjEsIFBoYW50b21KUzwyCisgICAgICAgICAgICAgICAgLy8gcHVzaC5hcHBseShfLCBh
cnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorICAgICAgICAgICAgICAgIGpRdWVy
eS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTsKKworICAg
ICAgICAgICAgLy8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlCisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgeworICAgICAgICAgICAgICAgIG5v
ZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApOworCisgICAgICAgICAg
ICAvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXMKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0
LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkgKTsKKworICAgICAgICAgICAgICAgIC8vIERlc2VyaWFs
aXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICB0YWcgPSAoIHJ0
YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbICIiLCAiIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpOwor
ICAgICAgICAgICAgICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0
OworICAgICAgICAgICAgICAgIHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRt
bFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdOworCisgICAgICAgICAgICAgICAgLy8gRGVz
Y2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50CisgICAgICAgICAgICAg
ICAgaiA9IHdyYXBbIDAgXTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIGotLSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgdG1wID0gdG1wLmxhc3RDaGlsZDsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMSwgUGhhbnRvbUpTPDIKKyAg
ICAgICAgICAgICAgICAvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2ll
bnQgV2ViS2l0CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxk
Tm9kZXMgKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29u
dGFpbmVyCisgICAgICAgICAgICAgICAgdG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKKworICAg
ICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMx
MjM5MikKKyAgICAgICAgICAgICAgICB0bXAudGV4dENvbnRlbnQgPSAiIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21l
bnQKKyAgICBmcmFnbWVudC50ZXh0Q29udGVudCA9ICIiOworCisgICAgaSA9IDA7CisgICAgd2hp
bGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHsKKworICAgICAgICAvLyBTa2lwIGVsZW1l
bnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KQorICAgICAg
ICBpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAt
MSApIHsKKyAgICAgICAgICAgIGlmICggaWdub3JlZCApIHsKKyAgICAgICAgICAgICAgICBpZ25v
cmVkLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgY29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3du
ZXJEb2N1bWVudCwgZWxlbSApOworCisgICAgICAgIC8vIEFwcGVuZCB0byBmcmFnbWVudAorICAg
ICAgICB0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksICJzY3JpcHQi
ICk7CisKKyAgICAgICAgLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQorICAg
ICAgICBpZiAoIGNvbnRhaW5zICkgeworICAgICAgICAgICAgc2V0R2xvYmFsRXZhbCggdG1wICk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBDYXB0dXJlIGV4ZWN1dGFibGVzCisgICAgICAgIGlm
ICggc2NyaXB0cyApIHsKKyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgd2hpbGUgKCAo
IGVsZW0gPSB0bXBbIGorKyBdICkgKSB7CisgICAgICAgICAgICAgICAgaWYgKCByc2NyaXB0VHlw
ZS50ZXN0KCBlbGVtLnR5cGUgfHwgIiIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2NyaXB0
cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZyYWdtZW50OworfQorCisKKyggZnVuY3Rpb24oKSB7
CisgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAor
ICAgICAgICBkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggImRpdiIgKSApLAorICAgICAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJp
bnB1dCIgKTsKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wLTQuMywgU2FmYXJpPD01LjEK
KyAgICAvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KQorICAg
IC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSkKKyAgICAvLyBgbmFtZWAgYW5kIGB0
eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSkKKyAgICBpbnB1dC5z
ZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOworICAgIGlucHV0LnNldEF0dHJpYnV0ZSgg
ImNoZWNrZWQiLCAiY2hlY2tlZCIgKTsKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwg
InQiICk7CisKKyAgICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7CisKKyAgICAvLyBTdXBwb3J0
OiBTYWZhcmk8PTUuMSwgQW5kcm9pZDw0LjIKKyAgICAvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBj
bG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMKKyAgICBzdXBwb3J0LmNo
ZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENo
aWxkLmNoZWNrZWQ7CisKKyAgICAvLyBTdXBwb3J0OiBJRTw9MTErCisgICAgLy8gTWFrZSBzdXJl
IHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWQK
KyAgICBkaXYuaW5uZXJIVE1MID0gIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iOworICAgIHN1cHBv
cnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVm
YXVsdFZhbHVlOworfSApKCk7CisKKwordmFyCisgICAgcmtleUV2ZW50ID0gL15rZXkvLAorICAg
IHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8
Y2xpY2svLAorICAgIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XC4oLispfCkvOworCitm
dW5jdGlvbiByZXR1cm5UcnVlKCkgeworICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBy
ZXR1cm5GYWxzZSgpIHsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFN1cHBvcnQ6IElFOQor
Ly8gU2VlICMxMzM5MyBmb3IgbW9yZSBpbmZvCitmdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgp
IHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKKyAg
ICB9IGNhdGNoICggZXJyICkgeyB9Cit9CisKK2Z1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2Vs
ZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7CisgICAgdmFyIG9yaWdGbiwgdHlwZTsKKworICAgIC8v
IFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycworICAgIGlmICggdHlwZW9mIHR5
cGVzID09PSAib2JqZWN0IiApIHsKKworICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0
b3IsIGRhdGEgKQorICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7
CisKKyAgICAgICAgICAgIC8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKKyAgICAgICAgICAgIGRh
dGEgPSBkYXRhIHx8IHNlbGVjdG9yOworICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7
CisgICAgICAgIH0KKyAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKKyAgICAgICAgICAg
IG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisgICAgaWYgKCBkYXRhID09
IG51bGwgJiYgZm4gPT0gbnVsbCApIHsKKworICAgICAgICAvLyAoIHR5cGVzLCBmbiApCisgICAg
ICAgIGZuID0gc2VsZWN0b3I7CisgICAgICAgIGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsK
KyAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgeworICAgICAgICBpZiAoIHR5cGVvZiBzZWxl
Y3RvciA9PT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAgIC8vICggdHlwZXMsIHNlbGVjdG9y
LCBmbiApCisgICAgICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gdW5kZWZp
bmVkOworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyAoIHR5cGVzLCBkYXRhLCBm
biApCisgICAgICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gc2VsZWN0b3I7
CisgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAoIGZuID09PSBmYWxzZSApIHsKKyAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsKKyAgICB9
IGVsc2UgaWYgKCAhZm4gKSB7CisgICAgICAgIHJldHVybiBlbGVtOworICAgIH0KKworICAgIGlm
ICggb25lID09PSAxICkgeworICAgICAgICBvcmlnRm4gPSBmbjsKKyAgICAgICAgZm4gPSBmdW5j
dGlvbiggZXZlbnQgKSB7CisKKyAgICAgICAgICAgIC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBz
aW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbworICAgICAgICAgICAgalF1ZXJ5KCkub2ZmKCBl
dmVudCApOworICAgICAgICAgICAgcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRz
ICk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2Fu
IHJlbW92ZSB1c2luZyBvcmlnRm4KKyAgICAgICAgZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICgg
b3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7CisgICAgfQorICAgIHJldHVybiBlbGVtLmVh
Y2goIGZ1bmN0aW9uKCkgeworICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywg
Zm4sIGRhdGEsIHNlbGVjdG9yICk7CisgICAgfSApOworfQorCisvKgorICogSGVscGVyIGZ1bmN0
aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJm
YWNlLgorICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55
IG9mIHRoZSBpZGVhcy4KKyAqLworalF1ZXJ5LmV2ZW50ID0geworCisgICAgZ2xvYmFsOiB7fSwK
KworICAgIGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3Rv
ciApIHsKKworICAgICAgICB2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsCisgICAg
ICAgICAgICBldmVudHMsIHQsIGhhbmRsZU9iaiwKKyAgICAgICAgICAgIHNwZWNpYWwsIGhhbmRs
ZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKKyAgICAgICAgICAgIGVsZW1EYXRhID0g
ZGF0YVByaXYuZ2V0KCBlbGVtICk7CisKKyAgICAgICAgLy8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0
byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cykK
KyAgICAgICAgaWYgKCAhZWxlbURhdGEgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBk
YXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKKyAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIg
KSB7CisgICAgICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7CisgICAgICAgICAgICBoYW5k
bGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxl
T2JqSW4uc2VsZWN0b3I7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIK
KyAgICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgaGFuZGxlci5ndWlk
ID0galF1ZXJ5Lmd1aWQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluaXQgdGhlIGVsZW1l
bnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmly
c3QKKyAgICAgICAgaWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsKKyAgICAg
ICAgICAgIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9OworICAgICAgICB9CisgICAgICAg
IGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHsKKyAgICAgICAgICAg
IGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7CisKKyAgICAg
ICAgICAgICAgICAvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQu
dHJpZ2dlcigpIGFuZAorICAgICAgICAgICAgICAgIC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVk
IGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9m
IGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50
eXBlID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBl
bGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0K
KworICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNl
CisgICAgICAgIHR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBb
ICIiIF07CisgICAgICAgIHQgPSB0eXBlcy5sZW5ndGg7CisgICAgICAgIHdoaWxlICggdC0tICkg
eworICAgICAgICAgICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8
IFtdOworICAgICAgICAgICAgdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07CisgICAgICAgICAg
ICBuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7CisK
KyAgICAgICAgICAgIC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1l
c3BhY2Utb25seSBoYW5kbGVycworICAgICAgICAgICAgaWYgKCAhdHlwZSApIHsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgZXZl
bnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0
aGUgY2hhbmdlZCB0eXBlCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNp
YWxbIHR5cGUgXSB8fCB7fTsKKworICAgICAgICAgICAgLy8gSWYgc2VsZWN0b3IgZGVmaW5lZCwg
ZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlCisg
ICAgICAgICAgICB0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3Bl
Y2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7CisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBzcGVjaWFs
IGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGUKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnku
ZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCisgICAgICAgICAgICAvLyBoYW5kbGVPYmog
aXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVycworICAgICAgICAgICAgaGFuZGxlT2JqID0g
alF1ZXJ5LmV4dGVuZCggeworICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAg
ICAgICAgb3JpZ1R5cGU6IG9yaWdUeXBlLAorICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCisg
ICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlciwKKyAgICAgICAgICAgICAgICBndWlkOiBo
YW5kbGVyLmd1aWQsCisgICAgICAgICAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLAorICAgICAg
ICAgICAgICAgIG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVl
ZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksCisgICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBu
YW1lc3BhY2VzLmpvaW4oICIuIiApCisgICAgICAgICAgICB9LCBoYW5kbGVPYmpJbiApOworCisg
ICAgICAgICAgICAvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBm
aXJzdAorICAgICAgICAgICAgaWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7
CisgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOworICAgICAg
ICAgICAgICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAg
Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxl
ciByZXR1cm5zIGZhbHNlCisgICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC5zZXR1cCB8fAor
ICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVz
cGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgeworCisgICAgICAgICAgICAgICAgICAg
IGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIHNwZWNpYWwuYWRkICkgeworICAgICAgICAgICAgICAgIHNwZWNpYWwuYWRkLmNhbGwo
IGVsZW0sIGhhbmRsZU9iaiApOworCisgICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlT2JqLmhh
bmRsZXIuZ3VpZCApIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmhhbmRsZXIuZ3Vp
ZCA9IGhhbmRsZXIuZ3VpZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVz
IGluIGZyb250CisgICAgICAgICAgICBpZiAoIHNlbGVjdG9yICkgeworICAgICAgICAgICAgICAg
IGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmog
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcnMucHVzaCgg
aGFuZGxlT2JqICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sg
b2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRp
b24KKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7CisgICAg
ICAgIH0KKworICAgIH0sCisKKyAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50
cyBmcm9tIGFuIGVsZW1lbnQKKyAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFu
ZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgeworCisgICAgICAgIHZhciBqLCBvcmlnQ291
bnQsIHRtcCwKKyAgICAgICAgICAgIGV2ZW50cywgdCwgaGFuZGxlT2JqLAorICAgICAgICAgICAg
c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLAorICAgICAgICAg
ICAgZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBl
bGVtICk7CisKKyAgICAgICAgaWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEu
ZXZlbnRzICkgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAv
LyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0
dGVkCisgICAgICAgIHR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90d2hpdGUgKSB8
fCBbICIiIF07CisgICAgICAgIHQgPSB0eXBlcy5sZW5ndGg7CisgICAgICAgIHdoaWxlICggdC0t
ICkgeworICAgICAgICAgICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSAp
IHx8IFtdOworICAgICAgICAgICAgdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07CisgICAgICAg
ICAgICBuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7
CisKKyAgICAgICAgICAgIC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwg
aWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudAorICAgICAgICAgICAgaWYgKCAhdHlwZSApIHsK
KyAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRs
ZXIsIHNlbGVjdG9yLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5
LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKyAgICAgICAgICAgIHR5cGUgPSAoIHNlbGVj
dG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsK
KyAgICAgICAgICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107CisgICAgICAgICAg
ICB0bXAgPSB0bXBbIDIgXSAmJgorICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoICIoXnxcXC4p
IiArIG5hbWVzcGFjZXMuam9pbiggIlxcLig/Oi4qXFwufCkiICkgKyAiKFxcLnwkKSIgKTsKKwor
ICAgICAgICAgICAgLy8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50cworICAgICAgICAgICAgb3JpZ0Nv
dW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlICggai0tICkgewor
ICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07CisKKyAgICAgICAgICAg
ICAgICBpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlw
ZSApICYmCisgICAgICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09
PSBoYW5kbGVPYmouZ3VpZCApICYmCisgICAgICAgICAgICAgICAgICAgICggIXRtcCB8fCB0bXAu
dGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCAh
c2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkg
KSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaiwgMSApOworCisgICAg
ICAgICAgICAgICAgICAgIGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbC5yZW1vdmUgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1v
dmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdAorICAgICAgICAgICAgLy8g
KGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9m
IHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpCisgICAgICAgICAgICBpZiAoIG9yaWdDb3VudCAmJiAh
aGFuZGxlcnMubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIGlmICggIXNwZWNpYWwudGVhcmRv
d24gfHwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBu
YW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUg
KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRzWyB0
eXBlIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1vdmUgZGF0
YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAorICAgICAgICBpZiAoIGpR
dWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHsKKyAgICAgICAgICAgIGRhdGFQcml2LnJl
bW92ZSggZWxlbSwgImhhbmRsZSBldmVudHMiICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAg
ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKworICAgICAgICAvLyBNYWtlIGEgd3JpdGFi
bGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3QKKyAgICAgICAgZXZl
bnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApOworCisgICAgICAgIHZhciBpLCBqLCByZXQs
IG1hdGNoZWQsIGhhbmRsZU9iaiwKKyAgICAgICAgICAgIGhhbmRsZXJRdWV1ZSA9IFtdLAorICAg
ICAgICAgICAgYXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAorICAgICAgICAgICAgaGFu
ZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50
eXBlIF0gfHwgW10sCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxb
IGV2ZW50LnR5cGUgXSB8fCB7fTsKKworICAgICAgICAvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnku
RXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudAorICAgICAgICBh
cmdzWyAwIF0gPSBldmVudDsKKyAgICAgICAgZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOwor
CisgICAgICAgIC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlw
ZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWQKKyAgICAgICAgaWYgKCBzcGVjaWFsLnByZURp
c3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFs
c2UgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRl
cm1pbmUgaGFuZGxlcnMKKyAgICAgICAgaGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRs
ZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApOworCisgICAgICAgIC8vIFJ1biBkZWxl
Z2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVz
CisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1
ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKyAgICAgICAg
ICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07CisKKyAgICAgICAgICAgIGog
PSAwOworICAgICAgICAgICAgd2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNb
IGorKyBdICkgJiYKKyAgICAgICAgICAgICAgICAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlv
blN0b3BwZWQoKSApIHsKKworICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlZCBldmVudCBtdXN0
IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2UocykKKyAg
ICAgICAgICAgICAgICAvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQg
ZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KKyAgICAgICAgICAgICAgICBpZiAo
ICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5h
bWVzcGFjZSApICkgeworCisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhh
bmRsZU9iajsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRh
OworCisgICAgICAgICAgICAgICAgICAgIHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsg
aGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOwor
CisgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxsIHRoZSBw
b3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCisgICAgICAgIGlmICggc3BlY2lh
bC5wb3N0RGlzcGF0Y2ggKSB7CisgICAgICAgICAgICBzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxs
KCB0aGlzLCBldmVudCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3Vs
dDsKKyAgICB9LAorCisgICAgaGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7
CisgICAgICAgIHZhciBpLCBtYXRjaGVzLCBzZWwsIGhhbmRsZU9iaiwKKyAgICAgICAgICAgIGhh
bmRsZXJRdWV1ZSA9IFtdLAorICAgICAgICAgICAgZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRl
bGVnYXRlQ291bnQsCisgICAgICAgICAgICBjdXIgPSBldmVudC50YXJnZXQ7CisKKyAgICAgICAg
Ly8gU3VwcG9ydCAoYXQgbGVhc3QpOiBDaHJvbWUsIElFOQorICAgICAgICAvLyBGaW5kIGRlbGVn
YXRlIGhhbmRsZXJzCisgICAgICAgIC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRy
ZWVzICgjMTMxODApCisgICAgICAgIC8vCisgICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVmb3g8PTQy
KworICAgICAgICAvLyBBdm9pZCBub24tbGVmdC1jbGljayBpbiBGRiBidXQgZG9uJ3QgYmxvY2sg
SUUgcmFkaW8gZXZlbnRzICgjMzg2MSwgZ2gtMjM0MykKKyAgICAgICAgaWYgKCBkZWxlZ2F0ZUNv
dW50ICYmIGN1ci5ub2RlVHlwZSAmJgorICAgICAgICAgICAgKCBldmVudC50eXBlICE9PSAiY2xp
Y2siIHx8IGlzTmFOKCBldmVudC5idXR0b24gKSB8fCBldmVudC5idXR0b24gPCAxICkgKSB7CisK
KyAgICAgICAgICAgIGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8
fCB0aGlzICkgeworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRz
ICgjMTMyMDgpCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlz
YWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpCisgICAgICAgICAg
ICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgKCBjdXIuZGlzYWJsZWQgIT09IHRydWUg
fHwgZXZlbnQudHlwZSAhPT0gImNsaWNrIiApICkgeworICAgICAgICAgICAgICAgICAgICBtYXRj
aGVzID0gW107CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVD
b3VudDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxl
cnNbIGkgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY29uZmxpY3Qgd2l0
aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArICIgIjsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBtYXRjaGVzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZXNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4
dCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsLCB0aGlzICku
aW5kZXgoIGN1ciApID4gLTEgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVzWyBzZWwg
XSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goIGhhbmRsZU9i
aiApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlcy5sZW5ndGggKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRj
aGVzIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJl
Y3RseS1ib3VuZCkgaGFuZGxlcnMKKyAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxl
cnMubGVuZ3RoICkgeworICAgICAgICAgICAgaGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogdGhp
cywgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGhhbmRsZXJRdWV1ZTsKKyAgICB9LAorCisgICAgLy8gSW5j
bHVkZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQK
KyAgICBwcm9wczogKCAiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRU
YXJnZXQgZGV0YWlsIGV2ZW50UGhhc2UgIiArCisgICAgICAgICJtZXRhS2V5IHJlbGF0ZWRUYXJn
ZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIiApLnNwbGl0KCAiICIgKSwK
KworICAgIGZpeEhvb2tzOiB7fSwKKworICAgIGtleUhvb2tzOiB7CisgICAgICAgIHByb3BzOiAi
Y2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoICIgIiApLAorICAgICAgICBmaWx0ZXI6
IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7CisKKyAgICAgICAgICAgIC8vIEFkZCB3aGlj
aCBmb3Iga2V5IGV2ZW50cworICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSBudWxsICkg
eworICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVs
bCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICB9CisgICAgfSwKKworICAgIG1v
dXNlSG9va3M6IHsKKyAgICAgICAgcHJvcHM6ICggImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xp
ZW50WSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgIiArCisgICAgICAgICAgICAic2NyZWVu
WCBzY3JlZW5ZIHRvRWxlbWVudCIgKS5zcGxpdCggIiAiICksCisgICAgICAgIGZpbHRlcjogZnVu
Y3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKKyAgICAgICAgICAgIHZhciBldmVudERvYywgZG9j
LCBib2R5LAorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbjsKKworICAg
ICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2
YWlsYWJsZQorICAgICAgICAgICAgaWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFs
LmNsaWVudFggIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICBldmVudERvYyA9IGV2ZW50LnRh
cmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OworICAgICAgICAgICAgICAgIGRvYyA9IGV2
ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgICAgICAgICBib2R5ID0gZXZlbnREb2Mu
Ym9keTsKKworICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VYID0gb3JpZ2luYWwuY2xpZW50WCAr
CisgICAgICAgICAgICAgICAgICAgICggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYg
Ym9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtCisgICAgICAgICAgICAgICAgICAgICggZG9jICYmIGRv
Yy5jbGllbnRMZWZ0IHx8IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTsKKyAgICAgICAg
ICAgICAgICBldmVudC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgKworICAgICAgICAgICAgICAg
ICAgICAoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8
fCAwICkgLQorICAgICAgICAgICAgICAgICAgICAoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBi
b2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9
PT0gcmlnaHQKKyAgICAgICAgICAgIC8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwg
c28gZG9uJ3QgdXNlIGl0CisgICAgICAgICAgICBpZiAoICFldmVudC53aGljaCAmJiBidXR0b24g
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBldmVudC53aGljaCA9ICggYnV0dG9u
ICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24gJiA0ID8gMiA6IDAgKSApICk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBldmVudDsKKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICBmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgaWYgKCBldmVu
dFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgIHJldHVybiBldmVudDsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9i
amVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllcworICAgICAgICB2YXIgaSwgcHJvcCwg
Y29weSwKKyAgICAgICAgICAgIHR5cGUgPSBldmVudC50eXBlLAorICAgICAgICAgICAgb3JpZ2lu
YWxFdmVudCA9IGV2ZW50LAorICAgICAgICAgICAgZml4SG9vayA9IHRoaXMuZml4SG9va3NbIHR5
cGUgXTsKKworICAgICAgICBpZiAoICFmaXhIb29rICkgeworICAgICAgICAgICAgdGhpcy5maXhI
b29rc1sgdHlwZSBdID0gZml4SG9vayA9CisgICAgICAgICAgICAgICAgcm1vdXNlRXZlbnQudGVz
dCggdHlwZSApID8gdGhpcy5tb3VzZUhvb2tzIDoKKyAgICAgICAgICAgICAgICBya2V5RXZlbnQu
dGVzdCggdHlwZSApID8gdGhpcy5rZXlIb29rcyA6CisgICAgICAgICAgICAgICAge307CisgICAg
ICAgIH0KKyAgICAgICAgY29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCgg
Zml4SG9vay5wcm9wcyApIDogdGhpcy5wcm9wczsKKworICAgICAgICBldmVudCA9IG5ldyBqUXVl
cnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKKworICAgICAgICBpID0gY29weS5sZW5ndGg7Cisg
ICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgcHJvcCA9IGNvcHlbIGkgXTsKKyAg
ICAgICAgICAgIGV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07CisgICAgICAg
IH0KKworICAgICAgICAvLyBTdXBwb3J0OiBDb3Jkb3ZhIDIuNSAoV2ViS2l0KSAoIzEzMjU1KQor
ICAgICAgICAvLyBBbGwgZXZlbnRzIHNob3VsZCBoYXZlIGEgdGFyZ2V0OyBDb3Jkb3ZhIGRldmlj
ZXJlYWR5IGRvZXNuJ3QKKyAgICAgICAgaWYgKCAhZXZlbnQudGFyZ2V0ICkgeworICAgICAgICAg
ICAgZXZlbnQudGFyZ2V0ID0gZG9jdW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdXBw
b3J0OiBTYWZhcmkgNi4wKywgQ2hyb21lPDI4CisgICAgICAgIC8vIFRhcmdldCBzaG91bGQgbm90
IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpCisgICAgICAgIGlmICggZXZlbnQudGFyZ2V0
Lm5vZGVUeXBlID09PSAzICkgeworICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFy
Z2V0LnBhcmVudE5vZGU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZml4SG9vay5maWx0
ZXIgPyBmaXhIb29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6IGV2ZW50OworICAg
IH0sCisKKyAgICBzcGVjaWFsOiB7CisgICAgICAgIGxvYWQ6IHsKKworICAgICAgICAgICAgLy8g
UHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5k
b3cubG9hZAorICAgICAgICAgICAgbm9CdWJibGU6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAg
Zm9jdXM6IHsKKworICAgICAgICAgICAgLy8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUg
c28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0CisgICAgICAgICAgICB0cmlnZ2VyOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMgIT09IHNhZmVBY3RpdmVFbGVt
ZW50KCkgJiYgdGhpcy5mb2N1cyApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogImZvY3VzaW4iCisgICAg
ICAgIH0sCisgICAgICAgIGJsdXI6IHsKKyAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGlmICggdGhpcyA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0
aGlzLmJsdXIgKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYmx1cigpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IgorICAgICAgICB9LAorICAg
ICAgICBjbGljazogeworCisgICAgICAgICAgICAvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZl
IGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodAorICAgICAgICAgICAgdHJpZ2dl
cjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnR5cGUgPT09ICJjaGVj
a2JveCIgJiYgdGhpcy5jbGljayAmJiBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJpbnB1dCIgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGljaygpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgLy8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIGRvbid0IGZpcmUgbmF0
aXZlIC5jbGljaygpIG9uIGxpbmtzCisgICAgICAgICAgICBfZGVmYXVsdDogZnVuY3Rpb24oIGV2
ZW50ICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGV2ZW50LnRh
cmdldCwgImEiICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgYmVmb3Jl
dW5sb2FkOiB7CisgICAgICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsK
KworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArCisgICAgICAgICAgICAg
ICAgLy8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBu
b3Qgc2V0LgorICAgICAgICAgICAgICAgIGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQg
JiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQub3Jp
Z2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCitqUXVlcnkucmVtb3ZlRXZl
bnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgeworCisgICAgLy8gVGhpcyAiaWYi
IGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0cworICAgIGlmICggZWxlbS5yZW1vdmVFdmVudExp
c3RlbmVyICkgeworICAgICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRs
ZSApOworICAgIH0KK307CisKK2pRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkg
eworCisgICAgLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3Jk
CisgICAgaWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7CisgICAgICAg
IHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7CisgICAgfQorCisgICAgLy8g
RXZlbnQgb2JqZWN0CisgICAgaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7CisgICAgICAgIHRoaXMu
b3JpZ2luYWxFdmVudCA9IHNyYzsKKyAgICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7CisKKyAg
ICAgICAgLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1h
cmtlZCBhcyBwcmV2ZW50ZWQKKyAgICAgICAgLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhl
IHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCisgICAgICAgIHRoaXMuaXNEZWZhdWx0
UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwKKyAgICAgICAgICAgICAgICBzcmMu
ZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmCisKKyAgICAgICAgICAgICAgICAvLyBT
dXBwb3J0OiBBbmRyb2lkPDQuMAorICAgICAgICAgICAgICAgIHNyYy5yZXR1cm5WYWx1ZSA9PT0g
ZmFsc2UgPworICAgICAgICAgICAgcmV0dXJuVHJ1ZSA6CisgICAgICAgICAgICByZXR1cm5GYWxz
ZTsKKworICAgIC8vIEV2ZW50IHR5cGUKKyAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnR5cGUg
PSBzcmM7CisgICAgfQorCisgICAgLy8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGll
cyBvbnRvIHRoZSBldmVudCBvYmplY3QKKyAgICBpZiAoIHByb3BzICkgeworICAgICAgICBqUXVl
cnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOworICAgIH0KKworICAgIC8vIENyZWF0ZSBhIHRpbWVz
dGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lCisgICAgdGhpcy50aW1lU3Rh
bXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7CisKKyAgICAvLyBNYXJr
IGl0IGFzIGZpeGVkCisgICAgdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7Cit9OworCisv
LyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRo
ZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIw
MDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRt
bAoralF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2
ZW50LAorICAgIGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsCisgICAgaXNQcm9wYWdh
dGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAorICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9w
cGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc1NpbXVsYXRlZDogZmFsc2UsCisKKyAgICBwcmV2ZW50
RGVmYXVsdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50
OworCisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKKworICAg
ICAgICBpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7CisgICAgICAgICAgICBlLnByZXZl
bnREZWZhdWx0KCk7CisgICAgICAgIH0KKyAgICB9LAorICAgIHN0b3BQcm9wYWdhdGlvbjogZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisgICAgICAg
IHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOworCisgICAgICAgIGlmICgg
ZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKyAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9u
KCk7CisgICAgICAgIH0KKyAgICB9LAorICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisgICAgICAg
IHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOworCisgICAg
ICAgIGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKyAgICAgICAgICAgIGUuc3RvcElt
bWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnN0b3BQcm9w
YWdhdGlvbigpOworICAgIH0KK307CisKKy8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50
cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrcworLy8gc28gdGhhdCBl
dmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS4KKy8vIERvIHRoZSBzYW1lIGZvciBwb2lu
dGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0CisvLworLy8g
U3VwcG9ydDogU2FmYXJpIDcgb25seQorLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9m
dGVuOyBzZWU6CisvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9k
ZXRhaWw/aWQ9NDcwMjU4CisvLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4
aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLgoralF1ZXJ5LmVhY2goIHsK
KyAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKKyAgICBtb3VzZWxlYXZlOiAibW91c2VvdXQi
LAorICAgIHBvaW50ZXJlbnRlcjogInBvaW50ZXJvdmVyIiwKKyAgICBwb2ludGVybGVhdmU6ICJw
b2ludGVyb3V0IgorfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKKyAgICBqUXVlcnkuZXZlbnQu
c3BlY2lhbFsgb3JpZyBdID0geworICAgICAgICBkZWxlZ2F0ZVR5cGU6IGZpeCwKKyAgICAgICAg
YmluZFR5cGU6IGZpeCwKKworICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHsKKyAg
ICAgICAgICAgIHZhciByZXQsCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcywKKyAgICAg
ICAgICAgICAgICByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCwKKyAgICAgICAgICAgICAg
ICBoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7CisKKyAgICAgICAgICAgIC8vIEZvciBtb3Vz
ZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0
YXJnZXQuCisgICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2Ug
bGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdworICAgICAgICAgICAgaWYgKCAhcmVsYXRl
ZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJl
bGF0ZWQgKSApICkgeworICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3Jp
Z1R5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRo
aXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBmaXg7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfTsKK30g
KTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVj
dG9yLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0
b3IsIGRhdGEsIGZuICk7CisgICAgfSwKKyAgICBvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0
b3IsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3Rv
ciwgZGF0YSwgZm4sIDEgKTsKKyAgICB9LAorICAgIG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxl
Y3RvciwgZm4gKSB7CisgICAgICAgIHZhciBoYW5kbGVPYmosIHR5cGU7CisgICAgICAgIGlmICgg
dHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkgeworCisg
ICAgICAgICAgICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50CisgICAgICAg
ICAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7CisgICAgICAgICAgICBqUXVlcnkoIHR5
cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAorICAgICAgICAgICAgICAgIGhhbmRsZU9iai5uYW1l
c3BhY2UgPworICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBo
YW5kbGVPYmoubmFtZXNwYWNlIDoKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLm9yaWdU
eXBlLAorICAgICAgICAgICAgICAgIGhhbmRsZU9iai5zZWxlY3RvciwKKyAgICAgICAgICAgICAg
ICBoYW5kbGVPYmouaGFuZGxlcgorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICB9CisgICAgICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiAp
IHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdICkKKyAgICAg
ICAgICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vZmYo
IHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHNlbGVjdG9yID09PSBm
YWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgKSB7CisKKyAgICAgICAgICAg
IC8vICggdHlwZXMgWywgZm5dICkKKyAgICAgICAgICAgIGZuID0gc2VsZWN0b3I7CisgICAgICAg
ICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGZuID09
PSBmYWxzZSApIHsKKyAgICAgICAgICAgIGZuID0gcmV0dXJuRmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnku
ZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7CisgICAgICAgIH0gKTsK
KyAgICB9Cit9ICk7CisKKwordmFyCisgICAgcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxl
bWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Oi1dKylbXj5dKilcLz4vZ2ks
CisKKyAgICAvLyBTdXBwb3J0OiBJRSAxMC0xMSwgRWRnZSAxMDI0MCsKKyAgICAvLyBJbiBJRS9F
ZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLgorICAg
IC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxz
LzE3MzY1MTIvCisgICAgcm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksCisK
KyAgICAvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2VkCisgICAgcmNoZWNrZWQgPSAvY2hl
Y2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKKyAgICByc2NyaXB0VHlwZU1hc2tlZCA9
IC9edHJ1ZVwvKC4qKS8sCisgICAgcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3wt
LSl8KD86XF1cXXwtLSk+XHMqJC9nOworCisvLyBNYW5pcHVsYXRpbmcgdGFibGVzIHJlcXVpcmVz
IGEgdGJvZHkKK2Z1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHsK
KyAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAidGFibGUiICkgJiYKKyAgICAgICAg
alF1ZXJ5Lm5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250
ZW50LmZpcnN0Q2hpbGQsICJ0ciIgKSA/CisKKyAgICAgICAgZWxlbS5nZXRFbGVtZW50c0J5VGFn
TmFtZSggInRib2R5IiApWyAwIF0gfHwKKyAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoIGVs
ZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCAidGJvZHkiICkgKSA6CisgICAgICAgIGVs
ZW07Cit9CisKKy8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0
IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb24KK2Z1bmN0aW9uIGRpc2FibGVTY3Jp
cHQoIGVsZW0gKSB7CisgICAgZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUi
ICkgIT09IG51bGwgKSArICIvIiArIGVsZW0udHlwZTsKKyAgICByZXR1cm4gZWxlbTsKK30KK2Z1
bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7CisgICAgdmFyIG1hdGNoID0gcnNjcmlwdFR5
cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7CisKKyAgICBpZiAoIG1hdGNoICkgeworICAgICAg
ICBlbGVtLnR5cGUgPSBtYXRjaFsgMSBdOworICAgIH0gZWxzZSB7CisgICAgICAgIGVsZW0ucmVt
b3ZlQXR0cmlidXRlKCAidHlwZSIgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZWxlbTsKK30KKwor
ZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKKyAgICB2YXIgaSwgbCwgdHlw
ZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50czsKKworICAg
IGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuCisgICAg
aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHsKKyAgICAgICAgcGRhdGFPbGQgPSBkYXRh
UHJpdi5hY2Nlc3MoIHNyYyApOworICAgICAgICBwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVz
dCwgcGRhdGFPbGQgKTsKKyAgICAgICAgZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzOworCisgICAg
ICAgIGlmICggZXZlbnRzICkgeworICAgICAgICAgICAgZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTsK
KyAgICAgICAgICAgIHBkYXRhQ3VyLmV2ZW50cyA9IHt9OworCisgICAgICAgICAgICBmb3IgKCB0
eXBlIGluIGV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IGV2ZW50
c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDIu
IENvcHkgdXNlciBkYXRhCisgICAgaWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHsKKyAg
ICAgICAgdWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApOworICAgICAgICB1ZGF0YUN1
ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApOworCisgICAgICAgIGRhdGFVc2VyLnNl
dCggZGVzdCwgdWRhdGFDdXIgKTsKKyAgICB9Cit9CisKKy8vIEZpeCBJRSBidWdzLCBzZWUgc3Vw
cG9ydCB0ZXN0cworZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHsKKyAgICB2YXIgbm9k
ZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgICAvLyBGYWlscyB0byBw
ZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1
dHRvbi4KKyAgICBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2FibGVUeXBlLnRl
c3QoIHNyYy50eXBlICkgKSB7CisgICAgICAgIGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOwor
CisgICAgLy8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1
bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKKyAgICB9IGVsc2UgaWYgKCBu
b2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKKyAgICAg
ICAgZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOworICAgIH0KK30KKworZnVu
Y3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkgewor
CisgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworICAgIGFyZ3MgPSBjb25jYXQuYXBw
bHkoIFtdLCBhcmdzICk7CisKKyAgICB2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNT
Y3JpcHRzLCBub2RlLCBkb2MsCisgICAgICAgIGkgPSAwLAorICAgICAgICBsID0gY29sbGVjdGlv
bi5sZW5ndGgsCisgICAgICAgIGlOb0Nsb25lID0gbCAtIDEsCisgICAgICAgIHZhbHVlID0gYXJn
c1sgMCBdLAorICAgICAgICBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7
CisKKyAgICAvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVj
a2VkLCBpbiBXZWJLaXQKKyAgICBpZiAoIGlzRnVuY3Rpb24gfHwKKyAgICAgICAgICAgICggbCA+
IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJgorICAgICAgICAgICAgICAgICFzdXBw
b3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkgeworICAgICAgICBy
ZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7CisgICAgICAgICAgICB2
YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7CisgICAgICAgICAgICBpZiAoIGlzRnVu
Y3Rpb24gKSB7CisgICAgICAgICAgICAgICAgYXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywg
aW5kZXgsIHNlbGYuaHRtbCgpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkb21NYW5p
cCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTsKKyAgICAgICAgfSApOworICAgIH0K
KworICAgIGlmICggbCApIHsKKyAgICAgICAgZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdz
LCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9y
ZWQgKTsKKyAgICAgICAgZmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkOworCisgICAgICAgIGlm
ICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7CisgICAgICAgICAgICBmcmFn
bWVudCA9IGZpcnN0OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVxdWlyZSBlaXRoZXIgbmV3
IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhl
IGNhbGxiYWNrCisgICAgICAgIGlmICggZmlyc3QgfHwgaWdub3JlZCApIHsKKyAgICAgICAgICAg
IHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCAic2NyaXB0IiApLCBkaXNh
YmxlU2NyaXB0ICk7CisgICAgICAgICAgICBoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7CisK
KyAgICAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0
ZW0KKyAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVu
ZCB1cAorICAgICAgICAgICAgLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWlu
IHNpdHVhdGlvbnMgKCM4MDcwKS4KKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICBub2RlID0gZnJhZ21lbnQ7CisKKyAgICAgICAgICAgICAgICBpZiAo
IGkgIT09IGlOb0Nsb25lICkgeworICAgICAgICAgICAgICAgICAgICBub2RlID0galF1ZXJ5LmNs
b25lKCBub2RlLCB0cnVlLCB0cnVlICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCBy
ZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvbgorICAgICAg
ICAgICAgICAgICAgICBpZiAoIGhhc1NjcmlwdHMgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8MgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdl
YktpdAorICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRB
bGwoIG5vZGUsICJzY3JpcHQiICkgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkg
XSwgbm9kZSwgaSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGhhc1Njcmlw
dHMgKSB7CisgICAgICAgICAgICAgICAgZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAx
IF0ub3duZXJEb2N1bWVudDsKKworICAgICAgICAgICAgICAgIC8vIFJlZW5hYmxlIHNjcmlwdHMK
KyAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7CisK
KyAgICAgICAgICAgICAgICAvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3Qg
ZG9jdW1lbnQgaW5zZXJ0aW9uCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBoYXNT
Y3JpcHRzOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzY3JpcHRzWyBpIF07
CisgICAgICAgICAgICAgICAgICAgIGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8
ICIiICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUs
ICJnbG9iYWxFdmFsIiApICYmCisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY29udGFp
bnMoIGRvYywgbm9kZSApICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUu
c3JjICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwgQUpBWCBk
ZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5fZXZhbFVybCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYyApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIG5vZGUudGV4
dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiIiApICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY29sbGVjdGlvbjsKK30K
KworZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7CisgICAgdmFy
IG5vZGUsCisgICAgICAgIG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3Rv
ciwgZWxlbSApIDogZWxlbSwKKyAgICAgICAgaSA9IDA7CisKKyAgICBmb3IgKCA7ICggbm9kZSA9
IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgIGlmICggIWtlZXBEYXRhICYm
IG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBn
ZXRBbGwoIG5vZGUgKSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBub2RlLnBhcmVudE5v
ZGUgKSB7CisgICAgICAgICAgICBpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggbm9k
ZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7CisgICAgICAgICAgICAgICAgc2V0R2xvYmFsRXZh
bCggZ2V0QWxsKCBub2RlLCAic2NyaXB0IiApICk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBlbGVtOworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisgICAgaHRtbFByZWZp
bHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHJldHVybiBodG1sLnJlcGxhY2UoIHJ4
aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKKyAgICB9LAorCisgICAgY2xvbmU6IGZ1bmN0aW9uKCBl
bGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKyAgICAgICAgdmFyIGks
IGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsCisgICAgICAgICAgICBjbG9uZSA9IGVsZW0u
Y2xvbmVOb2RlKCB0cnVlICksCisgICAgICAgICAgICBpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMo
IGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworCisgICAgICAgIC8vIEZpeCBJRSBjbG9uaW5n
IGlzc3VlcworICAgICAgICBpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5u
b2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmCisgICAgICAgICAgICAg
ICAgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworCisgICAgICAgICAgICAvLyBXZSBlc2No
ZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHA6Ly9qc3BlcmYuY29t
L2dldGFsbC12cy1zaXp6bGUvMgorICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBj
bG9uZSApOworICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKKworICAg
ICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysg
KSB7CisgICAgICAgICAgICAgICAgZml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVt
ZW50c1sgaSBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDb3B5
IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCisgICAgICAgIGlmICgg
ZGF0YUFuZEV2ZW50cyApIHsKKyAgICAgICAgICAgIGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7
CisgICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVs
ZW0gKTsKKyAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0
QWxsKCBjbG9uZSApOworCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzcmNFbGVt
ZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGNsb25lQ29w
eUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2xvbmVDb3B5
RXZlbnQoIGVsZW0sIGNsb25lICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5CisgICAgICAgIGRlc3RFbGVt
ZW50cyA9IGdldEFsbCggY2xvbmUsICJzY3JpcHQiICk7CisgICAgICAgIGlmICggZGVzdEVsZW1l
bnRzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICBzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVu
dHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCAic2NyaXB0IiApICk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQKKyAgICAgICAgcmV0dXJuIGNsb25lOwor
ICAgIH0sCisKKyAgICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHsKKyAgICAgICAgdmFy
IGRhdGEsIGVsZW0sIHR5cGUsCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNw
ZWNpYWwsCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBmb3IgKCA7ICggZWxlbSA9IGVs
ZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7CisgICAgICAgICAgICBpZiAoIGFjY2Vw
dERhdGEoIGVsZW0gKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICggZGF0YSA9IGVsZW1bIGRh
dGFQcml2LmV4cGFuZG8gXSApICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuZXZl
bnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBkYXRhLmV2ZW50
cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWxbIHR5cGUgXSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSgg
ZWxlbSwgdHlwZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBh
IHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBD
aHJvbWUgPD0gMzUtNDUrCisgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB1bmRlZmluZWQg
aW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZQorICAgICAgICAgICAgICAg
ICAgICBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkgewor
CisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NSsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0
ZSwgc2VlIERhdGEjcmVtb3ZlCisgICAgICAgICAgICAgICAgICAgIGVsZW1bIGRhdGFVc2VyLmV4
cGFuZG8gXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9ICk7CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKworICAgIC8vIEtl
ZXAgZG9tTWFuaXAgZXhwb3NlZCB1bnRpbCAzLjAgKGdoLTIyMjUpCisgICAgZG9tTWFuaXA6IGRv
bU1hbmlwLAorCisgICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJl
dHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7CisgICAgfSwKKworICAgIHJlbW92
ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gcmVtb3ZlKCB0aGlzLCBz
ZWxlY3RvciApOworICAgIH0sCisKKyAgICB0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAg
ICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICBqUXVlcnkudGV4
dCggdGhpcyApIDoKKyAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlz
Lm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSApOworICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1l
bnRzLmxlbmd0aCApOworICAgIH0sCisKKyAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0g
MTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0
ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7CisgICAgICAgICAgICAgICAgdGFy
Z2V0LmFwcGVuZENoaWxkKCBlbGVtICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAg
ICB9LAorCisgICAgcHJlcGVuZDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5p
cCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICgg
dGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVU
eXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25U
YXJnZXQoIHRoaXMsIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0QmVmb3Jl
KCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApOworICAgICAgICAgICAgfQorICAgICAgICB9ICk7
CisgICAgfSwKKworICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb21N
YW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlm
ICggdGhpcy5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOwor
ICAgIH0sCisKKyAgICBhZnRlcjogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBkb21NYW5p
cCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICgg
dGhpcy5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNl
cnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSApOworICAgIH0sCisKKyAgICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBl
bGVtLAorICAgICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgZm9yICggOyAoIGVsZW0gPSB0aGlz
WyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUg
PT09IDEgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG1lbW9yeSBsZWFrcworICAg
ICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApOwor
CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKKyAgICAgICAg
ICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgY2xvbmU6IGZ1bmN0aW9uKCBk
YXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKKyAgICAgICAgZGF0YUFuZEV2ZW50
cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKKyAgICAg
ICAgZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFu
ZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzOworCisgICAgICAgIHJldHVybiB0aGlzLm1hcCgg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRh
QW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApOworICAgICAgICB9ICk7CisgICAgfSwKKwor
ICAgIGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhp
cywgZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWyAwIF0g
fHwge30sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAgICAgbCA9IHRoaXMu
bGVuZ3RoOworCisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5u
b2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5pbm5lckhUTUw7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNo
b3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHZh
bHVlID09PSAic3RyaW5nIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiYKKyAgICAg
ICAgICAgICAgICAhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgIiIsICIi
IF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHsKKworICAgICAgICAgICAgICAgIHZhbHVlID0g
alF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7CisKKyAgICAgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBdIHx8IHt9OworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZh
bHNlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZh
bHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB1
c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRo
b2QKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHt9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBw
ZW5kKCB2YWx1ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJn
dW1lbnRzLmxlbmd0aCApOworICAgIH0sCisKKyAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBpZ25vcmVkID0gW107CisKKyAgICAgICAgLy8gTWFrZSB0aGUgY2hhbmdl
cywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5l
dyBjb250ZW50CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7
CisKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAg
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTsK
KyAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFy
ZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uCisgICAgICAg
IH0sIGlnbm9yZWQgKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5lYWNoKCB7CisgICAgYXBwZW5k
VG86ICJhcHBlbmQiLAorICAgIHByZXBlbmRUbzogInByZXBlbmQiLAorICAgIGluc2VydEJlZm9y
ZTogImJlZm9yZSIsCisgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCisgICAgcmVwbGFjZUFsbDog
InJlcGxhY2VXaXRoIgorfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgeworICAgIGpRdWVy
eS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgZWxlbXMs
CisgICAgICAgICAgICByZXQgPSBbXSwKKyAgICAgICAgICAgIGluc2VydCA9IGpRdWVyeSggc2Vs
ZWN0b3IgKSwKKyAgICAgICAgICAgIGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSwKKyAgICAgICAg
ICAgIGkgPSAwOworCisgICAgICAgIGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7CisgICAgICAg
ICAgICBlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApOworICAg
ICAgICAgICAgalF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOworCisg
ICAgICAgICAgICAvLyBTdXBwb3J0OiBRdFdlYktpdAorICAgICAgICAgICAgLy8gLmdldCgpIGJl
Y2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cworICAgICAgICAgICAgcHVzaC5h
cHBseSggcmV0LCBlbGVtcy5nZXQoKSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRo
aXMucHVzaFN0YWNrKCByZXQgKTsKKyAgICB9OworfSApOworCisKK3ZhciBpZnJhbWUsCisgICAg
ZWxlbWRpc3BsYXkgPSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveAorICAgICAgICAv
LyBXZSBoYXZlIHRvIHByZS1kZWZpbmUgdGhlc2UgdmFsdWVzIGZvciBGRiAoIzEwMjI3KQorICAg
ICAgICBIVE1MOiAiYmxvY2siLAorICAgICAgICBCT0RZOiAiYmxvY2siCisgICAgfTsKKworLyoq
CisgKiBSZXRyaWV2ZSB0aGUgYWN0dWFsIGRpc3BsYXkgb2YgYSBlbGVtZW50CisgKiBAcGFyYW0g
e1N0cmluZ30gbmFtZSBub2RlTmFtZSBvZiB0aGUgZWxlbWVudAorICogQHBhcmFtIHtPYmplY3R9
IGRvYyBEb2N1bWVudCBvYmplY3QKKyAqLworCisvLyBDYWxsZWQgb25seSBmcm9tIHdpdGhpbiBk
ZWZhdWx0RGlzcGxheQorZnVuY3Rpb24gYWN0dWFsRGlzcGxheSggbmFtZSwgZG9jICkgeworICAg
IHZhciBlbGVtID0galF1ZXJ5KCBkb2MuY3JlYXRlRWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8o
IGRvYy5ib2R5ICksCisKKyAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW1bIDAgXSwg
ImRpc3BsYXkiICk7CisKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBkYXRhIHN0b3JlZCBvbiB0
aGUgZWxlbWVudCwKKyAgICAvLyBzbyB1c2UgImRldGFjaCIgbWV0aG9kIGFzIGZhc3Qgd2F5IHRv
IGdldCByaWQgb2YgdGhlIGVsZW1lbnQKKyAgICBlbGVtLmRldGFjaCgpOworCisgICAgcmV0dXJu
IGRpc3BsYXk7Cit9CisKKy8qKgorICogVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNw
bGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQKKyAqIEBwYXJhbSB7U3RyaW5nfSBub2RlTmFtZQorICov
CitmdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CisgICAgdmFyIGRvYyA9IGRv
Y3VtZW50LAorICAgICAgICBkaXNwbGF5ID0gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07CisKKyAg
ICBpZiAoICFkaXNwbGF5ICkgeworICAgICAgICBkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9k
ZU5hbWUsIGRvYyApOworCisgICAgICAgIC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLCByZWFk
IGZyb20gaW5zaWRlIGFuIGlmcmFtZQorICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiB8
fCAhZGlzcGxheSApIHsKKworICAgICAgICAgICAgLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQg
aWZyYW1lIGlmIHBvc3NpYmxlCisgICAgICAgICAgICBpZnJhbWUgPSAoIGlmcmFtZSB8fCBqUXVl
cnkoICI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IiApICkK
KyAgICAgICAgICAgICAgICAuYXBwZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQgKTsKKworICAg
ICAgICAgICAgLy8gQWx3YXlzIHdyaXRlIGEgbmV3IEhUTUwgc2tlbGV0b24gc28gV2Via2l0IGFu
ZCBGaXJlZm94IGRvbid0IGNob2tlIG9uIHJldXNlCisgICAgICAgICAgICBkb2MgPSBpZnJhbWVb
IDAgXS5jb250ZW50RG9jdW1lbnQ7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFCisgICAg
ICAgICAgICBkb2Mud3JpdGUoKTsKKyAgICAgICAgICAgIGRvYy5jbG9zZSgpOworCisgICAgICAg
ICAgICBkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApOworICAgICAgICAg
ICAgaWZyYW1lLmRldGFjaCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcmUgdGhlIGNv
cnJlY3QgZGVmYXVsdCBkaXNwbGF5CisgICAgICAgIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0g
ZGlzcGxheTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzcGxheTsKK30KK3ZhciBybWFyZ2luID0g
KCAvXm1hcmdpbi8gKTsKKwordmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBwbnVt
ICsgIikoPyFweClbYS16JV0rJCIsICJpIiApOworCit2YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24o
IGVsZW0gKSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUU8PTExKywgRmlyZWZveDw9MzArICgj
MTUwOTgsICMxNDE1MCkKKyAgICAgICAgLy8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQg
aW4gcG9wdXBzCisgICAgICAgIC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVu
dHMgdGhyb3VnaCAiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSIKKyAgICAgICAgdmFyIHZp
ZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7CisKKyAgICAgICAgaWYgKCAhdmll
dyB8fCAhdmlldy5vcGVuZXIgKSB7CisgICAgICAgICAgICB2aWV3ID0gd2luZG93OworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApOworICAg
IH07CisKK3ZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdz
ICkgeworICAgIHZhciByZXQsIG5hbWUsCisgICAgICAgIG9sZCA9IHt9OworCisgICAgLy8gUmVt
ZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCisgICAgZm9yICgg
bmFtZSBpbiBvcHRpb25zICkgeworICAgICAgICBvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5h
bWUgXTsKKyAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOworICAg
IH0KKworICAgIHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7CisKKyAg
ICAvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKKyAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7
CisgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOworICAgIH0KKworICAg
IHJldHVybiByZXQ7Cit9OworCisKK3ZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQ7CisKKworCisoIGZ1bmN0aW9uKCkgeworICAgIHZhciBwaXhlbFBvc2l0aW9u
VmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgcGl4ZWxNYXJnaW5SaWdodFZhbCwgcmVsaWFibGVN
YXJnaW5MZWZ0VmFsLAorICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCAiZGl2IiApLAorICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiAp
OworCisgICAgLy8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9u
bWVudHMKKyAgICBpZiAoICFkaXYuc3R5bGUgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBTdXBwb3J0OiBJRTktMTErCisgICAgLy8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQg
YWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KQorICAgIGRpdi5zdHlsZS5iYWNr
Z3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCI7CisgICAgZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0
eWxlLmJhY2tncm91bmRDbGlwID0gIiI7CisgICAgc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBk
aXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09ICJjb250ZW50LWJveCI7CisKKyAgICBjb250YWlu
ZXIuc3R5bGUuY3NzVGV4dCA9ICJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVm
dDotOTk5OXB4OyIgKworICAgICAgICAicGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9u
OmFic29sdXRlIjsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApOworCisgICAgLy8g
RXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJl
cXVpcmUgb25seSBvbmUgbGF5b3V0CisgICAgLy8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUg
c2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi4KKyAgICBmdW5jdGlvbiBj
b21wdXRlU3R5bGVUZXN0cygpIHsKKyAgICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPQorCisgICAg
ICAgICAgICAvLyBTdXBwb3J0OiBGaXJlZm94PDI5LCBBbmRyb2lkIDIuMworICAgICAgICAgICAg
Ly8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nCisgICAgICAgICAgICAiLXdlYmtpdC1ib3gtc2l6
aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3Jk
ZXItYm94OyIgKworICAgICAgICAgICAgInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7
IiArCisgICAgICAgICAgICAibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDsiICsK
KyAgICAgICAgICAgICJ0b3A6MSU7d2lkdGg6NTAlIjsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9
ICIiOworICAgICAgICBkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApOwor
CisgICAgICAgIHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTsK
KyAgICAgICAgcGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gIjElIjsKKyAgICAg
ICAgcmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gZGl2U3R5bGUubWFyZ2luTGVmdCA9PT0gIjJweCI7
CisgICAgICAgIGJveFNpemluZ1JlbGlhYmxlVmFsID0gZGl2U3R5bGUud2lkdGggPT09ICI0cHgi
OworCisgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHkKKyAgICAgICAg
Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhv
dWdoIHRoZXkgc2hvdWxkbid0CisgICAgICAgIGRpdi5zdHlsZS5tYXJnaW5SaWdodCA9ICI1MCUi
OworICAgICAgICBwaXhlbE1hcmdpblJpZ2h0VmFsID0gZGl2U3R5bGUubWFyZ2luUmlnaHQgPT09
ICI0cHgiOworCisgICAgICAgIGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVy
ICk7CisgICAgfQorCisgICAgalF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwgeworICAgICAgICBwaXhl
bFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gVGhpcyB0ZXN0IGlzIGV4
ZWN1dGVkIG9ubHkgb25jZSBidXQgd2Ugc3RpbGwgZG8gbWVtb2l6aW5nCisgICAgICAgICAgICAv
LyBzaW5jZSB3ZSBjYW4gdXNlIHRoZSBib3hTaXppbmdSZWxpYWJsZSBwcmUtY29tcHV0aW5nLgor
ICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgdGVzdCB3YXMgYWxyZWFkeSBw
ZXJmb3JtZWQsIHRob3VnaC4KKyAgICAgICAgICAgIGNvbXB1dGVTdHlsZVRlc3RzKCk7CisgICAg
ICAgICAgICByZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDsKKyAgICAgICAgfSwKKyAgICAgICAgYm94
U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCBib3hTaXppbmdS
ZWxpYWJsZVZhbCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIGNvbXB1dGVTdHlsZVRlc3Rz
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYm94U2l6aW5nUmVsaWFibGVW
YWw7CisgICAgICAgIH0sCisgICAgICAgIHBpeGVsTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkgewor
CisgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMC00LjMKKyAgICAgICAgICAgIC8v
IFdlJ3JlIGNoZWNraW5nIGZvciBib3hTaXppbmdSZWxpYWJsZVZhbCBoZXJlIGluc3RlYWQgb2Yg
cGl4ZWxNYXJnaW5SaWdodFZhbAorICAgICAgICAgICAgLy8gc2luY2UgdGhhdCBjb21wcmVzc2Vz
IGJldHRlciBhbmQgdGhleSdyZSBjb21wdXRlZCB0b2dldGhlciBhbnl3YXkuCisgICAgICAgICAg
ICBpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAg
Y29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBw
aXhlbE1hcmdpblJpZ2h0VmFsOworICAgICAgICB9LAorICAgICAgICByZWxpYWJsZU1hcmdpbkxl
ZnQ6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTggb25seSwg
QW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSAzNworICAgICAgICAgICAgaWYg
KCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIGNvbXB1
dGVTdHlsZVRlc3RzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVsaWFi
bGVNYXJnaW5MZWZ0VmFsOworICAgICAgICB9LAorICAgICAgICByZWxpYWJsZU1hcmdpblJpZ2h0
OiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKyAg
ICAgICAgICAgIC8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJn
aW4tcmlnaHQgaW5jb3JyZWN0bHkKKyAgICAgICAgICAgIC8vIGdldHMgY29tcHV0ZWQgbWFyZ2lu
LXJpZ2h0IGJhc2VkIG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gKCMzMzMzKQorICAgICAgICAgICAg
Ly8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1
ZSBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAgICAgICAvLyBUaGlzIHN1cHBvcnQgZnVuY3Rpb24g
aXMgb25seSBleGVjdXRlZCBvbmNlIHNvIG5vIG1lbW9pemluZyBpcyBuZWVkZWQuCisgICAgICAg
ICAgICB2YXIgcmV0LAorICAgICAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRpdi5hcHBlbmRDaGls
ZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSApOworCisgICAgICAgICAgICAvLyBS
ZXNldCBDU1M6IGJveC1zaXppbmc7IGRpc3BsYXk7IG1hcmdpbjsgYm9yZGVyOyBwYWRkaW5nCisg
ICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0ID0K
KworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCisgICAgICAgICAgICAg
ICAgLy8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nCisgICAgICAgICAgICAgICAgIi13ZWJraXQt
Ym94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIgKworICAgICAg
ICAgICAgICAgICJkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCI7Cisg
ICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBtYXJnaW5EaXYuc3R5bGUu
d2lkdGggPSAiMCI7CisgICAgICAgICAgICBkaXYuc3R5bGUud2lkdGggPSAiMXB4IjsKKyAgICAg
ICAgICAgIGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7CisKKyAgICAg
ICAgICAgIHJldCA9ICFwYXJzZUZsb2F0KCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2lu
RGl2ICkubWFyZ2luUmlnaHQgKTsKKworICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50LnJlbW92
ZUNoaWxkKCBjb250YWluZXIgKTsKKyAgICAgICAgICAgIGRpdi5yZW1vdmVDaGlsZCggbWFyZ2lu
RGl2ICk7CisKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9ICk7Cit9
ICkoKTsKKworCitmdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkgeworICAg
IHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsCisgICAgICAgIHN0eWxlID0gZWxl
bS5zdHlsZTsKKworICAgIGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7
CisgICAgcmV0ID0gY29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkg
fHwgY29tcHV0ZWRbIG5hbWUgXSA6IHVuZGVmaW5lZDsKKworICAgIC8vIFN1cHBvcnQ6IE9wZXJh
IDEyLjF4IG9ubHkKKyAgICAvLyBGYWxsIGJhY2sgdG8gc3R5bGUgZXZlbiB3aXRob3V0IGNvbXB1
dGVkCisgICAgLy8gY29tcHV0ZWQgaXMgdW5kZWZpbmVkIGZvciBlbGVtcyBvbiBkb2N1bWVudCBm
cmFnbWVudHMKKyAgICBpZiAoICggcmV0ID09PSAiIiB8fCByZXQgPT09IHVuZGVmaW5lZCApICYm
ICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgeworICAgICAg
ICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsKKyAgICB9CisKKyAgICAvLyBTdXBw
b3J0OiBJRTkKKyAgICAvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAuY3Nz
KCdmaWx0ZXInKSAoIzEyNTM3KQorICAgIGlmICggY29tcHV0ZWQgKSB7CisKKyAgICAgICAgLy8g
QSB0cmlidXRlIHRvIHRoZSAiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKKyAgICAgICAg
Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsCisg
ICAgICAgIC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuCisgICAgICAg
IC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzoKKyAgICAgICAgLy8gaHR0
cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Jlc29sdmVkLXZhbHVlcworICAgICAgICBpZiAo
ICFzdXBwb3J0LnBpeGVsTWFyZ2luUmlnaHQoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYg
cm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CisKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBv
cmlnaW5hbCB2YWx1ZXMKKyAgICAgICAgICAgIHdpZHRoID0gc3R5bGUud2lkdGg7CisgICAgICAg
ICAgICBtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoOworICAgICAgICAgICAgbWF4V2lkdGggPSBz
dHlsZS5tYXhXaWR0aDsKKworICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRv
IGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAorICAgICAgICAgICAgc3R5bGUubWluV2lkdGggPSBz
dHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0OworICAgICAgICAgICAgcmV0ID0gY29t
cHV0ZWQud2lkdGg7CisKKyAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMK
KyAgICAgICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBzdHlsZS5taW5X
aWR0aCA9IG1pbldpZHRoOworICAgICAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/CisKKyAg
ICAgICAgLy8gU3VwcG9ydDogSUU5LTExKworICAgICAgICAvLyBJRSByZXR1cm5zIHpJbmRleCB2
YWx1ZSBhcyBhbiBpbnRlZ2VyLgorICAgICAgICByZXQgKyAiIiA6CisgICAgICAgIHJldDsKK30K
KworCitmdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7CisKKyAg
ICAvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQn
cyByZWFsbHkgbmVlZGVkLgorICAgIHJldHVybiB7CisgICAgICAgIGdldDogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBpZiAoIGNvbmRpdGlvbkZuKCkgKSB7CisKKyAgICAgICAgICAgICAgICAv
LyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWUKKyAg
ICAgICAgICAgICAgICAvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuCisgICAg
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuZ2V0OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNv
IHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uCisgICAgICAgICAg
ICByZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsK
KyAgICAgICAgfQorICAgIH07Cit9CisKKwordmFyCisKKyAgICAvLyBTd2FwcGFibGUgaWYgZGlz
cGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlCisgICAgLy8gZXhjZXB0ICJ0YWJsZSIs
ICJ0YWJsZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCisgICAgLy8gU2VlIGhlcmUgZm9yIGRp
c3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NT
Uy9kaXNwbGF5CisgICAgcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykv
LAorCisgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJo
aWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCisgICAgY3NzTm9ybWFsVHJhbnNmb3JtID0gewor
ICAgICAgICBsZXR0ZXJTcGFjaW5nOiAiMCIsCisgICAgICAgIGZvbnRXZWlnaHQ6ICI0MDAiCisg
ICAgfSwKKworICAgIGNzc1ByZWZpeGVzID0gWyAiV2Via2l0IiwgIk8iLCAiTW96IiwgIm1zIiBd
LAorICAgIGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLnN0eWxl
OworCisvLyBSZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVu
ZG9yIHByZWZpeGVkIHByb3BlcnR5CitmdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHsK
KworICAgIC8vIFNob3J0Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVk
CisgICAgaWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7CisgICAgICAgIHJldHVybiBuYW1lOwor
ICAgIH0KKworICAgIC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKKyAgICB2YXIg
Y2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLAorICAg
ICAgICBpID0gY3NzUHJlZml4ZXMubGVuZ3RoOworCisgICAgd2hpbGUgKCBpLS0gKSB7CisgICAg
ICAgIG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKKyAgICAgICAgaWYgKCBuYW1l
IGluIGVtcHR5U3R5bGUgKSB7CisgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0
cmFjdCApIHsKKworICAgIC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5
IGJlZW4KKyAgICAvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnQKKyAgICB2YXIgbWF0Y2hlcyA9
IHJjc3NOdW0uZXhlYyggdmFsdWUgKTsKKyAgICByZXR1cm4gbWF0Y2hlcyA/CisKKyAgICAgICAg
Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgInN1YnRyYWN0IiwgZS5nLiwgd2hlbiB1c2VkIGFz
IGluIGNzc0hvb2tzCisgICAgICAgIE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRy
YWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgInB4IiApIDoKKyAgICAgICAgdmFsdWU7
Cit9CisKK2Z1bmN0aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwg
aXNCb3JkZXJCb3gsIHN0eWxlcyApIHsKKyAgICB2YXIgaSA9IGV4dHJhID09PSAoIGlzQm9yZGVy
Qm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSA/CisKKyAgICAgICAgLy8gSWYgd2UgYWxyZWFk
eSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9uCisgICAgICAg
IDQgOgorCisgICAgICAgIC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9y
IHZlcnRpY2FsIHByb3BlcnRpZXMKKyAgICAgICAgbmFtZSA9PT0gIndpZHRoIiA/IDEgOiAwLAor
CisgICAgICAgIHZhbCA9IDA7CisKKyAgICBmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7CisKKyAg
ICAgICAgLy8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ug
d2FudCBpdAorICAgICAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKKyAgICAgICAgICAg
IHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBz
dHlsZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggaXNCb3JkZXJCb3ggKSB7CisKKyAg
ICAgICAgICAgIC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlm
IHdlIHdhbnQgY29udGVudAorICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkg
eworICAgICAgICAgICAgICAgIHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBj
c3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyBy
ZW1vdmUgYm9yZGVyCisgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAibWFyZ2luIiApIHsKKyAg
ICAgICAgICAgICAgICB2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBh
bmRbIGkgXSArICJXaWR0aCIsIHRydWUsIHN0eWxlcyApOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBj
b250ZW50LCBzbyBhZGQgcGFkZGluZworICAgICAgICAgICAgdmFsICs9IGpRdWVyeS5jc3MoIGVs
ZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKworICAgICAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBub3IgcGFkZGluZywg
c28gYWRkIGJvcmRlcgorICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gInBhZGRpbmciICkgewor
ICAgICAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4
cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCitmdW5jdGlvbiBnZXRXaWR0aE9y
SGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHsKKworICAgIC8vIFN0YXJ0IHdpdGggb2Zmc2V0
IHByb3BlcnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXItYm94IHZhbHVlCisg
ICAgdmFyIHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlLAorICAgICAgICB2YWwgPSBuYW1lID09PSAi
d2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LAorICAgICAgICBz
dHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSwKKyAgICAgICAgaXNCb3JkZXJCb3ggPSBqUXVlcnku
Y3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCI7
CisKKyAgICAvLyBTb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRlZmluZWQgZm9yIG9m
ZnNldFdpZHRoLCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWQKKyAgICAvLyBzdmcgLSBodHRw
czovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODUKKyAgICAvLyBN
YXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE2
NjgKKyAgICBpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkgeworCisgICAgICAgIC8vIEZh
bGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeQorICAg
ICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOworICAgICAgICBpZiAoIHZh
bCA8IDAgfHwgdmFsID09IG51bGwgKSB7CisgICAgICAgICAgICB2YWwgPSBlbGVtLnN0eWxlWyBu
YW1lIF07CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhl
bHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLgorICAgICAgICBpZiAoIHJudW1ub25weC50ZXN0KCB2
YWwgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKworICAgICAgICAv
LyBDaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlh
YmxlIHZhbHVlcworICAgICAgICAvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxs
cyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlCisgICAgICAgIHZhbHVlSXNCb3JkZXJC
b3ggPSBpc0JvcmRlckJveCAmJgorICAgICAgICAgICAgKCBzdXBwb3J0LmJveFNpemluZ1JlbGlh
YmxlKCkgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsKKworICAgICAgICAvLyBOb3Jt
YWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQorICAgICAgICB2YWwgPSBwYXJz
ZUZsb2F0KCB2YWwgKSB8fCAwOworICAgIH0KKworICAgIC8vIFVzZSB0aGUgYWN0aXZlIGJveC1z
aXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzCisgICAgcmV0dXJu
ICggdmFsICsKKyAgICAgICAgYXVnbWVudFdpZHRoT3JIZWlnaHQoCisgICAgICAgICAgICBlbGVt
LAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIGV4dHJhIHx8ICggaXNCb3JkZXJCb3gg
PyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorICAgICAgICAgICAgdmFsdWVJc0JvcmRlckJveCwK
KyAgICAgICAgICAgIHN0eWxlcworICAgICAgICApCisgICAgKSArICJweCI7Cit9CisKK2Z1bmN0
aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKKyAgICB2YXIgZGlzcGxheSwgZWxlbSwg
aGlkZGVuLAorICAgICAgICB2YWx1ZXMgPSBbXSwKKyAgICAgICAgaW5kZXggPSAwLAorICAgICAg
ICBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CisKKyAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3Ro
OyBpbmRleCsrICkgeworICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07CisgICAgICAg
IGlmICggIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgIm9sZGRpc3Bs
YXkiICk7CisgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7CisgICAgICAgIGlm
ICggc2hvdyApIHsKKworICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9m
IHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBpcworICAgICAgICAgICAgLy8gYmVpbmcgaGlk
ZGVuIGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdAorICAgICAgICAgICAgaWYgKCAhdmFsdWVzWyBp
bmRleCBdICYmIGRpc3BsYXkgPT09ICJub25lIiApIHsKKyAgICAgICAgICAgICAgICBlbGVtLnN0
eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2V0IGVs
ZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZQorICAg
ICAgICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dz
ZXIgc3R5bGUgaXMKKyAgICAgICAgICAgIC8vIGZvciBzdWNoIGFuIGVsZW1lbnQKKyAgICAgICAg
ICAgIGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJiBpc0hpZGRlbiggZWxlbSApICkg
eworICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmFjY2VzcygKKyAg
ICAgICAgICAgICAgICAgICAgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgIm9sZGRpc3BsYXki
LAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApCisg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGhpZGRlbiA9IGlzSGlkZGVuKCBlbGVtICk7CisKKyAgICAgICAgICAgIGlmICggZGlz
cGxheSAhPT0gIm5vbmUiIHx8ICFoaWRkZW4gKSB7CisgICAgICAgICAgICAgICAgZGF0YVByaXYu
c2V0KAorICAgICAgICAgICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgICAgICAgICAib2xk
ZGlzcGxheSIsCisgICAgICAgICAgICAgICAgICAgIGhpZGRlbiA/IGRpc3BsYXkgOiBqUXVlcnku
Y3NzKCBlbGVtLCAiZGlzcGxheSIgKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBvZiB0
aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAorICAgIC8vIHRvIGF2b2lkIHRoZSBjb25zdGFu
dCByZWZsb3cKKyAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkg
eworICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07CisgICAgICAgIGlmICggIWVsZW0u
c3R5bGUgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0uc3R5bGUuZGlz
cGxheSA9PT0gIiIgKSB7CisgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8g
dmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIGVsZW1lbnRzOworfQorCitqUXVlcnkuZXh0ZW5kKCB7CisKKyAgICAvLyBBZGQgaW4g
c3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKKyAgICAvLyBi
ZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKKyAgICBjc3NI
b29rczogeworICAgICAgICBvcGFjaXR5OiB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBl
bGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sg
ZnJvbSBvcGFjaXR5CisgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0s
ICJvcGFjaXR5IiApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIx
IiA6IHJldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgLy8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgInB4IiB0byB0aGVzZSBwb3Nz
aWJseS11bml0bGVzcyBwcm9wZXJ0aWVzCisgICAgY3NzTnVtYmVyOiB7CisgICAgICAgICJhbmlt
YXRpb25JdGVyYXRpb25Db3VudCI6IHRydWUsCisgICAgICAgICJjb2x1bW5Db3VudCI6IHRydWUs
CisgICAgICAgICJmaWxsT3BhY2l0eSI6IHRydWUsCisgICAgICAgICJmbGV4R3JvdyI6IHRydWUs
CisgICAgICAgICJmbGV4U2hyaW5rIjogdHJ1ZSwKKyAgICAgICAgImZvbnRXZWlnaHQiOiB0cnVl
LAorICAgICAgICAibGluZUhlaWdodCI6IHRydWUsCisgICAgICAgICJvcGFjaXR5IjogdHJ1ZSwK
KyAgICAgICAgIm9yZGVyIjogdHJ1ZSwKKyAgICAgICAgIm9ycGhhbnMiOiB0cnVlLAorICAgICAg
ICAid2lkb3dzIjogdHJ1ZSwKKyAgICAgICAgInpJbmRleCI6IHRydWUsCisgICAgICAgICJ6b29t
IjogdHJ1ZQorICAgIH0sCisKKyAgICAvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5
b3Ugd2lzaCB0byBmaXggYmVmb3JlCisgICAgLy8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1
ZQorICAgIGNzc1Byb3BzOiB7CisgICAgICAgICJmbG9hdCI6ICJjc3NGbG9hdCIKKyAgICB9LAor
CisgICAgLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGUKKyAg
ICBzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHsKKworICAgICAg
ICAvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKyAgICAgICAg
aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDgg
fHwgIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUK
KyAgICAgICAgdmFyIHJldCwgdHlwZSwgaG9va3MsCisgICAgICAgICAgICBvcmlnTmFtZSA9IGpR
dWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKKyAgICAgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsK
KworICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8CisgICAgICAg
ICAgICAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBvcmln
TmFtZSApIHx8IG9yaWdOYW1lICk7CisKKyAgICAgICAgLy8gR2V0cyBob29rIGZvciB0aGUgcHJl
Zml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb24KKyAgICAgICAgaG9va3MgPSBq
UXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CisK
KyAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCisgICAgICAgIGlmICgg
dmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7
CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgIis9IiBvciAiLT0iIHRvIHJlbGF0aXZlIG51bWJl
cnMgKCM3MzQ1KQorICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiAmJiAoIHJldCA9
IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkgeworICAgICAgICAgICAgICAg
IHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTsKKworICAgICAgICAgICAgICAg
IC8vIEZpeGVzIGJ1ZyAjOTIzNworICAgICAgICAgICAgICAgIHR5cGUgPSAibnVtYmVyIjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFO
IHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNikKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVs
bCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQg
dGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcykKKyAgICAgICAgICAg
IGlmICggdHlwZSA9PT0gIm51bWJlciIgKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gcmV0
ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/ICIiIDogInB4
IiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTktMTErCisg
ICAgICAgICAgICAvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3Mg
dmFsdWVzCisgICAgICAgICAgICBpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1
ZSA9PT0gIiIgJiYgbmFtZS5pbmRleE9mKCAiYmFja2dyb3VuZCIgKSA9PT0gMCApIHsKKyAgICAg
ICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gImluaGVyaXQiOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3Ro
ZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAgICAgICAgICAgIGlmICggIWhv
b2tzIHx8ICEoICJzZXQiIGluIGhvb2tzICkgfHwKKyAgICAgICAgICAgICAgICAoIHZhbHVlID0g
aG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7CisKKyAg
ICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBn
ZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisgICAgICAgICAgICBpZiAoIGhv
b2tzICYmICJnZXQiIGluIGhvb2tzICYmCisgICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5n
ZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKKworICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE90aGVy
d2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0CisgICAgICAgICAg
ICByZXR1cm4gc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBjc3M6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkgeworICAgICAgICB2YXIgdmFsLCBu
dW0sIGhvb2tzLAorICAgICAgICAgICAgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1l
ICk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSBy
aWdodCBuYW1lCisgICAgICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwK
KyAgICAgICAgICAgICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5h
bWUoIG9yaWdOYW1lICkgfHwgb3JpZ05hbWUgKTsKKworICAgICAgICAvLyBUcnkgcHJlZml4ZWQg
bmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lCisgICAgICAgIGhvb2tzID0galF1
ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOworCisg
ICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBm
cm9tIHRoZXJlCisgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgKSB7CisgICAg
ICAgICAgICB2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFs
dWUgZXhpc3RzLCB1c2UgdGhhdAorICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIENvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKKyAgICAg
ICAgaWYgKCB2YWwgPT09ICJub3JtYWwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkg
eworICAgICAgICAgICAgdmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07CisgICAgICAg
IH0KKworICAgICAgICAvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdh
cyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWMKKyAgICAgICAgaWYgKCBleHRyYSA9PT0g
IiIgfHwgZXh0cmEgKSB7CisgICAgICAgICAgICBudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTsKKyAg
ICAgICAgICAgIHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0g
fHwgMCA6IHZhbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsOworICAgIH0KK30gKTsK
KworalF1ZXJ5LmVhY2goIFsgImhlaWdodCIsICJ3aWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUg
KSB7CisgICAgalF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7CisgICAgICAgIGdldDogZnVuY3Rp
b24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKKyAgICAgICAgICAgIGlmICggY29tcHV0ZWQg
KSB7CisKKyAgICAgICAgICAgICAgICAvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVu
c2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW0KKyAgICAgICAgICAgICAgICAvLyBi
dXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZp
dAorICAgICAgICAgICAgICAgIHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcygg
ZWxlbSwgImRpc3BsYXkiICkgKSAmJgorICAgICAgICAgICAgICAgICAgICBlbGVtLm9mZnNldFdp
ZHRoID09PSAwID8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN3YXAoIGVsZW0sIGNzc1Nob3cs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaWR0
aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOworICAgICAgICAgICAgICAgICAgICAgICAg
fSApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5h
bWUsIGV4dHJhICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgc2V0OiBm
dW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkgeworICAgICAgICAgICAgdmFyIG1hdGNoZXMs
CisgICAgICAgICAgICAgICAgc3R5bGVzID0gZXh0cmEgJiYgZ2V0U3R5bGVzKCBlbGVtICksCisg
ICAgICAgICAgICAgICAgc3VidHJhY3QgPSBleHRyYSAmJiBhdWdtZW50V2lkdGhPckhlaWdodCgK
KyAgICAgICAgICAgICAgICAgICAgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgZXh0cmEsCisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3Mo
IGVsZW0sICJib3hTaXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IiwKKyAg
ICAgICAgICAgICAgICAgICAgc3R5bGVzCisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAg
ICAgLy8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWQKKyAg
ICAgICAgICAgIGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1
ZSApICkgJiYKKyAgICAgICAgICAgICAgICAoIG1hdGNoZXNbIDMgXSB8fCAicHgiICkgIT09ICJw
eCIgKSB7CisKKyAgICAgICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1
ZSwgc3VidHJhY3QgKTsKKyAgICAgICAgfQorICAgIH07Cit9ICk7CisKK2pRdWVyeS5jc3NIb29r
cy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCwK
KyAgICBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgIGlmICggY29tcHV0ZWQg
KSB7CisgICAgICAgICAgICByZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJtYXJn
aW5MZWZ0IiApICkgfHwKKyAgICAgICAgICAgICAgICBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpLmxlZnQgLQorICAgICAgICAgICAgICAgICAgICBzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6
IDAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OworICAgICAgICAgICAgICAgICAgICB9ICkKKyAg
ICAgICAgICAgICAgICApICsgInB4IjsKKyAgICAgICAgfQorICAgIH0KKyk7CisKKy8vIFN1cHBv
cnQ6IEFuZHJvaWQgMi4zCitqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSBhZGRHZXRIb29r
SWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCwKKyAgICBmdW5jdGlvbiggZWxlbSwgY29t
cHV0ZWQgKSB7CisgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisgICAgICAgICAgICByZXR1cm4g
c3dhcCggZWxlbSwgeyAiZGlzcGxheSI6ICJpbmxpbmUtYmxvY2siIH0sCisgICAgICAgICAgICAg
ICAgY3VyQ1NTLCBbIGVsZW0sICJtYXJnaW5SaWdodCIgXSApOworICAgICAgICB9CisgICAgfQor
KTsKKworLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVy
dGllcworalF1ZXJ5LmVhY2goIHsKKyAgICBtYXJnaW46ICIiLAorICAgIHBhZGRpbmc6ICIiLAor
ICAgIGJvcmRlcjogIldpZHRoIgorfSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkgeworICAg
IGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7CisgICAgICAgIGV4cGFuZDog
ZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIGkgPSAwLAorICAgICAgICAgICAg
ICAgIGV4cGFuZGVkID0ge30sCisKKyAgICAgICAgICAgICAgICAvLyBBc3N1bWVzIGEgc2luZ2xl
IG51bWJlciBpZiBub3QgYSBzdHJpbmcKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IHR5cGVvZiB2
YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCggIiAiICkgOiBbIHZhbHVlIF07CisKKyAg
ICAgICAgICAgIGZvciAoIDsgaSA8IDQ7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBleHBhbmRl
ZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CisgICAgICAgICAgICAgICAg
ICAgIHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cGFuZGVkOworICAgICAgICB9CisgICAgfTsK
KworICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7CisgICAgICAgIGpRdWVyeS5j
c3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7CisgICAg
fQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgY3NzOiBmdW5jdGlvbiggbmFtZSwg
dmFsdWUgKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBu
YW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBzdHlsZXMsIGxlbiwKKyAgICAgICAgICAg
ICAgICBtYXAgPSB7fSwKKyAgICAgICAgICAgICAgICBpID0gMDsKKworICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNBcnJheSggbmFtZSApICkgeworICAgICAgICAgICAgICAgIHN0eWxlcyA9IGdl
dFN0eWxlcyggZWxlbSApOworICAgICAgICAgICAgICAgIGxlbiA9IG5hbWUubGVuZ3RoOworCisg
ICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNl
LCBzdHlsZXMgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVm
aW5lZCA/CisgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSAp
IDoKKyAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7CisgICAgICAgIH0s
IG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisgICAgc2hvdzog
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApOworICAg
IH0sCisgICAgaGlkZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBzaG93SGlkZSggdGhp
cyApOworICAgIH0sCisgICAgdG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7CisgICAgICAgIGlm
ICggdHlwZW9mIHN0YXRlID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIGlzSGlkZGVuKCB0
aGlzICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuc2hvdygpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5oaWRlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKKworZnVuY3Rpb24gVHdl
ZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgeworICAgIHJldHVybiBuZXcg
VHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7
Cit9CitqUXVlcnkuVHdlZW4gPSBUd2VlbjsKKworVHdlZW4ucHJvdG90eXBlID0geworICAgIGNv
bnN0cnVjdG9yOiBUd2VlbiwKKyAgICBpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJv
cCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7CisgICAgICAgIHRoaXMuZWxlbSA9IGVsZW07CisgICAg
ICAgIHRoaXMucHJvcCA9IHByb3A7CisgICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpR
dWVyeS5lYXNpbmcuX2RlZmF1bHQ7CisgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Cisg
ICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7CisgICAgICAgIHRoaXMu
ZW5kID0gZW5kOworICAgICAgICB0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJl
clsgcHJvcCBdID8gIiIgOiAicHgiICk7CisgICAgfSwKKyAgICBjdXI6IGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAg
ICAgIHJldHVybiBob29rcyAmJiBob29rcy5nZXQgPworICAgICAgICAgICAgaG9va3MuZ2V0KCB0
aGlzICkgOgorICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyAp
OworICAgIH0sCisgICAgcnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHsKKyAgICAgICAgdmFyIGVh
c2VkLAorICAgICAgICAgICAgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOwor
CisgICAgICAgIGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkgeworICAgICAgICAgICAgdGhp
cy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oCisgICAgICAgICAg
ICAgICAgcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhp
cy5vcHRpb25zLmR1cmF0aW9uCisgICAgICAgICAgICApOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0
OworCisgICAgICAgIGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7CisgICAgICAgICAgICB0aGlz
Lm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHsKKyAgICAgICAgICAgIGhv
b2tzLnNldCggdGhpcyApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVHdlZW4ucHJv
cEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
aGlzOworICAgIH0KK307CisKK1R3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVu
LnByb3RvdHlwZTsKKworVHdlZW4ucHJvcEhvb2tzID0geworICAgIF9kZWZhdWx0OiB7CisgICAg
ICAgIGdldDogZnVuY3Rpb24oIHR3ZWVuICkgeworICAgICAgICAgICAgdmFyIHJlc3VsdDsKKwor
ICAgICAgICAgICAgLy8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hl
biBpdCBpcyBub3QgYSBET00gZWxlbWVudCwKKyAgICAgICAgICAgIC8vIG9yIHdoZW4gdGhlcmUg
aXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuCisgICAgICAgICAgICBp
ZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHwKKyAgICAgICAgICAgICAgICB0d2Vlbi5l
bGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9w
IF0gPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4u
cHJvcCBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBQYXNzaW5nIGFuIGVtcHR5
IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKKyAg
ICAgICAgICAgIC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmlu
ZyBpZiB0aGUgcGFyc2UgZmFpbHMuCisgICAgICAgICAgICAvLyBTaW1wbGUgdmFsdWVzIHN1Y2gg
YXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7CisgICAgICAgICAgICAvLyBjb21wbGV4IHZh
bHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcy1pcy4KKyAgICAgICAg
ICAgIHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsICIiICk7CisK
KyAgICAgICAgICAgIC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8i
IGFyZSBjb252ZXJ0ZWQgdG8gMC4KKyAgICAgICAgICAgIHJldHVybiAhcmVzdWx0IHx8IHJlc3Vs
dCA9PT0gImF1dG8iID8gMCA6IHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5j
dGlvbiggdHdlZW4gKSB7CisKKyAgICAgICAgICAgIC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sg
Y29tcGF0LgorICAgICAgICAgICAgLy8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLgorICAgICAg
ICAgICAgLy8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVz
IHdoZXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVu
LnByb3AgXSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBd
KCB0d2VlbiApOworICAgICAgICAgICAgfSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9
PT0gMSAmJgorICAgICAgICAgICAgICAgICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1By
b3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8CisgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnN0
eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnBy
b3AgXSA9IHR3ZWVuLm5vdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisK
Ky8vIFN1cHBvcnQ6IElFOQorLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGlu
Z3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzCitUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdl
ZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7CisgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7
CisgICAgICAgIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5v
ZGUgKSB7CisgICAgICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7
CisgICAgICAgIH0KKyAgICB9Cit9OworCitqUXVlcnkuZWFzaW5nID0geworICAgIGxpbmVhcjog
ZnVuY3Rpb24oIHAgKSB7CisgICAgICAgIHJldHVybiBwOworICAgIH0sCisgICAgc3dpbmc6IGZ1
bmN0aW9uKCBwICkgeworICAgICAgICByZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJ
ICkgLyAyOworICAgIH0sCisgICAgX2RlZmF1bHQ6ICJzd2luZyIKK307CisKK2pRdWVyeS5meCA9
IFR3ZWVuLnByb3RvdHlwZS5pbml0OworCisvLyBCYWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBw
b2ludAoralF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKKworCisKKwordmFyCisgICAgZnhOb3csIHRpbWVy
SWQsCisgICAgcmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sCisgICAgcnJ1biA9
IC9xdWV1ZUhvb2tzJC87CisKKy8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdp
bGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgeworICAgIHdpbmRv
dy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgZnhOb3cgPSB1bmRlZmluZWQ7Cisg
ICAgfSApOworICAgIHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7Cit9CisKKy8vIEdl
bmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uCitmdW5jdGlv
biBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgeworICAgIHZhciB3aGljaCwKKyAgICAgICAg
aSA9IDAsCisgICAgICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTsKKworICAgIC8vIElmIHdl
IGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVl
cywKKyAgICAvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFu
ZCBSaWdodAorICAgIGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwOworICAgIGZv
ciAoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7CisgICAgICAgIHdoaWNoID0g
Y3NzRXhwYW5kWyBpIF07CisgICAgICAgIGF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRy
c1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7CisgICAgfQorCisgICAgaWYgKCBpbmNsdWRl
V2lkdGggKSB7CisgICAgICAgIGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGF0dHJzOworfQorCitmdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFs
dWUsIHByb3AsIGFuaW1hdGlvbiApIHsKKyAgICB2YXIgdHdlZW4sCisgICAgICAgIGNvbGxlY3Rp
b24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRp
b24udHdlZW5lcnNbICIqIiBdICksCisgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgbGVuZ3Ro
ID0gY29sbGVjdGlvbi5sZW5ndGg7CisgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgr
KyApIHsKKyAgICAgICAgaWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBh
bmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHsKKworICAgICAgICAgICAgLy8gV2UncmUgZG9u
ZSB3aXRoIHRoaXMgcHJvcGVydHkKKyAgICAgICAgICAgIHJldHVybiB0d2VlbjsKKyAgICAgICAg
fQorICAgIH0KK30KKworZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9w
dHMgKSB7CisgICAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqLworICAgIHZhciBwcm9wLCB2
YWx1ZSwgdG9nZ2xlLCB0d2VlbiwgaG9va3MsIG9sZGZpcmUsIGRpc3BsYXksIGNoZWNrRGlzcGxh
eSwKKyAgICAgICAgYW5pbSA9IHRoaXMsCisgICAgICAgIG9yaWcgPSB7fSwKKyAgICAgICAgc3R5
bGUgPSBlbGVtLnN0eWxlLAorICAgICAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlk
ZGVuKCBlbGVtICksCisgICAgICAgIGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCAiZnhz
aG93IiApOworCisgICAgLy8gSGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNlcworICAgIGlmICgg
IW9wdHMucXVldWUgKSB7CisgICAgICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVt
LCAiZngiICk7CisgICAgICAgIGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHsKKyAgICAg
ICAgICAgIGhvb2tzLnVucXVldWVkID0gMDsKKyAgICAgICAgICAgIG9sZGZpcmUgPSBob29rcy5l
bXB0eS5maXJlOworICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGlmICggIWhvb2tzLnVucXVldWVkICkgeworICAgICAgICAgICAgICAg
ICAgICBvbGRmaXJlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfQorICAgICAgICBob29rcy51bnF1ZXVlZCsrOworCisgICAgICAgIGFuaW0uYWx3YXlzKCBm
dW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVy
IGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKKyAgICAgICAgICAgIGFuaW0uYWx3YXlz
KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBob29rcy51bnF1ZXVlZC0tOworICAgICAg
ICAgICAgICAgIGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfSApOworICAgIH0KKworICAgIC8vIEhlaWdodC93
aWR0aCBvdmVyZmxvdyBwYXNzCisgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggImhl
aWdodCIgaW4gcHJvcHMgfHwgIndpZHRoIiBpbiBwcm9wcyApICkgeworCisgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAorICAgICAgICAvLyBSZWNvcmQgYWxsIDMg
b3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFOS0xMCBkbyBub3QKKyAgICAgICAgLy8gY2hh
bmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVyZmxvd1ggYW5kCisgICAgICAgIC8v
IG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCisgICAgICAgIG9wdHMub3ZlcmZs
b3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBd
OworCisgICAgICAgIC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3Ig
aGVpZ2h0L3dpZHRoCisgICAgICAgIC8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVsZW1lbnRzIHRo
YXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQKKyAgICAgICAgZGlzcGxheSA9IGpR
dWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApOworCisgICAgICAgIC8vIFRlc3QgZGVmYXVsdCBk
aXNwbGF5IGlmIGRpc3BsYXkgaXMgY3VycmVudGx5ICJub25lIgorICAgICAgICBjaGVja0Rpc3Bs
YXkgPSBkaXNwbGF5ID09PSAibm9uZSIgPworICAgICAgICAgICAgZGF0YVByaXYuZ2V0KCBlbGVt
LCAib2xkZGlzcGxheSIgKSB8fCBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlz
cGxheTsKKworICAgICAgICBpZiAoIGNoZWNrRGlzcGxheSA9PT0gImlubGluZSIgJiYgalF1ZXJ5
LmNzcyggZWxlbSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7CisgICAgICAgICAgICBzdHlsZS5k
aXNwbGF5ID0gImlubGluZS1ibG9jayI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIG9w
dHMub3ZlcmZsb3cgKSB7CisgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CisgICAg
ICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93
ID0gb3B0cy5vdmVyZmxvd1sgMCBdOworICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dYID0gb3B0
cy5vdmVyZmxvd1sgMSBdOworICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVy
Zmxvd1sgMiBdOworICAgICAgICB9ICk7CisgICAgfQorCisgICAgLy8gc2hvdy9oaWRlIHBhc3MK
KyAgICBmb3IgKCBwcm9wIGluIHByb3BzICkgeworICAgICAgICB2YWx1ZSA9IHByb3BzWyBwcm9w
IF07CisgICAgICAgIGlmICggcmZ4dHlwZXMuZXhlYyggdmFsdWUgKSApIHsKKyAgICAgICAgICAg
IGRlbGV0ZSBwcm9wc1sgcHJvcCBdOworICAgICAgICAgICAgdG9nZ2xlID0gdG9nZ2xlIHx8IHZh
bHVlID09PSAidG9nZ2xlIjsKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICggaGlkZGVuID8g
ImhpZGUiIDogInNob3ciICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBk
YXRhU2hvdyBsZWZ0IG92ZXIgZnJvbSBhIHN0b3BwZWQgaGlkZSBvciBzaG93CisgICAgICAgICAg
ICAgICAgLy8gYW5kIHdlIGFyZSBnb2luZyB0byBwcm9jZWVkIHdpdGggc2hvdywgd2Ugc2hvdWxk
IHByZXRlbmQgdG8gYmUgaGlkZGVuCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gInNo
b3ciICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgaGlkZGVuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hv
d1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApOworCisgICAgICAgIC8vIEFu
eSBub24tZnggdmFsdWUgc3RvcHMgdXMgZnJvbSByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIGRpc3Bs
YXkgdmFsdWUKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpc3BsYXkgPSB1bmRlZmlu
ZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoICFqUXVlcnkuaXNFbXB0eU9iamVjdCgg
b3JpZyApICkgeworICAgICAgICBpZiAoIGRhdGFTaG93ICkgeworICAgICAgICAgICAgaWYgKCAi
aGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKKyAgICAgICAgICAgICAgICBoaWRkZW4gPSBkYXRhU2hv
dy5oaWRkZW47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBk
YXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgImZ4c2hvdyIsIHt9ICk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBTdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3Rv
cCgpLnRvZ2dsZSgpIHRvICJyZXZlcnNlIgorICAgICAgICBpZiAoIHRvZ2dsZSApIHsKKyAgICAg
ICAgICAgIGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCBoaWRkZW4gKSB7CisgICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5zaG93KCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhbmltLmRvbmUoIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGpRdWVyeSggZWxlbSApLmhpZGUoKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAg
fQorICAgICAgICBhbmltLmRvbmUoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHByb3A7
CisKKyAgICAgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgImZ4c2hvdyIgKTsKKyAgICAg
ICAgICAgIGZvciAoIHByb3AgaW4gb3JpZyApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5
bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOworICAgICAgICAgICAgfQorICAgICAgICB9
ICk7CisgICAgICAgIGZvciAoIHByb3AgaW4gb3JpZyApIHsKKyAgICAgICAgICAgIHR3ZWVuID0g
Y3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7
CisKKyAgICAgICAgICAgIGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkgeworICAgICAgICAg
ICAgICAgIGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKKyAgICAgICAgICAgICAgICBp
ZiAoIGhpZGRlbiApIHsKKyAgICAgICAgICAgICAgICAgICAgdHdlZW4uZW5kID0gdHdlZW4uc3Rh
cnQ7CisgICAgICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8
fCBwcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgLy8gSWYgdGhpcyBpcyBhIG5vb3AgbGlrZSAuaGlkZSgp
LmhpZGUoKSwgcmVzdG9yZSBhbiBvdmVyd3JpdHRlbiBkaXNwbGF5IHZhbHVlCisgICAgfSBlbHNl
IGlmICggKCBkaXNwbGF5ID09PSAibm9uZSIgPyBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFt
ZSApIDogZGlzcGxheSApID09PSAiaW5saW5lIiApIHsKKyAgICAgICAgc3R5bGUuZGlzcGxheSA9
IGRpc3BsYXk7CisgICAgfQorfQorCitmdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lh
bEVhc2luZyApIHsKKyAgICB2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzOwor
CisgICAgLy8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNz
CisgICAgZm9yICggaW5kZXggaW4gcHJvcHMgKSB7CisgICAgICAgIG5hbWUgPSBqUXVlcnkuY2Ft
ZWxDYXNlKCBpbmRleCApOworICAgICAgICBlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07
CisgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF07CisgICAgICAgIGlmICggalF1ZXJ5Lmlz
QXJyYXkoIHZhbHVlICkgKSB7CisgICAgICAgICAgICBlYXNpbmcgPSB2YWx1ZVsgMSBdOworICAg
ICAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIGluZGV4ICE9PSBuYW1lICkgeworICAgICAgICAgICAgcHJvcHNbIG5h
bWUgXSA9IHZhbHVlOworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOworICAgICAg
ICB9CisKKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKKyAgICAgICAg
aWYgKCBob29rcyAmJiAiZXhwYW5kIiBpbiBob29rcyApIHsKKyAgICAgICAgICAgIHZhbHVlID0g
aG9va3MuZXhwYW5kKCB2YWx1ZSApOworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBuYW1lIF07
CisKKyAgICAgICAgICAgIC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3Jp
dGUgZXhpc3Rpbmcga2V5cy4KKyAgICAgICAgICAgIC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNl
IHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCisgICAgICAgICAgICBmb3IgKCBpbmRleCBpbiB2
YWx1ZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07CisgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nOworICAgICAgICB9CisgICAgfQorfQorCitm
dW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7CisgICAgdmFy
IHJlc3VsdCwKKyAgICAgICAgc3RvcHBlZCwKKyAgICAgICAgaW5kZXggPSAwLAorICAgICAgICBs
ZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsCisgICAgICAgIGRlZmVycmVkID0g
alF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8g
RG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yCisgICAgICAgICAgICBk
ZWxldGUgdGljay5lbGVtOworICAgICAgICB9ICksCisgICAgICAgIHRpY2sgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGlmICggc3RvcHBlZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBmeE5v
dyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IE1hdGgubWF4
KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRp
bWUgKSwKKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCisgICAgICAg
ICAgICAgICAgLy8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0g
KCAwLjUgfHwgMCApYCAoIzEyNDk3KQorICAgICAgICAgICAgICAgIHRlbXAgPSByZW1haW5pbmcg
LyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCwKKyAgICAgICAgICAgICAgICBwZXJjZW50ID0gMSAt
IHRlbXAsCisgICAgICAgICAgICAgICAgaW5kZXggPSAwLAorICAgICAgICAgICAgICAgIGxlbmd0
aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoOworCisgICAgICAgICAgICBmb3IgKCA7IGluZGV4
IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5z
WyBpbmRleCBdLnJ1biggcGVyY2VudCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk
ZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5n
IF0gKTsKKworICAgICAgICAgICAgaWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHsKKyAgICAgICAgICAgIGVs
ZW06IGVsZW0sCisgICAgICAgICAgICBwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRp
ZXMgKSwKKyAgICAgICAgICAgIG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHsKKyAgICAgICAg
ICAgICAgICBzcGVjaWFsRWFzaW5nOiB7fSwKKyAgICAgICAgICAgICAgICBlYXNpbmc6IGpRdWVy
eS5lYXNpbmcuX2RlZmF1bHQKKyAgICAgICAgICAgIH0sIG9wdGlvbnMgKSwKKyAgICAgICAgICAg
IG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKyAgICAgICAgICAgIG9yaWdpbmFsT3B0
aW9uczogb3B0aW9ucywKKyAgICAgICAgICAgIHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhO
b3coKSwKKyAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAorICAgICAgICAg
ICAgdHdlZW5zOiBbXSwKKyAgICAgICAgICAgIGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwg
ZW5kICkgeworICAgICAgICAgICAgICAgIHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwg
YW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1h
dGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcg
KTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0
b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDAs
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdl
IHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCisgICAgICAgICAgICAgICAgICAgIC8vIG90aGVy
d2lzZSB3ZSBza2lwIHRoaXMgcGFydAorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBnb3Rv
RW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOworICAgICAgICAgICAgICAgIGlmICgg
c3RvcHBlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgeworICAgICAgICAgICAgICAgICAg
ICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJh
bWU7IG90aGVyd2lzZSwgcmVqZWN0CisgICAgICAgICAgICAgICAgaWYgKCBnb3RvRW5kICkgewor
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlv
biwgMSwgMCBdICk7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBl
bGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRp
b24sIGdvdG9FbmQgXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApLAorICAgICAgICBwcm9wcyA9IGFu
aW1hdGlvbi5wcm9wczsKKworICAgIHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5z
cGVjaWFsRWFzaW5nICk7CisKKyAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyAp
IHsKKyAgICAgICAgcmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCgg
YW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTsKKyAgICAgICAgaWYgKCBy
ZXN1bHQgKSB7CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXN1bHQuc3Rv
cCApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVs
ZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9CisgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5wcm94eSggcmVzdWx0LnN0b3AsIHJlc3VsdCApOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGpRdWVyeS5tYXAo
IHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7CisKKyAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkgeworICAgICAgICBhbmltYXRpb24ub3B0
cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKKyAgICB9CisKKyAgICBqUXVlcnkuZngu
dGltZXIoCisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRpY2ssIHsKKyAgICAgICAgICAgIGVsZW06
IGVsZW0sCisgICAgICAgICAgICBhbmltOiBhbmltYXRpb24sCisgICAgICAgICAgICBxdWV1ZTog
YW5pbWF0aW9uLm9wdHMucXVldWUKKyAgICAgICAgfSApCisgICAgKTsKKworICAgIC8vIGF0dGFj
aCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCisgICAgcmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcygg
YW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKQorICAgICAgICAuZG9uZSggYW5pbWF0aW9uLm9wdHMu
ZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQorICAgICAgICAuZmFpbCggYW5pbWF0aW9u
Lm9wdHMuZmFpbCApCisgICAgICAgIC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApOwor
fQorCitqUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7CisgICAg
dHdlZW5lcnM6IHsKKyAgICAgICAgIioiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKKyAg
ICAgICAgICAgIHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7Cisg
ICAgICAgICAgICBhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFs
dWUgKSwgdHdlZW4gKTsKKyAgICAgICAgICAgIHJldHVybiB0d2VlbjsKKyAgICAgICAgfSBdCisg
ICAgfSwKKworICAgIHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7CisgICAg
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7CisgICAgICAgICAgICBjYWxs
YmFjayA9IHByb3BzOworICAgICAgICAgICAgcHJvcHMgPSBbICIqIiBdOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdHdoaXRlICk7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgcHJvcCwKKyAgICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAg
ICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKKworICAgICAgICBmb3IgKCA7IGluZGV4IDwg
bGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgIHByb3AgPSBwcm9wc1sgaW5kZXggXTsK
KyAgICAgICAgICAgIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVu
ZXJzWyBwcm9wIF0gfHwgW107CisgICAgICAgICAgICBBbmltYXRpb24udHdlZW5lcnNbIHByb3Ag
XS51bnNoaWZ0KCBjYWxsYmFjayApOworICAgICAgICB9CisgICAgfSwKKworICAgIHByZWZpbHRl
cnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLAorCisgICAgcHJlZmlsdGVyOiBmdW5jdGlvbiggY2Fs
bGJhY2ssIHByZXBlbmQgKSB7CisgICAgICAgIGlmICggcHJlcGVuZCApIHsKKyAgICAgICAgICAg
IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApOwor
ICAgICAgICB9CisgICAgfQorfSApOworCitqUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQs
IGVhc2luZywgZm4gKSB7CisgICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0g
Im9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKKyAgICAgICAgY29tcGxl
dGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKKyAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9u
KCBzcGVlZCApICYmIHNwZWVkLAorICAgICAgICBkdXJhdGlvbjogc3BlZWQsCisgICAgICAgIGVh
c2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2lu
ZyApICYmIGVhc2luZworICAgIH07CisKKyAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2Zm
ID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8KKyAgICAgICAgb3B0LmR1
cmF0aW9uIDogb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPworICAgICAgICAgICAg
alF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZh
dWx0OworCisgICAgLy8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwg
LT4gImZ4IgorICAgIGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVl
ICkgeworICAgICAgICBvcHQucXVldWUgPSAiZngiOworICAgIH0KKworICAgIC8vIFF1ZXVlaW5n
CisgICAgb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKKworICAgIG9wdC5jb21wbGV0ZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7Cisg
ICAgICAgICAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICggb3B0LnF1ZXVlICkgeworICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5x
dWV1ZSApOworICAgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBvcHQ7Cit9OworCitqUXVl
cnkuZm4uZXh0ZW5kKCB7CisgICAgZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcs
IGNhbGxiYWNrICkgeworCisgICAgICAgIC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRl
ciBzZXR0aW5nIG9wYWNpdHkgdG8gMAorICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlk
ZGVuICkuY3NzKCAib3BhY2l0eSIsIDAgKS5zaG93KCkKKworICAgICAgICAgICAgLy8gQW5pbWF0
ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkCisgICAgICAgICAgICAuZW5kKCkuYW5pbWF0ZSggeyBv
cGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworICAgIH0sCisgICAgYW5p
bWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworICAgICAg
ICB2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLAorICAgICAgICAgICAg
b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLAorICAgICAg
ICAgICAgZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgIC8vIE9w
ZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBs
b3N0CisgICAgICAgICAgICAgICAgdmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5l
eHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOworCisgICAgICAgICAgICAgICAgLy8gRW1wdHkg
YW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5CisgICAgICAgICAg
ICAgICAgaWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsICJmaW5pc2giICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFuaW0uc3RvcCggdHJ1ZSApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1h
dGlvbjsKKworICAgICAgICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/
CisgICAgICAgICAgICB0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgorICAgICAgICAgICAgdGhp
cy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOworICAgIH0sCisgICAgc3RvcDog
ZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CisgICAgICAgIHZhciBzdG9w
UXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7CisgICAgICAgICAgICB2YXIgc3RvcCA9IGhvb2tz
LnN0b3A7CisgICAgICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKKyAgICAgICAgICAgIHN0b3Ao
IGdvdG9FbmQgKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAi
c3RyaW5nIiApIHsKKyAgICAgICAgICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOworICAgICAgICAg
ICAgY2xlYXJRdWV1ZSA9IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOworICAg
ICAgICB9CisgICAgICAgIGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKKyAg
ICAgICAgICAgIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGRl
cXVldWUgPSB0cnVlLAorICAgICAgICAgICAgICAgIGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5
cGUgKyAicXVldWVIb29rcyIsCisgICAgICAgICAgICAgICAgdGltZXJzID0galF1ZXJ5LnRpbWVy
cywKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7CisKKyAgICAg
ICAgICAgIGlmICggaW5kZXggKSB7CisgICAgICAgICAgICAgICAgaWYgKCBkYXRhWyBpbmRleCBd
ICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVl
KCBkYXRhWyBpbmRleCBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBmb3IgKCBpbmRleCBpbiBkYXRhICkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4u
dGVzdCggaW5kZXggKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BRdWV1ZSggZGF0
YVsgaW5kZXggXSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7
IGluZGV4LS07ICkgeworICAgICAgICAgICAgICAgIGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0g
PT09IHRoaXMgJiYKKyAgICAgICAgICAgICAgICAgICAgKCB0eXBlID09IG51bGwgfHwgdGltZXJz
WyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgdGlt
ZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApOworICAgICAgICAgICAgICAgICAgICBk
ZXF1ZXVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGluZGV4
LCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9y
Y2VkLgorICAgICAgICAgICAgLy8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29t
cGxldGUgY2FsbGJhY2tzLCB3aGljaAorICAgICAgICAgICAgLy8gd2lsbCBkZXF1ZXVlIGJ1dCBv
bmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLgorICAgICAgICAgICAgaWYgKCBkZXF1ZXVlIHx8ICFn
b3RvRW5kICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorICAgIGZpbmlzaDogZnVuY3Rp
b24oIHR5cGUgKSB7CisgICAgICAgIGlmICggdHlwZSAhPT0gZmFsc2UgKSB7CisgICAgICAgICAg
ICB0eXBlID0gdHlwZSB8fCAiZngiOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGluZGV4LAorICAgICAgICAgICAgICAg
IGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSwKKyAgICAgICAgICAgICAgICBxdWV1ZSA9IGRh
dGFbIHR5cGUgKyAicXVldWUiIF0sCisgICAgICAgICAgICAgICAgaG9va3MgPSBkYXRhWyB0eXBl
ICsgInF1ZXVlSG9va3MiIF0sCisgICAgICAgICAgICAgICAgdGltZXJzID0galF1ZXJ5LnRpbWVy
cywKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7CisK
KyAgICAgICAgICAgIC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGEKKyAg
ICAgICAgICAgIGRhdGEuZmluaXNoID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gRW1wdHkgdGhl
IHF1ZXVlIGZpcnN0CisgICAgICAgICAgICBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7
CisKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHsKKyAgICAgICAgICAg
ICAgICBob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRo
ZW0KKyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7
CisgICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0
aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgIHRp
bWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgdGlt
ZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVl
dWUgYW5kIGZpbmlzaCB0aGVtCisgICAgICAgICAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwg
bGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICAgICAgICAgIGlmICggcXVldWVbIGluZGV4IF0g
JiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkgeworICAgICAgICAgICAgICAgICAgICBxdWV1ZVsg
aW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWcKKyAgICAgICAg
ICAgIGRlbGV0ZSBkYXRhLmZpbmlzaDsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKworalF1
ZXJ5LmVhY2goIFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0aW9uKCBpLCBuYW1l
ICkgeworICAgIHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdOworICAgIGpRdWVyeS5mblsg
bmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworICAgICAgICBy
ZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiA/CisgICAg
ICAgICAgICBjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgorICAgICAgICAgICAgdGhp
cy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayAp
OworICAgIH07Cit9ICk7CisKKy8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1h
dGlvbnMKK2pRdWVyeS5lYWNoKCB7CisgICAgc2xpZGVEb3duOiBnZW5GeCggInNob3ciICksCisg
ICAgc2xpZGVVcDogZ2VuRngoICJoaWRlIiApLAorICAgIHNsaWRlVG9nZ2xlOiBnZW5GeCggInRv
Z2dsZSIgKSwKKyAgICBmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCisgICAgZmFkZU91dDog
eyBvcGFjaXR5OiAiaGlkZSIgfSwKKyAgICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUi
IH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKKyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9
IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7CisgICAgfTsKK30g
KTsKKworalF1ZXJ5LnRpbWVycyA9IFtdOworalF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHsK
KyAgICB2YXIgdGltZXIsCisgICAgICAgIGkgPSAwLAorICAgICAgICB0aW1lcnMgPSBqUXVlcnku
dGltZXJzOworCisgICAgZnhOb3cgPSBqUXVlcnkubm93KCk7CisKKyAgICBmb3IgKCA7IGkgPCB0
aW1lcnMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgIHRpbWVyID0gdGltZXJzWyBpIF07CisKKyAg
ICAgICAgLy8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCisg
ICAgICAgIGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkgeworICAgICAg
ICAgICAgdGltZXJzLnNwbGljZSggaS0tLCAxICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoICF0aW1lcnMubGVuZ3RoICkgeworICAgICAgICBqUXVlcnkuZnguc3RvcCgpOworICAgIH0K
KyAgICBmeE5vdyA9IHVuZGVmaW5lZDsKK307CisKK2pRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9u
KCB0aW1lciApIHsKKyAgICBqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7CisgICAgaWYgKCB0
aW1lcigpICkgeworICAgICAgICBqUXVlcnkuZnguc3RhcnQoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBqUXVlcnkudGltZXJzLnBvcCgpOworICAgIH0KK307CisKK2pRdWVyeS5meC5pbnRlcnZh
bCA9IDEzOworalF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCAhdGltZXJJ
ZCApIHsKKyAgICAgICAgdGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRp
Y2ssIGpRdWVyeS5meC5pbnRlcnZhbCApOworICAgIH0KK307CisKK2pRdWVyeS5meC5zdG9wID0g
ZnVuY3Rpb24oKSB7CisgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKKworICAg
IHRpbWVySWQgPSBudWxsOworfTsKKworalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKKyAgICBzbG93OiA2
MDAsCisgICAgZmFzdDogMjAwLAorCisgICAgLy8gRGVmYXVsdCBzcGVlZAorICAgIF9kZWZhdWx0
OiA0MDAKK307CisKKworLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVy
cywgd2l0aCBwZXJtaXNzaW9uLgorLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAz
MjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5
LWRlbGF5LworalF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7CisgICAg
dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGlt
ZTsKKyAgICB0eXBlID0gdHlwZSB8fCAiZngiOworCisgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5
cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsKKyAgICAgICAgdmFyIHRpbWVvdXQgPSB3aW5k
b3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApOworICAgICAgICBob29rcy5zdG9wID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7CisgICAg
ICAgIH07CisgICAgfSApOworfTsKKworCisoIGZ1bmN0aW9uKCkgeworICAgIHZhciBpbnB1dCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKSwKKyAgICAgICAgc2VsZWN0ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCggInNlbGVjdCIgKSwKKyAgICAgICAgb3B0ID0gc2VsZWN0LmFw
cGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAib3B0aW9uIiApICk7CisKKyAgICBp
bnB1dC50eXBlID0gImNoZWNrYm94IjsKKworICAgIC8vIFN1cHBvcnQ6IGlPUzw9NS4xLCBBbmRy
b2lkPD00LjIrCisgICAgLy8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUg
Im9uIgorICAgIHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSAiIjsKKworICAgIC8v
IFN1cHBvcnQ6IElFPD0xMSsKKyAgICAvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1h
a2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdAorICAgIHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQu
c2VsZWN0ZWQ7CisKKyAgICAvLyBTdXBwb3J0OiBBbmRyb2lkPD0yLjMKKyAgICAvLyBPcHRpb25z
IGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgZGlzYWJs
ZWQKKyAgICBzZWxlY3QuZGlzYWJsZWQgPSB0cnVlOworICAgIHN1cHBvcnQub3B0RGlzYWJsZWQg
PSAhb3B0LmRpc2FibGVkOworCisgICAgLy8gU3VwcG9ydDogSUU8PTExKworICAgIC8vIEFuIGlu
cHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvCisgICAgaW5wdXQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7CisgICAgaW5wdXQudmFsdWUgPSAidCI7
CisgICAgaW5wdXQudHlwZSA9ICJyYWRpbyI7CisgICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5w
dXQudmFsdWUgPT09ICJ0IjsKK30gKSgpOworCisKK3ZhciBib29sSG9vaywKKyAgICBhdHRySGFu
ZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAg
IGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2Vzcygg
dGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwor
ICAgIH0sCisKKyAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0
ciggdGhpcywgbmFtZSApOworICAgICAgICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZXh0
ZW5kKCB7CisgICAgYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgeworICAgICAg
ICB2YXIgcmV0LCBob29rcywKKyAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKwor
ICAgICAgICAvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQg
YXR0cmlidXRlIG5vZGVzCisgICAgICAgIGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDgg
fHwgblR5cGUgPT09IDIgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRl
ZAorICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVuZGVmaW5lZCIg
KSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlCisg
ICAgICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWQKKyAgICAgICAg
aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7CisgICAgICAg
ICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgaG9va3MgPSBqUXVl
cnkuYXR0ckhvb2tzWyBuYW1lIF0gfHwKKyAgICAgICAgICAgICAgICAoIGpRdWVyeS5leHByLm1h
dGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGlm
ICggdmFsdWUgPT09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIo
IGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYKKyAgICAgICAgICAg
ICAgICAoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIgKTsKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggaG9va3MgJiYgImdl
dCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxs
ICkgeworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9
IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTsKKworICAgICAgICAvLyBOb24tZXhpc3Rl
bnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZAorICAg
ICAgICByZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7CisgICAgfSwKKworICAg
IGF0dHJIb29rczogeworICAgICAgICB0eXBlOiB7CisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9u
KCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFzdXBwb3J0LnJhZGlvVmFs
dWUgJiYgdmFsdWUgPT09ICJyYWRpbyIgJiYKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm5v
ZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2YWwg
PSBlbGVtLnZhbHVlOworICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggInR5
cGUiLCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWw7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICByZW1vdmVBdHRyOiBmdW5jdGlv
biggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBuYW1lLCBwcm9wTmFtZSwKKyAgICAgICAg
ICAgIGkgPSAwLAorICAgICAgICAgICAgYXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2go
IHJub3R3aGl0ZSApOworCisgICAgICAgIGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUg
PT09IDEgKSB7CisgICAgICAgICAgICB3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0g
KSApIHsKKyAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0g
fHwgbmFtZTsKKworICAgICAgICAgICAgICAgIC8vIEJvb2xlYW4gYXR0cmlidXRlcyBnZXQgc3Bl
Y2lhbCB0cmVhdG1lbnQgKCMxMDg3MCkKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5leHBy
Lm1hdGNoLmJvb2wudGVzdCggbmFtZSApICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFNl
dCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVs
ZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfSApOworCisvLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCitib29s
SG9vayA9IHsKKyAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKKyAgICAg
ICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBib29s
ZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UKKyAgICAgICAgICAgIGpRdWVyeS5yZW1v
dmVBdHRyKCBlbGVtLCBuYW1lICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbGVt
LnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
YW1lOworICAgIH0KK307CitqUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3Vy
Y2UubWF0Y2goIC9cdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKyAgICB2YXIgZ2V0dGVy
ID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7CisKKyAgICBhdHRySGFu
ZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisgICAgICAgIHZh
ciByZXQsIGhhbmRsZTsKKyAgICAgICAgaWYgKCAhaXNYTUwgKSB7CisKKyAgICAgICAgICAgIC8v
IEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5j
dGlvbiBmcm9tIHRoZSBnZXR0ZXIKKyAgICAgICAgICAgIGhhbmRsZSA9IGF0dHJIYW5kbGVbIG5h
bWUgXTsKKyAgICAgICAgICAgIGF0dHJIYW5kbGVbIG5hbWUgXSA9IHJldDsKKyAgICAgICAgICAg
IHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID8KKyAgICAgICAgICAg
ICAgICBuYW1lLnRvTG93ZXJDYXNlKCkgOgorICAgICAgICAgICAgICAgIG51bGw7CisgICAgICAg
ICAgICBhdHRySGFuZGxlWyBuYW1lIF0gPSBoYW5kbGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHJldDsKKyAgICB9OworfSApOworCisKKworCit2YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5w
dXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCisgICAgcmNsaWNrYWJsZSA9IC9eKD86YXxh
cmVhKSQvaTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHByb3A6IGZ1bmN0aW9uKCBuYW1l
LCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5h
bWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisKKyAgICByZW1vdmVQ
cm9wOiBmdW5jdGlvbiggbmFtZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8
fCBuYW1lIF07CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5leHRlbmQoIHsK
KyAgICBwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBy
ZXQsIGhvb2tzLAorICAgICAgICAgICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlOworCisgICAgICAg
IC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1
dGUgbm9kZXMKKyAgICAgICAgaWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlw
ZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworCisgICAgICAg
ICAgICAvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCisgICAgICAgICAgICBuYW1lID0galF1
ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnku
cHJvcEhvb2tzWyBuYW1lIF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHZhbHVlICE9PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYm
CisgICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkg
KSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmICggcmV0
ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJl
dHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdOworICAg
IH0sCisKKyAgICBwcm9wSG9va3M6IHsKKyAgICAgICAgdGFiSW5kZXg6IHsKKyAgICAgICAgICAg
IGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgICAgICAgICAvLyBlbGVtLnRhYklu
ZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUKKyAgICAgICAgICAgICAgICAvLyBjb3JyZWN0
IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKKyAgICAgICAgICAgICAg
ICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0
aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LworICAgICAg
ICAgICAgICAgIC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpCisgICAg
ICAgICAgICAgICAgdmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgInRhYmlu
ZGV4IiApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmluZGV4ID8KKyAgICAgICAgICAg
ICAgICAgICAgcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApIDoKKyAgICAgICAgICAgICAgICAgICAg
cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHJvcEZpeDogewor
ICAgICAgICAiZm9yIjogImh0bWxGb3IiLAorICAgICAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIgor
ICAgIH0KK30gKTsKKworLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5CisvLyBBY2Nlc3NpbmcgdGhl
IHNlbGVjdGVkSW5kZXggcHJvcGVydHkKKy8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0
IHNldHRpbmcgc2VsZWN0ZWQKKy8vIG9uIHRoZSBvcHRpb24KKy8vIFRoZSBnZXR0ZXIgZW5zdXJl
cyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkCisvLyB3aGVuIGluIGFuIG9wdGdyb3VwCitp
ZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkgeworICAgIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0
ZWQgPSB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIg
cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICAgICAgaWYgKCBwYXJlbnQgJiYgcGFy
ZW50LnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2Vs
ZWN0ZWRJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFy
IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIGlmICggcGFyZW50ICkgewor
ICAgICAgICAgICAgICAgIHBhcmVudC5zZWxlY3RlZEluZGV4OworCisgICAgICAgICAgICAgICAg
aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBh
cmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworfQorCitqUXVlcnkuZWFjaCggWworICAgICJ0YWJJbmRleCIs
CisgICAgInJlYWRPbmx5IiwKKyAgICAibWF4TGVuZ3RoIiwKKyAgICAiY2VsbFNwYWNpbmciLAor
ICAgICJjZWxsUGFkZGluZyIsCisgICAgInJvd1NwYW4iLAorICAgICJjb2xTcGFuIiwKKyAgICAi
dXNlTWFwIiwKKyAgICAiZnJhbWVCb3JkZXIiLAorICAgICJjb250ZW50RWRpdGFibGUiCitdLCBm
dW5jdGlvbigpIHsKKyAgICBqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0
aGlzOworfSApOworCisKKworCit2YXIgcmNsYXNzID0gL1tcdFxyXG5cZl0vZzsKKworZnVuY3Rp
b24gZ2V0Q2xhc3MoIGVsZW0gKSB7CisgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVs
ZW0uZ2V0QXR0cmlidXRlKCAiY2xhc3MiICkgfHwgIiI7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQo
IHsKKyAgICBhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICB2YXIgY2xhc3Nl
cywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsCisgICAgICAgICAg
ICBpID0gMDsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAg
ICAgICAgalF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENs
YXNzKCB0aGlzICkgKSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworICAgICAgICAgICAg
Y2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworICAgICAgICAgICAg
d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgeworICAgICAgICAgICAgICAgIGN1clZh
bHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICBjdXIgPSBlbGVtLm5vZGVU
eXBlID09PSAxICYmCisgICAgICAgICAgICAgICAgICAgICggIiAiICsgY3VyVmFsdWUgKyAiICIg
KS5yZXBsYWNlKCByY2xhc3MsICIgIiApOworCisgICAgICAgICAgICAgICAgaWYgKCBjdXIgKSB7
CisgICAgICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
ICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA8IDAgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyICs9IGNsYXp6ICsgIiAiOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
T25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy4KKyAg
ICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IGpRdWVyeS50cmltKCBjdXIgKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgcmVtb3Zl
Q2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGNsYXNzZXMsIGVsZW0sIGN1
ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLAorICAgICAgICAgICAgaSA9IDA7CisK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkgeworICAgICAgICAgICAgICAgIGpRdWVy
eSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhp
cyApICkgKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWFy
Z3VtZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5hdHRyKCAiY2xhc3Mi
LCAiIiApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJp
bmciICYmIHZhbHVlICkgeworICAgICAgICAgICAgY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90
d2hpdGUgKSB8fCBbXTsKKworICAgICAgICAgICAgd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysg
XSApICkgeworICAgICAgICAgICAgICAgIGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKKwor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29t
cHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpCisgICAgICAgICAgICAgICAgY3VyID0gZWxlbS5u
b2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAgICAgICAgICAoICIgIiArIGN1clZhbHVlICsg
IiAiICkucmVwbGFjZSggcmNsYXNzLCAiICIgKTsKKworICAgICAgICAgICAgICAgIGlmICggY3Vy
ICkgeworICAgICAgICAgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gUmVtb3ZlICphbGwqIGluc3RhbmNlcworICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA+IC0xICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKCAiICIgKyBjbGF6eiArICIg
IiwgIiAiICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8g
YXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLgorICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVl
ID0galF1ZXJ5LnRyaW0oIGN1ciApOworICAgICAgICAgICAgICAgICAgICBpZiAoIGN1clZhbHVl
ICE9PSBmaW5hbFZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRy
aWJ1dGUoICJjbGFzcyIsIGZpbmFsVmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0aGlzOworICAgIH0sCisKKyAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0
ZVZhbCApIHsKKyAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAgICAgaWYg
KCB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIiAmJiB0eXBlID09PSAic3RyaW5nIiApIHsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0
aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBqUXVl
cnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2go
IGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNs
YXNzKAorICAgICAgICAgICAgICAgICAgICB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcygg
dGhpcyApLCBzdGF0ZVZhbCApLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZVZhbAorICAgICAg
ICAgICAgICAgICk7CisgICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjbGFzc05hbWUsIGks
IHNlbGYsIGNsYXNzTmFtZXM7CisKKyAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIg
KSB7CisKKyAgICAgICAgICAgICAgICAvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcwor
ICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRo
aXMgKTsKKyAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0
ZSApIHx8IFtdOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNz
TmFtZXNbIGkrKyBdICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZWFjaCBj
bGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0CisgICAgICAgICAgICAgICAgICAg
IGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFt
ZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZQorICAgICAgICAgICAgfSBlbHNlIGlmICgg
dmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAgICAg
ICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICBpZiAo
IGNsYXNzTmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSBjbGFzc05hbWUg
aWYgc2V0CisgICAgICAgICAgICAgICAgICAgIGRhdGFQcml2LnNldCggdGhpcywgIl9fY2xhc3NO
YW1lX18iLCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBg
ZmFsc2VgLAorICAgICAgICAgICAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25h
bWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuCisgICAgICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQg
KGlmIGFueXRoaW5nKSwKKyAgICAgICAgICAgICAgICAvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVt
cHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuCisgICAgICAgICAgICAgICAgaWYgKCB0
aGlzLnNldEF0dHJpYnV0ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1
dGUoICJjbGFzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgfHwgdmFsdWUg
PT09IGZhbHNlID8KKyAgICAgICAgICAgICAgICAgICAgICAgICIiIDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFQcml2LmdldCggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiIKKyAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciAp
IHsKKyAgICAgICAgdmFyIGNsYXNzTmFtZSwgZWxlbSwKKyAgICAgICAgICAgIGkgPSAwOworCisg
ICAgICAgIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsgIiAiOworICAgICAgICB3aGlsZSAo
ICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgPT09IDEgJiYKKyAgICAgICAgICAgICAgICAoICIgIiArIGdldENsYXNzKCBlbGVtICkgKyAi
ICIgKS5yZXBsYWNlKCByY2xhc3MsICIgIiApCisgICAgICAgICAgICAgICAgICAgIC5pbmRleE9m
KCBjbGFzc05hbWUgKSA+IC0xCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9ICk7CisKKworCisKK3ZhciBycmV0dXJuID0gL1xyL2csCisgICAgcnNwYWNl
cyA9IC9bXHgyMFx0XHJcblxmXSsvZzsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHZhbDog
ZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICB2YXIgaG9va3MsIHJldCwgaXNGdW5jdGlvbiwK
KyAgICAgICAgICAgIGVsZW0gPSB0aGlzWyAwIF07CisKKyAgICAgICAgaWYgKCAhYXJndW1lbnRz
Lmxlbmd0aCApIHsKKyAgICAgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICBo
b29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwKKyAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAg
ICAgICAgICAgICAgIGlmICggaG9va3MgJiYKKyAgICAgICAgICAgICAgICAgICAgImdldCIgaW4g
aG9va3MgJiYKKyAgICAgICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sICJ2
YWx1ZSIgKSApICE9PSB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICByZXQgPSBlbGVtLnZhbHVlOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXQg
PT09ICJzdHJpbmciID8KKworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbW9zdCBjb21t
b24gc3RyaW5nIGNhc2VzCisgICAgICAgICAgICAgICAgICAgIHJldC5yZXBsYWNlKCBycmV0dXJu
LCAiIiApIDoKKworICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFs
dWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXIKKyAgICAgICAgICAgICAgICAgICAgcmV0ID09IG51
bGwgPyAiIiA6IHJldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSAp
OworCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAg
ICAgdmFyIHZhbDsKKworICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCBpc0Z1bmN0aW9uICkgeworICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMs
IGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHZhbCA9IHZhbHVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBU
cmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZworICAg
ICAgICAgICAgaWYgKCB2YWwgPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICB2YWwgPSAiIjsK
KworICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIgKSB7Cisg
ICAgICAgICAgICAgICAgdmFsICs9ICIiOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVl
cnkuaXNBcnJheSggdmFsICkgKSB7CisgICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1hcCgg
dmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1
ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOworICAgICAgICAgICAgICAgIH0gKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlw
ZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CisK
KyAgICAgICAgICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5v
cm1hbCBzZXR0aW5nCisgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCAic2V0IiBpbiBob29r
cyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsOworICAgICAgICAgICAgfQorICAgICAg
ICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisgICAgdmFsSG9va3M6IHsK
KyAgICAgICAgb3B0aW9uOiB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewor
CisgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sICJ2YWx1
ZSIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsICE9IG51bGwgPworICAgICAgICAgICAg
ICAgICAgICB2YWwgOgorCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFMTAtMTEr
CisgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgj
MTQ2ODYsICMxNDg1OCkKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaXAgYW5kIGNvbGxhcHNl
IHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hh
dHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LnRyaW0oIGpRdWVyeS50ZXh0KCBlbGVtICkgKS5yZXBsYWNlKCByc3BhY2VzLCAi
ICIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgc2VsZWN0OiB7CisgICAg
ICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciB2YWx1
ZSwgb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAor
ICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKKyAgICAgICAg
ICAgICAgICAgICAgb25lID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIgfHwgaW5kZXggPCAw
LAorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCisgICAgICAg
ICAgICAgICAgICAgIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICBpID0gaW5kZXggPCAwID8KKyAgICAgICAgICAgICAgICAgICAgICAg
IG1heCA6CisgICAgICAgICAgICAgICAgICAgICAgICBvbmUgPyBpbmRleCA6IDA7CisKKyAgICAg
ICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCisgICAg
ICAgICAgICAgICAgZm9yICggOyBpIDwgbWF4OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAg
IG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKKworICAgICAgICAgICAgICAgICAgICAvLyBJRTgtOSBk
b2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0
IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCBzdXBwb3J0Lm9wdERpc2FibGVkID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoICJkaXNh
YmxlZCIgKSA9PT0gbnVsbCApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAhb3B0
aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkg
eworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZv
ciB0aGUgb3B0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggb3B0
aW9uICkudmFsKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQg
YW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9u
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLVNl
bGVjdHMgcmV0dXJuIGFuIGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVz
aCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIg
b3B0aW9uU2V0LCBvcHRpb24sCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBlbGVtLm9w
dGlvbnMsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZh
bHVlICksCisgICAgICAgICAgICAgICAgICAgIGkgPSBvcHRpb25zLmxlbmd0aDsKKworICAgICAg
ICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBv
cHRpb25zWyBpIF07CisgICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9uLnNlbGVjdGVkID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mu
b3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTEKKyAgICAgICAgICAgICAgICAgICAg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25TZXQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRm9y
Y2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1
ZSBpcyBzZXQKKyAgICAgICAgICAgICAgICBpZiAoICFvcHRpb25TZXQgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfSApOworCisvLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlcgoralF1
ZXJ5LmVhY2goIFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKKyAgICBqUXVl
cnkudmFsSG9va3NbIHRoaXMgXSA9IHsKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFs
dWUgKSB7CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVl
cnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworICAgIGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHsKKyAgICAgICAgalF1ZXJ5
LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9PT0gbnVsbCA/ICJvbiIgOiBlbGVt
LnZhbHVlOworICAgICAgICB9OworICAgIH0KK30gKTsKKworCisKKworLy8gUmV0dXJuIGpRdWVy
eSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvbgorCisKK3ZhciByZm9jdXNNb3JwaCA9IC9e
KD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLzsKKworalF1ZXJ5LmV4dGVuZCggalF1ZXJ5
LmV2ZW50LCB7CisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9u
bHlIYW5kbGVycyApIHsKKworICAgICAgICB2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9u
dHlwZSwgaGFuZGxlLCBzcGVjaWFsLAorICAgICAgICAgICAgZXZlbnRQYXRoID0gWyBlbGVtIHx8
IGRvY3VtZW50IF0sCisgICAgICAgICAgICB0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCAidHlw
ZSIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCwKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBoYXNP
d24uY2FsbCggZXZlbnQsICJuYW1lc3BhY2UiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoICIu
IiApIDogW107CisKKyAgICAgICAgY3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7
CisKKyAgICAgICAgLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMK
KyAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDgg
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBmb2N1cy9i
bHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSBy
aWdodCBub3cKKyAgICAgICAgaWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2
ZW50LnRyaWdnZXJlZCApICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCB0eXBlLmluZGV4T2YoICIuIiApID4gLTEgKSB7CisKKyAgICAgICAgICAgIC8v
IE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUg
aW4gaGFuZGxlKCkKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCAiLiIgKTsK
KyAgICAgICAgICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CisgICAgICAgICAgICBuYW1l
c3BhY2VzLnNvcnQoKTsKKyAgICAgICAgfQorICAgICAgICBvbnR5cGUgPSB0eXBlLmluZGV4T2Yo
ICI6IiApIDwgMCAmJiAib24iICsgdHlwZTsKKworICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3Mg
aW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBz
dHJpbmcKKyAgICAgICAgZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/CisgICAgICAg
ICAgICBldmVudCA6CisgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2Yg
ZXZlbnQgPT09ICJvYmplY3QiICYmIGV2ZW50ICk7CisKKyAgICAgICAgLy8gVHJpZ2dlciBiaXRt
YXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVl
KQorICAgICAgICBldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMzsKKyAgICAg
ICAgZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCAiLiIgKTsKKyAgICAgICAgZXZl
bnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/CisgICAgICAgICAgICBuZXcgUmVnRXhw
KCAiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oICJcXC4oPzouKlxcLnwpIiApICsgIihcXC58
JCkiICkgOgorICAgICAgICAgICAgbnVsbDsKKworICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZl
bnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWQKKyAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5k
ZWZpbmVkOworICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVu
dC50YXJnZXQgPSBlbGVtOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xvbmUgYW55IGluY29t
aW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcg
bGlzdAorICAgICAgICBkYXRhID0gZGF0YSA9PSBudWxsID8KKyAgICAgICAgICAgIFsgZXZlbnQg
XSA6CisgICAgICAgICAgICBqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTsKKwor
ICAgICAgICAvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVz
CisgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9Owor
ICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwu
dHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlv
biBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKQorICAgICAgICAv
LyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9i
YWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KQorICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMg
JiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgeworCisg
ICAgICAgICAgICBidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTsKKyAg
ICAgICAgICAgIGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7
CisgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7CisgICAgICAg
ICAgICAgICAgZXZlbnRQYXRoLnB1c2goIGN1ciApOworICAgICAgICAgICAgICAgIHRtcCA9IGN1
cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT25seSBhZGQgd2luZG93IGlmIHdl
IGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pCisg
ICAgICAgICAgICBpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQg
KSApIHsKKyAgICAgICAgICAgICAgICBldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8
IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoCisgICAgICAgIGkg
PSAwOworICAgICAgICB3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVu
dC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworCisgICAgICAgICAgICBldmVudC50eXBlID0g
aSA+IDEgPworICAgICAgICAgICAgICAgIGJ1YmJsZVR5cGUgOgorICAgICAgICAgICAgICAgIHNw
ZWNpYWwuYmluZFR5cGUgfHwgdHlwZTsKKworICAgICAgICAgICAgLy8galF1ZXJ5IGhhbmRsZXIK
KyAgICAgICAgICAgIGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsICJldmVudHMiICkgfHwg
e30gKVsgZXZlbnQudHlwZSBdICYmCisgICAgICAgICAgICAgICAgZGF0YVByaXYuZ2V0KCBjdXIs
ICJoYW5kbGUiICk7CisgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKKyAgICAgICAgICAgICAg
ICBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBOYXRpdmUgaGFuZGxlcgorICAgICAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsg
b250eXBlIF07CisgICAgICAgICAgICBpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNj
ZXB0RGF0YSggY3VyICkgKSB7CisgICAgICAgICAgICAgICAgZXZlbnQucmVzdWx0ID0gaGFuZGxl
LmFwcGx5KCBjdXIsIGRhdGEgKTsKKyAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LnJlc3VsdCA9
PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGV2
ZW50LnR5cGUgPSB0eXBlOworCisgICAgICAgIC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRl
ZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKKyAgICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFl
dmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKKworICAgICAgICAgICAgaWYgKCAoICFzcGVj
aWFsLl9kZWZhdWx0IHx8CisgICAgICAgICAgICAgICAgc3BlY2lhbC5fZGVmYXVsdC5hcHBseSgg
ZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiYKKyAgICAgICAgICAgICAgICBh
Y2NlcHREYXRhKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0aXZl
IERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUg
ZXZlbnQuCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdp
bmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQorICAgICAgICAg
ICAgICAgIGlmICggb250eXBlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAm
JiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
RG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1l
dGhvZAorICAgICAgICAgICAgICAgICAgICB0bXAgPSBlbGVtWyBvbnR5cGUgXTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIHRtcCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1b
IG9udHlwZSBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ug
d2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlCisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5l
dmVudC50cmlnZ2VyZWQgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICBlbGVtWyB0eXBlIF0o
KTsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5l
ZDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHRtcCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1bIG9udHlwZSBdID0gdG1wOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGV2ZW50LnJlc3VsdDsKKyAgICB9LAorCisgICAgLy8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZl
bnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lCisgICAgLy8gVXNlZCBvbmx5IGZvciBgZm9j
dXMoaW4gfCBvdXQpYCBldmVudHMKKyAgICBzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0s
IGV2ZW50ICkgeworICAgICAgICB2YXIgZSA9IGpRdWVyeS5leHRlbmQoCisgICAgICAgICAgICBu
ZXcgalF1ZXJ5LkV2ZW50KCksCisgICAgICAgICAgICBldmVudCwKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgIGlzU2ltdWxhdGVkOiB0
cnVlCisgICAgICAgICAgICB9CisgICAgICAgICk7CisKKyAgICAgICAgalF1ZXJ5LmV2ZW50LnRy
aWdnZXIoIGUsIG51bGwsIGVsZW0gKTsKKyAgICB9CisKK30gKTsKKworalF1ZXJ5LmZuLmV4dGVu
ZCggeworCisgICAgdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRy
aWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKKyAgICAgICAgfSApOworICAgIH0sCisgICAgdHJp
Z2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICB2YXIgZWxlbSA9
IHRoaXNbIDAgXTsKKyAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGpR
dWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7CisgICAgICAgIH0K
KyAgICB9Cit9ICk7CisKKworalF1ZXJ5LmVhY2goICggImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1
c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrICIgKworICAgICJt
b3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIg
bW91c2VsZWF2ZSAiICsKKyAgICAiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVz
cyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIgKS5zcGxpdCggIiAiICksCisgICAgZnVuY3Rpb24o
IGksIG5hbWUgKSB7CisKKyAgICAvLyBIYW5kbGUgZXZlbnQgYmluZGluZworICAgIGpRdWVyeS5m
blsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gYXJndW1l
bnRzLmxlbmd0aCA+IDAgPworICAgICAgICAgICAgdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwg
Zm4gKSA6CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoIG5hbWUgKTsKKyAgICB9OworfSApOwor
CitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0
ICkgeworICAgICAgICByZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZl
KCBmbk91dCB8fCBmbk92ZXIgKTsKKyAgICB9Cit9ICk7CisKKworCisKK3N1cHBvcnQuZm9jdXNp
biA9ICJvbmZvY3VzaW4iIGluIHdpbmRvdzsKKworCisvLyBTdXBwb3J0OiBGaXJlZm94CisvLyBG
aXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzCisvLyBSZWxhdGVkIHRp
Y2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4
NworLy8KKy8vIFN1cHBvcnQ6IENocm9tZSwgU2FmYXJpCisvLyBmb2N1cyhpbiB8IG91dCkgZXZl
bnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cywKKy8vIHdoaWNoIGlzIHNwZWMgdmlv
bGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMt
Zm9jdXNldmVudC1ldmVudC1vcmRlcgorLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2NvZGUu
Z29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3CitpZiAoICFzdXBw
b3J0LmZvY3VzaW4gKSB7CisgICAgalF1ZXJ5LmVhY2goIHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1
cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworCisgICAgICAgIC8vIEF0
dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29t
ZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0CisgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rp
b24oIGV2ZW50ICkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2
ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApOworICAgICAgICB9OworCisg
ICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHsKKyAgICAgICAgICAgIHNldHVw
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9jID0gdGhpcy5vd25lckRvY3Vt
ZW50IHx8IHRoaXMsCisgICAgICAgICAgICAgICAgICAgIGF0dGFjaGVzID0gZGF0YVByaXYuYWNj
ZXNzKCBkb2MsIGZpeCApOworCisgICAgICAgICAgICAgICAgaWYgKCAhYXR0YWNoZXMgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0
cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRhdGFQcml2LmFjY2Vz
cyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApOworICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9j
ID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsCisgICAgICAgICAgICAgICAgICAgIGF0dGFj
aGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTsKKworICAgICAgICAgICAgICAg
IGlmICggIWF0dGFjaGVzICkgeworICAgICAgICAgICAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRM
aXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICBkYXRh
UHJpdi5yZW1vdmUoIGRvYywgZml4ICk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9ICk7Cit9
Cit2YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247CisKK3ZhciBub25jZSA9IGpRdWVyeS5u
b3coKTsKKwordmFyIHJxdWVyeSA9ICggL1w/LyApOworCisKKworLy8gU3VwcG9ydDogQW5kcm9p
ZCAyLjMKKy8vIFdvcmthcm91bmQgZmFpbHVyZSB0byBzdHJpbmctY2FzdCBudWxsIGlucHV0Citq
UXVlcnkucGFyc2VKU09OID0gZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgcmV0dXJuIEpTT04ucGFy
c2UoIGRhdGEgKyAiIiApOworfTsKKworCisvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCitq
UXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHsKKyAgICB2YXIgeG1sOworICAgIGlm
ICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgeworICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9CisKKyAgICAvLyBTdXBwb3J0OiBJRTkKKyAgICB0cnkgeworICAgICAgICB4
bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsICJ0
ZXh0L3htbCIgKTsKKyAgICB9IGNhdGNoICggZSApIHsKKyAgICAgICAgeG1sID0gdW5kZWZpbmVk
OworICAgIH0KKworICAgIGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJw
YXJzZXJlcnJvciIgKS5sZW5ndGggKSB7CisgICAgICAgIGpRdWVyeS5lcnJvciggIkludmFsaWQg
WE1MOiAiICsgZGF0YSApOworICAgIH0KKyAgICByZXR1cm4geG1sOworfTsKKworCit2YXIKKyAg
ICByaGFzaCA9IC8jLiokLywKKyAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCisgICAgcmhlYWRl
cnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL21nLAorCisgICAgLy8gIzc2NTMsICM4MTI1
LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uCisgICAgcmxvY2FsUHJvdG9jb2wgPSAv
Xig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTok
LywKKyAgICBybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKKyAgICBycHJvdG9jb2wgPSAv
XlwvXC8vLAorCisgICAgLyogUHJlZmlsdGVycworICAgICAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0
byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4
YW1wbGUpCisgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKKyAgICAgKiAgICAtIEJFRk9SRSBh
c2tpbmcgZm9yIGEgdHJhbnNwb3J0CisgICAgICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0
aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQorICAgICAq
IDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKKyAgICAgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIq
IiBjYW4gYmUgdXNlZAorICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNw
b3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRlZAorICAg
ICAqLworICAgIHByZWZpbHRlcnMgPSB7fSwKKworICAgIC8qIFRyYW5zcG9ydHMgYmluZGluZ3MK
KyAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAgICogMikgdGhlIGNhdGNoYWxsIHN5
bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRo
IHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCisgICAgICov
CisgICAgdHJhbnNwb3J0cyA9IHt9LAorCisgICAgLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hh
ciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNz
aW9uCisgICAgYWxsVHlwZXMgPSAiKi8iLmNvbmNhdCggIioiICksCisKKyAgICAvLyBBbmNob3Ig
dGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW4KKyAgICBvcmlnaW5BbmNob3IgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKKyAgICBvcmlnaW5BbmNob3IuaHJlZiA9IGxv
Y2F0aW9uLmhyZWY7CisKKy8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3IgalF1ZXJ5LmFqYXhQcmVm
aWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CitmdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNP
clRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKKworICAgIC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBp
cyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCisgICAgcmV0dXJuIGZ1bmN0aW9uKCBkYXRh
VHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVF
eHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGZ1bmMgPSBkYXRhVHlwZUV4
cHJlc3Npb247CisgICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgZGF0YVR5cGUsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAg
ICAgIGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBy
bm90d2hpdGUgKSB8fCBbXTsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5j
ICkgKSB7CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlw
ZUV4cHJlc3Npb24KKyAgICAgICAgICAgIHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sg
aSsrIF0gKSApIHsKKworICAgICAgICAgICAgICAgIC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkCisg
ICAgICAgICAgICAgICAgaWYgKCBkYXRhVHlwZVsgMCBdID09PSAiKyIgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCAiKiI7CisgICAgICAg
ICAgICAgICAgICAgICggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlw
ZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApOworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3
aXNlIGFwcGVuZAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICku
cHVzaCggZnVuYyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07Cit9CisKKy8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVy
cyBhbmQgdHJhbnNwb3J0cworZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMo
IHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHsKKworICAgIHZh
ciBpbnNwZWN0ZWQgPSB7fSwKKyAgICAgICAgc2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJl
ID09PSB0cmFuc3BvcnRzICk7CisKKyAgICBmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHsK
KyAgICAgICAgdmFyIHNlbGVjdGVkOworICAgICAgICBpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0
cnVlOworICAgICAgICBqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBm
dW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkgeworICAgICAgICAgICAgdmFyIGRhdGFU
eXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0
aW9ucywganFYSFIgKTsKKyAgICAgICAgICAgIGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3Bv
cnQgPT09ICJzdHJpbmciICYmCisgICAgICAgICAgICAgICAgIXNlZWtpbmdUcmFuc3BvcnQgJiYg
IWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkgeworCisgICAgICAgICAgICAgICAg
b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApOworICAgICAg
ICAgICAgICAgIGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0
ICkgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFu
c3BvcnQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgICAgICByZXR1cm4gc2Vs
ZWN0ZWQ7CisgICAgfQorCisgICAgcmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAw
IF0gKSB8fCAhaW5zcGVjdGVkWyAiKiIgXSAmJiBpbnNwZWN0KCAiKiIgKTsKK30KKworLy8gQSBz
cGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCisvLyB0aGF0IHRha2VzICJmbGF0IiBvcHRp
b25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZCkKKy8vIEZpeGVzICM5ODg3CitmdW5jdGlvbiBh
amF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHsKKyAgICB2YXIga2V5LCBkZWVwLAorICAgICAgICBm
bGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307CisKKyAg
ICBmb3IgKCBrZXkgaW4gc3JjICkgeworICAgICAgICBpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVm
aW5lZCApIHsKKyAgICAgICAgICAgICggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBk
ZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKCBkZWVwICkgeworICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0
YXJnZXQsIGRlZXAgKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGFyZ2V0OworfQorCisvKiBIYW5k
bGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6CisgKiAtIGZpbmRzIHRoZSByaWdodCBk
YXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFU
eXBlKQorICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCisgKi8KK2Z1bmN0
aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7CisKKyAgICB2
YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsCisgICAgICAgIGNvbnRl
bnRzID0gcy5jb250ZW50cywKKyAgICAgICAgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7CisKKyAg
ICAvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJv
Y2VzcworICAgIHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09ICIqIiApIHsKKyAgICAgICAgZGF0
YVR5cGVzLnNoaWZ0KCk7CisgICAgICAgIGlmICggY3QgPT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgIGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkNvbnRl
bnQtVHlwZSIgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRl
YWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZQorICAgIGlmICggY3QgKSB7CisgICAgICAg
IGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7CisgICAgICAgICAgICBpZiAoIGNvbnRlbnRzWyB0
eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkgeworICAgICAgICAgICAgICAg
IGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2Ug
aGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKKyAgICBpZiAoIGRhdGFU
eXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHsKKyAgICAgICAgZmluYWxEYXRhVHlwZSA9IGRhdGFU
eXBlc1sgMCBdOworICAgIH0gZWxzZSB7CisKKyAgICAgICAgLy8gVHJ5IGNvbnZlcnRpYmxlIGRh
dGFUeXBlcworICAgICAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKKyAgICAgICAgICAg
IGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArICIgIiArIGRhdGFU
eXBlc1sgMCBdIF0gKSB7CisgICAgICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IHR5cGU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoICFm
aXJzdERhdGFUeXBlICkgeworICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0eXBlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gT3IganVzdCB1c2UgZmlyc3Qg
b25lCisgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5
cGU7CisgICAgfQorCisgICAgLy8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZQorICAgIC8vIFdlIGFk
ZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCisgICAgLy8gYW5kIHJldHVybiB0
aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQorICAgIGlmICggZmluYWxEYXRhVHlwZSApIHsKKyAg
ICAgICAgaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKKyAgICAgICAg
ICAgIGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdOworICAgIH0KK30KKworLyogQ2hh
aW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25z
ZQorICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3Rh
bmNlCisgKi8KK2Z1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3Vj
Y2VzcyApIHsKKyAgICB2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldiwKKyAgICAg
ICAgY29udmVydGVycyA9IHt9LAorCisgICAgICAgIC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0
YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb24KKyAgICAg
ICAgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTsKKworICAgIC8vIENyZWF0ZSBjb252
ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5cworICAgIGlmICggZGF0YVR5cGVzWyAxIF0g
KSB7CisgICAgICAgIGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgeworICAgICAgICAgICAg
Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTsKKwor
ICAgIC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlCisgICAgd2hpbGUgKCBj
dXJyZW50ICkgeworCisgICAgICAgIGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkg
eworICAgICAgICAgICAganFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVz
cG9uc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBw
cm92aWRlZAorICAgICAgICBpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIg
KSB7CisgICAgICAgICAgICByZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0
YVR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXYgPSBjdXJyZW50OworICAgICAgICBj
dXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7CisKKyAgICAgICAgaWYgKCBjdXJyZW50ICkgewor
CisgICAgICAgIC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUg
aXMgbm9uLWF1dG8KKyAgICAgICAgICAgIGlmICggY3VycmVudCA9PT0gIioiICkgeworCisgICAg
ICAgICAgICAgICAgY3VycmVudCA9IHByZXY7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgcmVz
cG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJl
bnQKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJy
ZW50ICkgeworCisgICAgICAgICAgICAgICAgLy8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXIKKyAg
ICAgICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8
fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOworCisgICAgICAgICAgICAgICAgLy8gSWYg
bm9uZSBmb3VuZCwgc2VlayBhIHBhaXIKKyAgICAgICAgICAgICAgICBpZiAoICFjb252ICkgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRtcCA9IGNvbnYyLnNwbGl0KCAiICIgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5w
dXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJldiAr
ICIgIiArIHRtcFsgMCBdIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dmVydGVyc1sgIiogIiArIHRtcFsgMCBdIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjb252ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbmRl
bnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjb252ID09PSB0cnVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlw
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb252ZXJ0ZXJz
WyBjb252MiBdICE9PSB0cnVlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudCA9IHRtcFsgMCBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCisgICAgICAgICAgICAg
ICAgaWYgKCBjb252ICE9PSB0cnVlICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFVubGVz
cyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICYmIHMudGhyb3dzICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogInBhcnNl
cmVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGNvbnYgPyBl
IDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVz
cG9uc2UgfTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworCisgICAgLy8gQ291bnRlciBmb3IgaG9s
ZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCisgICAgYWN0aXZlOiAwLAorCisgICAg
Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAorICAgIGxhc3RN
b2RpZmllZDoge30sCisgICAgZXRhZzoge30sCisKKyAgICBhamF4U2V0dGluZ3M6IHsKKyAgICAg
ICAgdXJsOiBsb2NhdGlvbi5ocmVmLAorICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgaXNM
b2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSwKKyAgICAgICAg
Z2xvYmFsOiB0cnVlLAorICAgICAgICBwcm9jZXNzRGF0YTogdHJ1ZSwKKyAgICAgICAgYXN5bmM6
IHRydWUsCisgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl
bmNvZGVkOyBjaGFyc2V0PVVURi04IiwKKyAgICAgICAgLyoKKyAgICAgICAgdGltZW91dDogMCwK
KyAgICAgICAgZGF0YTogbnVsbCwKKyAgICAgICAgZGF0YVR5cGU6IG51bGwsCisgICAgICAgIHVz
ZXJuYW1lOiBudWxsLAorICAgICAgICBwYXNzd29yZDogbnVsbCwKKyAgICAgICAgY2FjaGU6IG51
bGwsCisgICAgICAgIHRocm93czogZmFsc2UsCisgICAgICAgIHRyYWRpdGlvbmFsOiBmYWxzZSwK
KyAgICAgICAgaGVhZGVyczoge30sCisgICAgICAgICovCisKKyAgICAgICAgYWNjZXB0czogewor
ICAgICAgICAgICAgIioiOiBhbGxUeXBlcywKKyAgICAgICAgICAgIHRleHQ6ICJ0ZXh0L3BsYWlu
IiwKKyAgICAgICAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAorICAgICAgICAgICAgeG1sOiAiYXBw
bGljYXRpb24veG1sLCB0ZXh0L3htbCIsCisgICAgICAgICAgICBqc29uOiAiYXBwbGljYXRpb24v
anNvbiwgdGV4dC9qYXZhc2NyaXB0IgorICAgICAgICB9LAorCisgICAgICAgIGNvbnRlbnRzOiB7
CisgICAgICAgICAgICB4bWw6IC9cYnhtbFxiLywKKyAgICAgICAgICAgIGh0bWw6IC9cYmh0bWwv
LAorICAgICAgICAgICAganNvbjogL1xianNvblxiLworICAgICAgICB9LAorCisgICAgICAgIHJl
c3BvbnNlRmllbGRzOiB7CisgICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhNTCIsCisgICAgICAg
ICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IiwKKyAgICAgICAgICAgIGpzb246ICJyZXNwb25zZUpT
T04iCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRGF0YSBjb252ZXJ0ZXJzCisgICAgICAgIC8v
IEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCAiKiIpIGFuZCBkZXN0aW5hdGlvbiB0
eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlCisgICAgICAgIGNvbnZlcnRlcnM6IHsKKworICAgICAg
ICAgICAgLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0CisgICAgICAgICAgICAiKiB0ZXh0Ijog
U3RyaW5nLAorCisgICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zv
cm1hdGlvbikKKyAgICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0cnVlLAorCisgICAgICAgICAgICAv
LyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCisgICAgICAgICAgICAidGV4dCBq
c29uIjogalF1ZXJ5LnBhcnNlSlNPTiwKKworICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4
bWwKKyAgICAgICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAorICAgICAgICB9LAor
CisgICAgICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6
CisgICAgICAgIC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYK
KyAgICAgICAgLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKKyAg
ICAgICAgLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCisgICAgICAgIGZsYXRPcHRp
b25zOiB7CisgICAgICAgICAgICB1cmw6IHRydWUsCisgICAgICAgICAgICBjb250ZXh0OiB0cnVl
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0
aW5ncyBvYmplY3QgaW50byB0YXJnZXQKKyAgICAvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFu
ZCBzZXR0aW5ncyBmaWVsZHMuCisgICAgLy8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBp
bnRvIGFqYXhTZXR0aW5ncy4KKyAgICBhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRp
bmdzICkgeworICAgICAgICByZXR1cm4gc2V0dGluZ3MgPworCisgICAgICAgICAgICAvLyBCdWls
ZGluZyBhIHNldHRpbmdzIG9iamVjdAorICAgICAgICAgICAgYWpheEV4dGVuZCggYWpheEV4dGVu
ZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOgorCisgICAgICAg
ICAgICAvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzCisgICAgICAgICAgICBhamF4RXh0ZW5kKCBq
UXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTsKKyAgICB9LAorCisgICAgYWpheFByZWZpbHRl
cjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCisgICAgYWpheFRy
YW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCisKKyAg
ICAvLyBNYWluIG1ldGhvZAorICAgIGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7CisK
KyAgICAgICAgLy8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1
cmUKKyAgICAgICAgaWYgKCB0eXBlb2YgdXJsID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAg
IG9wdGlvbnMgPSB1cmw7CisgICAgICAgICAgICB1cmwgPSB1bmRlZmluZWQ7CisgICAgICAgIH0K
KworICAgICAgICAvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdAorICAgICAgICBvcHRp
b25zID0gb3B0aW9ucyB8fCB7fTsKKworICAgICAgICB2YXIgdHJhbnNwb3J0LAorCisgICAgICAg
ICAgICAvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtCisgICAgICAgICAgICBjYWNoZVVS
TCwKKworICAgICAgICAgICAgLy8gUmVzcG9uc2UgaGVhZGVycworICAgICAgICAgICAgcmVzcG9u
c2VIZWFkZXJzU3RyaW5nLAorICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLAorCisgICAgICAg
ICAgICAvLyB0aW1lb3V0IGhhbmRsZQorICAgICAgICAgICAgdGltZW91dFRpbWVyLAorCisgICAg
ICAgICAgICAvLyBVcmwgY2xlYW51cCB2YXIKKyAgICAgICAgICAgIHVybEFuY2hvciwKKworICAg
ICAgICAgICAgLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVk
CisgICAgICAgICAgICBmaXJlR2xvYmFscywKKworICAgICAgICAgICAgLy8gTG9vcCB2YXJpYWJs
ZQorICAgICAgICAgICAgaSwKKworICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRp
b25zIG9iamVjdAorICAgICAgICAgICAgcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25z
ICksCisKKyAgICAgICAgICAgIC8vIENhbGxiYWNrcyBjb250ZXh0CisgICAgICAgICAgICBjYWxs
YmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKKworICAgICAgICAgICAgLy8gQ29udGV4dCBm
b3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBv
ciBqUXVlcnkgY29sbGVjdGlvbgorICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0gcy5j
b250ZXh0ICYmCisgICAgICAgICAgICAgICAgKCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwg
Y2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBj
YWxsYmFja0NvbnRleHQgKSA6CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudCwKKwor
ICAgICAgICAgICAgLy8gRGVmZXJyZWRzCisgICAgICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5E
ZWZlcnJlZCgpLAorICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFj
a3MoICJvbmNlIG1lbW9yeSIgKSwKKworICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBj
YWxsYmFja3MKKyAgICAgICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sCisK
KyAgICAgICAgICAgIC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCisgICAg
ICAgICAgICByZXF1ZXN0SGVhZGVycyA9IHt9LAorICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNO
YW1lcyA9IHt9LAorCisgICAgICAgICAgICAvLyBUaGUganFYSFIgc3RhdGUKKyAgICAgICAgICAg
IHN0YXRlID0gMCwKKworICAgICAgICAgICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCisgICAg
ICAgICAgICBzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCisKKyAgICAgICAgICAgIC8vIEZha2UgeGhy
CisgICAgICAgICAgICBqcVhIUiA9IHsKKyAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAwLAor
CisgICAgICAgICAgICAgICAgLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAor
ICAgICAgICAgICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgbWF0Y2g7CisgICAgICAgICAgICAgICAgICAgIGlmICggc3Rh
dGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNwb25zZUhlYWRl
cnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0ge307
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMu
ZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgXSA9
IG1hdGNoWyAyIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSByZXNwb25zZUhl
YWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2g7CisgICAg
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIFJhdyBzdHJpbmcKKyAgICAgICAg
ICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxs
OworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBDYWNoZXMgdGhlIGhl
YWRlcgorICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2
YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxuYW1lID0gbmFtZS50b0xvd2VyQ2Fz
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0ZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhl
YWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgICAgICAvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgorICAg
ICAgICAgICAgICAgIG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoICFzdGF0ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMu
bWltZVR5cGUgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAv
LyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6
IGZ1bmN0aW9uKCBtYXAgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIG1hcCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
c3RhdGUgPCAyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGNvZGUgaW4g
bWFwICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExhenktYWRkIHRo
ZSBuZXcgY2FsbGJhY2sgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2Rl
WyBjb2RlIF0sIG1hcFsgY29kZSBdIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrcworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
ICAgICAvLyBDYW5jZWwgdGhlIHJlcXVlc3QKKyAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rp
b24oIHN0YXR1c1RleHQgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbFRleHQgPSBz
dGF0dXNUZXh0IHx8IHN0ckFib3J0OworICAgICAgICAgICAgICAgICAgICBpZiAoIHRyYW5zcG9y
dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0
ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZG9uZSggMCwg
ZmluYWxUZXh0ICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gQXR0YWNoIGRlZmVycmVkcwor
ICAgICAgICBkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApLmNvbXBsZXRlID0gY29tcGxldGVEZWZl
cnJlZC5hZGQ7CisgICAgICAgIGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOworICAgICAgICBq
cVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7CisKKyAgICAgICAgLy8gUmVtb3ZlIGhhc2ggY2hhcmFj
dGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCisgICAgICAgIC8vIEFkZCBwcm90b2Nv
bCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KQorICAgICAgICAv
LyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lz
dGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKQorICAgICAgICAvLyBXZSBhbHNvIHVzZSB0aGUgdXJs
IHBhcmFtZXRlciBpZiBhdmFpbGFibGUKKyAgICAgICAgcy51cmwgPSAoICggdXJsIHx8IHMudXJs
IHx8IGxvY2F0aW9uLmhyZWYgKSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkKKyAgICAgICAg
ICAgIC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgIi8vIiApOworCisg
ICAgICAgIC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAw
NAorICAgICAgICBzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5t
ZXRob2QgfHwgcy50eXBlOworCisgICAgICAgIC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QKKyAg
ICAgICAgcy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xv
d2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07CisKKyAgICAgICAgLy8gQSBj
cm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBt
YXRjaCB0aGUgY3VycmVudCBvcmlnaW4uCisgICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiA9PSBu
dWxsICkgeworICAgICAgICAgICAgdXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgg
ImEiICk7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOC0xMSsKKyAgICAgICAgICAgIC8v
IElFIHRocm93cyBleGNlcHRpb24gaWYgdXJsIGlzIG1hbGZvcm1lZCwgZS5nLiBodHRwOi8vZXhh
bXBsZS5jb206ODB4LworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB1cmxBbmNo
b3IuaHJlZiA9IHMudXJsOworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4LTExKwor
ICAgICAgICAgICAgICAgIC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5
IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgdXJsQW5jaG9yLmhy
ZWYgPSB1cmxBbmNob3IuaHJlZjsKKyAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gb3Jp
Z2luQW5jaG9yLnByb3RvY29sICsgIi8vIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PQorICAgICAg
ICAgICAgICAgICAgICB1cmxBbmNob3IucHJvdG9jb2wgKyAiLy8iICsgdXJsQW5jaG9yLmhvc3Q7
CisgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKKworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWlu
LAorICAgICAgICAgICAgICAgIC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0
IGlmIGl0IGlzIGludmFsaWQKKyAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbnZlcnQgZGF0YSBpZiBu
b3QgYWxyZWFkeSBhIHN0cmluZworICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRh
ICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcy5kYXRhID0g
alF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKKyAgICAgICAgaW5zcGVjdFByZWZpbHRlcnNPclRyYW5z
cG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7CisKKyAgICAgICAgLy8gSWYg
cmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmUKKyAgICAg
ICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHJldHVybiBqcVhIUjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlm
IGFza2VkIHRvCisgICAgICAgIC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBp
cyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpCisgICAgICAgIGZp
cmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsOworCisgICAgICAgIC8vIFdhdGNo
IGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKKyAgICAgICAgaWYgKCBmaXJlR2xvYmFscyAmJiBq
UXVlcnkuYWN0aXZlKysgPT09IDAgKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dl
ciggImFqYXhTdGFydCIgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwcGVyY2FzZSB0aGUg
dHlwZQorICAgICAgICBzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKKworICAgICAgICAv
LyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudAorICAgICAgICBzLmhhc0NvbnRlbnQg
PSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKKworICAgICAgICAvLyBTYXZlIHRoZSBVUkwg
aW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2UKKyAgICAgICAg
Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uCisgICAgICAgIGNhY2hlVVJM
ID0gcy51cmw7CisKKyAgICAgICAgLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0
cyB3aXRoIG5vIGNvbnRlbnQKKyAgICAgICAgaWYgKCAhcy5oYXNDb250ZW50ICkgeworCisgICAg
ICAgICAgICAvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJsCisgICAg
ICAgICAgICBpZiAoIHMuZGF0YSApIHsKKyAgICAgICAgICAgICAgICBjYWNoZVVSTCA9ICggcy51
cmwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgcy5kYXRhICk7
CisKKyAgICAgICAgICAgICAgICAvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5v
dCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5CisgICAgICAgICAgICAgICAgZGVsZXRlIHMuZGF0
YTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIGFudGktY2FjaGUgaW4gdXJs
IGlmIG5lZWRlZAorICAgICAgICAgICAgaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKKyAgICAg
ICAgICAgICAgICBzLnVybCA9IHJ0cy50ZXN0KCBjYWNoZVVSTCApID8KKworICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgJ18nIHBhcmFtZXRlciwgc2V0IGl0cyB2
YWx1ZQorICAgICAgICAgICAgICAgICAgICBjYWNoZVVSTC5yZXBsYWNlKCBydHMsICIkMV89IiAr
IG5vbmNlKysgKSA6CisKKyAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBvbmUg
dG8gdGhlIGVuZAorICAgICAgICAgICAgICAgICAgICBjYWNoZVVSTCArICggcnF1ZXJ5LnRlc3Qo
IGNhY2hlVVJMICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyBub25jZSsrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQv
b3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKyAgICAgICAg
aWYgKCBzLmlmTW9kaWZpZWQgKSB7CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZp
ZWRbIGNhY2hlVVJMIF0gKSB7CisgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRl
ciggIklmLU1vZGlmaWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwg
XSApIHsKKyAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1N
YXRjaCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5n
IHNlbnQKKyAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5
cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7CisgICAgICAgICAgICBqcVhI
Ui5zZXRSZXF1ZXN0SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZl
ciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQorICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVh
ZGVyKAorICAgICAgICAgICAgIkFjY2VwdCIsCisgICAgICAgICAgICBzLmRhdGFUeXBlc1sgMCBd
ICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID8KKyAgICAgICAgICAgICAgICBzLmFj
Y2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArCisgICAgICAgICAgICAgICAgICAgICggcy5kYXRh
VHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsgIjsgcT0wLjAxIiA6ICIiICkg
OgorICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0KKyAgICAgICAgKTsKKworICAgICAg
ICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KKyAgICAgICAgZm9yICggaSBpbiBzLmhlYWRl
cnMgKSB7CisgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNb
IGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWlt
ZXR5cGVzIGFuZCBlYXJseSBhYm9ydAorICAgICAgICBpZiAoIHMuYmVmb3JlU2VuZCAmJgorICAg
ICAgICAgICAgKCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyAp
ID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkgeworCisgICAgICAgICAgICAvLyBBYm9ydCBp
ZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm4KKyAgICAgICAgICAgIHJldHVybiBqcVhIUi5h
Ym9ydCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEg
Y2FuY2VsbGF0aW9uCisgICAgICAgIHN0ckFib3J0ID0gImFib3J0IjsKKworICAgICAgICAvLyBJ
bnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKKyAgICAgICAgZm9yICggaSBpbiB7IHN1Y2Nl
c3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgeworICAgICAgICAgICAganFYSFJbIGkg
XSggc1sgaSBdICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBHZXQgdHJhbnNwb3J0CisgICAg
ICAgIHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRz
LCBzLCBvcHRpb25zLCBqcVhIUiApOworCisgICAgICAgIC8vIElmIG5vIHRyYW5zcG9ydCwgd2Ug
YXV0by1hYm9ydAorICAgICAgICBpZiAoICF0cmFuc3BvcnQgKSB7CisgICAgICAgICAgICBkb25l
KCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGpx
WEhSLnJlYWR5U3RhdGUgPSAxOworCisgICAgICAgICAgICAvLyBTZW5kIGdsb2JhbCBldmVudAor
ICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxF
dmVudENvbnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFq
YXhTZW5kLCBzdG9wIHRoZXJlCisgICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBqcVhIUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gVGltZW91dAorICAgICAgICAgICAgaWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7
CisgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBqcVhIUi5hYm9ydCggInRpbWVvdXQiICk7Cisg
ICAgICAgICAgICAgICAgfSwgcy50aW1lb3V0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAxOworICAgICAgICAgICAgICAgIHRy
YW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOworICAgICAgICAgICAgfSBjYXRj
aCAoIGUgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVy
cm9yIGlmIG5vdCBkb25lCisgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRvbmUoIC0xLCBlICk7CisKKyAgICAgICAgICAgICAgICAvLyBTaW1w
bHkgcmV0aHJvdyBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9u
ZQorICAgICAgICBmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3Bv
bnNlcywgaGVhZGVycyApIHsKKyAgICAgICAgICAgIHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVy
cm9yLCByZXNwb25zZSwgbW9kaWZpZWQsCisgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IG5h
dGl2ZVN0YXR1c1RleHQ7CisKKyAgICAgICAgICAgIC8vIENhbGxlZCBvbmNlCisgICAgICAgICAg
ICBpZiAoIHN0YXRlID09PSAyICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gU3RhdGUgaXMgImRvbmUiIG5vdworICAgICAgICAgICAg
c3RhdGUgPSAyOworCisgICAgICAgICAgICAvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cwor
ICAgICAgICAgICAgaWYgKCB0aW1lb3V0VGltZXIgKSB7CisgICAgICAgICAgICAgICAgd2luZG93
LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9u
CisgICAgICAgICAgICAvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2ls
bCBiZSB1c2VkKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gdW5kZWZpbmVkOworCisgICAgICAg
ICAgICAvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICByZXNwb25zZUhlYWRl
cnNTdHJpbmcgPSBoZWFkZXJzIHx8ICIiOworCisgICAgICAgICAgICAvLyBTZXQgcmVhZHlTdGF0
ZQorICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKKwor
ICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWwKKyAgICAgICAgICAgIGlzU3Vj
Y2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0Owor
CisgICAgICAgICAgICAvLyBHZXQgcmVzcG9uc2UgZGF0YQorICAgICAgICAgICAgaWYgKCByZXNw
b25zZXMgKSB7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2Vz
KCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUg
YWx3YXlzIHNldCkKKyAgICAgICAgICAgIHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3Bv
bnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7CisKKyAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NmdWws
IGhhbmRsZSB0eXBlIGNoYWluaW5nCisgICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKKwor
ICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5v
bmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCisgICAgICAgICAgICAgICAg
aWYgKCBzLmlmTW9kaWZpZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFY
SFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJMYXN0LU1vZGlmaWVkIiApOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIG1vZGlmaWVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmxh
c3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIo
ICJldGFnIiApOworICAgICAgICAgICAgICAgICAgICBpZiAoIG1vZGlmaWVkICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIGlmIG5vIGNvbnRlbnQKKyAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA9PT0gMjA0IHx8
IHMudHlwZSA9PT0gIkhFQUQiICkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0g
Im5vY29udGVudCI7CisKKyAgICAgICAgICAgICAgICAvLyBpZiBub3QgbW9kaWZpZWQKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7CisKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXQKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7CisgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhOworICAgICAgICAgICAgICAg
ICAgICBlcnJvciA9IHJlc3BvbnNlLmVycm9yOworICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nl
c3MgPSAhZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKwor
ICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3Jt
YWxpemUgZm9yIG5vbi1hYm9ydHMKKyAgICAgICAgICAgICAgICBlcnJvciA9IHN0YXR1c1RleHQ7
CisgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAiZXJyb3IiOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIHN0YXR1cyA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAorICAgICAg
ICAgICAganFYSFIuc3RhdHVzID0gc3RhdHVzOworICAgICAgICAgICAganFYSFIuc3RhdHVzVGV4
dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKKworICAgICAgICAg
ICAgLy8gU3VjY2Vzcy9FcnJvcgorICAgICAgICAgICAgaWYgKCBpc1N1Y2Nlc3MgKSB7CisgICAg
ICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNj
ZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwg
c3RhdHVzVGV4dCwgZXJyb3IgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBT
dGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworICAgICAgICAgICAganFYSFIuc3RhdHVzQ29kZSgg
c3RhdHVzQ29kZSApOworICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDsKKworICAg
ICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxFdmVu
dENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gImFqYXhTdWNjZXNzIiA6ICJhamF4RXJyb3Ii
LAorICAgICAgICAgICAgICAgICAgICBbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDog
ZXJyb3IgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDb21wbGV0ZQorICAg
ICAgICAgICAgY29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpx
WEhSLCBzdGF0dXNUZXh0IF0gKTsKKworICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsK
KyAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0
ZSIsIFsganFYSFIsIHMgXSApOworCisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBnbG9i
YWwgQUpBWCBjb3VudGVyCisgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3Rv
cCIgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4ganFYSFI7CisgICAgfSwKKworICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmws
IGRhdGEsIGNhbGxiYWNrICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRh
LCBjYWxsYmFjaywgImpzb24iICk7CisgICAgfSwKKworICAgIGdldFNjcmlwdDogZnVuY3Rpb24o
IHVybCwgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVm
aW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisgICAgfQorfSApOworCitqUXVlcnkuZWFjaCgg
WyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7CisgICAgalF1ZXJ5WyBt
ZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgeworCisgICAg
ICAgIC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCisgICAg
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKKyAgICAgICAgICAgIHR5cGUg
PSB0eXBlIHx8IGNhbGxiYWNrOworICAgICAgICAgICAgY2FsbGJhY2sgPSBkYXRhOworICAgICAg
ICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSB1cmwg
Y2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKQorICAg
ICAgICByZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHsKKyAgICAgICAgICAgIHVy
bDogdXJsLAorICAgICAgICAgICAgdHlwZTogbWV0aG9kLAorICAgICAgICAgICAgZGF0YVR5cGU6
IHR5cGUsCisgICAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgICAgc3VjY2VzczogY2Fs
bGJhY2sKKyAgICAgICAgfSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7
CisgICAgfTsKK30gKTsKKworCitqUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkgewor
ICAgIHJldHVybiBqUXVlcnkuYWpheCggeworICAgICAgICB1cmw6IHVybCwKKworICAgICAgICAv
LyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3Vn
aCBhamF4U2V0dXAgKCMxMTI2NCkKKyAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgIGRhdGFU
eXBlOiAic2NyaXB0IiwKKyAgICAgICAgYXN5bmM6IGZhbHNlLAorICAgICAgICBnbG9iYWw6IGZh
bHNlLAorICAgICAgICAidGhyb3dzIjogdHJ1ZQorICAgIH0gKTsKK307CisKKworalF1ZXJ5LmZu
LmV4dGVuZCggeworICAgIHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICB2YXIg
d3JhcDsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAg
ICBqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApOworICAgICAg
ICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0aGlzWyAwIF0gKSB7CisKKyAg
ICAgICAgICAgIC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kCisgICAg
ICAgICAgICB3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVx
KCAwICkuY2xvbmUoIHRydWUgKTsKKworICAgICAgICAgICAgaWYgKCB0aGlzWyAwIF0ucGFyZW50
Tm9kZSApIHsKKyAgICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdyYXAubWFwKCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAo
IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBl
bGVtLmZpcnN0RWxlbWVudENoaWxkOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHJldHVybiBlbGVtOworICAgICAgICAgICAgfSApLmFwcGVuZCggdGhpcyApOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIHdyYXBJbm5lcjogZnVu
Y3Rpb24oIGh0bWwgKSB7CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSAp
IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAg
ICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkg
KTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwK
KyAgICAgICAgICAgICAgICBjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTsKKworICAgICAgICAg
ICAgaWYgKCBjb250ZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgY29udGVudHMud3Jh
cEFsbCggaHRtbCApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNl
bGYuYXBwZW5kKCBodG1sICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAor
CisgICAgd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHZhciBpc0Z1bmN0aW9uID0g
alF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBm
dW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVu
Y3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTsKKyAgICAgICAgfSApOworICAg
IH0sCisKKyAgICB1bndyYXA6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5wYXJl
bnQoKS5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggIWpRdWVyeS5ub2RlTmFt
ZSggdGhpcywgImJvZHkiICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVw
bGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOworICAgICAgICAgICAgfQorICAgICAgICB9ICku
ZW5kKCk7CisgICAgfQorfSApOworCisKK2pRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUo
IGVsZW0gKTsKK307CitqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiggZWxl
bSApIHsKKworICAgIC8vIFN1cHBvcnQ6IE9wZXJhIDw9IDEyLjEyCisgICAgLy8gT3BlcmEgcmVw
b3J0cyBvZmZzZXRXaWR0aHMgYW5kIG9mZnNldEhlaWdodHMgbGVzcyB0aGFuIHplcm8gb24gc29t
ZSBlbGVtZW50cworICAgIC8vIFVzZSBPUiBpbnN0ZWFkIG9mIEFORCBhcyB0aGUgZWxlbWVudCBp
cyBub3QgdmlzaWJsZSBpZiBlaXRoZXIgaXMgdHJ1ZQorICAgIC8vIFNlZSB0aWNrZXRzICMxMDQw
NiBhbmQgIzEzMTMyCisgICAgcmV0dXJuIGVsZW0ub2Zmc2V0V2lkdGggPiAwIHx8IGVsZW0ub2Zm
c2V0SGVpZ2h0ID4gMCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoID4gMDsKK307CisK
KworCisKK3ZhciByMjAgPSAvJTIwL2csCisgICAgcmJyYWNrZXQgPSAvXFtcXSQvLAorICAgIHJD
UkxGID0gL1xyP1xuL2csCisgICAgcnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9u
fGltYWdlfHJlc2V0fGZpbGUpJC9pLAorICAgIHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2Vs
ZWN0fHRleHRhcmVhfGtleWdlbikvaTsKKworZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwg
b2JqLCB0cmFkaXRpb25hbCwgYWRkICkgeworICAgIHZhciBuYW1lOworCisgICAgaWYgKCBqUXVl
cnkuaXNBcnJheSggb2JqICkgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIGFycmF5IGl0ZW0u
CisgICAgICAgIGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgeworICAgICAgICAg
ICAgaWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHsKKworICAg
ICAgICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KKyAgICAg
ICAgICAgICAgICBhZGQoIHByZWZpeCwgdiApOworCisgICAgICAgICAgICB9IGVsc2UgeworCisg
ICAgICAgICAgICAgICAgLy8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBl
bmNvZGUgaXRzIG51bWVyaWMgaW5kZXguCisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoCisg
ICAgICAgICAgICAgICAgICAgIHByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmplY3Qi
ICYmIHYgIT0gbnVsbCA/IGkgOiAiIiApICsgIl0iLAorICAgICAgICAgICAgICAgICAgICB2LAor
ICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCwKKyAgICAgICAgICAgICAgICAgICAgYWRk
CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworCisgICAg
fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gIm9iamVj
dCIgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIG9iamVjdCBpdGVtLgorICAgICAgICBmb3Ig
KCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIg
KyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApOworICAgICAgICB9
CisKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KKyAg
ICAgICAgYWRkKCBwcmVmaXgsIG9iaiApOworICAgIH0KK30KKworLy8gU2VyaWFsaXplIGFuIGFy
cmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKKy8vIGtleS92YWx1ZXMgaW50byBhIHF1
ZXJ5IHN0cmluZworalF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkgewor
ICAgIHZhciBwcmVmaXgsCisgICAgICAgIHMgPSBbXSwKKyAgICAgICAgYWRkID0gZnVuY3Rpb24o
IGtleSwgdmFsdWUgKSB7CisKKyAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24s
IGludm9rZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZQorICAgICAgICAgICAgdmFsdWUgPSBqUXVl
cnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyAiIiA6
IHZhbHVlICk7CisgICAgICAgICAgICBzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50
KCBrZXkgKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKKyAgICAgICAgfTsK
KworICAgIC8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVo
YXZpb3IuCisgICAgaWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICB0
cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MgJiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50
cmFkaXRpb25hbDsKKyAgICB9CisKKyAgICAvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBh
c3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgorICAgIGlmICggalF1
ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCgg
YSApICkgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCisgICAg
ICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGFkZCggdGhpcy5u
YW1lLCB0aGlzLnZhbHVlICk7CisgICAgICAgIH0gKTsKKworICAgIH0gZWxzZSB7CisKKyAgICAg
ICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4y
IG9yIG9sZGVyCisgICAgICAgIC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJl
Y3Vyc2l2ZWx5LgorICAgICAgICBmb3IgKCBwcmVmaXggaW4gYSApIHsKKyAgICAgICAgICAgIGJ1
aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9u
CisgICAgcmV0dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsKK307CisKK2pR
dWVyeS5mbi5leHRlbmQoIHsKKyAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKKyAgICB9LAorICAg
IHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBm
dW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgImVsZW1l
bnRzIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHMKKyAgICAgICAgICAgIHZhciBlbGVt
ZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCAiZWxlbWVudHMiICk7CisgICAgICAgICAgICByZXR1
cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpczsKKyAgICAg
ICAgfSApCisgICAgICAgIC5maWx0ZXIoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHR5
cGUgPSB0aGlzLnR5cGU7CisKKyAgICAgICAgICAgIC8vIFVzZSAuaXMoICI6ZGlzYWJsZWQiICkg
c28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3MKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Lm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCAiOmRpc2FibGVkIiApICYmCisgICAgICAgICAg
ICAgICAgcnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5
cGVzLnRlc3QoIHR5cGUgKSAmJgorICAgICAgICAgICAgICAgICggdGhpcy5jaGVja2VkIHx8ICFy
Y2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTsKKyAgICAgICAgfSApCisgICAgICAgIC5tYXAo
IGZ1bmN0aW9uKCBpLCBlbGVtICkgeworICAgICAgICAgICAgdmFyIHZhbCA9IGpRdWVyeSggdGhp
cyApLnZhbCgpOworCisgICAgICAgICAgICByZXR1cm4gdmFsID09IG51bGwgPworICAgICAgICAg
ICAgICAgIG51bGwgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/Cisg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZh
bC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKKyAgICAgICAgICAgICAgICAgICAgfSApIDoK
KyAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFj
ZSggckNSTEYsICJcclxuIiApIH07CisgICAgICAgIH0gKS5nZXQoKTsKKyAgICB9Cit9ICk7CisK
KworalF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHsKKyAgICB0cnkgeworICAg
ICAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOworICAgIH0gY2F0Y2ggKCBl
ICkge30KK307CisKK3ZhciB4aHJTdWNjZXNzU3RhdHVzID0geworCisgICAgICAgIC8vIEZpbGUg
cHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwCisgICAgICAg
IDA6IDIwMCwKKworICAgICAgICAvLyBTdXBwb3J0OiBJRTkKKyAgICAgICAgLy8gIzE0NTA6IHNv
bWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0CisgICAgICAgIDEy
MjM6IDIwNAorICAgIH0sCisgICAgeGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54
aHIoKTsKKworc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCAid2l0aENyZWRlbnRp
YWxzIiBpbiB4aHJTdXBwb3J0ZWQgKTsKK3N1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEh
eGhyU3VwcG9ydGVkOworCitqUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMg
KSB7CisgICAgdmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrOworCisgICAgLy8gQ3Jvc3MgZG9t
YWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAorICAg
IGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFp
biApIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFk
ZXJzLCBjb21wbGV0ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgaSwKKyAgICAgICAgICAgICAg
ICAgICAgeGhyID0gb3B0aW9ucy54aHIoKTsKKworICAgICAgICAgICAgICAgIHhoci5vcGVuKAor
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUsCisgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnMudXJsLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFzeW5jLAorICAgICAgICAg
ICAgICAgICAgICBvcHRpb25zLnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25z
LnBhc3N3b3JkCisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgIC8vIEFwcGx5
IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMu
eGhyRmllbGRzICkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpIGluIG9wdGlvbnMueGhy
RmllbGRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGhyWyBpIF0gPSBvcHRpb25zLnho
ckZpZWxkc1sgaSBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAorICAgICAg
ICAgICAgICAgIGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWlt
ZVR5cGUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBYLVJlcXVl
c3RlZC1XaXRoIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVx
dWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKKyAgICAgICAg
ICAgICAgICAvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBp
dCB0byBiZSBzdXJlLgorICAgICAgICAgICAgICAgIC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBv
biBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQorICAgICAgICAg
ICAgICAgIC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBp
ZiBhbHJlYWR5IHByb3ZpZGVkLgorICAgICAgICAgICAgICAgIGlmICggIW9wdGlvbnMuY3Jvc3NE
b21haW4gJiYgIWhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdICkgeworICAgICAgICAgICAg
ICAgICAgICBoZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gU2V0IGhlYWRlcnMKKyAg
ICAgICAgICAgICAgICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7CisgICAgICAgICAgICAgICAgICAg
IHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsYmFjaworICAgICAgICAgICAgICAgIGNhbGxi
YWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9u
bG9hZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0geGhy
Lm9uYWJvcnQgPSB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImFib3J0IiApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggdHlwZSA9PT0gImVycm9yIiApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRo
YXQgaXMgbm90IHJlYWR5U3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gIm51bWJlciIgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb21wbGV0ZSggMCwgImVycm9yIiApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcGxldGUoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMx
NDIwNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zdGF0dXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnN0YXR1c1RleHQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4
aHIuc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnN0YXR1
c1RleHQsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IElFOSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTkgaGFz
IG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxs
ZXIgaGFuZGxlIGl0IChnaC0yNDk4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCB4aHIucmVzcG9uc2VUeXBlIHx8ICJ0ZXh0IiApICE9PSAidGV4dCIgIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0g
InN0cmluZyIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYmlu
YXJ5OiB4aHIucmVzcG9uc2UgfSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIExpc3RlbiB0byBldmVudHMKKyAgICAgICAg
ICAgICAgICB4aHIub25sb2FkID0gY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICBlcnJvckNh
bGxiYWNrID0geGhyLm9uZXJyb3IgPSBjYWxsYmFjayggImVycm9yIiApOworCisgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydDogSUU5CisgICAgICAgICAgICAgICAgLy8gVXNlIG9ucmVhZHlzdGF0
ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnQKKyAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUg
dW5jYXVnaHQgYWJvcnRzCisgICAgICAgICAgICAgICAgaWYgKCB4aHIub25hYm9ydCAhPT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICB4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJh
Y2s7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgeGhyLm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5k
bGUgYSBuYXRpdmUgYWJvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbHNvLCBz
YXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrCisgICAg
ICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayggImFib3J0IiApOworCisgICAgICAgICAg
ICAgICAgdHJ5IHsKKworICAgICAgICAgICAgICAgICAgICAvLyBEbyBzZW5kIHRoZSByZXF1ZXN0
ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pCisgICAgICAgICAgICAgICAgICAgIHhoci5z
ZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTsKKyAgICAg
ICAgICAgICAgICB9IGNhdGNoICggZSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyAjMTQ2
ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9y
IHlldAorICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICB9Cit9ICk7CisKKworCisKKy8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCitqUXVlcnku
YWpheFNldHVwKCB7CisgICAgYWNjZXB0czogeworICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFz
Y3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsICIgKworICAgICAgICAgICAgImFwcGxpY2F0
aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKKyAgICB9LAorICAgIGNv
bnRlbnRzOiB7CisgICAgICAgIHNjcmlwdDogL1xiKD86amF2YXxlY21hKXNjcmlwdFxiLworICAg
IH0sCisgICAgY29udmVydGVyczogeworICAgICAgICAidGV4dCBzY3JpcHQiOiBmdW5jdGlvbigg
dGV4dCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7CisgICAgICAg
ICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgfQorICAgIH0KK30gKTsKKworLy8gSGFuZGxlIGNh
Y2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpbgoralF1ZXJ5LmFqYXhQcmVmaWx0ZXIo
ICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKKyAgICBpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgcy5jYWNoZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIHMuY3Jvc3NE
b21haW4gKSB7CisgICAgICAgIHMudHlwZSA9ICJHRVQiOworICAgIH0KK30gKTsKKworLy8gQmlu
ZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0CitqUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlw
dCIsIGZ1bmN0aW9uKCBzICkgeworCisgICAgLy8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3
aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0cworICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKKyAg
ICAgICAgdmFyIHNjcmlwdCwgY2FsbGJhY2s7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICBzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7CisgICAgICAgICAgICAgICAgc2NyaXB0
ID0galF1ZXJ5KCAiPHNjcmlwdD4iICkucHJvcCggeworICAgICAgICAgICAgICAgICAgICBjaGFy
c2V0OiBzLnNjcmlwdENoYXJzZXQsCisgICAgICAgICAgICAgICAgICAgIHNyYzogcy51cmwKKyAg
ICAgICAgICAgICAgICB9ICkub24oCisgICAgICAgICAgICAgICAgICAgICJsb2FkIGVycm9yIiwK
KyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgc2NyaXB0LnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldnQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoIGV2dC50eXBlID09PSAiZXJy
b3IiID8gNDA0IDogMjAwLCBldnQudHlwZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAg
ICAgIC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAg
QUpBWCB0cmlja2VyeQorICAgICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQo
IHNjcmlwdFsgMCBdICk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgIH0KK30gKTsKKworCisKKwordmFyIG9sZENhbGxiYWNrcyA9IFtdLAorICAg
IHJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy87CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGlu
Z3MKK2pRdWVyeS5hamF4U2V0dXAoIHsKKyAgICBqc29ucDogImNhbGxiYWNrIiwKKyAgICBqc29u
cENhbGxiYWNrOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJh
Y2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSApOworICAg
ICAgICB0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrOwor
ICAgIH0KK30gKTsKKworLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBj
YWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCitqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24g
anNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7CisKKyAgICB2
YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsCisgICAgICAg
IGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/
CisgICAgICAgICAgICAidXJsIiA6CisgICAgICAgICAgICB0eXBlb2Ygcy5kYXRhID09PSAic3Ry
aW5nIiAmJgorICAgICAgICAgICAgICAgICggcy5jb250ZW50VHlwZSB8fCAiIiApCisgICAgICAg
ICAgICAgICAgICAgIC5pbmRleE9mKCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk
IiApID09PSAwICYmCisgICAgICAgICAgICAgICAgcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJk
YXRhIgorICAgICAgICApOworCisgICAgLy8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0
eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXQKKyAgICBpZiAoIGpz
b25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgKSB7CisKKyAgICAgICAgLy8g
R2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0
ZWQgd2l0aCBpdAorICAgICAgICBjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVl
cnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPworICAgICAgICAgICAgcy5qc29ucENh
bGxiYWNrKCkgOgorICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrOworCisgICAgICAgIC8vIElu
c2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEKKyAgICAgICAgaWYgKCBqc29uUHJv
cCApIHsKKyAgICAgICAgICAgIHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2Uo
IHJqc29ucCwgIiQxIiArIGNhbGxiYWNrTmFtZSApOworICAgICAgICB9IGVsc2UgaWYgKCBzLmpz
b25wICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMu
dXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBh
ZnRlciBzY3JpcHQgZXhlY3V0aW9uCisgICAgICAgIHMuY29udmVydGVyc1sgInNjcmlwdCBqc29u
IiBdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5lciAp
IHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5v
dCBjYWxsZWQiICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VD
b250YWluZXJbIDAgXTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBGb3JjZSBqc29uIGRhdGFU
eXBlCisgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CisKKyAgICAgICAgLy8gSW5z
dGFsbCBjYWxsYmFjaworICAgICAgICBvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1l
IF07CisgICAgICAgIHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzOworICAgICAgICB9OworCisgICAg
ICAgIC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQorICAgICAg
ICBqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBJZiBwcmV2aW91
cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXQKKyAgICAgICAgICAgIGlmICggb3Zlcndy
aXR0ZW4gPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyAp
LnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApOworCisgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
cmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFNhdmUgYmFjayBhcyBmcmVlCisgICAgICAgICAgICBpZiAo
IHNbIGNhbGxiYWNrTmFtZSBdICkgeworCisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kCisgICAg
ICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxi
YWNrOworCisgICAgICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0
dXJlIHVzZQorICAgICAgICAgICAgICAgIG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUg
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5j
dGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisgICAgICAgICAgICBpZiAoIHJlc3BvbnNlQ29u
dGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkgeworICAgICAgICAg
ICAgICAgIG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRl
ZmluZWQ7CisgICAgICAgIH0gKTsKKworICAgICAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKKyAg
ICAgICAgcmV0dXJuICJzY3JpcHQiOworICAgIH0KK30gKTsKKworCisKKworLy8gQXJndW1lbnQg
ImRhdGEiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbAorLy8gY29udGV4dCAob3B0aW9uYWwpOiBJ
ZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0
LAorLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnQKKy8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElm
IHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmcKK2pR
dWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7
CisgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH0KKyAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAiYm9vbGVh
biIgKSB7CisgICAgICAgIGtlZXBTY3JpcHRzID0gY29udGV4dDsKKyAgICAgICAgY29udGV4dCA9
IGZhbHNlOworICAgIH0KKyAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworICAg
IHZhciBwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKSwKKyAgICAgICAgc2NyaXB0cyA9
ICFrZWVwU2NyaXB0cyAmJiBbXTsKKworICAgIC8vIFNpbmdsZSB0YWcKKyAgICBpZiAoIHBhcnNl
ZCApIHsKKyAgICAgICAgcmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEg
XSApIF07CisgICAgfQorCisgICAgcGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNv
bnRleHQsIHNjcmlwdHMgKTsKKworICAgIGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCAp
IHsKKyAgICAgICAgalF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7CisgICAgfQorCisgICAgcmV0
dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7Cit9OworCisKKy8vIEtl
ZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKK3ZhciBfbG9hZCA9IGpRdWVyeS5mbi5s
b2FkOworCisvKioKKyAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2UKKyAqLworalF1ZXJ5LmZuLmxv
YWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgeworICAgIGlmICggdHlwZW9m
IHVybCAhPT0gInN0cmluZyIgJiYgX2xvYWQgKSB7CisgICAgICAgIHJldHVybiBfbG9hZC5hcHBs
eSggdGhpcywgYXJndW1lbnRzICk7CisgICAgfQorCisgICAgdmFyIHNlbGVjdG9yLCB0eXBlLCBy
ZXNwb25zZSwKKyAgICAgICAgc2VsZiA9IHRoaXMsCisgICAgICAgIG9mZiA9IHVybC5pbmRleE9m
KCAiICIgKTsKKworICAgIGlmICggb2ZmID4gLTEgKSB7CisgICAgICAgIHNlbGVjdG9yID0galF1
ZXJ5LnRyaW0oIHVybC5zbGljZSggb2ZmICkgKTsKKyAgICAgICAgdXJsID0gdXJsLnNsaWNlKCAw
LCBvZmYgKTsKKyAgICB9CisKKyAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24KKyAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworICAgICAgICAvLyBXZSBhc3N1bWUgdGhh
dCBpdCdzIHRoZSBjYWxsYmFjaworICAgICAgICBjYWxsYmFjayA9IHBhcmFtczsKKyAgICAgICAg
cGFyYW1zID0gdW5kZWZpbmVkOworCisgICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0
cmluZworICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0
IiApIHsKKyAgICAgICAgdHlwZSA9ICJQT1NUIjsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZl
IGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdAorICAgIGlmICggc2VsZi5sZW5n
dGggPiAwICkgeworICAgICAgICBqUXVlcnkuYWpheCggeworICAgICAgICAgICAgdXJsOiB1cmws
CisKKyAgICAgICAgICAgIC8vIElmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4g
IkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZC4KKyAgICAgICAgICAgIC8vIE1ha2UgdmFsdWUgb2Yg
dGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZQorICAgICAgICAgICAgLy8gdXNlciBjYW4gb3ZlcnJp
ZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kCisgICAgICAgICAgICB0eXBlOiB0eXBlIHx8
ICJHRVQiLAorICAgICAgICAgICAgZGF0YVR5cGU6ICJodG1sIiwKKyAgICAgICAgICAgIGRhdGE6
IHBhcmFtcworICAgICAgICB9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHsKKwor
ICAgICAgICAgICAgLy8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNr
CisgICAgICAgICAgICByZXNwb25zZSA9IGFyZ3VtZW50czsKKworICAgICAgICAgICAgc2VsZi5o
dG1sKCBzZWxlY3RvciA/CisKKyAgICAgICAgICAgICAgICAvLyBJZiBhIHNlbGVjdG9yIHdhcyBz
cGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXYKKyAgICAg
ICAgICAgICAgICAvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVu
aWVkJyBlcnJvcnMKKyAgICAgICAgICAgICAgICBqUXVlcnkoICI8ZGl2PiIgKS5hcHBlbmQoIGpR
dWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6CisKKyAg
ICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdAorICAgICAgICAg
ICAgICAgIHJlc3BvbnNlVGV4dCApOworCisgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IHN1Y2Nl
ZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImRhdGEiLCAic3RhdHVzIiwgImpxWEhSIgorICAgICAg
ICAvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUu
CisgICAgICAgIC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImpxWEhSIiwgInN0
YXR1cyIsICJlcnJvciIKKyAgICAgICAgfSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24o
IGpxWEhSLCBzdGF0dXMgKSB7CisgICAgICAgICAgICBzZWxmLmVhY2goIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhS
LnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7CisgICAgICAgICAgICB9ICk7CisgICAg
ICAgIH0gKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsKK307CisKKworCisKKy8vIEF0dGFj
aCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCitq
UXVlcnkuZWFjaCggWworICAgICJhamF4U3RhcnQiLAorICAgICJhamF4U3RvcCIsCisgICAgImFq
YXhDb21wbGV0ZSIsCisgICAgImFqYXhFcnJvciIsCisgICAgImFqYXhTdWNjZXNzIiwKKyAgICAi
YWpheFNlbmQiCitdLCBmdW5jdGlvbiggaSwgdHlwZSApIHsKKyAgICBqUXVlcnkuZm5bIHR5cGUg
XSA9IGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7
CisgICAgfTsKK30gKTsKKworCisKKworalF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgIHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywg
ZnVuY3Rpb24oIGZuICkgeworICAgICAgICByZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKKyAgICB9
ICkubGVuZ3RoOworfTsKKworCisKKworLyoqCisgKiBHZXRzIGEgd2luZG93IGZyb20gYW4gZWxl
bWVudAorICovCitmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7CisgICAgcmV0dXJuIGpRdWVy
eS5pc1dpbmRvdyggZWxlbSApID8gZWxlbSA6IGVsZW0ubm9kZVR5cGUgPT09IDkgJiYgZWxlbS5k
ZWZhdWx0VmlldzsKK30KKworalF1ZXJ5Lm9mZnNldCA9IHsKKyAgICBzZXRPZmZzZXQ6IGZ1bmN0
aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworICAgICAgICB2YXIgY3VyUG9zaXRpb24sIGN1ckxl
ZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBv
c2l0aW9uLAorICAgICAgICAgICAgcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRp
b24iICksCisgICAgICAgICAgICBjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCisgICAgICAgICAg
ICBwcm9wcyA9IHt9OworCisgICAgICAgIC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0
b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KKyAgICAgICAgaWYgKCBwb3NpdGlv
biA9PT0gInN0YXRpYyIgKSB7CisgICAgICAgICAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gInJl
bGF0aXZlIjsKKyAgICAgICAgfQorCisgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0
KCk7CisgICAgICAgIGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICk7CisgICAg
ICAgIGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKTsKKyAgICAgICAgY2Fs
Y3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09
PSAiZml4ZWQiICkgJiYKKyAgICAgICAgICAgICggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmlu
ZGV4T2YoICJhdXRvIiApID4gLTE7CisKKyAgICAgICAgLy8gTmVlZCB0byBiZSBhYmxlIHRvIGNh
bGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIKKyAgICAgICAgLy8gdG9wIG9yIGxlZnQgaXMgYXV0
byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCisgICAgICAgIGlmICgg
Y2FsY3VsYXRlUG9zaXRpb24gKSB7CisgICAgICAgICAgICBjdXJQb3NpdGlvbiA9IGN1ckVsZW0u
cG9zaXRpb24oKTsKKyAgICAgICAgICAgIGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKKyAgICAg
ICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OworCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOworICAgICAg
ICAgICAgY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgeworCisgICAg
ICAgICAgICAvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBv
ZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OCkKKyAgICAgICAgICAgIG9wdGlvbnMgPSBv
cHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkgeworICAgICAg
ICAgICAgcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRv
cDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkgeworICAg
ICAgICAgICAgcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSAr
IGN1ckxlZnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyAp
IHsKKyAgICAgICAgICAgIG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsKKworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3BzICk7CisgICAgICAg
IH0KKyAgICB9Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgb2Zmc2V0OiBmdW5jdGlv
biggb3B0aW9ucyApIHsKKyAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgeworICAgICAg
ICAgICAgcmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgdGhp
cyA6CisgICAgICAgICAgICAgICAgdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsK
KyAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZG9jRWxlbSwg
d2luLAorICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXSwKKyAgICAgICAgICAgIGJveCA9IHsg
dG9wOiAwLCBsZWZ0OiAwIH0sCisgICAgICAgICAgICBkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJE
b2N1bWVudDsKKworICAgICAgICBpZiAoICFkb2MgKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKKworICAg
ICAgICAvLyBNYWtlIHN1cmUgaXQncyBub3QgYSBkaXNjb25uZWN0ZWQgRE9NIG5vZGUKKyAgICAg
ICAgaWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBlbGVtICkgKSB7CisgICAgICAgICAg
ICByZXR1cm4gYm94OworICAgICAgICB9CisKKyAgICAgICAgYm94ID0gZWxlbS5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKTsKKyAgICAgICAgd2luID0gZ2V0V2luZG93KCBkb2MgKTsKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHRvcDogYm94LnRvcCArIHdpbi5wYWdlWU9mZnNldCAtIGRv
Y0VsZW0uY2xpZW50VG9wLAorICAgICAgICAgICAgbGVmdDogYm94LmxlZnQgKyB3aW4ucGFnZVhP
ZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnQKKyAgICAgICAgfTsKKyAgICB9LAorCisgICAgcG9z
aXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoICF0aGlzWyAwIF0gKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgb2Zmc2V0UGFyZW50LCBvZmZz
ZXQsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdLAorICAgICAgICAgICAgcGFyZW50T2Zm
c2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKKworICAgICAgICAvLyBGaXhlZCBlbGVtZW50cyBh
cmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxlZnQ6IDB9LAor
ICAgICAgICAvLyBiZWNhdXNlIGl0IGlzIGl0cyBvbmx5IG9mZnNldCBwYXJlbnQKKyAgICAgICAg
aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICkgPT09ICJmaXhlZCIgKSB7CisKKyAg
ICAgICAgICAgIC8vIEFzc3VtZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdGhlcmUgd2hlbiBj
b21wdXRlZCBwb3NpdGlvbiBpcyBmaXhlZAorICAgICAgICAgICAgb2Zmc2V0ID0gZWxlbS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAv
LyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAorICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gdGhp
cy5vZmZzZXRQYXJlbnQoKTsKKworICAgICAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cwor
ICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKKyAgICAgICAgICAgIGlmICggIWpR
dWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sICJodG1sIiApICkgeworICAgICAgICAg
ICAgICAgIHBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCisgICAgICAgICAg
ICBwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9y
ZGVyVG9wV2lkdGgiLCB0cnVlICk7CisgICAgICAgICAgICBwYXJlbnRPZmZzZXQubGVmdCArPSBq
UXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgImJvcmRlckxlZnRXaWR0aCIsIHRydWUgKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVt
ZW50IG1hcmdpbnMKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHRvcDogb2Zmc2V0LnRv
cCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luVG9wIiwgdHJ1
ZSApLAorICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAt
IGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5MZWZ0IiwgdHJ1ZSApCisgICAgICAgIH07CisgICAg
fSwKKworICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0
aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhl
IGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4KKyAg
ICAvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3cKKyAgICAvLyAyKSBG
b3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50CisgICAgLy8gMykgRm9yIGJvZHkgb3Ig
aHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0
dXJuIGl0c2VsZgorICAgIC8vCisgICAgLy8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZl
ciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzCisgICAgLy8gYW5kIG1pZ2h0IGJl
IGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuCisgICAgLy8KKyAgICAvLyBU
aGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBh
bnkgcG9pbnQgaW4gdGhlIGZ1dHVyZQorICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgb2Zm
c2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7CisKKyAgICAgICAgICAgIHdoaWxlICggb2Zm
c2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgInBvc2l0aW9uIiApID09PSAi
c3RhdGljIiApIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQu
b2Zmc2V0UGFyZW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0
UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgfSApOworICAgIH0KK30gKTsKKwor
Ly8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCitqUXVlcnkuZWFjaCgg
eyBzY3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCIgfSwg
ZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKKyAgICB2YXIgdG9wID0gInBhZ2VZT2Zmc2V0IiA9
PT0gcHJvcDsKKworICAgIGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkgewor
ICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwg
KSB7CisgICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7CisKKyAgICAgICAg
ICAgIGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdp
biA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICggd2luICkgeworICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKKyAgICAg
ICAgICAgICAgICAgICAgIXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgdG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0CisgICAgICAgICAgICAgICAgKTsK
KworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXSA9
IHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5s
ZW5ndGggKTsKKyAgICB9OworfSApOworCisvLyBTdXBwb3J0OiBTYWZhcmk8Ny04KywgQ2hyb21l
PDM3LTQ0KworLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9z
aXRpb24KKy8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yOTA4NAorLy8gQmxpbmsgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9t
aXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MjgwCisvLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMg
cGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0OworLy8gcmF0
aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUs
IGp1c3QgY2hlY2sgZm9yIGl0IGhlcmUKK2pRdWVyeS5lYWNoKCBbICJ0b3AiLCAibGVmdCIgXSwg
ZnVuY3Rpb24oIGksIHByb3AgKSB7CisgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRH
ZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbiwKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0s
IGNvbXB1dGVkICkgeworICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAg
ICAgICBjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApOworCisgICAgICAgICAgICAgICAg
Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID8KKyAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgInB4IiA6Cisg
ICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgKTsKK30gKTsKKworCisvLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdo
dCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKK2pRdWVyeS5lYWNo
KCB7IEhlaWdodDogImhlaWdodCIsIFdpZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0
eXBlICkgeworICAgIGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6ICJpbm5lciIgKyBuYW1lLCBjb250
ZW50OiB0eXBlLCAiIjogIm91dGVyIiArIG5hbWUgfSwKKyAgICAgICAgZnVuY3Rpb24oIGRlZmF1
bHRFeHRyYSwgZnVuY05hbWUgKSB7CisKKyAgICAgICAgLy8gTWFyZ2luIGlzIG9ubHkgZm9yIG91
dGVySGVpZ2h0LCBvdXRlcldpZHRoCisgICAgICAgIGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1
bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIGNoYWluYWJsZSA9IGFy
Z3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJv
b2xlYW4iICksCisgICAgICAgICAgICAgICAgZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJn
aW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyAibWFyZ2luIiA6ICJib3JkZXIiICk7CisK
KyAgICAgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2
YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9jOworCisgICAgICAgICAgICAgICAgaWYg
KCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBB
cyBvZiA1LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmls
ZSBTYWZhcmksIGJ1dCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAvLyBpc24ndCBhIHdob2xl
IGxvdCB3ZSBjYW4gZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1c3Np
b246CisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1
ZXJ5L3B1bGwvNzY0CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF07CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodAorICAgICAgICAg
ICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRWl0
aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVu
dFtXaWR0aC9IZWlnaHRdLAorICAgICAgICAgICAgICAgICAgICAvLyB3aGljaGV2ZXIgaXMgZ3Jl
YXRlc3QKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KAorICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9jWyAic2Nyb2xsIiAr
IG5hbWUgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsgIm9mZnNldCIgKyBu
YW1lIF0sIGRvY1sgIm9mZnNldCIgKyBuYW1lIF0sCisgICAgICAgICAgICAgICAgICAgICAgICBk
b2NbICJjbGllbnQiICsgbmFtZSBdCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPwor
CisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1l
bnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXQKKyAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAorICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOworICAgICAg
ICAgICAgfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUs
IG51bGwgKTsKKyAgICAgICAgfTsKKyAgICB9ICk7Cit9ICk7CisKKworalF1ZXJ5LmZuLmV4dGVu
ZCggeworCisgICAgYmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOworICAgIH0sCisgICAgdW5i
aW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkgeworICAgICAgICByZXR1cm4gdGhpcy5vZmYoIHR5
cGVzLCBudWxsLCBmbiApOworICAgIH0sCisKKyAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVj
dG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywg
c2VsZWN0b3IsIGRhdGEsIGZuICk7CisgICAgfSwKKyAgICB1bmRlbGVnYXRlOiBmdW5jdGlvbigg
c2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKKworICAgICAgICAvLyAoIG5hbWVzcGFjZSApIG9yICgg
c2VsZWN0b3IsIHR5cGVzIFssIGZuXSApCisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3Ro
ID09PSAxID8KKyAgICAgICAgICAgIHRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDoKKyAgICAg
ICAgICAgIHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKyAgICB9LAor
ICAgIHNpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGg7CisgICAg
fQorfSApOworCitqUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrOworCisKKwor
CisvLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUg
Y29uY2F0ZW5hdGVkIHdpdGggb3RoZXIKKy8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1
dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXQKKy8vIHVuZGVyc3Rh
bmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0
IHJvYnVzdAorLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVj
YXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZQorLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFu
ZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlCisvLyBmaWxlIG5h
bWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBt
b2R1bGUgd2FudHMKKy8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBv
ZiBqUXVlcnksIGl0IHdpbGwgd29yay4KKworLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRh
YmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGQKKy8vIGRlY2xhcmUg
dGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9i
YWwgaWYgYW4KKy8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBj
YXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisvLyBodHRwczovL2dpdGh1Yi5jb20vanJi
dXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9u
CisKK2lmICggdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kICkgewor
ICAgIGRlZmluZSggImpxdWVyeSIsIFtdLCBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGpR
dWVyeTsKKyAgICB9ICk7Cit9CisKKworCit2YXIKKworICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBp
biBjYXNlIG9mIG92ZXJ3cml0ZQorICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAorCisgICAg
Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKKyAgICBfJCA9IHdpbmRvdy4k
OworCitqUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkgeworICAgIGlmICggd2lu
ZG93LiQgPT09IGpRdWVyeSApIHsKKyAgICAgICAgd2luZG93LiQgPSBfJDsKKyAgICB9CisKKyAg
ICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgeworICAgICAgICB3aW5k
b3cualF1ZXJ5ID0gX2pRdWVyeTsKKyAgICB9CisKKyAgICByZXR1cm4galF1ZXJ5OworfTsKKwor
Ly8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTUQKKy8vICgjNzEw
MiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1NykK
Ky8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NikKK2lmICggIW5v
R2xvYmFsICkgeworICAgIHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKK30KKwor
cmV0dXJuIGpRdWVyeTsKK30pKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0
L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkubWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5taW4uanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDAyNGI2NjIyYjg4OWJiNjU0NzYzNDFhNDhhNGU1YjY0ODViMTZiOQotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9q
cXVlcnkubWluLmpzCkBAIC0wLDAgKzEsNCBAQAorLyohIGpRdWVyeSB2Mi4yLjQgfCAoYykgalF1
ZXJ5IEZvdW5kYXRpb24gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKyFmdW5jdGlvbihhLGIpeyJv
YmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21v
ZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVu
dCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1l
bnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93
OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWEuZG9jdW1lbnQsZT1jLnNsaWNlLGY9Yy5j
b25jYXQsZz1jLnB1c2gsaD1jLmluZGV4T2YsaT17fSxqPWkudG9TdHJpbmcsaz1pLmhhc093blBy
b3BlcnR5LGw9e30sbT0iMi4yLjQiLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IG4uZm4uaW5p
dChhLGIpfSxvPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxwPS9eLW1zLS8s
cT0vLShbXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX07
bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3RydWN0b3I6bixzZWxlY3RvcjoiIixsZW5n
dGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9u
KGEpe3JldHVybiBudWxsIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06ZS5jYWxs
KHRoaXMpfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bi5tZXJnZSh0aGlzLmNvbnN0cnVj
dG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10aGlzLmNvbnRleHQs
Yn0sZWFjaDpmdW5jdGlvbihhKXtyZXR1cm4gbi5lYWNoKHRoaXMsYSl9LG1hcDpmdW5jdGlvbihh
KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBh
LmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhl
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEo
MCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3Zh
ciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0w
JiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVj
dHx8dGhpcy5jb25zdHJ1Y3RvcigpfSxwdXNoOmcsc29ydDpjLnNvcnQsc3BsaWNlOmMuc3BsaWNl
fSxuLmV4dGVuZD1uLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnPWFyZ3Vt
ZW50c1swXXx8e30saD0xLGk9YXJndW1lbnRzLmxlbmd0aCxqPSExO2ZvcigiYm9vbGVhbiI9PXR5
cGVvZiBnJiYoaj1nLGc9YXJndW1lbnRzW2hdfHx7fSxoKyspLCJvYmplY3QiPT10eXBlb2YgZ3x8
bi5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTtpPmg7aCsrKWlmKG51
bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2JdLGchPT1kJiYoaiYm
ZCYmKG4uaXNQbGFpbk9iamVjdChkKXx8KGU9bi5pc0FycmF5KGQpKSk/KGU/KGU9ITEsZj1jJiZu
LmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZuLmlzUGxhaW5PYmplY3QoYyk/Yzp7fSxnW2JdPW4uZXh0
ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxuLmV4dGVuZCh7ZXhw
YW5kbzoialF1ZXJ5IisobStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5
OiEwLGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhKX0sbm9vcDpmdW5jdGlvbigp
e30saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4iZnVuY3Rpb24iPT09bi50eXBlKGEpfSxp
c0FycmF5OkFycmF5LmlzQXJyYXksaXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEm
JmE9PT1hLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGEpe3ZhciBiPWEmJmEudG9TdHJpbmco
KTtyZXR1cm4hbi5pc0FycmF5KGEpJiZiLXBhcnNlRmxvYXQoYikrMT49MH0saXNQbGFpbk9iamVj
dDpmdW5jdGlvbihhKXt2YXIgYjtpZigib2JqZWN0IiE9PW4udHlwZShhKXx8YS5ub2RlVHlwZXx8
bi5pc1dpbmRvdyhhKSlyZXR1cm4hMTtpZihhLmNvbnN0cnVjdG9yJiYhay5jYWxsKGEsImNvbnN0
cnVjdG9yIikmJiFrLmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGV8fHt9LCJpc1Byb3RvdHlw
ZU9mIikpcmV0dXJuITE7Zm9yKGIgaW4gYSk7cmV0dXJuIHZvaWQgMD09PWJ8fGsuY2FsbChhLGIp
fSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2ZvcihiIGluIGEpcmV0dXJuITE7cmV0
dXJuITB9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2JqZWN0Ij09dHlw
ZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2lbai5jYWxsKGEpXXx8Im9iamVjdCI6dHlwZW9m
IGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYz1ldmFsO2E9bi50cmltKGEpLGEmJigx
PT09YS5pbmRleE9mKCJ1c2Ugc3RyaWN0Iik/KGI9ZC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxi
LnRleHQ9YSxkLmhlYWQuYXBwZW5kQ2hpbGQoYikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSk6
YyhhKSl9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHAsIm1zLSIpLnJl
cGxhY2UocSxyKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEs
Yil7dmFyIGMsZD0wO2lmKHMoYSkpe2ZvcihjPWEubGVuZ3RoO2M+ZDtkKyspaWYoYi5jYWxsKGFb
ZF0sZCxhW2RdKT09PSExKWJyZWFrfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFb
ZF0pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/
IiI6KGErIiIpLnJlcGxhY2UobywiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8
fFtdO3JldHVybiBudWxsIT1hJiYocyhPYmplY3QoYSkpP24ubWVyZ2UoYywic3RyaW5nIj09dHlw
ZW9mIGE/W2FdOmEpOmcuY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1
cm4gbnVsbD09Yj8tMTpoLmNhbGwoYixhLGMpfSxtZXJnZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIg
Yz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7Yz5kO2QrKylhW2UrK109YltkXTtyZXR1cm4gYS5s
ZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxl
bmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJu
IGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxnPTAsaD1bXTtpZihzKGEpKWZvcihkPWEu
bGVuZ3RoO2Q+ZztnKyspZT1iKGFbZ10sZyxjKSxudWxsIT1lJiZoLnB1c2goZSk7ZWxzZSBmb3Io
ZyBpbiBhKWU9YihhW2ddLGcsYyksbnVsbCE9ZSYmaC5wdXNoKGUpO3JldHVybiBmLmFwcGx5KFtd
LGgpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGY7cmV0dXJuInN0cmluZyI9
PXR5cGVvZiBiJiYoYz1hW2JdLGI9YSxhPWMpLG4uaXNGdW5jdGlvbihhKT8oZD1lLmNhbGwoYXJn
dW1lbnRzLDIpLGY9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShifHx0aGlzLGQuY29uY2F0KGUu
Y2FsbChhcmd1bWVudHMpKSl9LGYuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxuLmd1aWQrKyxmKTp2b2lk
IDB9LG5vdzpEYXRlLm5vdyxzdXBwb3J0Omx9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYo
bi5mbltTeW1ib2wuaXRlcmF0b3JdPWNbU3ltYm9sLml0ZXJhdG9yXSksbi5lYWNoKCJCb29sZWFu
IE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5
bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2lbIltvYmplY3QgIitiKyJdIl09Yi50b0xv
d2VyQ2FzZSgpfSk7ZnVuY3Rpb24gcyhhKXt2YXIgYj0hIWEmJiJsZW5ndGgiaW4gYSYmYS5sZW5n
dGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6ImFy
cmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9dmFyIHQ9
ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT0i
c2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2EoKSx6PWdhKCksQT1n
YSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPTE8PDMxLEQ9e30u
aGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNoLEg9RS5wdXNoLEk9RS5zbGljZSxK
PWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1i
KXJldHVybiBjO3JldHVybi0xfSxLPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xh
dXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBs
ZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTD0iW1xceDIwXFx0XFxyXFxuXFxmXSIs
TT0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLE49IlxcWyIrTCsiKigiK00rIiko
PzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigo
PzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitNKyIpKXwpIitMKyIqXFxdIixPPSI6KCIrTSsiKSg/
OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIp
fCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTisiKSopfC4qKVxcKXwpIixQPW5ldyBSZWdFeHAo
TCsiKyIsImciKSxRPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikq
KSIrTCsiKyQiLCJnIiksUj1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFM9bmV3IFJlZ0V4
cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxUPW5ldyBSZWdFeHAoIj0iK0wrIiooW15c
XF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFU9bmV3IFJlZ0V4cChPKSxWPW5ldyBSZWdFeHAoIl4i
K00rIiQiKSxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJe
XFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTSsifFsqXSkiKSxBVFRSOm5ldyBSZWdF
eHAoIl4iK04pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitPKSxDSElMRDpuZXcgUmVnRXhwKCJeOihv
bmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK0wrIioo
ZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0wrIiooPzooWystXXwpIitMKyIqKFxcZCspfCkp
IitMKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitLKyIpJCIsImkiKSxuZWVk
c0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTCsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRo
fGZpcnN0fGxhc3QpKD86XFwoIitMKyIqKCg/Oi1cXGQpP1xcZCopIitMKyIqXFwpfCkoPz1bXi1d
fCQpIiwiaSIpfSxYPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksWT0vXmhc
ZCQvaSxaPS9eW157XStce1xzKlxbbmF0aXZlIFx3LywkPS9eKD86IyhbXHctXSspfChcdyspfFwu
KFtcdy1dKykpJC8sXz0vWyt+XS8sYWE9Lyd8XFwvZyxiYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRh
LWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksY2E9ZnVuY3Rpb24oYSxiLGMpe3ZhciBk
PSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShk
KzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGRh
PWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hp
bGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlYSl7SD17YXBw
bHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24o
YSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0x
fX19ZnVuY3Rpb24gZmEoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3PWImJmIub3duZXJE
b2N1bWVudCx4PWI/Yi5ub2RlVHlwZTo5O2lmKGQ9ZHx8W10sInN0cmluZyIhPXR5cGVvZiBhfHwh
YXx8MSE9PXgmJjkhPT14JiYxMSE9PXgpcmV0dXJuIGQ7aWYoIWUmJigoYj9iLm93bmVyRG9jdW1l
bnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixwKSl7aWYoMTEhPT14JiYobz0kLmV4ZWMoYSkpKWlm
KGY9b1sxXSl7aWYoOT09PXgpe2lmKCEoaj1iLmdldEVsZW1lbnRCeUlkKGYpKSlyZXR1cm4gZDtp
ZihqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZSBpZih3JiYoaj13LmdldEVsZW1lbnRC
eUlkKGYpKSYmdChiLGopJiZqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZXtpZihvWzJd
KXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoZj1vWzNd
KSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0
dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZikpLGR9aWYoYy5xc2EmJiFB
W2ErIiAiXSYmKCFxfHwhcS50ZXN0KGEpKSl7aWYoMSE9PXgpdz1iLHM9YTtlbHNlIGlmKCJvYmpl
Y3QiIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXsoaz1iLmdldEF0dHJpYnV0ZSgiaWQiKSk/
az1rLnJlcGxhY2UoYWEsIlxcJCYiKTpiLnNldEF0dHJpYnV0ZSgiaWQiLGs9dSkscj1nKGEpLGg9
ci5sZW5ndGgsbD1WLnRlc3Qoayk/IiMiK2s6IltpZD0nIitrKyInXSI7d2hpbGUoaC0tKXJbaF09
bCsiICIrcWEocltoXSk7cz1yLmpvaW4oIiwiKSx3PV8udGVzdChhKSYmb2EoYi5wYXJlbnROb2Rl
KXx8Yn1pZihzKXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVlcnlTZWxlY3RvckFsbChzKSksZH1j
YXRjaCh5KXt9ZmluYWxseXtrPT09dSYmYi5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4g
aShhLnJlcGxhY2UoUSwiJDEiKSxiLGQsZSl9ZnVuY3Rpb24gZ2EoKXt2YXIgYT1bXTtmdW5jdGlv
biBiKGMsZSl7cmV0dXJuIGEucHVzaChjKyIgIik+ZC5jYWNoZUxlbmd0aCYmZGVsZXRlIGJbYS5z
aGlmdCgpXSxiW2MrIiAiXT1lfXJldHVybiBifWZ1bmN0aW9uIGhhKGEpe3JldHVybiBhW3VdPSEw
LGF9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJu
ISFhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yi5wYXJlbnROb2RlJiZiLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfX1mdW5jdGlvbiBqYShhLGIpe3ZhciBjPWEuc3BsaXQo
InwiKSxlPWMubGVuZ3RoO3doaWxlKGUtLSlkLmF0dHJIYW5kbGVbY1tlXV09Yn1mdW5jdGlvbiBr
YShhLGIpe3ZhciBjPWImJmEsZD1jJiYxPT09YS5ub2RlVHlwZSYmMT09PWIubm9kZVR5cGUmJih+
Yi5zb3VyY2VJbmRleHx8QyktKH5hLnNvdXJjZUluZGV4fHxDKTtpZihkKXJldHVybiBkO2lmKGMp
d2hpbGUoYz1jLm5leHRTaWJsaW5nKWlmKGM9PT1iKXJldHVybi0xO3JldHVybiBhPzE6LTF9ZnVu
Y3Rpb24gbGEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNh
c2UoKTtyZXR1cm4iaW5wdXQiPT09YyYmYi50eXBlPT09YX19ZnVuY3Rpb24gbWEoYSl7cmV0dXJu
IGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0
Ij09PWN8fCJidXR0b24iPT09YykmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBo
YShmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixoYShmdW5jdGlvbihjLGQpe3ZhciBlLGY9YShbXSxj
Lmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9ZltnXV0mJihjW2VdPSEoZFtlXT1j
W2VdKSl9KX0pfWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEu
Z2V0RWxlbWVudHNCeVRhZ05hbWUmJmF9Yz1mYS5zdXBwb3J0PXt9LGY9ZmEuaXNYTUw9ZnVuY3Rp
b24oYSl7dmFyIGI9YSYmKGEub3duZXJEb2N1bWVudHx8YSkuZG9jdW1lbnRFbGVtZW50O3JldHVy
biBiPyJIVE1MIiE9PWIubm9kZU5hbWU6ITF9LG09ZmEuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oYSl7
dmFyIGIsZSxnPWE/YS5vd25lckRvY3VtZW50fHxhOnY7cmV0dXJuIGchPT1uJiY5PT09Zy5ub2Rl
VHlwZSYmZy5kb2N1bWVudEVsZW1lbnQ/KG49ZyxvPW4uZG9jdW1lbnRFbGVtZW50LHA9IWYobiks
KGU9bi5kZWZhdWx0VmlldykmJmUudG9wIT09ZSYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2
ZW50TGlzdGVuZXIoInVubG9hZCIsZGEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQo
Im9udW5sb2FkIixkYSkpLGMuYXR0cmlidXRlcz1pYShmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFz
c05hbWU9ImkiLCFhLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxjLmdldEVsZW1lbnRzQnlU
YWdOYW1lPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKG4uY3JlYXRlQ29tbWVu
dCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksYy5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lPVoudGVzdChuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGMuZ2V0QnlJZD1p
YShmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFuLmdldEVsZW1lbnRz
QnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmlu
ZC5JRD1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50QnlJ
ZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYz9bY106W119fSxkLmZpbHRl
ci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpO3JldHVybiBmdW5jdGlvbihh
KXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQu
ZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSk7cmV0dXJuIGZ1bmN0
aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdl
dEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9
Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10
eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMu
cXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1b
XSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9Zltl
KytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5D
TEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuInVuZGVm
aW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnA/Yi5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT1aLnRlc3Qobi5xdWVyeVNlbGVj
dG9yQWxsKSkmJihpYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEg
aWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+
PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFs
bCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEucHVzaCgiWypeJF09IitMKyIqKD86
Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHEucHVz
aCgiXFxbIitMKyIqKD86dmFsdWV8IitLKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIr
dSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2Vk
IikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrdSsi
KyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGlhKGZ1bmN0aW9uKGEpe3ZhciBiPW4u
Y3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGEu
YXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGEucXVlcnlTZWxlY3RvckFs
bCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIrTCsiKlsqXiR8IX5dPz0iKSxhLnF1
ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxxLnB1c2goIjplbmFibGVkIiwiOmRp
c2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikscS5wdXNoKCIsLio6Iil9KSksKGMu
bWF0Y2hlc1NlbGVjdG9yPVoudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0
b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVz
U2VsZWN0b3IpKSYmaWEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSwi
ZGl2Iikscy5jYWxsKGEsIltzIT0nJ106eCIpLHIucHVzaCgiIT0iLE8pfSkscT1xLmxlbmd0aCYm
bmV3IFJlZ0V4cChxLmpvaW4oInwiKSkscj1yLmxlbmd0aCYmbmV3IFJlZ0V4cChyLmpvaW4oInwi
KSksYj1aLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksdD1ifHxaLnRlc3Qoby5jb250
YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVu
dDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8
fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2
JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxl
KGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxCPWI/ZnVuY3Rpb24o
YSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1
bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
KGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9
PT1kP2E9PT1ufHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYSk/LTE6Yj09PW58fGIub3duZXJE
b2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxiKTowOjQmZD8tMToxKX06ZnVuY3Rp
b24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBjLGQ9MCxlPWEucGFyZW50Tm9kZSxm
PWIucGFyZW50Tm9kZSxnPVthXSxoPVtiXTtpZighZXx8IWYpcmV0dXJuIGE9PT1uPy0xOmI9PT1u
PzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09PWYpcmV0dXJuIGthKGEsYik7Yz1h
O3doaWxlKGM9Yy5wYXJlbnROb2RlKWcudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5v
ZGUpaC51bnNoaWZ0KGMpO3doaWxlKGdbZF09PT1oW2RdKWQrKztyZXR1cm4gZD9rYShnW2RdLGhb
ZF0pOmdbZF09PT12Py0xOmhbZF09PT12PzE6MH0sbik6bn0sZmEubWF0Y2hlcz1mdW5jdGlvbihh
LGIpe3JldHVybiBmYShhLG51bGwsbnVsbCxiKX0sZmEubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9u
KGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFQsIj0n
JDEnXSIpLGMubWF0Y2hlc1NlbGVjdG9yJiZwJiYhQVtiKyIgIl0mJighcnx8IXIudGVzdChiKSkm
JighcXx8IXEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVj
dGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1j
YXRjaChlKXt9cmV0dXJuIGZhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGZhLmNvbnRhaW5zPWZ1
bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0s
ZmEuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIg
ZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUs
Yi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5h
dHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikp
JiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGZhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5l
dyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZmEu
dW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3RE
dXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUo
Yj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0s
MSl9cmV0dXJuIGs9bnVsbCxhfSxlPWZhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixk
PTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5n
Ij09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJz
dENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0
dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1m
YS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpoYSxtYXRjaDpXLGF0dHJI
YW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEw
fSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0
OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlv
bihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoYmEsY2EpLGFbM109KGFbM118fGFbNF18fGFb
NV18fCIiKS5yZXBsYWNlKGJhLGNhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxh
LnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNh
c2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8ZmEuZXJyb3IoYVswXSksYVs0XT0r
KGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1
XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZmEuZXJyb3IoYVswXSksYX0sUFNF
VURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFcuQ0hJTEQudGVzdChh
WzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVS50ZXN0KGMpJiYoYj1nKGMs
ITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0u
c2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFH
OmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4i
KiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1l
JiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9
eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQp
IikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xh
c3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYm
YS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1
cm4gZnVuY3Rpb24oZCl7dmFyIGU9ZmEuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1i
OmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUu
aW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGlj
ZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShQLCIgIikrIiAiKS5pbmRl
eE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjoh
MSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgw
LDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYm
MD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2
YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9
Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoLHQ9ITE7
aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtwXSlpZihoP20ubm9kZU5hbWUudG9M
b3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJuITE7bz1wPSJvbmx5Ij09PWEmJiFv
JiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKG89W2c/cS5maXJzdENoaWxkOnEubGFzdENoaWxk
XSxnJiZzKXttPXEsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1
ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biYmalsyXSxtPW4mJnEuY2hp
bGROb2Rlc1tuXTt3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigxPT09
bS5ub2RlVHlwZSYmKyt0JiZtPT09Yil7a1thXT1bdyxuLHRdO2JyZWFrfX1lbHNlIGlmKHMmJiht
PWIsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSks
aj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biksdD09PSExKXdoaWxlKG09KytuJiZtJiZt
W3BdfHwodD1uPTApfHxvLnBvcCgpKWlmKChoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6
MT09PW0ubm9kZVR5cGUpJiYrK3QmJihzJiYobD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVl
SURdfHwobFttLnVuaXF1ZUlEXT17fSksa1thXT1bdyx0XSksbT09PWIpKWJyZWFrO3JldHVybiB0
LT1lLHQ9PT1kfHx0JWQ9PT0wJiZ0L2Q+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGEsYil7dmFyIGMs
ZT1kLnBzZXVkb3NbYV18fGQuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldfHxmYS5lcnJvcigi
dW5zdXBwb3J0ZWQgcHNldWRvOiAiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1b
YSxhLCIiLGJdLGQuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpP2hh
KGZ1bmN0aW9uKGEsYyl7dmFyIGQsZj1lKGEsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pZD1KKGEs
ZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLDAsYyl9KTpl
fX0scHNldWRvczp7bm90OmhhKGZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9W10sZD1oKGEucmVwbGFj
ZShRLCIkMSIpKTtyZXR1cm4gZFt1XT9oYShmdW5jdGlvbihhLGIsYyxlKXt2YXIgZixnPWQoYSxu
dWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdbaF0pJiYoYVtoXT0hKGJbaF09Zikp
fSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChiLG51bGwsZixjKSxiWzBdPW51bGws
IWMucG9wKCl9fSksaGFzOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4g
ZmEoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYShmdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJl
cGxhY2UoYmEsY2EpLGZ1bmN0aW9uKGIpe3JldHVybihiLnRleHRDb250ZW50fHxiLmlubmVyVGV4
dHx8ZShiKSkuaW5kZXhPZihhKT4tMX19KSxsYW5nOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBWLnRl
c3QoYXx8IiIpfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIithKSxhPWEucmVwbGFjZShi
YSxjYSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXt2YXIgYztkbyBpZihjPXA/Yi5sYW5nOmIu
Z2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxiLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBj
PWMudG9Mb3dlckNhc2UoKSxjPT09YXx8MD09PWMuaW5kZXhPZihhKyItIik7d2hpbGUoKGI9Yi5w
YXJlbnROb2RlKSYmMT09PWIubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihi
KXt2YXIgYz1hLmxvY2F0aW9uJiZhLmxvY2F0aW9uLmhhc2g7cmV0dXJuIGMmJmMuc2xpY2UoMSk9
PT1iLmlkfSxyb290OmZ1bmN0aW9uKGEpe3JldHVybiBhPT09b30sZm9jdXM6ZnVuY3Rpb24oYSl7
cmV0dXJuIGE9PT1uLmFjdGl2ZUVsZW1lbnQmJighbi5oYXNGb2N1c3x8bi5oYXNGb2N1cygpKSYm
ISEoYS50eXBlfHxhLmhyZWZ8fH5hLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1
cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxl
ZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KTtyZXR1cm4iaW5wdXQiPT09YiYmISFhLmNoZWNrZWR8fCJvcHRpb24iPT09YiYmISFhLnNlbGVj
dGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5v
ZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2Zvcihh
PWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7
cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxo
ZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFkudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rp
b24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBi
PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmImJ1dHRvbiI9PT1h
LnR5cGV8fCJidXR0b24iPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4iaW5wdXQi
PT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1hLnR5cGUmJihudWxsPT0oYj1h
LmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09Yi50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6
bmEoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Om5hKGZ1bmN0aW9uKGEsYil7cmV0dXJuW2It
MV19KSxlcTpuYShmdW5jdGlvbihhLGIsYyl7cmV0dXJuWzA+Yz9jK2I6Y119KSxldmVuOm5hKGZ1
bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksb2Rk
Om5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBh
fSksbHQ6bmEoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7LS1kPj0wOylhLnB1
c2goZCk7cmV0dXJuIGF9KSxndDpuYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6
YzsrK2Q8YjspYS5wdXNoKGQpO3JldHVybiBhfSl9fSxkLnBzZXVkb3MubnRoPWQucHNldWRvcy5l
cTtmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdl
OiEwfSlkLnBzZXVkb3NbYl09bGEoYik7Zm9yKGIgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlkLnBz
ZXVkb3NbYl09bWEoYik7ZnVuY3Rpb24gcGEoKXt9cGEucHJvdG90eXBlPWQuZmlsdGVycz1kLnBz
ZXVkb3MsZC5zZXRGaWx0ZXJzPW5ldyBwYSxnPWZhLnRva2VuaXplPWZ1bmN0aW9uKGEsYil7dmFy
IGMsZSxmLGcsaCxpLGosaz16W2ErIiAiXTtpZihrKXJldHVybiBiPzA6ay5zbGljZSgwKTtoPWEs
aT1bXSxqPWQucHJlRmlsdGVyO3doaWxlKGgpe2MmJiEoZT1SLmV4ZWMoaCkpfHwoZSYmKGg9aC5z
bGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1TLmV4ZWMoaCkpJiYo
Yz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFEsIiAiKX0pLGg9
aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1XW2ddLmV4ZWMoaCkpfHxq
W2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1h
dGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVu
Z3RoOmg/ZmEuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiBxYShhKXtmb3IodmFy
IGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0
aW9uIHJhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0
dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlw
ZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGosaz1bdyxmXTtp
ZihnKXt3aGlsZShiPWJbZF0paWYoKDE9PT1iLm5vZGVUeXBlfHxlKSYmYShiLGMsZykpcmV0dXJu
ITB9ZWxzZSB3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpe2lmKGo9Ylt1XXx8KGJb
dV09e30pLGk9altiLnVuaXF1ZUlEXXx8KGpbYi51bmlxdWVJRF09e30pLChoPWlbZF0pJiZoWzBd
PT09dyYmaFsxXT09PWYpcmV0dXJuIGtbMl09aFsyXTtpZihpW2RdPWssa1syXT1hKGIsYyxnKSly
ZXR1cm4hMH19fWZ1bmN0aW9uIHNhKGEpe3JldHVybiBhLmxlbmd0aD4xP2Z1bmN0aW9uKGIsYyxk
KXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0paWYoIWFbZV0oYixjLGQpKXJldHVybiExO3JldHVy
biEwfTphWzBdfWZ1bmN0aW9uIHRhKGEsYixjKXtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2U+ZDtk
KyspZmEoYSxiW2RdLGMpO3JldHVybiBjfWZ1bmN0aW9uIHVhKGEsYixjLGQsZSl7Zm9yKHZhciBm
LGc9W10saD0wLGk9YS5sZW5ndGgsaj1udWxsIT1iO2k+aDtoKyspKGY9YVtoXSkmJihjJiYhYyhm
LGQsZSl8fChnLnB1c2goZiksaiYmYi5wdXNoKGgpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gdmEoYSxi
LGMsZCxlLGYpe3JldHVybiBkJiYhZFt1XSYmKGQ9dmEoZCkpLGUmJiFlW3VdJiYoZT12YShlLGYp
KSxoYShmdW5jdGlvbihmLGcsaCxpKXt2YXIgaixrLGwsbT1bXSxuPVtdLG89Zy5sZW5ndGgscD1m
fHx0YShifHwiKiIsaC5ub2RlVHlwZT9baF06aCxbXSkscT0hYXx8IWYmJmI/cDp1YShwLG0sYSxo
LGkpLHI9Yz9lfHwoZj9hOm98fGQpP1tdOmc6cTtpZihjJiZjKHEscixoLGkpLGQpe2o9dWEocixu
KSxkKGosW10saCxpKSxrPWoubGVuZ3RoO3doaWxlKGstLSkobD1qW2tdKSYmKHJbbltrXV09IShx
W25ba11dPWwpKX1pZihmKXtpZihlfHxhKXtpZihlKXtqPVtdLGs9ci5sZW5ndGg7d2hpbGUoay0t
KShsPXJba10pJiZqLnB1c2gocVtrXT1sKTtlKG51bGwscj1bXSxqLGkpfWs9ci5sZW5ndGg7d2hp
bGUoay0tKShsPXJba10pJiYoaj1lP0ooZixsKTptW2tdKT4tMSYmKGZbal09IShnW2pdPWwpKX19
ZWxzZSByPXVhKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTpI
LmFwcGx5KGcscil9KX1mdW5jdGlvbiB3YShhKXtmb3IodmFyIGIsYyxlLGY9YS5sZW5ndGgsZz1k
LnJlbGF0aXZlW2FbMF0udHlwZV0saD1nfHxkLnJlbGF0aXZlWyIgIl0saT1nPzE6MCxrPXJhKGZ1
bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saCwhMCksbD1yYShmdW5jdGlvbihhKXtyZXR1cm4gSihi
LGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7dmFyIGU9IWcmJihkfHxjIT09ail8fCgo
Yj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSk7cmV0dXJuIGI9bnVsbCxlfV07Zj5pO2kr
KylpZihjPWQucmVsYXRpdmVbYVtpXS50eXBlXSltPVtyYShzYShtKSxjKV07ZWxzZXtpZihjPWQu
ZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCxhW2ldLm1hdGNoZXMpLGNbdV0pe2ZvcihlPSsr
aTtmPmU7ZSsrKWlmKGQucmVsYXRpdmVbYVtlXS50eXBlXSlicmVhaztyZXR1cm4gdmEoaT4xJiZz
YShtKSxpPjEmJnFhKGEuc2xpY2UoMCxpLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09YVtpLTJdLnR5
cGU/IioiOiIifSkpLnJlcGxhY2UoUSwiJDEiKSxjLGU+aSYmd2EoYS5zbGljZShpLGUpKSxmPmUm
JndhKGE9YS5zbGljZShlKSksZj5lJiZxYShhKSl9bS5wdXNoKGMpfXJldHVybiBzYShtKX1mdW5j
dGlvbiB4YShhLGIpe3ZhciBjPWIubGVuZ3RoPjAsZT1hLmxlbmd0aD4wLGY9ZnVuY3Rpb24oZixn
LGgsaSxrKXt2YXIgbCxvLHEscj0wLHM9IjAiLHQ9ZiYmW10sdT1bXSx2PWoseD1mfHxlJiZkLmZp
bmQuVEFHKCIqIixrKSx5PXcrPW51bGw9PXY/MTpNYXRoLnJhbmRvbSgpfHwuMSx6PXgubGVuZ3Ro
O2ZvcihrJiYoaj1nPT09bnx8Z3x8ayk7cyE9PXomJm51bGwhPShsPXhbc10pO3MrKyl7aWYoZSYm
bCl7bz0wLGd8fGwub3duZXJEb2N1bWVudD09PW58fChtKGwpLGg9IXApO3doaWxlKHE9YVtvKytd
KWlmKHEobCxnfHxuLGgpKXtpLnB1c2gobCk7YnJlYWt9ayYmKHc9eSl9YyYmKChsPSFxJiZsKSYm
ci0tLGYmJnQucHVzaChsKSl9aWYocis9cyxjJiZzIT09cil7bz0wO3doaWxlKHE9YltvKytdKXEo
dCx1LGcsaCk7aWYoZil7aWYocj4wKXdoaWxlKHMtLSl0W3NdfHx1W3NdfHwodVtzXT1GLmNhbGwo
aSkpO3U9dWEodSl9SC5hcHBseShpLHUpLGsmJiFmJiZ1Lmxlbmd0aD4wJiZyK2IubGVuZ3RoPjEm
JmZhLnVuaXF1ZVNvcnQoaSl9cmV0dXJuIGsmJih3PXksaj12KSx0fTtyZXR1cm4gYz9oYShmKTpm
fXJldHVybiBoPWZhLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1BW2Er
IiAiXTtpZighZil7Ynx8KGI9ZyhhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj13YShiW2NdKSxm
W3VdP2QucHVzaChmKTplLnB1c2goZik7Zj1BKGEseGEoZSxkKSksZi5zZWxlY3Rvcj1hfXJldHVy
biBmfSxpPWZhLnNlbGVjdD1mdW5jdGlvbihhLGIsZSxmKXt2YXIgaSxqLGssbCxtLG49ImZ1bmN0
aW9uIj09dHlwZW9mIGEmJmEsbz0hZiYmZyhhPW4uc2VsZWN0b3J8fGEpO2lmKGU9ZXx8W10sMT09
PW8ubGVuZ3RoKXtpZihqPW9bMF09b1swXS5zbGljZSgwKSxqLmxlbmd0aD4yJiYiSUQiPT09KGs9
alswXSkudHlwZSYmYy5nZXRCeUlkJiY5PT09Yi5ub2RlVHlwZSYmcCYmZC5yZWxhdGl2ZVtqWzFd
LnR5cGVdKXtpZihiPShkLmZpbmQuSUQoay5tYXRjaGVzWzBdLnJlcGxhY2UoYmEsY2EpLGIpfHxb
XSlbMF0sIWIpcmV0dXJuIGU7biYmKGI9Yi5wYXJlbnROb2RlKSxhPWEuc2xpY2Uoai5zaGlmdCgp
LnZhbHVlLmxlbmd0aCl9aT1XLm5lZWRzQ29udGV4dC50ZXN0KGEpPzA6ai5sZW5ndGg7d2hpbGUo
aS0tKXtpZihrPWpbaV0sZC5yZWxhdGl2ZVtsPWsudHlwZV0pYnJlYWs7aWYoKG09ZC5maW5kW2xd
KSYmKGY9bShrLm1hdGNoZXNbMF0ucmVwbGFjZShiYSxjYSksXy50ZXN0KGpbMF0udHlwZSkmJm9h
KGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZxYShqKSwh
YSlyZXR1cm4gSC5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAs
ZSwhYnx8Xy50ZXN0KGEpJiZvYShiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5z
cGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCks
Yy5zb3J0RGV0YWNoZWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQ
b3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBh
LmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJp
YnV0ZSgiaHJlZiIpfSl8fGphKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIs
Yyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2Fz
ZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRN
TD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1h
LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGphKCJ2YWx1ZSIsZnVuY3Rpb24o
YSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQg
MDphLmRlZmF1bHRWYWx1ZX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJp
YnV0ZSgiZGlzYWJsZWQiKX0pfHxqYShLLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92
b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikp
JiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYX0oYSk7bi5maW5kPXQsbi5leHByPXQuc2Vs
ZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlU29ydD1uLnVuaXF1ZT10
LnVuaXF1ZVNvcnQsbi50ZXh0PXQuZ2V0VGV4dCxuLmlzWE1MRG9jPXQuaXNYTUwsbi5jb250YWlu
cz10LmNvbnRhaW5zO3ZhciB1PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPXZvaWQgMCE9PWM7
d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZu
KGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0sdj1mdW5jdGlvbihhLGIpe2Zvcih2
YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChh
KTtyZXR1cm4gY30sdz1uLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHg9L148KFtcdy1dKylccypc
Lz8+KD86PFwvXDE+fCkkLyx5PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24geihhLGIsYyl7aWYo
bi5pc0Z1bmN0aW9uKGIpKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5j
YWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihh
KXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih5LnRlc3QoYikp
cmV0dXJuIG4uZmlsdGVyKGIsYSxjKTtiPW4uZmlsdGVyKGIsYSl9cmV0dXJuIG4uZ3JlcChhLGZ1
bmN0aW9uKGEpe3JldHVybiBoLmNhbGwoYixhKT4tMSE9PWN9KX1uLmZpbHRlcj1mdW5jdGlvbihh
LGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3Ro
JiYxPT09ZC5ub2RlVHlwZT9uLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm4uZmlu
ZC5tYXRjaGVzKGEsbi5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkp
fSxuLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPXRoaXMubGVuZ3RoLGQ9W10s
ZT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobihhKS5m
aWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2M+YjtiKyspaWYobi5jb250YWlucyhlW2JdLHRoaXMp
KXJldHVybiEwfSkpO2ZvcihiPTA7Yz5iO2IrKyluLmZpbmQoYSxlW2JdLGQpO3JldHVybiBkPXRo
aXMucHVzaFN0YWNrKGM+MT9uLnVuaXF1ZShkKTpkKSxkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/
dGhpcy5zZWxlY3RvcisiICIrYTphLGR9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5w
dXNoU3RhY2soeih0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5w
dXNoU3RhY2soeih0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEheih0aGlz
LCJzdHJpbmciPT10eXBlb2YgYSYmdy50ZXN0KGEpP24oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2
YXIgQSxCPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sQz1uLmZuLmluaXQ9
ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYz1jfHxBLCJzdHJp
bmciPT10eXBlb2YgYSl7aWYoZT0iPCI9PT1hWzBdJiYiPiI9PT1hW2EubGVuZ3RoLTFdJiZhLmxl
bmd0aD49Mz9bbnVsbCxhLG51bGxdOkIuZXhlYyhhKSwhZXx8IWVbMV0mJmIpcmV0dXJuIWJ8fGIu
anF1ZXJ5PyhifHxjKS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihlWzFd
KXtpZihiPWIgaW5zdGFuY2VvZiBuP2JbMF06YixuLm1lcmdlKHRoaXMsbi5wYXJzZUhUTUwoZVsx
XSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8YjpkLCEwKSkseC50ZXN0KGVbMV0pJiZu
LmlzUGxhaW5PYmplY3QoYikpZm9yKGUgaW4gYiluLmlzRnVuY3Rpb24odGhpc1tlXSk/dGhpc1tl
XShiW2VdKTp0aGlzLmF0dHIoZSxiW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gZj1kLmdldEVsZW1l
bnRCeUlkKGVbMl0pLGYmJmYucGFyZW50Tm9kZSYmKHRoaXMubGVuZ3RoPTEsdGhpc1swXT1mKSx0
aGlzLmNvbnRleHQ9ZCx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhp
cy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXMpOm4uaXNGdW5jdGlvbihhKT92
b2lkIDAhPT1jLnJlYWR5P2MucmVhZHkoYSk6YShuKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRo
aXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxuLm1ha2VBcnJh
eShhLHRoaXMpKX07Qy5wcm90b3R5cGU9bi5mbixBPW4oZCk7dmFyIEQ9L14oPzpwYXJlbnRzfHBy
ZXYoPzpVbnRpbHxBbGwpKS8sRT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2
OiEwfTtuLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3ZhciBiPW4oYSx0aGlzKSxjPWIubGVu
Z3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2M+YTthKyspaWYo
bi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtm
b3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXcudGVzdChhKXx8InN0cmluZyIhPXR5
cGVvZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2RdO2MmJmMh
PT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09
PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVh
a31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9uLnVuaXF1ZVNvcnQoZik6Zil9LGlu
ZGV4OmZ1bmN0aW9uKGEpe3JldHVybiBhPyJzdHJpbmciPT10eXBlb2YgYT9oLmNhbGwobihhKSx0
aGlzWzBdKTpoLmNhbGwodGhpcyxhLmpxdWVyeT9hWzBdOmEpOnRoaXNbMF0mJnRoaXNbMF0ucGFy
ZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGEs
Yil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4udW5pcXVlU29ydChuLm1lcmdlKHRoaXMuZ2V0KCks
bihhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3Ro
aXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBGKGEs
Yil7d2hpbGUoKGE9YVtiXSkmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1uLmVhY2goe3BhcmVu
dDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlw
ZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHUoYSwicGFyZW50Tm9kZSIpfSxw
YXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB1KGEsInBhcmVudE5vZGUiLGMpfSxu
ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBGKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24o
YSl7cmV0dXJuIEYoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0
dXJuIHUoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJw
cmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLCJu
ZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHUoYSwicHJl
dmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIHYoKGEucGFyZW50
Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiB2KGEu
Zmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNvbnRlbnREb2N1bWVu
dHx8bi5tZXJnZShbXSxhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0
aW9uKGMsZCl7dmFyIGU9bi5tYXAodGhpcyxiLGMpO3JldHVybiJVbnRpbCIhPT1hLnNsaWNlKC01
KSYmKGQ9YyksZCYmInN0cmluZyI9PXR5cGVvZiBkJiYoZT1uLmZpbHRlcihkLGUpKSx0aGlzLmxl
bmd0aD4xJiYoRVthXXx8bi51bmlxdWVTb3J0KGUpLEQudGVzdChhKSYmZS5yZXZlcnNlKCkpLHRo
aXMucHVzaFN0YWNrKGUpfX0pO3ZhciBHPS9cUysvZztmdW5jdGlvbiBIKGEpe3ZhciBiPXt9O3Jl
dHVybiBuLmVhY2goYS5tYXRjaChHKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1uLkNh
bGxiYWNrcz1mdW5jdGlvbihhKXthPSJzdHJpbmciPT10eXBlb2YgYT9IKGEpOm4uZXh0ZW5kKHt9
LGEpO3ZhciBiLGMsZCxlLGY9W10sZz1bXSxoPS0xLGk9ZnVuY3Rpb24oKXtmb3IoZT1hLm9uY2Us
ZD1iPSEwO2cubGVuZ3RoO2g9LTEpe2M9Zy5zaGlmdCgpO3doaWxlKCsraDxmLmxlbmd0aClmW2hd
LmFwcGx5KGNbMF0sY1sxXSk9PT0hMSYmYS5zdG9wT25GYWxzZSYmKGg9Zi5sZW5ndGgsYz0hMSl9
YS5tZW1vcnl8fChjPSExKSxiPSExLGUmJihmPWM/W106IiIpfSxqPXthZGQ6ZnVuY3Rpb24oKXty
ZXR1cm4gZiYmKGMmJiFiJiYoaD1mLmxlbmd0aC0xLGcucHVzaChjKSksZnVuY3Rpb24gZChiKXtu
LmVhY2goYixmdW5jdGlvbihiLGMpe24uaXNGdW5jdGlvbihjKT9hLnVuaXF1ZSYmai5oYXMoYyl8
fGYucHVzaChjKTpjJiZjLmxlbmd0aCYmInN0cmluZyIhPT1uLnR5cGUoYykmJmQoYyl9KX0oYXJn
dW1lbnRzKSxjJiYhYiYmaSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5lYWNo
KGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxlKChjPW4uaW5BcnJheShiLGYsYykp
Pi0xKWYuc3BsaWNlKGMsMSksaD49YyYmaC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVy
biBhP24uaW5BcnJheShhLGYpPi0xOmYubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJu
IGYmJihmPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGU9Zz1bXSxmPWM9IiIs
dGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZn0sbG9jazpmdW5jdGlvbigpe3JldHVy
biBlPWc9W10sY3x8KGY9Yz0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFlfSxm
aXJlV2l0aDpmdW5jdGlvbihhLGMpe3JldHVybiBlfHwoYz1jfHxbXSxjPVthLGMuc2xpY2U/Yy5z
bGljZSgpOmNdLGcucHVzaChjKSxifHxpKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4g
ai5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4h
IWR9fTtyZXR1cm4gan0sbi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJl
c29sdmUiLCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJl
amVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90
aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLGM9InBlbmRpbmciLGQ9e3N0
YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUo
YXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFy
Z3VtZW50cztyZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihjKXtuLmVhY2goYixmdW5jdGlvbihi
LGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0aW9uKCl7dmFy
IGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/
YS5wcm9taXNlKCkucHJvZ3Jlc3MoYy5ub3RpZnkpLmRvbmUoYy5yZXNvbHZlKS5mYWlsKGMucmVq
ZWN0KTpjW2ZbMF0rIldpdGgiXSh0aGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3Vt
ZW50cyl9KX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4g
bnVsbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLG4uZWFj
aChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFk
ZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1d
PWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlswXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVu
dHMpLHRoaXN9LGVbZlswXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5j
YWxsKGUsZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZS5jYWxsKGFyZ3VtZW50cyks
ZD1jLmxlbmd0aCxmPTEhPT1kfHxhJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9kOjAsZz0xPT09
Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7Ylth
XT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0aD4xP2UuY2FsbChhcmd1bWVudHMpOmQsYz09PWk/
Zy5ub3RpZnlXaXRoKGIsYyk6LS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihkPjEp
Zm9yKGk9bmV3IEFycmF5KGQpLGo9bmV3IEFycmF5KGQpLGs9bmV3IEFycmF5KGQpO2Q+YjtiKysp
Y1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCkucHJvZ3Jlc3Mo
aChiLGosaSkpLmRvbmUoaChiLGssYykpLmZhaWwoZy5yZWplY3QpOi0tZjtyZXR1cm4gZnx8Zy5y
ZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0pO3ZhciBJO24uZm4ucmVhZHk9ZnVuY3Rpb24o
YSl7cmV0dXJuIG4ucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksdGhpc30sbi5leHRlbmQoe2lzUmVh
ZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bi5yZWFkeVdhaXQrKzpu
LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLW4ucmVhZHlXYWl0Om4uaXNS
ZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0PjB8fChJLnJlc29sdmVX
aXRoKGQsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYobihkKS50cmlnZ2VySGFuZGxlcigicmVh
ZHkiKSxuKGQpLm9mZigicmVhZHkiKSkpKX19KTtmdW5jdGlvbiBKKCl7ZC5yZW1vdmVFdmVudExp
c3RlbmVyKCJET01Db250ZW50TG9hZGVkIixKKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQi
LEopLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJuIEl8fChJPW4u
RGVmZXJyZWQoKSwiY29tcGxldGUiPT09ZC5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1kLnJlYWR5
U3RhdGUmJiFkLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9hLnNldFRpbWVvdXQobi5yZWFkeSk6
KGQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSiksYS5hZGRFdmVudExpc3Rl
bmVyKCJsb2FkIixKKSkpLEkucHJvbWlzZShiKX0sbi5yZWFkeS5wcm9taXNlKCk7dmFyIEs9ZnVu
Y3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVsbD09YztpZigib2Jq
ZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKUsoYSxiLGgsY1toXSwhMCxmLGcpfWVs
c2UgaWYodm9pZCAwIT09ZCYmKGU9ITAsbi5pc0Z1bmN0aW9uKGQpfHwoZz0hMCksaiYmKGc/KGIu
Y2FsbChhLGQpLGI9bnVsbCk6KGo9YixiPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gai5jYWxsKG4o
YSksYyl9KSksYikpZm9yKDtpPmg7aCsrKWIoYVtoXSxjLGc/ZDpkLmNhbGwoYVtoXSxoLGIoYVto
XSxjKSkpO3JldHVybiBlP2E6aj9iLmNhbGwoYSk6aT9iKGFbMF0sYyk6Zn0sTD1mdW5jdGlvbihh
KXtyZXR1cm4gMT09PWEubm9kZVR5cGV8fDk9PT1hLm5vZGVUeXBlfHwhK2Eubm9kZVR5cGV9O2Z1
bmN0aW9uIE0oKXt0aGlzLmV4cGFuZG89bi5leHBhbmRvK00udWlkKyt9TS51aWQ9MSxNLnByb3Rv
dHlwZT17cmVnaXN0ZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHx7fTtyZXR1cm4gYS5ub2RlVHlw
ZT9hW3RoaXMuZXhwYW5kb109YzpPYmplY3QuZGVmaW5lUHJvcGVydHkoYSx0aGlzLmV4cGFuZG8s
e3ZhbHVlOmMsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksYVt0aGlzLmV4cGFuZG9dfSxj
YWNoZTpmdW5jdGlvbihhKXtpZighTChhKSlyZXR1cm57fTt2YXIgYj1hW3RoaXMuZXhwYW5kb107
cmV0dXJuIGJ8fChiPXt9LEwoYSkmJihhLm5vZGVUeXBlP2FbdGhpcy5leHBhbmRvXT1iOk9iamVj
dC5kZWZpbmVQcm9wZXJ0eShhLHRoaXMuZXhwYW5kbyx7dmFsdWU6Yixjb25maWd1cmFibGU6ITB9
KSkpLGJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT10aGlzLmNhY2hlKGEpO2lmKCJzdHJp
bmciPT10eXBlb2YgYillW2JdPWM7ZWxzZSBmb3IoZCBpbiBiKWVbZF09YltkXTtyZXR1cm4gZX0s
Z2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/dGhpcy5jYWNoZShhKTphW3RoaXMu
ZXhwYW5kb10mJmFbdGhpcy5leHBhbmRvXVtiXX0sYWNjZXNzOmZ1bmN0aW9uKGEsYixjKXt2YXIg
ZDtyZXR1cm4gdm9pZCAwPT09Ynx8YiYmInN0cmluZyI9PXR5cGVvZiBiJiZ2b2lkIDA9PT1jPyhk
PXRoaXMuZ2V0KGEsYiksdm9pZCAwIT09ZD9kOnRoaXMuZ2V0KGEsbi5jYW1lbENhc2UoYikpKToo
dGhpcy5zZXQoYSxiLGMpLHZvaWQgMCE9PWM/YzpiKX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7dmFy
IGMsZCxlLGY9YVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PWYpe2lmKHZvaWQgMD09PWIpdGhp
cy5yZWdpc3RlcihhKTtlbHNle24uaXNBcnJheShiKT9kPWIuY29uY2F0KGIubWFwKG4uY2FtZWxD
YXNlKSk6KGU9bi5jYW1lbENhc2UoYiksYiBpbiBmP2Q9W2IsZV06KGQ9ZSxkPWQgaW4gZj9bZF06
ZC5tYXRjaChHKXx8W10pKSxjPWQubGVuZ3RoO3doaWxlKGMtLSlkZWxldGUgZltkW2NdXX0odm9p
ZCAwPT09Ynx8bi5pc0VtcHR5T2JqZWN0KGYpKSYmKGEubm9kZVR5cGU/YVt0aGlzLmV4cGFuZG9d
PXZvaWQgMDpkZWxldGUgYVt0aGlzLmV4cGFuZG9dKX19LGhhc0RhdGE6ZnVuY3Rpb24oYSl7dmFy
IGI9YVt0aGlzLmV4cGFuZG9dO3JldHVybiB2b2lkIDAhPT1iJiYhbi5pc0VtcHR5T2JqZWN0KGIp
fX07dmFyIE49bmV3IE0sTz1uZXcgTSxQPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8s
UT0vW0EtWl0vZztmdW5jdGlvbiBSKGEsYixjKXt2YXIgZDtpZih2b2lkIDA9PT1jJiYxPT09YS5u
b2RlVHlwZSlpZihkPSJkYXRhLSIrYi5yZXBsYWNlKFEsIi0kJiIpLnRvTG93ZXJDYXNlKCksYz1h
LmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6
ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpQLnRlc3QoYyk/bi5w
YXJzZUpTT04oYyk6YzsKK31jYXRjaChlKXt9Ty5zZXQoYSxiLGMpfWVsc2UgYz12b2lkIDA7cmV0
dXJuIGN9bi5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIE8uaGFzRGF0YShhKXx8
Ti5oYXNEYXRhKGEpfSxkYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTy5hY2Nlc3MoYSxiLGMp
fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7Ty5yZW1vdmUoYSxiKX0sX2RhdGE6ZnVuY3Rpb24o
YSxiLGMpe3JldHVybiBOLmFjY2VzcyhhLGIsYyl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7
Ti5yZW1vdmUoYSxiKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQs
ZSxmPXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhpcy5sZW5n
dGgmJihlPU8uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTi5nZXQoZiwiaGFzRGF0YUF0dHJzIikp
KXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1nW2NdLm5hbWUsMD09PWQuaW5kZXhPZigi
ZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2UoZC5zbGljZSg1KSksUihmLGQsZVtkXSkpKTtOLnNldChm
LCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhp
cy5lYWNoKGZ1bmN0aW9uKCl7Ty5zZXQodGhpcyxhKX0pOksodGhpcyxmdW5jdGlvbihiKXt2YXIg
YyxkO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9Ty5nZXQoZixhKXx8Ty5nZXQoZixhLnJlcGxhY2Uo
USwiLSQmIikudG9Mb3dlckNhc2UoKSksdm9pZCAwIT09YylyZXR1cm4gYztpZihkPW4uY2FtZWxD
YXNlKGEpLGM9Ty5nZXQoZixkKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9UihmLGQsdm9pZCAw
KSx2b2lkIDAhPT1jKXJldHVybiBjfWVsc2UgZD1uLmNhbWVsQ2FzZShhKSx0aGlzLmVhY2goZnVu
Y3Rpb24oKXt2YXIgYz1PLmdldCh0aGlzLGQpO08uc2V0KHRoaXMsZCxiKSxhLmluZGV4T2YoIi0i
KT4tMSYmdm9pZCAwIT09YyYmTy5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVu
Z3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbigpe08ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24o
YSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngiKSsicXVldWUiLGQ9Ti5nZXQoYSxiKSxj
JiYoIWR8fG4uaXNBcnJheShjKT9kPU4uYWNjZXNzKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNo
KGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBj
PW4ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhhLGIp
LGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlm
dCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5z
dG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVu
Y3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gTi5nZXQoYSxjKXx8Ti5hY2Nl
c3MoYSxjLHtlbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtO
LnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rp
b24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0t
KSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0
aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tz
KHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEp
fSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24uZGVx
dWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUo
YXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVk
KCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChm
LFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxl
KGctLSljPU4uZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5lbXB0
eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBTPS9bKy1dPyg/OlxkKlwu
fClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFQ9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18
KSgiK1MrIikoW2EteiVdKikkIiwiaSIpLFU9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQi
XSxWPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5
Iil8fCFuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX07ZnVuY3Rpb24gVyhhLGIsYyxkKXt2
YXIgZSxmPTEsZz0yMCxoPWQ/ZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXIoKX06ZnVuY3Rpb24oKXty
ZXR1cm4gbi5jc3MoYSxiLCIiKX0saT1oKCksaj1jJiZjWzNdfHwobi5jc3NOdW1iZXJbYl0/IiI6
InB4Iiksaz0obi5jc3NOdW1iZXJbYl18fCJweCIhPT1qJiYraSkmJlQuZXhlYyhuLmNzcyhhLGIp
KTtpZihrJiZrWzNdIT09ail7aj1qfHxrWzNdLGM9Y3x8W10saz0raXx8MTtkbyBmPWZ8fCIuNSIs
ay89ZixuLnN0eWxlKGEsYixrK2opO3doaWxlKGYhPT0oZj1oKCkvaSkmJjEhPT1mJiYtLWcpfXJl
dHVybiBjJiYoaz0ra3x8K2l8fDAsZT1jWzFdP2srKGNbMV0rMSkqY1syXTorY1syXSxkJiYoZC51
bml0PWosZC5zdGFydD1rLGQuZW5kPWUpKSxlfXZhciBYPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9p
LFk9LzwoW1x3Oi1dKykvLFo9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLCQ9e29wdGlvbjpb
MSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8
dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91
cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0
ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1
bHQ6WzAsIiIsIiJdfTskLm9wdGdyb3VwPSQub3B0aW9uLCQudGJvZHk9JC50Zm9vdD0kLmNvbGdy
b3VwPSQuY2FwdGlvbj0kLnRoZWFkLCQudGg9JC50ZDtmdW5jdGlvbiBfKGEsYil7dmFyIGM9InVu
ZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lP2EuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoYnx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbD9hLnF1
ZXJ5U2VsZWN0b3JBbGwoYnx8IioiKTpbXTtyZXR1cm4gdm9pZCAwPT09Ynx8YiYmbi5ub2RlTmFt
ZShhLGIpP24ubWVyZ2UoW2FdLGMpOmN9ZnVuY3Rpb24gYWEoYSxiKXtmb3IodmFyIGM9MCxkPWEu
bGVuZ3RoO2Q+YztjKyspTi5zZXQoYVtjXSwiZ2xvYmFsRXZhbCIsIWJ8fE4uZ2V0KGJbY10sImds
b2JhbEV2YWwiKSl9dmFyIGJhPS88fCYjP1x3KzsvO2Z1bmN0aW9uIGNhKGEsYixjLGQsZSl7Zm9y
KHZhciBmLGcsaCxpLGosayxsPWIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLG09W10sbz0wLHA9
YS5sZW5ndGg7cD5vO28rKylpZihmPWFbb10sZnx8MD09PWYpaWYoIm9iamVjdCI9PT1uLnR5cGUo
Zikpbi5tZXJnZShtLGYubm9kZVR5cGU/W2ZdOmYpO2Vsc2UgaWYoYmEudGVzdChmKSl7Zz1nfHxs
LmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudCgiZGl2IikpLGg9KFkuZXhlYyhmKXx8WyIiLCIi
XSlbMV0udG9Mb3dlckNhc2UoKSxpPSRbaF18fCQuX2RlZmF1bHQsZy5pbm5lckhUTUw9aVsxXStu
Lmh0bWxQcmVmaWx0ZXIoZikraVsyXSxrPWlbMF07d2hpbGUoay0tKWc9Zy5sYXN0Q2hpbGQ7bi5t
ZXJnZShtLGcuY2hpbGROb2RlcyksZz1sLmZpcnN0Q2hpbGQsZy50ZXh0Q29udGVudD0iIn1lbHNl
IG0ucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtsLnRleHRDb250ZW50PSIiLG89MDt3aGlsZShm
PW1bbysrXSlpZihkJiZuLmluQXJyYXkoZixkKT4tMSllJiZlLnB1c2goZik7ZWxzZSBpZihqPW4u
Y29udGFpbnMoZi5vd25lckRvY3VtZW50LGYpLGc9XyhsLmFwcGVuZENoaWxkKGYpLCJzY3JpcHQi
KSxqJiZhYShnKSxjKXtrPTA7d2hpbGUoZj1nW2srK10pWi50ZXN0KGYudHlwZXx8IiIpJiZjLnB1
c2goZil9cmV0dXJuIGx9IWZ1bmN0aW9uKCl7dmFyIGE9ZC5jcmVhdGVEb2N1bWVudEZyYWdtZW50
KCksYj1hLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpLGM9ZC5jcmVhdGVFbGVt
ZW50KCJpbnB1dCIpO2Muc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxjLnNldEF0dHJpYnV0
ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxjLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxiLmFwcGVu
ZENoaWxkKGMpLGwuY2hlY2tDbG9uZT1iLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0
Q2hpbGQuY2hlY2tlZCxiLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIsbC5ub0Ns
b25lQ2hlY2tlZD0hIWIuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlfSgpO3Zh
ciBkYT0vXmtleS8sZWE9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8
Y2xpY2svLGZhPS9eKFteLl0qKSg/OlwuKC4rKXwpLztmdW5jdGlvbiBnYSgpe3JldHVybiEwfWZ1
bmN0aW9uIGhhKCl7cmV0dXJuITF9ZnVuY3Rpb24gaWEoKXt0cnl7cmV0dXJuIGQuYWN0aXZlRWxl
bWVudH1jYXRjaChhKXt9fWZ1bmN0aW9uIGphKGEsYixjLGQsZSxmKXt2YXIgZyxoO2lmKCJvYmpl
Y3QiPT10eXBlb2YgYil7InN0cmluZyIhPXR5cGVvZiBjJiYoZD1kfHxjLGM9dm9pZCAwKTtmb3Io
aCBpbiBiKWphKGEsaCxjLGQsYltoXSxmKTtyZXR1cm4gYX1pZihudWxsPT1kJiZudWxsPT1lPyhl
PWMsZD1jPXZvaWQgMCk6bnVsbD09ZSYmKCJzdHJpbmciPT10eXBlb2YgYz8oZT1kLGQ9dm9pZCAw
KTooZT1kLGQ9YyxjPXZvaWQgMCkpLGU9PT0hMSllPWhhO2Vsc2UgaWYoIWUpcmV0dXJuIGE7cmV0
dXJuIDE9PT1mJiYoZz1lLGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG4oKS5vZmYoYSksZy5hcHBseSh0
aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1nLmd1aWR8fChnLmd1aWQ9bi5ndWlkKyspKSxhLmVhY2go
ZnVuY3Rpb24oKXtuLmV2ZW50LmFkZCh0aGlzLGIsZSxkLGMpfSl9bi5ldmVudD17Z2xvYmFsOnt9
LGFkZDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1OLmdl
dChhKTtpZihyKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRsZXIsZT1mLnNlbGVjdG9yKSxjLmd1
aWR8fChjLmd1aWQ9bi5ndWlkKyspLChpPXIuZXZlbnRzKXx8KGk9ci5ldmVudHM9e30pLChnPXIu
aGFuZGxlKXx8KGc9ci5oYW5kbGU9ZnVuY3Rpb24oYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVv
ZiBuJiZuLmV2ZW50LnRyaWdnZXJlZCE9PWIudHlwZT9uLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGEs
YXJndW1lbnRzKTp2b2lkIDB9KSxiPShifHwiIikubWF0Y2goRyl8fFsiIl0saj1iLmxlbmd0aDt3
aGlsZShqLS0paD1mYS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQo
Ii4iKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2wuZGVsZWdhdGVU
eXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxrPW4uZXh0ZW5kKHt0
eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUs
bmVlZHNDb250ZXh0OmUmJm4uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3Bh
Y2U6cC5qb2luKCIuIil9LGYpLChtPWlbb10pfHwobT1pW29dPVtdLG0uZGVsZWdhdGVDb3VudD0w
LGwuc2V0dXAmJmwuc2V0dXAuY2FsbChhLGQscCxnKSE9PSExfHxhLmFkZEV2ZW50TGlzdGVuZXIm
JmEuYWRkRXZlbnRMaXN0ZW5lcihvLGcpKSxsLmFkZCYmKGwuYWRkLmNhbGwoYSxrKSxrLmhhbmRs
ZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkpLGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNv
dW50KyssMCxrKTptLnB1c2goayksbi5ldmVudC5nbG9iYWxbb109ITApfX0scmVtb3ZlOmZ1bmN0
aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPU4uaGFzRGF0YShhKSYm
Ti5nZXQoYSk7aWYociYmKGk9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRyl8fFsiIl0saj1i
Lmxlbmd0aDt3aGlsZShqLS0paWYoaD1mYS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJd
fHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1uLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGQ/
bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbT1pW29dfHxbXSxoPWhbMl0mJm5ldyBSZWdF
eHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksZz1mPW0ubGVu
Z3RoO3doaWxlKGYtLSlrPW1bZl0sIWUmJnEhPT1rLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1rLmd1
aWR8fGgmJiFoLnRlc3Qoay5uYW1lc3BhY2UpfHxkJiZkIT09ay5zZWxlY3RvciYmKCIqKiIhPT1k
fHwhay5zZWxlY3Rvcil8fChtLnNwbGljZShmLDEpLGsuc2VsZWN0b3ImJm0uZGVsZWdhdGVDb3Vu
dC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsaykpO2cmJiFtLmxlbmd0aCYmKGwudGVhcmRv
d24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09ITF8fG4ucmVtb3ZlRXZlbnQoYSxv
LHIuaGFuZGxlKSxkZWxldGUgaVtvXSl9ZWxzZSBmb3IobyBpbiBpKW4uZXZlbnQucmVtb3ZlKGEs
bytiW2pdLGMsZCwhMCk7bi5pc0VtcHR5T2JqZWN0KGkpJiZOLnJlbW92ZShhLCJoYW5kbGUgZXZl
bnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXthPW4uZXZlbnQuZml4KGEpO3ZhciBiLGMsZCxm
LGcsaD1bXSxpPWUuY2FsbChhcmd1bWVudHMpLGo9KE4uZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlb
YS50eXBlXXx8W10saz1uLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVs
ZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMs
YSkhPT0hMSl7aD1uLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1o
W2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVt
LGM9MDt3aGlsZSgoZz1mLmhhbmRsZXJzW2MrK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9u
U3RvcHBlZCgpKWEucm5hbWVzcGFjZSYmIWEucm5hbWVzcGFjZS50ZXN0KGcubmFtZXNwYWNlKXx8
KGEuaGFuZGxlT2JqPWcsYS5kYXRhPWcuZGF0YSxkPSgobi5ldmVudC5zcGVjaWFsW2cub3JpZ1R5
cGVdfHx7fSkuaGFuZGxlfHxnLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1kJiYo
YS5yZXN1bHQ9ZCk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigp
KSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5y
ZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVn
YXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoImNsaWNrIiE9PWEudHlwZXx8
aXNOYU4oYS5idXR0b24pfHxhLmJ1dHRvbjwxKSlmb3IoO2khPT10aGlzO2k9aS5wYXJlbnROb2Rl
fHx0aGlzKWlmKDE9PT1pLm5vZGVUeXBlJiYoaS5kaXNhYmxlZCE9PSEwfHwiY2xpY2siIT09YS50
eXBlKSl7Zm9yKGQ9W10sYz0wO2g+YztjKyspZj1iW2NdLGU9Zi5zZWxlY3RvcisiICIsdm9pZCAw
PT09ZFtlXSYmKGRbZV09Zi5uZWVkc0NvbnRleHQ/bihlLHRoaXMpLmluZGV4KGkpPi0xOm4uZmlu
ZChlLHRoaXMsbnVsbCxbaV0pLmxlbmd0aCksZFtlXSYmZC5wdXNoKGYpO2QubGVuZ3RoJiZnLnB1
c2goe2VsZW06aSxoYW5kbGVyczpkfSl9cmV0dXJuIGg8Yi5sZW5ndGgmJmcucHVzaCh7ZWxlbTp0
aGlzLGhhbmRsZXJzOmIuc2xpY2UoaCl9KSxnfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2Vs
YWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWlsIGV2ZW50UGhhc2UgbWV0YUtleSByZWxh
dGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAi
KSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUi
LnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hpY2gmJihh
LndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhv
b2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0
WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRl
cjpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VY
JiZudWxsIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGQsZT1jLmRvY3Vt
ZW50RWxlbWVudCxmPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZSYmZS5zY3JvbGxMZWZ0fHxm
JiZmLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8fGYmJmYuY2xpZW50TGVmdHx8MCks
YS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxmJiZmLnNjcm9sbFRvcHx8MCktKGUm
JmUuY2xpZW50VG9wfHxmJiZmLmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWd8fChh
LndoaWNoPTEmZz8xOjImZz8zOjQmZz8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4
cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZSxmPWEudHlwZSxnPWEsaD10aGlzLmZpeEhvb2tzW2Zd
O2h8fCh0aGlzLmZpeEhvb2tzW2ZdPWg9ZWEudGVzdChmKT90aGlzLm1vdXNlSG9va3M6ZGEudGVz
dChmKT90aGlzLmtleUhvb2tzOnt9KSxlPWgucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoaC5wcm9w
cyk6dGhpcy5wcm9wcyxhPW5ldyBuLkV2ZW50KGcpLGI9ZS5sZW5ndGg7d2hpbGUoYi0tKWM9ZVti
XSxhW2NdPWdbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9ZCksMz09PWEudGFyZ2V0Lm5v
ZGVUeXBlJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksaC5maWx0ZXI/aC5maWx0ZXIo
YSxnKTphfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcyE9PWlhKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dm9p
ZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXM9PT1pYSgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVn
YXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiJjaGVj
a2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2smJm4ubm9kZU5hbWUodGhpcywiaW5wdXQiKT8o
dGhpcy5jbGljaygpLCExKTp2b2lkIDB9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe3JldHVybiBuLm5v
ZGVOYW1lKGEudGFyZ2V0LCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlv
bihhKXt2b2lkIDAhPT1hLnJlc3VsdCYmYS5vcmlnaW5hbEV2ZW50JiYoYS5vcmlnaW5hbEV2ZW50
LnJldHVyblZhbHVlPWEucmVzdWx0KX19fX0sbi5yZW1vdmVFdmVudD1mdW5jdGlvbihhLGIsYyl7
YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjKX0sbi5FdmVu
dD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbi5FdmVudD8oYSYmYS50eXBl
Pyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJl
dmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZh
LnJldHVyblZhbHVlPT09ITE/Z2E6aGEpOnRoaXMudHlwZT1hLGImJm4uZXh0ZW5kKHRoaXMsYiks
dGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG4ubm93KCksdm9pZCh0aGlzW24uZXhwYW5k
b109ITApKTpuZXcgbi5FdmVudChhLGIpfSxuLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6
bi5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6aGEsaXNQcm9wYWdhdGlvblN0b3BwZWQ6aGEsaXNJ
bW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6aGEsaXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1
bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2
ZW50ZWQ9Z2EsYSYmIXRoaXMuaXNTaW11bGF0ZWQmJmEucHJldmVudERlZmF1bHQoKX0sc3RvcFBy
b3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9w
YWdhdGlvblN0b3BwZWQ9Z2EsYSYmIXRoaXMuaXNTaW11bGF0ZWQmJmEuc3RvcFByb3BhZ2F0aW9u
KCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2lu
YWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPWdhLGEmJiF0aGlzLmlz
U2ltdWxhdGVkJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0
aW9uKCl9fSxuLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2Vv
dXQiLHBvaW50ZXJlbnRlcjoicG9pbnRlcm92ZXIiLHBvaW50ZXJsZWF2ZToicG9pbnRlcm91dCJ9
LGZ1bmN0aW9uKGEsYil7bi5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlw
ZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1h
LmhhbmRsZU9iajtyZXR1cm4gZSYmKGU9PT1kfHxuLmNvbnRhaW5zKGQsZSkpfHwoYS50eXBlPWYu
b3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19
KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGphKHRoaXMsYSxiLGMs
ZCl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gamEodGhpcyxhLGIsYyxkLDEpfSxvZmY6
ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVP
YmopcmV0dXJuIGQ9YS5oYW5kbGVPYmosbihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZC5uYW1lc3Bh
Y2U/ZC5vcmlnVHlwZSsiLiIrZC5uYW1lc3BhY2U6ZC5vcmlnVHlwZSxkLnNlbGVjdG9yLGQuaGFu
ZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGEpe2ZvcihlIGluIGEpdGhpcy5vZmYoZSxi
LGFbZV0pO3JldHVybiB0aGlzfXJldHVybiBiIT09ITEmJiJmdW5jdGlvbiIhPXR5cGVvZiBifHwo
Yz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWhhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50
LnJlbW92ZSh0aGlzLGEsYyxiKX0pfX0pO3ZhciBrYT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhy
fGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6LV0rKVtePl0qKVwvPi9naSxsYT0vPHNj
cmlwdHw8c3R5bGV8PGxpbmsvaSxtYT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikv
aSxuYT0vXnRydWVcLyguKikvLG9hPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0p
PlxzKiQvZztmdW5jdGlvbiBwYShhLGIpe3JldHVybiBuLm5vZGVOYW1lKGEsInRhYmxlIikmJm4u
bm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24gcWEoYSl7cmV0dXJuIGEudHlwZT0obnVs
bCE9PWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiByYShhKXt2
YXIgYj1uYS5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06YS5yZW1vdmVBdHRyaWJ1
dGUoInR5cGUiKSxhfWZ1bmN0aW9uIHNhKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09
Yi5ub2RlVHlwZSl7aWYoTi5oYXNEYXRhKGEpJiYoZj1OLmFjY2VzcyhhKSxnPU4uc2V0KGIsZiks
aj1mLmV2ZW50cykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihj
PTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKW4uZXZlbnQuYWRkKGIsZSxqW2VdW2NdKX1PLmhhc0Rh
dGEoYSkmJihoPU8uYWNjZXNzKGEpLGk9bi5leHRlbmQoe30saCksTy5zZXQoYixpKSl9fWZ1bmN0
aW9uIHRhKGEsYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1jJiZY
LnRlc3QoYS50eXBlKT9iLmNoZWNrZWQ9YS5jaGVja2VkOiJpbnB1dCIhPT1jJiYidGV4dGFyZWEi
IT09Y3x8KGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX1mdW5jdGlvbiB1YShhLGIsYyxk
KXtiPWYuYXBwbHkoW10sYik7dmFyIGUsZyxoLGksaixrLG09MCxvPWEubGVuZ3RoLHA9by0xLHE9
YlswXSxyPW4uaXNGdW5jdGlvbihxKTtpZihyfHxvPjEmJiJzdHJpbmciPT10eXBlb2YgcSYmIWwu
Y2hlY2tDbG9uZSYmbWEudGVzdChxKSlyZXR1cm4gYS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBmPWEu
ZXEoZSk7ciYmKGJbMF09cS5jYWxsKHRoaXMsZSxmLmh0bWwoKSkpLHVhKGYsYixjLGQpfSk7aWYo
byYmKGU9Y2EoYixhWzBdLm93bmVyRG9jdW1lbnQsITEsYSxkKSxnPWUuZmlyc3RDaGlsZCwxPT09
ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGU9ZyksZ3x8ZCkpe2ZvcihoPW4ubWFwKF8oZSwic2NyaXB0
IikscWEpLGk9aC5sZW5ndGg7bz5tO20rKylqPWUsbSE9PXAmJihqPW4uY2xvbmUoaiwhMCwhMCks
aSYmbi5tZXJnZShoLF8oaiwic2NyaXB0IikpKSxjLmNhbGwoYVttXSxqLG0pO2lmKGkpZm9yKGs9
aFtoLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG4ubWFwKGgscmEpLG09MDtpPm07bSsrKWo9aFtt
XSxaLnRlc3Qoai50eXBlfHwiIikmJiFOLmFjY2VzcyhqLCJnbG9iYWxFdmFsIikmJm4uY29udGFp
bnMoayxqKSYmKGouc3JjP24uX2V2YWxVcmwmJm4uX2V2YWxVcmwoai5zcmMpOm4uZ2xvYmFsRXZh
bChqLnRleHRDb250ZW50LnJlcGxhY2Uob2EsIiIpKSl9cmV0dXJuIGF9ZnVuY3Rpb24gdmEoYSxi
LGMpe2Zvcih2YXIgZCxlPWI/bi5maWx0ZXIoYixhKTphLGY9MDtudWxsIT0oZD1lW2ZdKTtmKysp
Y3x8MSE9PWQubm9kZVR5cGV8fG4uY2xlYW5EYXRhKF8oZCkpLGQucGFyZW50Tm9kZSYmKGMmJm4u
Y29udGFpbnMoZC5vd25lckRvY3VtZW50LGQpJiZhYShfKGQsInNjcmlwdCIpKSxkLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoZCkpO3JldHVybiBhfW4uZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0
aW9uKGEpe3JldHVybiBhLnJlcGxhY2Uoa2EsIjwkMT48LyQyPiIpfSxjbG9uZTpmdW5jdGlvbihh
LGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNsb25lTm9kZSghMCksaT1uLmNvbnRhaW5zKGEub3duZXJE
b2N1bWVudCxhKTtpZighKGwubm9DbG9uZUNoZWNrZWR8fDEhPT1hLm5vZGVUeXBlJiYxMSE9PWEu
bm9kZVR5cGV8fG4uaXNYTUxEb2MoYSkpKWZvcihnPV8oaCksZj1fKGEpLGQ9MCxlPWYubGVuZ3Ro
O2U+ZDtkKyspdGEoZltkXSxnW2RdKTtpZihiKWlmKGMpZm9yKGY9Znx8XyhhKSxnPWd8fF8oaCks
ZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKylzYShmW2RdLGdbZF0pO2Vsc2Ugc2EoYSxoKTtyZXR1cm4g
Zz1fKGgsInNjcmlwdCIpLGcubGVuZ3RoPjAmJmFhKGcsIWkmJl8oYSwic2NyaXB0IikpLGh9LGNs
ZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGU9bi5ldmVudC5zcGVjaWFsLGY9MDt2
b2lkIDAhPT0oYz1hW2ZdKTtmKyspaWYoTChjKSl7aWYoYj1jW04uZXhwYW5kb10pe2lmKGIuZXZl
bnRzKWZvcihkIGluIGIuZXZlbnRzKWVbZF0/bi5ldmVudC5yZW1vdmUoYyxkKTpuLnJlbW92ZUV2
ZW50KGMsZCxiLmhhbmRsZSk7Y1tOLmV4cGFuZG9dPXZvaWQgMH1jW08uZXhwYW5kb10mJihjW08u
ZXhwYW5kb109dm9pZCAwKX19fSksbi5mbi5leHRlbmQoe2RvbU1hbmlwOnVhLGRldGFjaDpmdW5j
dGlvbihhKXtyZXR1cm4gdmEodGhpcyxhLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe3JldHVybiB2
YSh0aGlzLGEpfSx0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBLKHRoaXMsZnVuY3Rpb24oYSl7cmV0
dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7
MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8
fCh0aGlzLnRleHRDb250ZW50PWEpfSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5k
OmZ1bmN0aW9uKCl7cmV0dXJuIHVhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10
aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIg
Yj1wYSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDEx
PT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXBhKHRoaXMsYSk7Yi5p
bnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4g
dWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVu
dE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdWEo
dGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5v
ZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtm
b3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKykxPT09YS5ub2RlVHlwZSYmKG4uY2xl
YW5EYXRhKF8oYSwhMSkpLGEudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5j
dGlvbihhLGIpe3JldHVybiBhPW51bGw9PWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1
bmN0aW9uKCl7cmV0dXJuIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0
dXJuIEsodGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxlbmd0
aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1cm4gYi5pbm5lckhUTUw7aWYoInN0
cmluZyI9PXR5cGVvZiBhJiYhbGEudGVzdChhKSYmISRbKFkuZXhlYyhhKXx8WyIiLCIiXSlbMV0u
dG9Mb3dlckNhc2UoKV0pe2E9bi5odG1sUHJlZmlsdGVyKGEpO3RyeXtmb3IoO2Q+YztjKyspYj10
aGlzW2NdfHx7fSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKF8oYiwhMSkpLGIuaW5uZXJI
VE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxh
cmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4g
dWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5wYXJlbnROb2RlO24uaW5B
cnJheSh0aGlzLGEpPDAmJihuLmNsZWFuRGF0YShfKHRoaXMpKSxjJiZjLnJlcGxhY2VDaGlsZChi
LHRoaXMpKX0sYSl9fSksbi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBl
bmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6
InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIg
YyxkPVtdLGU9bihhKSxmPWUubGVuZ3RoLTEsaD0wO2Y+PWg7aCsrKWM9aD09PWY/dGhpczp0aGlz
LmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGcuYXBwbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5w
dXNoU3RhY2soZCl9fSk7dmFyIHdhLHhhPXtIVE1MOiJibG9jayIsQk9EWToiYmxvY2sifTtmdW5j
dGlvbiB5YShhLGIpe3ZhciBjPW4oYi5jcmVhdGVFbGVtZW50KGEpKS5hcHBlbmRUbyhiLmJvZHkp
LGQ9bi5jc3MoY1swXSwiZGlzcGxheSIpO3JldHVybiBjLmRldGFjaCgpLGR9ZnVuY3Rpb24gemEo
YSl7dmFyIGI9ZCxjPXhhW2FdO3JldHVybiBjfHwoYz15YShhLGIpLCJub25lIiE9PWMmJmN8fCh3
YT0od2F8fG4oIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4i
KSkuYXBwZW5kVG8oYi5kb2N1bWVudEVsZW1lbnQpLGI9d2FbMF0uY29udGVudERvY3VtZW50LGIu
d3JpdGUoKSxiLmNsb3NlKCksYz15YShhLGIpLHdhLmRldGFjaCgpKSx4YVthXT1jKSxjfXZhciBB
YT0vXm1hcmdpbi8sQmE9bmV3IFJlZ0V4cCgiXigiK1MrIikoPyFweClbYS16JV0rJCIsImkiKSxD
YT1mdW5jdGlvbihiKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIGMm
JmMub3BlbmVyfHwoYz1hKSxjLmdldENvbXB1dGVkU3R5bGUoYil9LERhPWZ1bmN0aW9uKGEsYixj
LGQpe3ZhciBlLGYsZz17fTtmb3IoZiBpbiBiKWdbZl09YS5zdHlsZVtmXSxhLnN0eWxlW2ZdPWJb
Zl07ZT1jLmFwcGx5KGEsZHx8W10pO2ZvcihmIGluIGIpYS5zdHlsZVtmXT1nW2ZdO3JldHVybiBl
fSxFYT1kLmRvY3VtZW50RWxlbWVudDshZnVuY3Rpb24oKXt2YXIgYixjLGUsZixnPWQuY3JlYXRl
RWxlbWVudCgiZGl2IiksaD1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGguc3R5bGUpe2guc3R5
bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixoLmNsb25lTm9kZSghMCkuc3R5bGUuYmFj
a2dyb3VuZENsaXA9IiIsbC5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWguc3R5bGUu
YmFja2dyb3VuZENsaXAsZy5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0
OjA7dG9wOjA7bGVmdDotOTk5OXB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjph
YnNvbHV0ZSIsZy5hcHBlbmRDaGlsZChoKTtmdW5jdGlvbiBpKCl7aC5zdHlsZS5jc3NUZXh0PSIt
d2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDti
b3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttYXJn
aW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3RvcDoxJTt3aWR0aDo1MCUiLGguaW5uZXJI
VE1MPSIiLEVhLmFwcGVuZENoaWxkKGcpO3ZhciBkPWEuZ2V0Q29tcHV0ZWRTdHlsZShoKTtiPSIx
JSIhPT1kLnRvcCxmPSIycHgiPT09ZC5tYXJnaW5MZWZ0LGM9IjRweCI9PT1kLndpZHRoLGguc3R5
bGUubWFyZ2luUmlnaHQ9IjUwJSIsZT0iNHB4Ij09PWQubWFyZ2luUmlnaHQsRWEucmVtb3ZlQ2hp
bGQoZyl9bi5leHRlbmQobCx7cGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBpKCksYn0s
Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YyYmaSgpLGN9LHBpeGVs
TWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YyYmaSgpLGV9LHJlbGlhYmxlTWFy
Z2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1jJiZpKCksZn0scmVsaWFibGVNYXJnaW5S
aWdodDpmdW5jdGlvbigpe3ZhciBiLGM9aC5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoImRp
diIpKTtyZXR1cm4gYy5zdHlsZS5jc3NUZXh0PWguc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gt
c2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jaztt
YXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjAiLGMuc3R5bGUubWFyZ2luUmlnaHQ9Yy5zdHlsZS53
aWR0aD0iMCIsaC5zdHlsZS53aWR0aD0iMXB4IixFYS5hcHBlbmRDaGlsZChnKSxiPSFwYXJzZUZs
b2F0KGEuZ2V0Q29tcHV0ZWRTdHlsZShjKS5tYXJnaW5SaWdodCksRWEucmVtb3ZlQ2hpbGQoZyks
aC5yZW1vdmVDaGlsZChjKSxifX0pfX0oKTtmdW5jdGlvbiBGYShhLGIsYyl7dmFyIGQsZSxmLGcs
aD1hLnN0eWxlO3JldHVybiBjPWN8fENhKGEpLGc9Yz9jLmdldFByb3BlcnR5VmFsdWUoYil8fGNb
Yl06dm9pZCAwLCIiIT09ZyYmdm9pZCAwIT09Z3x8bi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQs
YSl8fChnPW4uc3R5bGUoYSxiKSksYyYmIWwucGl4ZWxNYXJnaW5SaWdodCgpJiZCYS50ZXN0KGcp
JiZBYS50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5X
aWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9
ZSxoLm1heFdpZHRoPWYpLHZvaWQgMCE9PWc/ZysiIjpnfWZ1bmN0aW9uIEdhKGEsYil7cmV0dXJu
e2dldDpmdW5jdGlvbigpe3JldHVybiBhKCk/dm9pZCBkZWxldGUgdGhpcy5nZXQ6KHRoaXMuZ2V0
PWIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXZhciBIYT0vXihub25lfHRhYmxlKD8hLWNbZWFd
KS4rKS8sSWE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5
OiJibG9jayJ9LEphPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifSxLYT1bIldl
YmtpdCIsIk8iLCJNb3oiLCJtcyJdLExhPWQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGU7ZnVu
Y3Rpb24gTWEoYSl7aWYoYSBpbiBMYSlyZXR1cm4gYTt2YXIgYj1hWzBdLnRvVXBwZXJDYXNlKCkr
YS5zbGljZSgxKSxjPUthLmxlbmd0aDt3aGlsZShjLS0paWYoYT1LYVtjXStiLGEgaW4gTGEpcmV0
dXJuIGF9ZnVuY3Rpb24gTmEoYSxiLGMpe3ZhciBkPVQuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1h
eCgwLGRbMl0tKGN8fDApKSsoZFszXXx8InB4Iik6Yn1mdW5jdGlvbiBPYShhLGIsYyxkLGUpe2Zv
cih2YXIgZj1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT1iPzE6MCxnPTA7
ND5mO2YrPTIpIm1hcmdpbiI9PT1jJiYoZys9bi5jc3MoYSxjK1VbZl0sITAsZSkpLGQ/KCJjb250
ZW50Ij09PWMmJihnLT1uLmNzcyhhLCJwYWRkaW5nIitVW2ZdLCEwLGUpKSwibWFyZ2luIiE9PWMm
JihnLT1uLmNzcyhhLCJib3JkZXIiK1VbZl0rIldpZHRoIiwhMCxlKSkpOihnKz1uLmNzcyhhLCJw
YWRkaW5nIitVW2ZdLCEwLGUpLCJwYWRkaW5nIiE9PWMmJihnKz1uLmNzcyhhLCJib3JkZXIiK1Vb
Zl0rIldpZHRoIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIFBhKGEsYixjKXt2YXIgZD0hMCxl
PSJ3aWR0aCI9PT1iP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHQsZj1DYShhKSxnPSJib3Jk
ZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYo
ZT1GYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLEJhLnRlc3QoZSkpcmV0
dXJuIGU7ZD1nJiYobC5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJz
ZUZsb2F0KGUpfHwwfXJldHVybiBlK09hKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQs
ZikrInB4In1mdW5jdGlvbiBRYShhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0
aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1OLmdldChkLCJvbGRkaXNwbGF5IiksYz1k
LnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiks
IiI9PT1kLnN0eWxlLmRpc3BsYXkmJlYoZCkmJihmW2ddPU4uYWNjZXNzKGQsIm9sZGRpc3BsYXki
LHphKGQubm9kZU5hbWUpKSkpOihlPVYoZCksIm5vbmUiPT09YyYmZXx8Ti5zZXQoZCwib2xkZGlz
cGxheSIsZT9jOm4uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQu
c3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkmJiIiIT09ZC5zdHlsZS5kaXNwbGF5
fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGF9bi5leHRlbmQo
e2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1GYShhLCJv
cGFjaXR5Iik7cmV0dXJuIiI9PT1jPyIxIjpjfX19fSxjc3NOdW1iZXI6e2FuaW1hdGlvbkl0ZXJh
dGlvbkNvdW50OiEwLGNvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZs
ZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6
ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxv
YXQiOiJjc3NGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGEmJjMhPT1hLm5vZGVU
eXBlJiY4IT09YS5ub2RlVHlwZSYmYS5zdHlsZSl7dmFyIGUsZixnLGg9bi5jYW1lbENhc2UoYiks
aT1hLnN0eWxlO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPU1hKGgpfHxo
KSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sdm9pZCAwPT09Yz9nJiYiZ2V0ImluIGcm
JnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXTooZj10eXBlb2YgYywic3RyaW5nIj09
PWYmJihlPVQuZXhlYyhjKSkmJmVbMV0mJihjPVcoYSxiLGUpLGY9Im51bWJlciIpLG51bGwhPWMm
JmM9PT1jJiYoIm51bWJlciI9PT1mJiYoYys9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2hdPyIiOiJw
eCIpKSxsLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09Yi5pbmRleE9mKCJiYWNrZ3JvdW5k
Iil8fChpW2JdPSJpbmhlcml0IiksZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMs
ZCkpfHwoaVtiXT1jKSksdm9pZCAwKX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcs
aD1uLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1N
YShoKXx8aCksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLGcmJiJnZXQiaW4gZyYmKGU9
Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZSYmKGU9RmEoYSxiLGQpKSwibm9ybWFsIj09PWUmJmIg
aW4gSmEmJihlPUphW2JdKSwiIj09PWN8fGM/KGY9cGFyc2VGbG9hdChlKSxjPT09ITB8fGlzRmlu
aXRlKGYpP2Z8fDA6ZSk6ZX19KSxuLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEs
Yil7bi5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYz9IYS50ZXN0KG4u
Y3NzKGEsImRpc3BsYXkiKSkmJjA9PT1hLm9mZnNldFdpZHRoP0RhKGEsSWEsZnVuY3Rpb24oKXty
ZXR1cm4gUGEoYSxiLGQpfSk6UGEoYSxiLGQpOnZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYyxkKXt2
YXIgZSxmPWQmJkNhKGEpLGc9ZCYmT2EoYSxiLGQsImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94
U2l6aW5nIiwhMSxmKSxmKTtyZXR1cm4gZyYmKGU9VC5leGVjKGMpKSYmInB4IiE9PShlWzNdfHwi
cHgiKSYmKGEuc3R5bGVbYl09YyxjPW4uY3NzKGEsYikpLE5hKGEsYyxnKX19fSksbi5jc3NIb29r
cy5tYXJnaW5MZWZ0PUdhKGwucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGEsYil7cmV0dXJu
IGI/KHBhcnNlRmxvYXQoRmEoYSwibWFyZ2luTGVmdCIpKXx8YS5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS5sZWZ0LURhKGEse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCI6dm9pZCAwfSksbi5jc3NIb29rcy5tYXJnaW5S
aWdodD1HYShsLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9EYShh
LHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxGYSxbYSwibWFyZ2luUmlnaHQiXSk6dm9pZCAwfSks
bi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxi
KXtuLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9
InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErVVtkXStiXT1m
W2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxBYS50ZXN0KGEpfHwobi5jc3NIb29rc1thK2Jd
LnNldD1OYSl9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEsodGhpcyxm
dW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihuLmlzQXJyYXkoYikpe2ZvcihkPUNh
KGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4g
Zn1yZXR1cm4gdm9pZCAwIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1l
bnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBRYSh0aGlzLCEwKX0saGlkZTpm
dW5jdGlvbigpe3JldHVybiBRYSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVybiJib29s
ZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rp
b24oKXtWKHRoaXMpP24odGhpcykuc2hvdygpOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24g
UmEoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IFJhLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5U
d2Vlbj1SYSxSYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJhLGluaXQ6ZnVuY3Rpb24oYSxiLGMs
ZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fG4uZWFzaW5nLl9k
ZWZhdWx0LHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlz
LmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlv
bigpe3ZhciBhPVJhLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0
aGlzKTpSYS5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFy
IGIsYz1SYS5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9u
P3RoaXMucG9zPWI9bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9u
KmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlz
LmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0
aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRo
aXMpOlJhLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LFJhLnByb3RvdHlwZS5p
bml0LnByb3RvdHlwZT1SYS5wcm90b3R5cGUsUmEucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1
bmN0aW9uKGEpe3ZhciBiO3JldHVybiAxIT09YS5lbGVtLm5vZGVUeXBlfHxudWxsIT1hLmVsZW1b
YS5wcm9wXSYmbnVsbD09YS5lbGVtLnN0eWxlW2EucHJvcF0/YS5lbGVtW2EucHJvcF06KGI9bi5j
c3MoYS5lbGVtLGEucHJvcCwiIiksYiYmImF1dG8iIT09Yj9iOjApfSxzZXQ6ZnVuY3Rpb24oYSl7
bi5meC5zdGVwW2EucHJvcF0/bi5meC5zdGVwW2EucHJvcF0oYSk6MSE9PWEuZWxlbS5ub2RlVHlw
ZXx8bnVsbD09YS5lbGVtLnN0eWxlW24uY3NzUHJvcHNbYS5wcm9wXV0mJiFuLmNzc0hvb2tzW2Eu
cHJvcF0/YS5lbGVtW2EucHJvcF09YS5ub3c6bi5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2Eu
dW5pdCl9fX0sUmEucHJvcEhvb2tzLnNjcm9sbFRvcD1SYS5wcm9wSG9va3Muc2Nyb2xsTGVmdD17
c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVs
ZW1bYS5wcm9wXT1hLm5vdyl9fSxuLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBh
fSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9LF9kZWZh
dWx0OiJzd2luZyJ9LG4uZng9UmEucHJvdG90eXBlLmluaXQsbi5meC5zdGVwPXt9O3ZhciBTYSxU
YSxVYT0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sVmE9L3F1ZXVlSG9va3MkLztmdW5jdGlvbiBX
YSgpe3JldHVybiBhLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtTYT12b2lkIDB9KSxTYT1uLm5vdygp
fWZ1bmN0aW9uIFhhKGEsYil7dmFyIGMsZD0wLGU9e2hlaWdodDphfTtmb3IoYj1iPzE6MDs0PmQ7
ZCs9Mi1iKWM9VVtkXSxlWyJtYXJnaW4iK2NdPWVbInBhZGRpbmciK2NdPWE7cmV0dXJuIGImJihl
Lm9wYWNpdHk9ZS53aWR0aD1hKSxlfWZ1bmN0aW9uIFlhKGEsYixjKXtmb3IodmFyIGQsZT0oX2Eu
dHdlZW5lcnNbYl18fFtdKS5jb25jYXQoX2EudHdlZW5lcnNbIioiXSksZj0wLGc9ZS5sZW5ndGg7
Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJuIGR9ZnVuY3Rpb24gWmEoYSxiLGMp
e3ZhciBkLGUsZixnLGgsaSxqLGssbD10aGlzLG09e30sbz1hLnN0eWxlLHA9YS5ub2RlVHlwZSYm
VihhKSxxPU4uZ2V0KGEsImZ4c2hvdyIpO2MucXVldWV8fChoPW4uX3F1ZXVlSG9va3MoYSwiZngi
KSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHku
ZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxsLmFsd2F5cyhm
dW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLG4ucXVldWUoYSwiZngi
KS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEubm9kZVR5cGUmJigiaGVpZ2h0Imlu
IGJ8fCJ3aWR0aCJpbiBiKSYmKGMub3ZlcmZsb3c9W28ub3ZlcmZsb3csby5vdmVyZmxvd1gsby5v
dmVyZmxvd1ldLGo9bi5jc3MoYSwiZGlzcGxheSIpLGs9Im5vbmUiPT09aj9OLmdldChhLCJvbGRk
aXNwbGF5Iil8fHphKGEubm9kZU5hbWUpOmosImlubGluZSI9PT1rJiYibm9uZSI9PT1uLmNzcyhh
LCJmbG9hdCIpJiYoby5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksYy5vdmVyZmxvdyYmKG8ub3Zl
cmZsb3c9ImhpZGRlbiIsbC5hbHdheXMoZnVuY3Rpb24oKXtvLm92ZXJmbG93PWMub3ZlcmZsb3db
MF0sby5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxvLm92ZXJmbG93WT1jLm92ZXJmbG93WzJdfSkp
O2ZvcihkIGluIGIpaWYoZT1iW2RdLFVhLmV4ZWMoZSkpe2lmKGRlbGV0ZSBiW2RdLGY9Znx8InRv
Z2dsZSI9PT1lLGU9PT0ocD8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09ZXx8IXF8fHZvaWQg
MD09PXFbZF0pY29udGludWU7cD0hMH1tW2RdPXEmJnFbZF18fG4uc3R5bGUoYSxkKX1lbHNlIGo9
dm9pZCAwO2lmKG4uaXNFbXB0eU9iamVjdChtKSkiaW5saW5lIj09PSgibm9uZSI9PT1qP3phKGEu
bm9kZU5hbWUpOmopJiYoby5kaXNwbGF5PWopO2Vsc2V7cT8iaGlkZGVuImluIHEmJihwPXEuaGlk
ZGVuKTpxPU4uYWNjZXNzKGEsImZ4c2hvdyIse30pLGYmJihxLmhpZGRlbj0hcCkscD9uKGEpLnNo
b3coKTpsLmRvbmUoZnVuY3Rpb24oKXtuKGEpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3Zh
ciBiO04ucmVtb3ZlKGEsImZ4c2hvdyIpO2ZvcihiIGluIG0pbi5zdHlsZShhLGIsbVtiXSl9KTtm
b3IoZCBpbiBtKWc9WWEocD9xW2RdOjAsZCxsKSxkIGluIHF8fChxW2RdPWcuc3RhcnQscCYmKGcu
ZW5kPWcuc3RhcnQsZy5zdGFydD0id2lkdGgiPT09ZHx8ImhlaWdodCI9PT1kPzE6MCkpfX1mdW5j
dGlvbiAkYShhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4gYSlpZihkPW4uY2FtZWxDYXNlKGMp
LGU9YltkXSxmPWFbY10sbi5pc0FycmF5KGYpJiYoZT1mWzFdLGY9YVtjXT1mWzBdKSxjIT09ZCYm
KGFbZF09ZixkZWxldGUgYVtjXSksZz1uLmNzc0hvb2tzW2RdLGcmJiJleHBhbmQiaW4gZyl7Zj1n
LmV4cGFuZChmKSxkZWxldGUgYVtkXTtmb3IoYyBpbiBmKWMgaW4gYXx8KGFbY109ZltjXSxiW2Nd
PWUpfWVsc2UgYltkXT1lfWZ1bmN0aW9uIF9hKGEsYixjKXt2YXIgZCxlLGY9MCxnPV9hLnByZWZp
bHRlcnMubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVs
ZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9U2F8fFdhKCksYz1NYXRo
Lm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQs
Zz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBo
Lm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEp
fSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5kKHt9LGIpLG9wdHM6bi5leHRlbmQo
ITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOm4uZWFzaW5nLl9kZWZhdWx0fSxjKSxvcmlnaW5h
bFByb3BlcnRpZXM6YixvcmlnaW5hbE9wdGlvbnM6YyxzdGFydFRpbWU6U2F8fFdhKCksZHVyYXRp
b246Yy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oYixjKXt2YXIgZD1u
LlR3ZWVuKGEsai5vcHRzLGIsYyxqLm9wdHMuc3BlY2lhbEVhc2luZ1tiXXx8ai5vcHRzLmVhc2lu
Zyk7cmV0dXJuIGoudHdlZW5zLnB1c2goZCksZH0sc3RvcDpmdW5jdGlvbihiKXt2YXIgYz0wLGQ9
Yj9qLnR3ZWVucy5sZW5ndGg6MDtpZihlKXJldHVybiB0aGlzO2ZvcihlPSEwO2Q+YztjKyspai50
d2VlbnNbY10ucnVuKDEpO3JldHVybiBiPyhoLm5vdGlmeVdpdGgoYSxbaiwxLDBdKSxoLnJlc29s
dmVXaXRoKGEsW2osYl0pKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7
Zm9yKCRhKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1fYS5wcmVmaWx0ZXJz
W2ZdLmNhbGwoaixhLGssai5vcHRzKSlyZXR1cm4gbi5pc0Z1bmN0aW9uKGQuc3RvcCkmJihuLl9x
dWV1ZUhvb2tzKGouZWxlbSxqLm9wdHMucXVldWUpLnN0b3A9bi5wcm94eShkLnN0b3AsZCkpLGQ7
cmV0dXJuIG4ubWFwKGssWWEsaiksbi5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5z
dGFydC5jYWxsKGEsaiksbi5meC50aW1lcihuLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVl
Omoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMu
ZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3
YXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChfYSx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oYSxi
KXt2YXIgYz10aGlzLmNyZWF0ZVR3ZWVuKGEsYik7cmV0dXJuIFcoYy5lbGVtLGEsVC5leGVjKGIp
LGMpLGN9XX0sdHdlZW5lcjpmdW5jdGlvbihhLGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIq
Il0pOmE9YS5tYXRjaChHKTtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyljPWFbZF0s
X2EudHdlZW5lcnNbY109X2EudHdlZW5lcnNbY118fFtdLF9hLnR3ZWVuZXJzW2NdLnVuc2hpZnQo
Yil9LHByZWZpbHRlcnM6W1phXSxwcmVmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtiP19hLnByZWZpbHRl
cnMudW5zaGlmdChhKTpfYS5wcmVmaWx0ZXJzLnB1c2goYSl9fSksbi5zcGVlZD1mdW5jdGlvbihh
LGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24uZXh0ZW5kKHt9LGEpOntjb21wbGV0
ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGIm
JiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW4uZngub2ZmPzA6Im51bWJl
ciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVk
cz9uLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCxudWxsIT1kLnF1
ZXVlJiZkLnF1ZXVlIT09ITB8fChkLnF1ZXVlPSJmeCIpLGQub2xkPWQuY29tcGxldGUsZC5jb21w
bGV0ZT1mdW5jdGlvbigpe24uaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5x
dWV1ZSYmbi5kZXF1ZXVlKHRoaXMsZC5xdWV1ZSl9LGR9LG4uZm4uZXh0ZW5kKHtmYWRlVG86ZnVu
Y3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKFYpLmNzcygib3BhY2l0eSIsMCkuc2hv
dygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEs
YixjLGQpe3ZhciBlPW4uaXNFbXB0eU9iamVjdChhKSxmPW4uc3BlZWQoYixjLGQpLGc9ZnVuY3Rp
b24oKXt2YXIgYj1fYSh0aGlzLG4uZXh0ZW5kKHt9LGEpLGYpOyhlfHxOLmdldCh0aGlzLCJmaW5p
c2giKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1nLGV8fGYucXVldWU9PT0hMT90aGlz
LmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYixjKXt2YXIg
ZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGMpfTtyZXR1cm4ic3Ry
aW5nIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxiJiZhIT09ITEmJnRoaXMucXVldWUo
YXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ITAsZT1udWxsIT1hJiZhKyJx
dWV1ZUhvb2tzIixmPW4udGltZXJzLGc9Ti5nZXQodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3Am
JmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmVmEudGVzdChlKSYmZChn
W2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0u
cXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTshYiYmY3x8
bi5kZXF1ZXVlKHRoaXMsYSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiBhIT09ITEmJihh
PWF8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiLGM9Ti5nZXQodGhpcyksZD1jW2Er
InF1ZXVlIl0sZT1jW2ErInF1ZXVlSG9va3MiXSxmPW4udGltZXJzLGc9ZD9kLmxlbmd0aDowO2Zv
cihjLmZpbmlzaD0hMCxuLnF1ZXVlKHRoaXMsYSxbXSksZSYmZS5zdG9wJiZlLnN0b3AuY2FsbCh0
aGlzLCEwKSxiPWYubGVuZ3RoO2ItLTspZltiXS5lbGVtPT09dGhpcyYmZltiXS5xdWV1ZT09PWEm
JihmW2JdLmFuaW0uc3RvcCghMCksZi5zcGxpY2UoYiwxKSk7Zm9yKGI9MDtnPmI7YisrKWRbYl0m
JmRbYl0uZmluaXNoJiZkW2JdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBjLmZpbmlzaH0pfX0p
LG4uZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1uLmZu
W2JdO24uZm5bYl09ZnVuY3Rpb24oYSxkLGUpe3JldHVybiBudWxsPT1hfHwiYm9vbGVhbiI9PXR5
cGVvZiBhP2MuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShYYShiLCEwKSxhLGQs
ZSl9fSksbi5lYWNoKHtzbGlkZURvd246WGEoInNob3ciKSxzbGlkZVVwOlhhKCJoaWRlIiksc2xp
ZGVUb2dnbGU6WGEoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29w
YWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxi
KXtuLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0p
LG4udGltZXJzPVtdLG4uZngudGljaz1mdW5jdGlvbigpe3ZhciBhLGI9MCxjPW4udGltZXJzO2Zv
cihTYT1uLm5vdygpO2I8Yy5sZW5ndGg7YisrKWE9Y1tiXSxhKCl8fGNbYl0hPT1hfHxjLnNwbGlj
ZShiLS0sMSk7Yy5sZW5ndGh8fG4uZnguc3RvcCgpLFNhPXZvaWQgMH0sbi5meC50aW1lcj1mdW5j
dGlvbihhKXtuLnRpbWVycy5wdXNoKGEpLGEoKT9uLmZ4LnN0YXJ0KCk6bi50aW1lcnMucG9wKCl9
LG4uZnguaW50ZXJ2YWw9MTMsbi5meC5zdGFydD1mdW5jdGlvbigpe1RhfHwoVGE9YS5zZXRJbnRl
cnZhbChuLmZ4LnRpY2ssbi5meC5pbnRlcnZhbCkpfSxuLmZ4LnN0b3A9ZnVuY3Rpb24oKXthLmNs
ZWFySW50ZXJ2YWwoVGEpLFRhPW51bGx9LG4uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxf
ZGVmYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYixjKXtyZXR1cm4gYj1uLmZ4P24uZngu
c3BlZWRzW2JdfHxiOmIsYz1jfHwiZngiLHRoaXMucXVldWUoYyxmdW5jdGlvbihjLGQpe3ZhciBl
PWEuc2V0VGltZW91dChjLGIpO2Quc3RvcD1mdW5jdGlvbigpe2EuY2xlYXJUaW1lb3V0KGUpfX0p
fSxmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiPWQuY3JlYXRlRWxl
bWVudCgic2VsZWN0IiksYz1iLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikp
O2EudHlwZT0iY2hlY2tib3giLGwuY2hlY2tPbj0iIiE9PWEudmFsdWUsbC5vcHRTZWxlY3RlZD1j
LnNlbGVjdGVkLGIuZGlzYWJsZWQ9ITAsbC5vcHREaXNhYmxlZD0hYy5kaXNhYmxlZCxhPWQuY3Jl
YXRlRWxlbWVudCgiaW5wdXQiKSxhLnZhbHVlPSJ0IixhLnR5cGU9InJhZGlvIixsLnJhZGlvVmFs
dWU9InQiPT09YS52YWx1ZX0oKTt2YXIgYWIsYmI9bi5leHByLmF0dHJIYW5kbGU7bi5mbi5leHRl
bmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSyh0aGlzLG4uYXR0cixhLGIsYXJndW1lbnRz
Lmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCl7bi5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihh
LGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4i
dW5kZWZpbmVkIj09dHlwZW9mIGEuZ2V0QXR0cmlidXRlP24ucHJvcChhLGIsYyk6KDE9PT1mJiZu
LmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJDYXNlKCksZT1uLmF0dHJIb29rc1tiXXx8KG4uZXhw
ci5tYXRjaC5ib29sLnRlc3QoYik/YWI6dm9pZCAwKSksdm9pZCAwIT09Yz9udWxsPT09Yz92b2lk
IG4ucmVtb3ZlQXR0cihhLGIpOmUmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIp
KT9kOihhLnNldEF0dHJpYnV0ZShiLGMrIiIpLGMpOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUu
Z2V0KGEsYikpP2Q6KGQ9bi5maW5kLmF0dHIoYSxiKSxudWxsPT1kP3ZvaWQgMDpkKSl9LGF0dHJI
b29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWwucmFkaW9WYWx1ZSYmInJhZGlvIj09
PWImJm4ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRy
aWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24o
YSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRyk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hp
bGUoYz1mW2UrK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKSYm
KGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfX0pLGFiPXtzZXQ6ZnVuY3Rpb24oYSxiLGMp
e3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0s
bi5lYWNoKG4uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEs
Yil7dmFyIGM9YmJbYl18fG4uZmluZC5hdHRyO2JiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxm
O3JldHVybiBkfHwoZj1iYltiXSxiYltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2Fz
ZSgpOm51bGwsYmJbYl09ZiksZX19KTt2YXIgY2I9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8
YnV0dG9uKSQvaSxkYj0vXig/OmF8YXJlYSkkL2k7bi5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24o
YSxiKXtyZXR1cm4gSyh0aGlzLG4ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3Zl
UHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNb
bi5wcm9wRml4W2FdfHxhXX0pfX0pLG4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIg
ZCxlLGY9YS5ub2RlVHlwZTtpZigzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiAxPT09ZiYmbi5p
c1hNTERvYyhhKXx8KGI9bi5wcm9wRml4W2JdfHxiLGU9bi5wcm9wSG9va3NbYl0pLAordm9pZCAw
IT09Yz9lJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDphW2JdPWM6ZSYm
ImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDphW2JdfSxwcm9wSG9va3M6e3RhYklu
ZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidGFiaW5kZXgiKTtyZXR1
cm4gYj9wYXJzZUludChiLDEwKTpjYi50ZXN0KGEubm9kZU5hbWUpfHxkYi50ZXN0KGEubm9kZU5h
bWUpJiZhLmhyZWY/MDotMX19fSxwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xh
c3NOYW1lIn19KSxsLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5j
dGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIucGFyZW50Tm9kZSYmYi5wYXJl
bnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50
Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVj
dGVkSW5kZXgpfX0pLG4uZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJj
ZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJm
cmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7bi5wcm9wRml4W3RoaXMu
dG9Mb3dlckNhc2UoKV09dGhpc30pO3ZhciBlYj0vW1x0XHJcblxmXS9nO2Z1bmN0aW9uIGZiKGEp
e3JldHVybiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIifW4uZm4u
ZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpPTA7aWYobi5p
c0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5hZGRDbGFz
cyhhLmNhbGwodGhpcyxiLGZiKHRoaXMpKSl9KTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe2I9
YS5tYXRjaChHKXx8W107d2hpbGUoYz10aGlzW2krK10paWYoZT1mYihjKSxkPTE9PT1jLm5vZGVU
eXBlJiYoIiAiK2UrIiAiKS5yZXBsYWNlKGViLCIgIikpe2c9MDt3aGlsZShmPWJbZysrXSlkLmlu
ZGV4T2YoIiAiK2YrIiAiKTwwJiYoZCs9ZisiICIpO2g9bi50cmltKGQpLGUhPT1oJiZjLnNldEF0
dHJpYnV0ZSgiY2xhc3MiLGgpfX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7
dmFyIGIsYyxkLGUsZixnLGgsaT0wO2lmKG4uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKGIpe24odGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYixmYih0aGlzKSkp
fSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigi
c3RyaW5nIj09dHlwZW9mIGEmJmEpe2I9YS5tYXRjaChHKXx8W107d2hpbGUoYz10aGlzW2krK10p
aWYoZT1mYihjKSxkPTE9PT1jLm5vZGVUeXBlJiYoIiAiK2UrIiAiKS5yZXBsYWNlKGViLCIgIikp
e2c9MDt3aGlsZShmPWJbZysrXSl3aGlsZShkLmluZGV4T2YoIiAiK2YrIiAiKT4tMSlkPWQucmVw
bGFjZSgiICIrZisiICIsIiAiKTtoPW4udHJpbShkKSxlIT09aCYmYy5zZXRBdHRyaWJ1dGUoImNs
YXNzIixoKX19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlw
ZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0cmluZyI9PT1jP2I/dGhpcy5hZGRD
bGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOm4uaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVu
Y3Rpb24oYyl7bih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLGZiKHRoaXMpLGIpLGIp
fSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsZCxlLGY7aWYoInN0cmluZyI9PT1jKXtkPTAs
ZT1uKHRoaXMpLGY9YS5tYXRjaChHKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9l
LnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZSB2b2lkIDAhPT1hJiYiYm9vbGVhbiIh
PT1jfHwoYj1mYih0aGlzKSxiJiZOLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixiKSx0aGlzLnNl
dEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixifHxhPT09ITE/IiI6Ti5nZXQo
dGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe3ZhciBi
LGMsZD0wO2I9IiAiK2ErIiAiO3doaWxlKGM9dGhpc1tkKytdKWlmKDE9PT1jLm5vZGVUeXBlJiYo
IiAiK2ZiKGMpKyIgIikucmVwbGFjZShlYiwiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0
dXJuITF9fSk7dmFyIGdiPS9cci9nLGhiPS9bXHgyMFx0XHJcblxmXSsvZztuLmZuLmV4dGVuZCh7
dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgp
cmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09
dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09
ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUs
ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW4udmFsSG9va3NbdGhpcy50
eXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4g
YiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihl
KXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8bi52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/Yzoo
Yz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UoZ2IsIiIpOm51bGw9PWM/IiI6
Yyl9fX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9
bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm4udHJpbShuLnRleHQoYSkp
LnJlcGxhY2UoaGIsIiAiKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQ9
YS5vcHRpb25zLGU9YS5zZWxlY3RlZEluZGV4LGY9InNlbGVjdC1vbmUiPT09YS50eXBlfHwwPmUs
Zz1mP251bGw6W10saD1mP2UrMTpkLmxlbmd0aCxpPTA+ZT9oOmY/ZTowO2g+aTtpKyspaWYoYz1k
W2ldLChjLnNlbGVjdGVkfHxpPT09ZSkmJihsLm9wdERpc2FibGVkPyFjLmRpc2FibGVkOm51bGw9
PT1jLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSkmJighYy5wYXJlbnROb2RlLmRpc2FibGVkfHwh
bi5ub2RlTmFtZShjLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZihiPW4oYykudmFsKCksZily
ZXR1cm4gYjtnLnB1c2goYil9cmV0dXJuIGd9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT1h
Lm9wdGlvbnMsZj1uLm1ha2VBcnJheShiKSxnPWUubGVuZ3RoO3doaWxlKGctLSlkPWVbZ10sKGQu
c2VsZWN0ZWQ9bi5pbkFycmF5KG4udmFsSG9va3Mub3B0aW9uLmdldChkKSxmKT4tMSkmJihjPSEw
KTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19fX0pLG4uZWFjaChbInJhZGlvIiwi
Y2hlY2tib3giXSxmdW5jdGlvbigpe24udmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIp
e3JldHVybiBuLmlzQXJyYXkoYik/YS5jaGVja2VkPW4uaW5BcnJheShuKGEpLnZhbCgpLGIpPi0x
OnZvaWQgMH19LGwuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3Jl
dHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVlfSl9KTt2YXIg
aWI9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvO24uZXh0ZW5kKG4uZXZlbnQse3Ry
aWdnZXI6ZnVuY3Rpb24oYixjLGUsZil7dmFyIGcsaCxpLGosbCxtLG8scD1bZXx8ZF0scT1rLmNh
bGwoYiwidHlwZSIpP2IudHlwZTpiLHI9ay5jYWxsKGIsIm5hbWVzcGFjZSIpP2IubmFtZXNwYWNl
LnNwbGl0KCIuIik6W107aWYoaD1pPWU9ZXx8ZCwzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5
cGUmJiFpYi50ZXN0KHErbi5ldmVudC50cmlnZ2VyZWQpJiYocS5pbmRleE9mKCIuIik+LTEmJihy
PXEuc3BsaXQoIi4iKSxxPXIuc2hpZnQoKSxyLnNvcnQoKSksbD1xLmluZGV4T2YoIjoiKTwwJiYi
b24iK3EsYj1iW24uZXhwYW5kb10/YjpuZXcgbi5FdmVudChxLCJvYmplY3QiPT10eXBlb2YgYiYm
YiksYi5pc1RyaWdnZXI9Zj8yOjMsYi5uYW1lc3BhY2U9ci5qb2luKCIuIiksYi5ybmFtZXNwYWNl
PWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58KSIp
KyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1lKSxj
PW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxvPW4uZXZlbnQuc3BlY2lhbFtxXXx8e30s
Znx8IW8udHJpZ2dlcnx8by50cmlnZ2VyLmFwcGx5KGUsYykhPT0hMSkpe2lmKCFmJiYhby5ub0J1
YmJsZSYmIW4uaXNXaW5kb3coZSkpe2ZvcihqPW8uZGVsZWdhdGVUeXBlfHxxLGliLnRlc3Qoaitx
KXx8KGg9aC5wYXJlbnROb2RlKTtoO2g9aC5wYXJlbnROb2RlKXAucHVzaChoKSxpPWg7aT09PShl
Lm93bmVyRG9jdW1lbnR8fGQpJiZwLnB1c2goaS5kZWZhdWx0Vmlld3x8aS5wYXJlbnRXaW5kb3d8
fGEpfWc9MDt3aGlsZSgoaD1wW2crK10pJiYhYi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWIudHlw
ZT1nPjE/ajpvLmJpbmRUeXBlfHxxLG09KE4uZ2V0KGgsImV2ZW50cyIpfHx7fSlbYi50eXBlXSYm
Ti5nZXQoaCwiaGFuZGxlIiksbSYmbS5hcHBseShoLGMpLG09bCYmaFtsXSxtJiZtLmFwcGx5JiZM
KGgpJiYoYi5yZXN1bHQ9bS5hcHBseShoLGMpLGIucmVzdWx0PT09ITEmJmIucHJldmVudERlZmF1
bHQoKSk7cmV0dXJuIGIudHlwZT1xLGZ8fGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fG8uX2RlZmF1
bHQmJm8uX2RlZmF1bHQuYXBwbHkocC5wb3AoKSxjKSE9PSExfHwhTChlKXx8bCYmbi5pc0Z1bmN0
aW9uKGVbcV0pJiYhbi5pc1dpbmRvdyhlKSYmKGk9ZVtsXSxpJiYoZVtsXT1udWxsKSxuLmV2ZW50
LnRyaWdnZXJlZD1xLGVbcV0oKSxuLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaSYmKGVbbF09aSkp
LGIucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW4uZXh0ZW5kKG5ldyBu
LkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMH0pO24uZXZlbnQudHJpZ2dlcihkLG51bGws
Yil9fSksbi5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpm
dW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVudC50cmlnZ2VyKGEsYixj
LCEwKTp2b2lkIDB9fSksbi5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCBy
ZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3Vz
ZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2Vs
ZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxp
dCgiICIpLGZ1bmN0aW9uKGEsYil7bi5mbltiXT1mdW5jdGlvbihhLGMpe3JldHVybiBhcmd1bWVu
dHMubGVuZ3RoPjA/dGhpcy5vbihiLG51bGwsYSxjKTp0aGlzLnRyaWdnZXIoYil9fSksbi5mbi5l
eHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3Vz
ZWxlYXZlKGJ8fGEpfX0pLGwuZm9jdXNpbj0ib25mb2N1c2luImluIGEsbC5mb2N1c2lufHxuLmVh
Y2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9
ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LG4uZXZlbnQuZml4KGEpKX07
bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1
bWVudHx8dGhpcyxlPU4uYWNjZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCks
Ti5hY2Nlc3MoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93
bmVyRG9jdW1lbnR8fHRoaXMsZT1OLmFjY2VzcyhkLGIpLTE7ZT9OLmFjY2VzcyhkLGIsZSk6KGQu
cmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLE4ucmVtb3ZlKGQsYikpfX19KTt2YXIgamI9YS5s
b2NhdGlvbixrYj1uLm5vdygpLGxiPS9cPy87bi5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJu
IEpTT04ucGFyc2UoYSsiIil9LG4ucGFyc2VYTUw9ZnVuY3Rpb24oYil7dmFyIGM7aWYoIWJ8fCJz
dHJpbmciIT10eXBlb2YgYilyZXR1cm4gbnVsbDt0cnl7Yz0obmV3IGEuRE9NUGFyc2VyKS5wYXJz
ZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKX1jYXRjaChkKXtjPXZvaWQgMH1yZXR1cm4gYyYmIWMu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxuLmVycm9yKCJJbnZh
bGlkIFhNTDogIitiKSxjfTt2YXIgbWI9LyMuKiQvLG5iPS8oWz8mXSlfPVteJl0qLyxvYj0vXigu
Kj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLHBiPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4r
LWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLHFiPS9eKD86R0VUfEhFQUQpJC8scmI9L15c
L1wvLyxzYj17fSx0Yj17fSx1Yj0iKi8iLmNvbmNhdCgiKiIpLHZiPWQuY3JlYXRlRWxlbWVudCgi
YSIpO3ZiLmhyZWY9amIuaHJlZjtmdW5jdGlvbiB3YihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXsi
c3RyaW5nIiE9dHlwZW9mIGImJihjPWIsYj0iKiIpO3ZhciBkLGU9MCxmPWIudG9Mb3dlckNhc2Uo
KS5tYXRjaChHKXx8W107aWYobi5pc0Z1bmN0aW9uKGMpKXdoaWxlKGQ9ZltlKytdKSIrIj09PWRb
MF0/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1h
W2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24geGIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09dGI7
ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxuLmVhY2goYVtoXXx8W10sZnVuY3Rp
b24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/
Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1
cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiB5YihhLGIpe3Zh
ciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGMgaW4gYil2b2lkIDAh
PT1iW2NdJiYoKGVbY10/YTpkfHwoZD17fSkpW2NdPWJbY10pO3JldHVybiBkJiZuLmV4dGVuZCgh
MCxhLGQpLGF9ZnVuY3Rpb24gemIoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEu
ZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWQmJihkPWEubWlt
ZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihkKWZvcihlIGlu
IGgpaWYoaFtlXSYmaFtlXS50ZXN0KGQpKXtpLnVuc2hpZnQoZSk7YnJlYWt9aWYoaVswXWluIGMp
Zj1pWzBdO2Vsc2V7Zm9yKGUgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tlKyIgIitpWzBd
XSl7Zj1lO2JyZWFrfWd8fChnPWUpfWY9Znx8Z31yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlm
dChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gQWIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9
LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cu
dG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5y
ZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0
YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlp
ZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpb
IiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2kr
IiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFsw
XSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWco
Yik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVy
cm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToi
c3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6
e30sYWpheFNldHRpbmdzOnt1cmw6amIuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6cGIudGVzdChq
Yi5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBl
OiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2Vw
dHM6eyIqIjp1Yix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGlj
YXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2Ny
aXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25c
Yi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQi
LGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBo
dG1sIjohMCwidGV4dCBqc29uIjpuLnBhcnNlSlNPTiwidGV4dCB4bWwiOm4ucGFyc2VYTUx9LGZs
YXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3Jl
dHVybiBiP3liKHliKGEsbi5hamF4U2V0dGluZ3MpLGIpOnliKG4uYWpheFNldHRpbmdzLGEpfSxh
amF4UHJlZmlsdGVyOndiKHNiKSxhamF4VHJhbnNwb3J0OndiKHRiKSxhamF4OmZ1bmN0aW9uKGIs
Yyl7Im9iamVjdCI9PXR5cGVvZiBiJiYoYz1iLGI9dm9pZCAwKSxjPWN8fHt9O3ZhciBlLGYsZyxo
LGksaixrLGwsbT1uLmFqYXhTZXR1cCh7fSxjKSxvPW0uY29udGV4dHx8bSxwPW0uY29udGV4dCYm
KG8ubm9kZVR5cGV8fG8uanF1ZXJ5KT9uKG8pOm4uZXZlbnQscT1uLkRlZmVycmVkKCkscj1uLkNh
bGxiYWNrcygib25jZSBtZW1vcnkiKSxzPW0uc3RhdHVzQ29kZXx8e30sdD17fSx1PXt9LHY9MCx3
PSJjYW5jZWxlZCIseD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEp
e3ZhciBiO2lmKDI9PT12KXtpZighaCl7aD17fTt3aGlsZShiPW9iLmV4ZWMoZykpaFtiWzFdLnRv
TG93ZXJDYXNlKCldPWJbMl19Yj1oW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVs
bDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXY/ZzpudWxs
fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3Jl
dHVybiB2fHwoYT11W2NdPXVbY118fGEsdFthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1
bmN0aW9uKGEpe3JldHVybiB2fHwobS5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0
aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj52KWZvcihiIGluIGEpc1tiXT1bc1tiXSxhW2JdXTtlbHNl
IHguYWx3YXlzKGFbeC5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFy
IGI9YXx8dztyZXR1cm4gZSYmZS5hYm9ydChiKSx6KDAsYiksdGhpc319O2lmKHEucHJvbWlzZSh4
KS5jb21wbGV0ZT1yLmFkZCx4LnN1Y2Nlc3M9eC5kb25lLHguZXJyb3I9eC5mYWlsLG0udXJsPSgo
Ynx8bS51cmx8fGpiLmhyZWYpKyIiKS5yZXBsYWNlKG1iLCIiKS5yZXBsYWNlKHJiLGpiLnByb3Rv
Y29sKyIvLyIpLG0udHlwZT1jLm1ldGhvZHx8Yy50eXBlfHxtLm1ldGhvZHx8bS50eXBlLG0uZGF0
YVR5cGVzPW4udHJpbShtLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2goRyl8fFsi
Il0sbnVsbD09bS5jcm9zc0RvbWFpbil7aj1kLmNyZWF0ZUVsZW1lbnQoImEiKTt0cnl7ai5ocmVm
PW0udXJsLGouaHJlZj1qLmhyZWYsbS5jcm9zc0RvbWFpbj12Yi5wcm90b2NvbCsiLy8iK3ZiLmhv
c3QhPWoucHJvdG9jb2wrIi8vIitqLmhvc3R9Y2F0Y2goeSl7bS5jcm9zc0RvbWFpbj0hMH19aWYo
bS5kYXRhJiZtLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIG0uZGF0YSYmKG0uZGF0YT1u
LnBhcmFtKG0uZGF0YSxtLnRyYWRpdGlvbmFsKSkseGIoc2IsbSxjLHgpLDI9PT12KXJldHVybiB4
O2s9bi5ldmVudCYmbS5nbG9iYWwsayYmMD09PW4uYWN0aXZlKysmJm4uZXZlbnQudHJpZ2dlcigi
YWpheFN0YXJ0IiksbS50eXBlPW0udHlwZS50b1VwcGVyQ2FzZSgpLG0uaGFzQ29udGVudD0hcWIu
dGVzdChtLnR5cGUpLGY9bS51cmwsbS5oYXNDb250ZW50fHwobS5kYXRhJiYoZj1tLnVybCs9KGxi
LnRlc3QoZik/IiYiOiI/IikrbS5kYXRhLGRlbGV0ZSBtLmRhdGEpLG0uY2FjaGU9PT0hMSYmKG0u
dXJsPW5iLnRlc3QoZik/Zi5yZXBsYWNlKG5iLCIkMV89IitrYisrKTpmKyhsYi50ZXN0KGYpPyIm
IjoiPyIpKyJfPSIra2IrKykpLG0uaWZNb2RpZmllZCYmKG4ubGFzdE1vZGlmaWVkW2ZdJiZ4LnNl
dFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixuLmxhc3RNb2RpZmllZFtmXSksbi5l
dGFnW2ZdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG4uZXRhZ1tmXSkpLCht
LmRhdGEmJm0uaGFzQ29udGVudCYmbS5jb250ZW50VHlwZSE9PSExfHxjLmNvbnRlbnRUeXBlKSYm
eC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLG0uY29udGVudFR5cGUpLHguc2V0UmVx
dWVzdEhlYWRlcigiQWNjZXB0IixtLmRhdGFUeXBlc1swXSYmbS5hY2NlcHRzW20uZGF0YVR5cGVz
WzBdXT9tLmFjY2VwdHNbbS5kYXRhVHlwZXNbMF1dKygiKiIhPT1tLmRhdGFUeXBlc1swXT8iLCAi
K3ViKyI7IHE9MC4wMSI6IiIpOm0uYWNjZXB0c1siKiJdKTtmb3IobCBpbiBtLmhlYWRlcnMpeC5z
ZXRSZXF1ZXN0SGVhZGVyKGwsbS5oZWFkZXJzW2xdKTtpZihtLmJlZm9yZVNlbmQmJihtLmJlZm9y
ZVNlbmQuY2FsbChvLHgsbSk9PT0hMXx8Mj09PXYpKXJldHVybiB4LmFib3J0KCk7dz0iYWJvcnQi
O2ZvcihsIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXhbbF0obVtsXSk7aWYoZT14
Yih0YixtLGMseCkpe2lmKHgucmVhZHlTdGF0ZT0xLGsmJnAudHJpZ2dlcigiYWpheFNlbmQiLFt4
LG1dKSwyPT09dilyZXR1cm4geDttLmFzeW5jJiZtLnRpbWVvdXQ+MCYmKGk9YS5zZXRUaW1lb3V0
KGZ1bmN0aW9uKCl7eC5hYm9ydCgidGltZW91dCIpfSxtLnRpbWVvdXQpKTt0cnl7dj0xLGUuc2Vu
ZCh0LHopfWNhdGNoKHkpe2lmKCEoMj52KSl0aHJvdyB5O3ooLTEseSl9fWVsc2UgeigtMSwiTm8g
VHJhbnNwb3J0Iik7ZnVuY3Rpb24geihiLGMsZCxoKXt2YXIgaixsLHQsdSx3LHk9YzsyIT09diYm
KHY9MixpJiZhLmNsZWFyVGltZW91dChpKSxlPXZvaWQgMCxnPWh8fCIiLHgucmVhZHlTdGF0ZT1i
PjA/NDowLGo9Yj49MjAwJiYzMDA+Ynx8MzA0PT09YixkJiYodT16YihtLHgsZCkpLHU9QWIobSx1
LHgsaiksaj8obS5pZk1vZGlmaWVkJiYodz14LmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlm
aWVkIiksdyYmKG4ubGFzdE1vZGlmaWVkW2ZdPXcpLHc9eC5nZXRSZXNwb25zZUhlYWRlcigiZXRh
ZyIpLHcmJihuLmV0YWdbZl09dykpLDIwND09PWJ8fCJIRUFEIj09PW0udHlwZT95PSJub2NvbnRl
bnQiOjMwND09PWI/eT0ibm90bW9kaWZpZWQiOih5PXUuc3RhdGUsbD11LmRhdGEsdD11LmVycm9y
LGo9IXQpKToodD15LCFiJiZ5fHwoeT0iZXJyb3IiLDA+YiYmKGI9MCkpKSx4LnN0YXR1cz1iLHgu
c3RhdHVzVGV4dD0oY3x8eSkrIiIsaj9xLnJlc29sdmVXaXRoKG8sW2wseSx4XSk6cS5yZWplY3RX
aXRoKG8sW3gseSx0XSkseC5zdGF0dXNDb2RlKHMpLHM9dm9pZCAwLGsmJnAudHJpZ2dlcihqPyJh
amF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW3gsbSxqP2w6dF0pLHIuZmlyZVdpdGgobyxbeCx5XSks
ayYmKHAudHJpZ2dlcigiYWpheENvbXBsZXRlIixbeCxtXSksLS1uLmFjdGl2ZXx8bi5ldmVudC50
cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIHh9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3Jl
dHVybiBuLmdldChhLGIsYywianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g
bi5nZXQoYSx2b2lkIDAsYiwic2NyaXB0Iil9fSksbi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0
aW9uKGEsYil7bltiXT1mdW5jdGlvbihhLGMsZCxlKXtyZXR1cm4gbi5pc0Z1bmN0aW9uKGMpJiYo
ZT1lfHxkLGQ9YyxjPXZvaWQgMCksbi5hamF4KG4uZXh0ZW5kKHt1cmw6YSx0eXBlOmIsZGF0YVR5
cGU6ZSxkYXRhOmMsc3VjY2VzczpkfSxuLmlzUGxhaW5PYmplY3QoYSkmJmEpKX19KSxuLl9ldmFs
VXJsPWZ1bmN0aW9uKGEpe3JldHVybiBuLmFqYXgoe3VybDphLHR5cGU6IkdFVCIsZGF0YVR5cGU6
InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSl9LG4uZm4uZXh0ZW5kKHt3
cmFwQWxsOmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNo
KGZ1bmN0aW9uKGIpe24odGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KToodGhpc1swXSYm
KGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFy
ZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10
aGlzO3doaWxlKGEuZmlyc3RFbGVtZW50Q2hpbGQpYT1hLmZpcnN0RWxlbWVudENoaWxkO3JldHVy
biBhfSkuYXBwZW5kKHRoaXMpKSx0aGlzKX0sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiBu
LmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcElubmVyKGEu
Y2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPW4odGhpcyksYz1iLmNv
bnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rp
b24oYSl7dmFyIGI9bi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7
bih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe24ubm9kZU5hbWUodGhpcywiYm9k
eSIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KSxuLmV4
cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7cmV0dXJuIW4uZXhwci5maWx0ZXJzLnZpc2li
bGUoYSl9LG4uZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0
V2lkdGg+MHx8YS5vZmZzZXRIZWlnaHQ+MHx8YS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD4wfTt2
YXIgQmI9LyUyMC9nLENiPS9cW1xdJC8sRGI9L1xyP1xuL2csRWI9L14oPzpzdWJtaXR8YnV0dG9u
fGltYWdlfHJlc2V0fGZpbGUpJC9pLEZiPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdl
bikvaTtmdW5jdGlvbiBHYihhLGIsYyxkKXt2YXIgZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIs
ZnVuY3Rpb24oYixlKXtjfHxDYi50ZXN0KGEpP2QoYSxlKTpHYihhKyJbIisoIm9iamVjdCI9PXR5
cGVvZiBlJiZudWxsIT1lP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09
bi50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpR2IoYSsiWyIrZSsiXSIsYltlXSxjLGQp
fW4ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPW4uaXNG
dW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVu
dChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhT
ZXR0aW5ncyYmbi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVl
cnkmJiFuLmlzUGxhaW5PYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0
aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlHYihjLGFbY10sYixlKTtyZXR1cm4gZC5qb2lu
KCImIikucmVwbGFjZShCYiwiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7
cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxl
bWVudHMiKTtyZXR1cm4gYT9uLm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7
dmFyIGE9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQi
KSYmRmIudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUViLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCFY
LnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0aGlzKS52YWwoKTtyZXR1cm4g
bnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1l
OmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoRGIsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6
Yy5yZXBsYWNlKERiLCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPWZ1bmN0
aW9uKCl7dHJ5e3JldHVybiBuZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChiKXt9fTt2YXIgSGI9
ezA6MjAwLDEyMjM6MjA0fSxJYj1uLmFqYXhTZXR0aW5ncy54aHIoKTtsLmNvcnM9ISFJYiYmIndp
dGhDcmVkZW50aWFscyJpbiBJYixsLmFqYXg9SWI9ISFJYixuLmFqYXhUcmFuc3BvcnQoZnVuY3Rp
b24oYil7dmFyIGMsZDtyZXR1cm4gbC5jb3JzfHxJYiYmIWIuY3Jvc3NEb21haW4/e3NlbmQ6ZnVu
Y3Rpb24oZSxmKXt2YXIgZyxoPWIueGhyKCk7aWYoaC5vcGVuKGIudHlwZSxiLnVybCxiLmFzeW5j
LGIudXNlcm5hbWUsYi5wYXNzd29yZCksYi54aHJGaWVsZHMpZm9yKGcgaW4gYi54aHJGaWVsZHMp
aFtnXT1iLnhockZpZWxkc1tnXTtiLm1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUmJmgub3Zl
cnJpZGVNaW1lVHlwZShiLm1pbWVUeXBlKSxiLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1X
aXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7Zm9yKGcgaW4g
ZSloLnNldFJlcXVlc3RIZWFkZXIoZyxlW2ddKTtjPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlv
bigpe2MmJihjPWQ9aC5vbmxvYWQ9aC5vbmVycm9yPWgub25hYm9ydD1oLm9ucmVhZHlzdGF0ZWNo
YW5nZT1udWxsLCJhYm9ydCI9PT1hP2guYWJvcnQoKToiZXJyb3IiPT09YT8ibnVtYmVyIiE9dHlw
ZW9mIGguc3RhdHVzP2YoMCwiZXJyb3IiKTpmKGguc3RhdHVzLGguc3RhdHVzVGV4dCk6ZihIYlto
LnN0YXR1c118fGguc3RhdHVzLGguc3RhdHVzVGV4dCwidGV4dCIhPT0oaC5yZXNwb25zZVR5cGV8
fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2YgaC5yZXNwb25zZVRleHQ/e2JpbmFyeTpoLnJlc3Bv
bnNlfTp7dGV4dDpoLnJlc3BvbnNlVGV4dH0saC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0s
aC5vbmxvYWQ9YygpLGQ9aC5vbmVycm9yPWMoImVycm9yIiksdm9pZCAwIT09aC5vbmFib3J0P2gu
b25hYm9ydD1kOmgub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PWgucmVhZHlTdGF0
ZSYmYS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YyYmZCgpfSl9LGM9YygiYWJvcnQiKTt0cnl7aC5z
ZW5kKGIuaGFzQ29udGVudCYmYi5kYXRhfHxudWxsKX1jYXRjaChpKXtpZihjKXRocm93IGl9fSxh
Ym9ydDpmdW5jdGlvbigpe2MmJmMoKX19OnZvaWQgMH0pLG4uYWpheFNldHVwKHthY2NlcHRzOntz
Y3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRp
b24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3Njcmlw
dDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1
bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19fSksbi5hamF4UHJlZmlsdGVyKCJz
Y3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3Nz
RG9tYWluJiYoYS50eXBlPSJHRVQiKX0pLG4uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlv
bihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZil7
Yj1uKCI8c2NyaXB0PiIpLnByb3Aoe2NoYXJzZXQ6YS5zY3JpcHRDaGFyc2V0LHNyYzphLnVybH0p
Lm9uKCJsb2FkIGVycm9yIixjPWZ1bmN0aW9uKGEpe2IucmVtb3ZlKCksYz1udWxsLGEmJmYoImVy
cm9yIj09PWEudHlwZT80MDQ6MjAwLGEudHlwZSl9KSxkLmhlYWQuYXBwZW5kQ2hpbGQoYlswXSl9
LGFib3J0OmZ1bmN0aW9uKCl7YyYmYygpfX19fSk7dmFyIEpiPVtdLEtiPS8oPSlcPyg/PSZ8JCl8
XD9cPy87bi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlv
bigpe3ZhciBhPUpiLnBvcCgpfHxuLmV4cGFuZG8rIl8iK2tiKys7cmV0dXJuIHRoaXNbYV09ITAs
YX19KSxuLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxm
LGcsaD1iLmpzb25wIT09ITEmJihLYi50ZXN0KGIudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9m
IGIuZGF0YSYmMD09PShiLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13
d3ctZm9ybS11cmxlbmNvZGVkIikmJktiLnRlc3QoYi5kYXRhKSYmImRhdGEiKTtyZXR1cm4gaHx8
Impzb25wIj09PWIuZGF0YVR5cGVzWzBdPyhlPWIuanNvbnBDYWxsYmFjaz1uLmlzRnVuY3Rpb24o
Yi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaD9iW2hd
PWJbaF0ucmVwbGFjZShLYiwiJDEiK2UpOmIuanNvbnAhPT0hMSYmKGIudXJsKz0obGIudGVzdChi
LnVybCk/IiYiOiI/IikrYi5qc29ucCsiPSIrZSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJd
PWZ1bmN0aW9uKCl7cmV0dXJuIGd8fG4uZXJyb3IoZSsiIHdhcyBub3QgY2FsbGVkIiksZ1swXX0s
Yi5kYXRhVHlwZXNbMF09Impzb24iLGY9YVtlXSxhW2VdPWZ1bmN0aW9uKCl7Zz1hcmd1bWVudHN9
LGQuYWx3YXlzKGZ1bmN0aW9uKCl7dm9pZCAwPT09Zj9uKGEpLnJlbW92ZVByb3AoZSk6YVtlXT1m
LGJbZV0mJihiLmpzb25wQ2FsbGJhY2s9Yy5qc29ucENhbGxiYWNrLEpiLnB1c2goZSkpLGcmJm4u
aXNGdW5jdGlvbihmKSYmZihnWzBdKSxnPWY9dm9pZCAwfSksInNjcmlwdCIpOnZvaWQgMH0pLG4u
cGFyc2VIVE1MPWZ1bmN0aW9uKGEsYixjKXtpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVy
biBudWxsOyJib29sZWFuIj09dHlwZW9mIGImJihjPWIsYj0hMSksYj1ifHxkO3ZhciBlPXguZXhl
YyhhKSxmPSFjJiZbXTtyZXR1cm4gZT9bYi5jcmVhdGVFbGVtZW50KGVbMV0pXTooZT1jYShbYV0s
YixmKSxmJiZmLmxlbmd0aCYmbihmKS5yZW1vdmUoKSxuLm1lcmdlKFtdLGUuY2hpbGROb2Rlcykp
fTt2YXIgTGI9bi5mbi5sb2FkO24uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIh
PXR5cGVvZiBhJiZMYilyZXR1cm4gTGIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixn
PXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD4tMSYmKGQ9bi50cmltKGEuc2xpY2UoaCkp
LGE9YS5zbGljZSgwLGgpKSxuLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmIm9iamVj
dCI9PXR5cGVvZiBiJiYoZT0iUE9TVCIpLGcubGVuZ3RoPjAmJm4uYWpheCh7dXJsOmEsdHlwZTpl
fHwiR0VUIixkYXRhVHlwZToiaHRtbCIsZGF0YTpifSkuZG9uZShmdW5jdGlvbihhKXtmPWFyZ3Vt
ZW50cyxnLmh0bWwoZD9uKCI8ZGl2PiIpLmFwcGVuZChuLnBhcnNlSFRNTChhKSkuZmluZChkKTph
KX0pLmFsd2F5cyhjJiZmdW5jdGlvbihhLGIpe2cuZWFjaChmdW5jdGlvbigpe2MuYXBwbHkodGhp
cyxmfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KX0pLHRoaXN9LG4uZWFjaChbImFqYXhTdGFydCIs
ImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4
U2VuZCJdLGZ1bmN0aW9uKGEsYil7bi5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vbihi
LGEpfX0pLG4uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBuLmdyZXAo
bi50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9O2Z1bmN0aW9u
IE1iKGEpe3JldHVybiBuLmlzV2luZG93KGEpP2E6OT09PWEubm9kZVR5cGUmJmEuZGVmYXVsdFZp
ZXd9bi5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGos
az1uLmNzcyhhLCJwb3NpdGlvbiIpLGw9bihhKSxtPXt9OyJzdGF0aWMiPT09ayYmKGEuc3R5bGUu
cG9zaXRpb249InJlbGF0aXZlIiksaD1sLm9mZnNldCgpLGY9bi5jc3MoYSwidG9wIiksaT1uLmNz
cyhhLCJsZWZ0Iiksaj0oImFic29sdXRlIj09PWt8fCJmaXhlZCI9PT1rKSYmKGYraSkuaW5kZXhP
ZigiYXV0byIpPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50b3AsZT1kLmxlZnQpOihnPXBhcnNl
RmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxuLmlzRnVuY3Rpb24oYikmJihiPWIuY2Fs
bChhLGMsbi5leHRlbmQoe30saCkpKSxudWxsIT1iLnRvcCYmKG0udG9wPWIudG9wLWgudG9wK2cp
LG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLCJ1c2luZyJpbiBiP2IudXNp
bmcuY2FsbChhLG0pOmwuY3NzKG0pfX0sbi5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtp
Zihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0
aW9uKGIpe24ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9dGhpc1swXSxl
PXt0b3A6MCxsZWZ0OjB9LGY9ZCYmZC5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1
bWVudEVsZW1lbnQsbi5jb250YWlucyhiLGQpPyhlPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCks
Yz1NYihmKSx7dG9wOmUudG9wK2MucGFnZVlPZmZzZXQtYi5jbGllbnRUb3AsbGVmdDplLmxlZnQr
Yy5wYWdlWE9mZnNldC1iLmNsaWVudExlZnR9KTplfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRo
aXNbMF0pe3ZhciBhLGIsYz10aGlzWzBdLGQ9e3RvcDowLGxlZnQ6MH07cmV0dXJuImZpeGVkIj09
PW4uY3NzKGMsInBvc2l0aW9uIik/Yj1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihhPXRoaXMu
b2Zmc2V0UGFyZW50KCksYj10aGlzLm9mZnNldCgpLG4ubm9kZU5hbWUoYVswXSwiaHRtbCIpfHwo
ZD1hLm9mZnNldCgpKSxkLnRvcCs9bi5jc3MoYVswXSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxkLmxl
ZnQrPW4uY3NzKGFbMF0sImJvcmRlckxlZnRXaWR0aCIsITApKSx7dG9wOmIudG9wLWQudG9wLW4u
Y3NzKGMsIm1hcmdpblRvcCIsITApLGxlZnQ6Yi5sZWZ0LWQubGVmdC1uLmNzcyhjLCJtYXJnaW5M
ZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0
aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoYSYmInN0YXRpYyI9PT1uLmNzcyhh
LCJwb3NpdGlvbiIpKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF8fEVhfSl9fSksbi5lYWNoKHtz
Y3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9u
KGEsYil7dmFyIGM9InBhZ2VZT2Zmc2V0Ij09PWI7bi5mblthXT1mdW5jdGlvbihkKXtyZXR1cm4g
Syh0aGlzLGZ1bmN0aW9uKGEsZCxlKXt2YXIgZj1NYihhKTtyZXR1cm4gdm9pZCAwPT09ZT9mP2Zb
Yl06YVtkXTp2b2lkKGY/Zi5zY3JvbGxUbyhjP2YucGFnZVhPZmZzZXQ6ZSxjP2U6Zi5wYWdlWU9m
ZnNldCk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgpfX0pLG4uZWFjaChbInRvcCIsImxl
ZnQiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09R2EobC5waXhlbFBvc2l0aW9uLGZ1bmN0
aW9uKGEsYyl7cmV0dXJuIGM/KGM9RmEoYSxiKSxCYS50ZXN0KGMpP24oYSkucG9zaXRpb24oKVti
XSsicHgiOmMpOnZvaWQgMH0pfSksbi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRo
In0sZnVuY3Rpb24oYSxiKXtuLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoi
b3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3Vt
ZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0h
MD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7
cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIr
YV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJz
Y3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0s
ZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9
LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oYSxi
LGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1
cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4g
dGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1h
cmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfSxz
aXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofX0pLG4uZm4uYW5kU2VsZj1uLmZuLmFk
ZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVl
cnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgTmI9YS5qUXVlcnksT2I9YS4kO3JldHVy
biBuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW4mJihhLiQ9T2IpLGImJmEu
alF1ZXJ5PT09biYmKGEualF1ZXJ5PU5iKSxufSxifHwoYS5qUXVlcnk9YS4kPW4pLG59KTsKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvcGFj
a2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9w
YWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY0ZDcwYTlhN2MxZmIyYmZjMWY5YzdjOTI5NGU3NTY5
NTRlYmU5NAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVf
bW9kdWxlcy9qcXVlcnkvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMTU2IEBACit7CisgICJfYXJn
cyI6IFsKKyAgICBbCisgICAgICB7CisgICAgICAgICJyYXciOiAianF1ZXJ5QF4yLjEuMCIsCisg
ICAgICAgICJzY29wZSI6IG51bGwsCisgICAgICAgICJlc2NhcGVkTmFtZSI6ICJqcXVlcnkiLAor
ICAgICAgICAibmFtZSI6ICJqcXVlcnkiLAorICAgICAgICAicmF3U3BlYyI6ICJeMi4xLjAiLAor
ICAgICAgICAic3BlYyI6ICI+PTIuMS4wIDwzLjAuMCIsCisgICAgICAgICJ0eXBlIjogInJhbmdl
IgorICAgICAgfSwKKyAgICAgICIvVXNlcnMvYWRkeW8vRGVza3RvcC9TcGVlZG9tZXRlci1hL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0IgorICAgIF0KKyAgXSwK
KyAgIl9mcm9tIjogImpxdWVyeUA+PTIuMS4wIDwzLjAuMCIsCisgICJfaWQiOiAianF1ZXJ5QDIu
Mi40IiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvanF1ZXJ5IiwKKyAg
Il9ub2RlVmVyc2lvbiI6ICIwLjEwLjQ1IiwKKyAgIl9ucG1PcGVyYXRpb25hbEludGVybmFsIjog
eworICAgICJob3N0IjogInBhY2thZ2VzLTE2LWVhc3QuaW50ZXJuYWwubnBtanMuY29tIiwKKyAg
ICAidG1wIjogInRtcC9qcXVlcnktMi4yLjQudGd6XzE0NjM3NjUxNjY4MzZfMC41ODM0Mzg5Njc1
ODc0MjYzIgorICB9LAorICAiX25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAidGltbXl3aWwiLAor
ICAgICJlbWFpbCI6ICJ0aW1teXdpbGxpc25AZ21haWwuY29tIgorICB9LAorICAiX25wbVZlcnNp
b24iOiAiMi4xNS4xIiwKKyAgIl9waGFudG9tQ2hpbGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQi
OiB7CisgICAgInJhdyI6ICJqcXVlcnlAXjIuMS4wIiwKKyAgICAic2NvcGUiOiBudWxsLAorICAg
ICJlc2NhcGVkTmFtZSI6ICJqcXVlcnkiLAorICAgICJuYW1lIjogImpxdWVyeSIsCisgICAgInJh
d1NwZWMiOiAiXjIuMS4wIiwKKyAgICAic3BlYyI6ICI+PTIuMS4wIDwzLjAuMCIsCisgICAgInR5
cGUiOiAicmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIKKyAgXSwKKyAg
Il9yZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcXVlcnkvLS9qcXVlcnkt
Mi4yLjQudGd6IiwKKyAgIl9zaGFzdW0iOiAiMmM4OWQ2ODg5YjVlYWM1MjJhN2VlYTMyYzE0NTIx
NTU5YzZjYmYwMiIsCisgICJfc2hyaW5rd3JhcCI6IG51bGwsCisgICJfc3BlYyI6ICJqcXVlcnlA
XjIuMS4wIiwKKyAgIl93aGVyZSI6ICIvVXNlcnMvYWRkeW8vRGVza3RvcC9TcGVlZG9tZXRlci1h
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0IiwKKyAgImF1dGhv
ciI6IHsKKyAgICAibmFtZSI6ICJqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0
b3JzIiwKKyAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2Iv
Mi4yLjQvQVVUSE9SUy50eHQiCisgIH0sCisgICJidWdzIjogeworICAgICJ1cmwiOiAiaHR0cHM6
Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvaXNzdWVzIgorICB9LAorICAiY29tbWl0cGxlYXNl
IjogeworICAgICJjb21wb25lbnRzIjogWworICAgICAgIkRvY3MiLAorICAgICAgIlRlc3RzIiwK
KyAgICAgICJCdWlsZCIsCisgICAgICAiUmVsZWFzZSIsCisgICAgICAiQ29yZSIsCisgICAgICAi
QWpheCIsCisgICAgICAiQXR0cmlidXRlcyIsCisgICAgICAiQ2FsbGJhY2tzIiwKKyAgICAgICJD
U1MiLAorICAgICAgIkRhdGEiLAorICAgICAgIkRlZmVycmVkIiwKKyAgICAgICJEZXByZWNhdGVk
IiwKKyAgICAgICJEaW1lbnNpb25zIiwKKyAgICAgICJFZmZlY3RzIiwKKyAgICAgICJFdmVudCIs
CisgICAgICAiTWFuaXB1bGF0aW9uIiwKKyAgICAgICJPZmZzZXQiLAorICAgICAgIlF1ZXVlIiwK
KyAgICAgICJTZWxlY3RvciIsCisgICAgICAiU2VyaWFsaXplIiwKKyAgICAgICJUcmF2ZXJzaW5n
IiwKKyAgICAgICJXcmFwIgorICAgIF0KKyAgfSwKKyAgImRlcGVuZGVuY2llcyI6IHt9LAorICAi
ZGVzY3JpcHRpb24iOiAiSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBET00gb3BlcmF0aW9ucyIsCisg
ICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgImNvbW1pdHBsZWFzZSI6ICIyLjAuMCIsCisgICAg
ImNvcmUtanMiOiAiMC45LjE3IiwKKyAgICAiZ3J1bnQiOiAiMC40LjUiLAorICAgICJncnVudC1i
YWJlbCI6ICI1LjAuMSIsCisgICAgImdydW50LWNsaSI6ICIwLjEuMTMiLAorICAgICJncnVudC1j
b21wYXJlLXNpemUiOiAiMC40LjAiLAorICAgICJncnVudC1jb250cmliLWpzaGludCI6ICIwLjEx
LjIiLAorICAgICJncnVudC1jb250cmliLXVnbGlmeSI6ICIwLjkuMiIsCisgICAgImdydW50LWNv
bnRyaWItd2F0Y2giOiAiMC42LjEiLAorICAgICJncnVudC1naXQtYXV0aG9ycyI6ICIyLjAuMSIs
CisgICAgImdydW50LWpzY3MiOiAiMi4xLjAiLAorICAgICJncnVudC1qc29ubGludCI6ICIxLjAu
NCIsCisgICAgImdydW50LW5wbWNvcHkiOiAiMC4xLjAiLAorICAgICJnemlwLWpzIjogIjAuMy4y
IiwKKyAgICAianNkb20iOiAiNS42LjEiLAorICAgICJsb2FkLWdydW50LXRhc2tzIjogIjEuMC4w
IiwKKyAgICAicXVuaXQtYXNzZXJ0LXN0ZXAiOiAiMS4wLjMiLAorICAgICJxdW5pdGpzIjogIjEu
MTcuMSIsCisgICAgInJlcXVpcmVqcyI6ICIyLjEuMTciLAorICAgICJzaW5vbiI6ICIxLjEwLjMi
LAorICAgICJzaXp6bGUiOiAiMi4yLjEiLAorICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIjEu
MC4zIiwKKyAgICAidGVzdHN3YXJtIjogIjEuMS4wIiwKKyAgICAid2luLXNwYXduIjogIjIuMC4w
IgorICB9LAorICAiZGlyZWN0b3JpZXMiOiB7fSwKKyAgImRpc3QiOiB7CisgICAgInNoYXN1bSI6
ICIyYzg5ZDY4ODliNWVhYzUyMmE3ZWVhMzJjMTQ1MjE1NTljNmNiZjAyIiwKKyAgICAidGFyYmFs
bCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcXVlcnkvLS9qcXVlcnktMi4yLjQudGd6
IgorICB9LAorICAiZ2l0SGVhZCI6ICJjMDE4NWFiN2M3NWFhYjg4NzYyYzVhYWU3ODBiOWQ4M2I4
MGVkYTcyIiwKKyAgImhvbWVwYWdlIjogImh0dHA6Ly9qcXVlcnkuY29tIiwKKyAgImtleXdvcmRz
IjogWworICAgICJqcXVlcnkiLAorICAgICJqYXZhc2NyaXB0IiwKKyAgICAiYnJvd3NlciIsCisg
ICAgImxpYnJhcnkiCisgIF0sCisgICJsaWNlbnNlIjogIk1JVCIsCisgICJtYWluIjogImRpc3Qv
anF1ZXJ5LmpzIiwKKyAgIm1haW50YWluZXJzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogImRt
ZXRodmluIiwKKyAgICAgICJlbWFpbCI6ICJkYXZlLm1ldGh2aW5AZ21haWwuY29tIgorICAgIH0s
CisgICAgeworICAgICAgIm5hbWUiOiAic2NvdHQuZ29uemFsZXoiLAorICAgICAgImVtYWlsIjog
InNjb3R0LmdvbnphbGV6QGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
Im1fZ29sIiwKKyAgICAgICJlbWFpbCI6ICJtLmdvbGViQGdtYWlsLmNvbSIKKyAgICB9LAorICAg
IHsKKyAgICAgICJuYW1lIjogInRpbW15d2lsIiwKKyAgICAgICJlbWFpbCI6ICJ0aW1teXdpbGxp
c25AZ21haWwuY29tIgorICAgIH0KKyAgXSwKKyAgIm5hbWUiOiAianF1ZXJ5IiwKKyAgIm9wdGlv
bmFsRGVwZW5kZW5jaWVzIjoge30sCisgICJyZWFkbWUiOiAiRVJST1I6IE5vIFJFQURNRSBkYXRh
IGZvdW5kISIsCisgICJyZXBvc2l0b3J5IjogeworICAgICJ0eXBlIjogImdpdCIsCisgICAgInVy
bCI6ICJnaXQraHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkuZ2l0IgorICB9LAorICAi
c2NyaXB0cyI6IHsKKyAgICAiYnVpbGQiOiAibnBtIGluc3RhbGwgJiYgZ3J1bnQiLAorICAgICJz
dGFydCI6ICJncnVudCB3YXRjaCIsCisgICAgInRlc3QiOiAiZ3J1bnQgJiYgZ3J1bnQgdGVzdCIK
KyAgfSwKKyAgInRpdGxlIjogImpRdWVyeSIsCisgICJ2ZXJzaW9uIjogIjIuMi40IgorfQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL21lbW9yeXN0b3Jh
Z2UvbWVtb3J5c3RvcmFnZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9tZW1vcnlzdG9yYWdlL21lbW9yeXN0b3JhZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjY4M2U1Njk2Yzgw
ZmJiYzBhN2RkNTlhN2Y3NDA3N2Y1ZGNjNzE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9tZW1vcnlzdG9yYWdlL21lbW9yeXN0b3JhZ2Uu
anMKQEAgLTAsMCArMSwzIEBACisvKiEgbWVtb3J5c3RvcmFnZSAwLjExLjAgwqkyMDE2IGJ5IFN0
aWpuIGRlIFdpdHQgYW5kIGNvbnRyaWJ1dG9ycy4gU29tZSByaWdodHMgcmVzZXJ2ZWQuIExpY2Vu
c2U6IENDLUJZLTQuMCAqLworIWZ1bmN0aW9uKHUsbSxkKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVm
aW5lJiZkZWZpbmUuYW1kP2RlZmluZSgibWVtb3J5c3RvcmFnZSIsW10sZnVuY3Rpb24oKXtyZXR1
cm4gZCgpfSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWQoKTp1W21d
PWQoKX0odGhpcywiTWVtb3J5U3RvcmFnZSIsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gTWVtb3J5U3RvcmFnZShjKXtmdW5jdGlvbiBlKCl7cmV0dXJuIE9iamVjdC5rZXlzKGgpLmZp
bHRlcihmdW5jdGlvbihiKXtyZXR1cm4hKGIgaW4gYSl9KX1mdW5jdGlvbiBmKCl7cmV0dXJuIE9i
amVjdC5rZXlzKGkpfWZ1bmN0aW9uIGcoKXtyZXR1cm4gZSgpLmNvbmNhdChmKCkpfWM9Y3x8Imds
b2JhbCI7dmFyIGg9YltjXTtpZihoKXJldHVybiBoO2lmKCEodGhpcyBpbnN0YW5jZW9mIE1lbW9y
eVN0b3JhZ2UpKXJldHVybiBuZXcgTWVtb3J5U3RvcmFnZShjKTtoPWJbY109dGhpczt2YXIgaT17
fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImlkIix7ZW51bWVyYWJsZTohMCxjb25m
aWd1cmFibGU6ITAsdmFsdWU6Y30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJsZW5ndGgiLHtl
bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZygpLmxl
bmd0aH19KSxoLmdldEl0ZW09ZnVuY3Rpb24oYil7cmV0dXJuKGIgaW4gYT9pW2JdOnRoaXNbYl0p
fHxudWxsfSxoLnNldEl0ZW09ZnVuY3Rpb24oYixjKXtiIGluIGE/aVtiXT1jOnRoaXNbYl09Y30s
aC5yZW1vdmVJdGVtPWZ1bmN0aW9uKGIpe2IgaW4gYT9kZWxldGUgaVtiXTpkZWxldGUgdGhpc1ti
XX0saC5rZXk9ZnVuY3Rpb24oYSl7dmFyIGI9ZygpO3JldHVybiBhPj0wJiZhPGIubGVuZ3RoP2Jb
YV06bnVsbH0saC5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgYSxiPWUoKSxjPTA7YT1iW2NdO2Mr
KylkZWxldGUgdGhpc1thXTtiPWYoKTtmb3IodmFyIGEsYz0wO2E9YltjXTtjKyspZGVsZXRlIGlb
YV19LCJ1bmRlZmluZWQiPT10eXBlb2YgUHJveHk/aDpuZXcgUHJveHkoaCx7b3duS2V5czpmdW5j
dGlvbigpe3JldHVybiBnKCl9fSl9dmFyIGE9e2NsZWFyOjEsZ2V0SXRlbToxLGlkOjEsa2V5OjEs
bGVuZ3RoOjEscmVtb3ZlSXRlbToxLHNldEl0ZW06MX0sYj17fTtyZXR1cm4gTWVtb3J5U3RvcmFn
ZX0pOworLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVtb3J5c3RvcmFnZS5taW4uanMubWFwClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L0xJQ0VOU0UgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvTElDRU5TRQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
NjJlYjBmMjhmMTE4NzlmZjFlM2VjNTRjZDg3ZTNkZjE4ZjUwZTk0Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L0xJ
Q0VOU0UKQEAgLTAsMCArMSw0NSBAQAorQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBv
dGhlciBjb250cmlidXRvcnMsIGh0dHBzOi8vanF1ZXJ5Lm9yZy8KKworVGhpcyBzb2Z0d2FyZSBj
b25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKK2luZGl2aWR1
YWxzLiBGb3IgZXhhY3QgY29udHJpYnV0aW9uIGhpc3RvcnksIHNlZSB0aGUgcmV2aXNpb24gaGlz
dG9yeQorYXZhaWxhYmxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvdGV4dAorCitU
aGUgZm9sbG93aW5nIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgcGFydHMgb2YgdGhpcyBzb2Z0d2Fy
ZSBleGNlcHQgYXMKK2RvY3VtZW50ZWQgYmVsb3c6CisKKz09PT0KKworUGVybWlzc2lvbiBpcyBo
ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCith
IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz
ICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry
aWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu
ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMg
dG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVz
IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBS
RVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ
RVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENP
UFlSSUdIVCBIT0xERVJTIEJFCitMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF
UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCitPRiBDT05UUkFDVCwgVE9SVCBPUiBP
VEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhF
IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgor
Cis9PT09CisKK0NvcHlyaWdodCBhbmQgcmVsYXRlZCByaWdodHMgZm9yIHNhbXBsZSBjb2RlIGFy
ZSB3YWl2ZWQgdmlhIENDMC4gU2FtcGxlCitjb2RlIGlzIGRlZmluZWQgYXMgYWxsIHNvdXJjZSBj
b2RlIGRpc3BsYXllZCB3aXRoaW4gdGhlIHByb3NlIG9mIHRoZQorZG9jdW1lbnRhdGlvbi4KKwor
Q0MwOiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisK
Kz09PT0KKworRmlsZXMgbG9jYXRlZCBpbiB0aGUgbm9kZV9tb2R1bGVzIGRpcmVjdG9yeSwgYW5k
IGNlcnRhaW4gdXRpbGl0aWVzIHVzZWQKK3RvIGJ1aWxkIG9yIHRlc3QgdGhlIHNvZnR3YXJlIGlu
IHRoZSB0ZXN0IGFuZCBkaXN0IGRpcmVjdG9yaWVzLCBhcmUKK2V4dGVybmFsbHkgbWFpbnRhaW5l
ZCBsaWJyYXJpZXMgdXNlZCBieSB0aGlzIHNvZnR3YXJlIHdoaWNoIGhhdmUgdGhlaXIgb3duCits
aWNlbnNlczsgd2UgcmVjb21tZW5kIHlvdSByZWFkIHRoZW0sIGFzIHRoZWlyIHRlcm1zIG1heSBk
aWZmZXIgZnJvbSB0aGUKK3Rlcm1zIGFib3ZlLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L1JFQURNRS5tZCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC9SRUFETUUubWQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMWVkMjNiMjM3MmU4MDZkZWQ1MzY2M2JiZDE0YzcyOGMyODlkODA4ZgotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJl
anMtdGV4dC9SRUFETUUubWQKQEAgLTAsMCArMSwyMDYgQEAKKyMgdGV4dAorCitBIFtSZXF1aXJl
SlNdKGh0dHA6Ly9yZXF1aXJlanMub3JnKS9BTUQgbG9hZGVyIHBsdWdpbiBmb3IgbG9hZGluZyB0
ZXh0CityZXNvdXJjZXMuCisKK0tub3duIHRvIHdvcmsgaW4gUmVxdWlyZUpTLCBidXQgc2hvdWxk
IHdvcmsgaW4gb3RoZXIgQU1EIGxvYWRlcnMgdGhhdCBzdXBwb3J0Cit0aGUgc2FtZSBsb2FkZXIg
cGx1Z2luIEFQSS4KKworIyMgRG9jcworCitTZWUgdGhlIFtSZXF1aXJlSlMgQVBJIHRleHQgc2Vj
dGlvbl0oaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9hcGkuaHRtbCN0ZXh0KS4KKworIyMgTGF0
ZXN0IHJlbGVhc2UKKworVGhlIGxhdGVzdCByZWxlYXNlIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJv
bSBbdGhlICJsYXRlc3QiIHRhZ10oaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9yZXF1aXJlanMvdGV4
dC9sYXRlc3QvdGV4dC5qcykuCisKK0l0IGNhbiBhbHNvIGJlIGluc3RhbGxlZCB1c2luZyBbdm9s
b10oaHR0cHM6Ly9naXRodWIuY29tL3ZvbG9qcy92b2xvKToKKworICAgIHZvbG8gYWRkIHJlcXVp
cmVqcy90ZXh0CisKK0lmIHVzaW5nIG5wbToKKworICAgIG5wbSBpbnN0YWxsIHJlcXVpcmVqcy90
ZXh0CisKKyMjIFVzYWdlCisKK0l0IGlzIG5pY2UgdG8gYnVpbGQgSFRNTCB1c2luZyByZWd1bGFy
IEhUTUwgdGFncywgaW5zdGVhZCBvZiBidWlsZGluZyB1cCBET00KK3N0cnVjdHVyZXMgaW4gc2Ny
aXB0LiBIb3dldmVyLCB0aGVyZSBpcyBubyBnb29kIHdheSB0byBlbWJlZCBIVE1MIGluIGEKK0ph
dmFTY3JpcHQgZmlsZS4gVGhlIGJlc3QgdGhhdCBjYW4gYmUgZG9uZSBpcyB1c2luZyBhIHN0cmlu
ZyBvZiBIVE1MLCBidXQgdGhhdAorY2FuIGJlIGhhcmQgdG8gbWFuYWdlLCBwYXJ0aWN1bGFybHkg
Zm9yIG11bHRpLWxpbmUgSFRNTC4KKworVGhlIHRleHQuanMgQU1EIGxvYWRlciBwbHVnaW4gY2Fu
IGhlbHAgd2l0aCB0aGlzIGlzc3VlLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKK2xvYWRlZCBp
ZiB0aGUgdGV4dCEgcHJlZml4IGlzIHVzZWQgZm9yIGEgZGVwZW5kZW5jeS4gRG93bmxvYWQgdGhl
IHBsdWdpbiBhbmQgcHV0CitpdCBpbiB0aGUgYXBwJ3MgW2Jhc2VVcmxdKGh0dHA6Ly9yZXF1aXJl
anMub3JnL2RvY3MvYXBpLmh0bWwjY29uZmlnLWJhc2VVcmwpCitkaXJlY3RvcnkgKG9yIHVzZSB0
aGUgW3BhdGhzIGNvbmZpZ10oaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9hcGkuaHRtbCNjb25m
aWctcGF0aHMpIHRvIHBsYWNlIGl0IGluIG90aGVyIGFyZWFzKS4KKworWW91IGNhbiBzcGVjaWZ5
IGEgdGV4dCBmaWxlIHJlc291cmNlIGFzIGEgZGVwZW5kZW5jeSBsaWtlIHNvOgorCitgYGBqYXZh
c2NyaXB0CityZXF1aXJlKFsic29tZS9tb2R1bGUiLCAidGV4dCFzb21lL21vZHVsZS5odG1sIiwg
InRleHQhc29tZS9tb2R1bGUuY3NzIl0sCisgICAgZnVuY3Rpb24obW9kdWxlLCBodG1sLCBjc3Mp
IHsKKyAgICAgICAgLy90aGUgaHRtbCB2YXJpYWJsZSB3aWxsIGJlIHRoZSB0ZXh0CisgICAgICAg
IC8vb2YgdGhlIHNvbWUvbW9kdWxlLmh0bWwgZmlsZQorICAgICAgICAvL3RoZSBjc3MgdmFyaWFi
bGUgd2lsbCBiZSB0aGUgdGV4dAorICAgICAgICAvL29mIHRoZSBzb21lL21vZHVsZS5jc3MgZmls
ZS4KKyAgICB9CispOworYGBgCisKK05vdGljZSB0aGUgLmh0bWwgYW5kIC5jc3Mgc3VmZml4ZXMg
dG8gc3BlY2lmeSB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlLiBUaGUKKyJzb21lL21vZHVsZSIg
cGFydCBvZiB0aGUgcGF0aCB3aWxsIGJlIHJlc29sdmVkIGFjY29yZGluZyB0byBub3JtYWwgbW9k
dWxlIG5hbWUKK3Jlc29sdXRpb246IGl0IHdpbGwgdXNlIHRoZSAqKmJhc2VVcmwqKiBhbmQgKipw
YXRocyoqIFtjb25maWd1cmF0aW9uCitvcHRpb25zXShodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2Nz
L2FwaS5odG1sI2NvbmZpZykgdG8gbWFwIHRoYXQgbmFtZSB0byBhIHBhdGguCisKK0ZvciBIVE1M
L1hNTC9TVkcgZmlsZXMsIHRoZXJlIGlzIGFub3RoZXIgb3B0aW9uLiBZb3UgY2FuIHBhc3MgIXN0
cmlwLCB3aGljaAorc3RyaXBzIFhNTCBkZWNsYXJhdGlvbnMgc28gdGhhdCBleHRlcm5hbCBTVkcg
YW5kIFhNTCBkb2N1bWVudHMgY2FuIGJlIGFkZGVkIHRvIGEKK2RvY3VtZW50IHdpdGhvdXQgd29y
cnkuIEFsc28sIGlmIHRoZSBzdHJpbmcgaXMgYW4gSFRNTCBkb2N1bWVudCwgb25seSB0aGUgcGFy
dAoraW5zaWRlIHRoZSBib2R5IHRhZyBpcyByZXR1cm5lZC4gRXhhbXBsZToKKworYGBgamF2YXNj
cmlwdAorcmVxdWlyZShbInRleHQhc29tZS9tb2R1bGUuaHRtbCFzdHJpcCJdLAorICAgIGZ1bmN0
aW9uKGh0bWwpIHsKKyAgICAgICAgLy90aGUgaHRtbCB2YXJpYWJsZSB3aWxsIGJlIHRoZSB0ZXh0
IG9mIHRoZQorICAgICAgICAvL3NvbWUvbW9kdWxlLmh0bWwgZmlsZSwgYnV0IG9ubHkgdGhlIHBh
cnQKKyAgICAgICAgLy9pbnNpZGUgdGhlIGJvZHkgdGFnLgorICAgIH0KKyk7CitgYGAKKworVGhl
IHRleHQgZmlsZXMgYXJlIGxvYWRlZCB2aWEgYXN5bmNocm9ub3VzIFhNTEh0dHBSZXF1ZXN0IChY
SFIpIGNhbGxzLCBzbyB5b3UKK2NhbiBvbmx5IGZldGNoIGZpbGVzIGZyb20gdGhlIHNhbWUgZG9t
YWluIGFzIHRoZSB3ZWIgcGFnZSAoc2VlICoqWEhSCityZXN0cmljdGlvbnMqKiBiZWxvdykuCisK
K0hvd2V2ZXIsIFt0aGUgUmVxdWlyZUpTIG9wdGltaXplcl0oaHR0cDovL3JlcXVpcmVqcy5vcmcv
ZG9jcy9vcHRpbWl6YXRpb24uaHRtbCkKK3dpbGwgaW5saW5lIGFueSB0ZXh0ISByZWZlcmVuY2Vz
IHdpdGggdGhlIGFjdHVhbCB0ZXh0IGZpbGUgY29udGVudHMgaW50byB0aGUKK21vZHVsZXMsIHNv
IGFmdGVyIGEgYnVpbGQsIHRoZSBtb2R1bGVzIHRoYXQgaGF2ZSB0ZXh0ISBkZXBlbmRlbmNpZXMg
Y2FuIGJlIHVzZWQKK2Zyb20gb3RoZXIgZG9tYWlucy4KKworIyMgQ29uZmlndXJhdGlvbgorCisj
IyMgWEhSIHJlc3RyaWN0aW9ucworCitUaGUgdGV4dCBwbHVnaW4gd29ya3MgYnkgdXNpbmcgWE1M
SHR0cFJlcXVlc3QgKFhIUikgdG8gZmV0Y2ggdGhlIHRleHQgZm9yIHRoZQorcmVzb3VyY2VzIGl0
IGhhbmRsZXMuCisKK0hvd2V2ZXIsIFhIUiBjYWxscyBoYXZlIHNvbWUgcmVzdHJpY3Rpb25zLCBk
dWUgdG8gYnJvd3Nlci93ZWIgc2VjdXJpdHkgcG9saWNpZXM6CisKKzEpIE1hbnkgYnJvd3NlcnMg
ZG8gbm90IGFsbG93IGZpbGU6Ly8gYWNjZXNzIHRvIGp1c3QgYW55IGZpbGUuIFlvdSBhcmUgYmV0
dGVyCitvZmYgc2VydmluZyB0aGUgYXBwbGljYXRpb24gZnJvbSBhIGxvY2FsIHdlYiBzZXJ2ZXIg
dGhhbiB1c2luZyBsb2NhbCBmaWxlOi8vCitVUkxzLiBZb3Ugd2lsbCBsaWtlbHkgcnVuIGludG8g
dHJvdWJsZSBvdGhlcndpc2UuCisKKzIpIFRoZXJlIGFyZSByZXN0cmljdGlvbnMgZm9yIHVzaW5n
IFhIUiB0byBhY2Nlc3MgZmlsZXMgb24gYW5vdGhlciB3ZWIgZG9tYWluLgorV2hpbGUgQ09SUyBj
YW4gaGVscCBlbmFibGUgdGhlIHNlcnZlciBmb3IgY3Jvc3MtZG9tYWluIGFjY2VzcywgZG9pbmcg
c28gbXVzdAorYmUgZG9uZSB3aXRoIGNhcmUgKGluIHBhcnRpY3VsYXIgaWYgeW91IGFsc28gaG9z
dCBhbiBBUEkgZnJvbSB0aGF0IGRvbWFpbiksCithbmQgbm90IGFsbCBicm93c2VycyBzdXBwb3J0
IENPUlMuCisKK1NvIGlmIHRoZSB0ZXh0IHBsdWdpbiBkZXRlcm1pbmVzIHRoYXQgdGhlIHJlcXVl
c3QgZm9yIHRoZSByZXNvdXJjZSBpcyBvbiBhbm90aGVyCitkb21haW4sIGl0IHdpbGwgdHJ5IHRv
IGFjY2VzcyBhICIuanMiIHZlcnNpb24gb2YgdGhlIHJlc291cmNlIGJ5IHVzaW5nIGEKK3Njcmlw
dCB0YWcuIFNjcmlwdCB0YWcgR0VUIHJlcXVlc3RzIGFyZSBhbGxvd2VkIGFjcm9zcyBkb21haW5z
LiBUaGUgLmpzIHZlcnNpb24KK29mIHRoZSByZXNvdXJjZSBzaG91bGQganVzdCBiZSBhIHNjcmlw
dCB3aXRoIGEgZGVmaW5lKCkgY2FsbCBpbiBpdCB0aGF0IHJldHVybnMKK2Egc3RyaW5nIGZvciB0
aGUgbW9kdWxlIHZhbHVlLgorCitFeGFtcGxlOiBpZiB0aGUgcmVzb3VyY2UgaXMgJ3RleHQhZXhh
bXBsZS5odG1sJyBhbmQgdGhhdCByZXNvbHZlcyB0byBhIHBhdGgKK29uIGFub3RoZXIgd2ViIGRv
bWFpbiwgdGhlIHRleHQgcGx1Z2luIHdpbGwgZG8gYSBzY3JpcHQgdGFnIGxvYWQgZm9yCisnZXhh
bXBsZS5odG1sLmpzJy4KKworVGhlIFtyZXF1aXJlanMgb3B0aW1pemVyXShodHRwOi8vcmVxdWly
ZWpzLm9yZy9kb2NzL29wdGltaXphdGlvbi5odG1sKSB3aWxsCitnZW5lcmF0ZSB0aGVzZSAnLmpz
JyB2ZXJzaW9ucyBvZiB0aGUgdGV4dCByZXNvdXJjZXMgaWYgeW91IHNldCB0aGlzIGluIHRoZQor
YnVpbGQgcHJvZmlsZToKKworICAgIG9wdGltaXplQWxsUGx1Z2luUmVzb3VyY2VzOiB0cnVlCisK
K0luIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2FudCB0aGUgdGV4dCBwbHVnaW4gdG8gbm90IHRyeSB0
aGUgLmpzIHJlc291cmNlLCBtYXliZQorYmVjYXVzZSB5b3UgaGF2ZSBjb25maWd1cmVkIENPUlMg
b24gdGhlIG90aGVyIHNlcnZlciwgYW5kIHlvdSBrbm93IHRoYXQgb25seQorYnJvd3NlcnMgdGhh
dCBzdXBwb3J0IENPUlMgd2lsbCBiZSB1c2VkLiBJbiB0aGF0IGNhc2UgeW91IGNhbiB1c2UgdGhl
CitbbW9kdWxlIGNvbmZpZ10oaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9hcGkuaHRtbCNjb25m
aWctbW9kdWxlY29uZmlnKQorKHJlcXVpcmVzIFJlcXVpcmVKUyAyKykgdG8gb3ZlcnJpZGUgc29t
ZSBvZiB0aGUgYmFzaWMgbG9naWMgdGhlIHBsdWdpbiB1c2VzIHRvCitkZXRlcm1pbmUgaWYgdGhl
IC5qcyBmaWxlIHNob3VsZCBiZSByZXF1ZXN0ZWQ6CisKK2BgYGphdmFzY3JpcHQKK3JlcXVpcmVq
cy5jb25maWcoeworICAgIGNvbmZpZzogeworICAgICAgICB0ZXh0OiB7CisgICAgICAgICAgICB1
c2VYaHI6IGZ1bmN0aW9uICh1cmwsIHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCkgeworICAgICAg
ICAgICAgICAgIC8vT3ZlcnJpZGUgZnVuY3Rpb24gZm9yIGRldGVybWluaW5nIGlmIFhIUiBzaG91
bGQgYmUgdXNlZC4KKyAgICAgICAgICAgICAgICAvL3VybDogdGhlIFVSTCBiZWluZyByZXF1ZXN0
ZWQKKyAgICAgICAgICAgICAgICAvL3Byb3RvY29sOiBwcm90b2NvbCBvZiBwYWdlIHRleHQuanMg
aXMgcnVubmluZyBvbgorICAgICAgICAgICAgICAgIC8vaG9zdG5hbWU6IGhvc3RuYW1lIG9mIHBh
Z2UgdGV4dC5qcyBpcyBydW5uaW5nIG9uCisgICAgICAgICAgICAgICAgLy9wb3J0OiBwb3J0IG9m
IHBhZ2UgdGV4dC5qcyBpcyBydW5uaW5nIG9uCisgICAgICAgICAgICAgICAgLy9Vc2UgcHJvdG9j
b2wsIGhvc3RuYW1lLCBhbmQgcG9ydCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHVybAorICAgICAg
ICAgICAgICAgIC8vYmVpbmcgcmVxdWVzdGVkLgorICAgICAgICAgICAgICAgIC8vUmV0dXJuIHRy
dWUgb3IgZmFsc2UuIHRydWUgbWVhbnMgInVzZSB4aHIiLCBmYWxzZSBtZWFucworICAgICAgICAg
ICAgICAgIC8vImZldGNoIHRoZSAuanMgdmVyc2lvbiBvZiB0aGlzIHJlc291cmNlIi4KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30pOworYGBgCisKKyMjIyBDdXN0b20gWEhSIGhv
b2tzCisKK1RoZXJlIG1heSBiZSBjYXNlcyB3aGVyZSB5b3UgbWlnaHQgd2FudCB0byBwcm92aWRl
IHRoZSBYSFIgb2JqZWN0IHRvIHVzZQoraW4gdGhlIHJlcXVlc3QsIG9yIHlvdSBtYXkganVzdCB3
YW50IHRvIGFkZCBzb21lIGN1c3RvbSBoZWFkZXJzIHRvIHRoZQorWEhSIG9iamVjdCB1c2VkIHRv
IG1ha2UgdGhlIHJlcXVlc3QuIFlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgaG9va3M6CisKK2Bg
YGphdmFzY3JpcHQKK3JlcXVpcmVqcy5jb25maWcoeworICAgIGNvbmZpZzogeworICAgICAgICB0
ZXh0OiB7CisgICAgICAgICAgICBvblhocjogZnVuY3Rpb24gKHhociwgdXJsKSB7CisgICAgICAg
ICAgICAgICAgLy9DYWxsZWQgYWZ0ZXIgdGhlIFhIUiBoYXMgYmVlbiBjcmVhdGVkIGFuZCBhZnRl
ciB0aGUKKyAgICAgICAgICAgICAgICAvL3hoci5vcGVuKCkgY2FsbCwgYnV0IGJlZm9yZSB0aGUg
eGhyLnNlbmQoKSBjYWxsLgorICAgICAgICAgICAgICAgIC8vVXNlZnVsIHRpbWUgdG8gc2V0IGhl
YWRlcnMuCisgICAgICAgICAgICAgICAgLy94aHI6IHRoZSB4aHIgb2JqZWN0CisgICAgICAgICAg
ICAgICAgLy91cmw6IHRoZSB1cmwgdGhhdCBpcyBiZWluZyB1c2VkIHdpdGggdGhlIHhociBvYmpl
Y3QuCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY3JlYXRlWGhyOiBmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgLy9PdmVycmlkZXMgdGhlIGNyZWF0aW9uIG9mIHRoZSBYSFIgb2Jq
ZWN0LiBSZXR1cm4gYW4gWEhSCisgICAgICAgICAgICAgICAgLy9vYmplY3QgZnJvbSB0aGlzIGZ1
bmN0aW9uLgorICAgICAgICAgICAgICAgIC8vQXZhaWxhYmxlIGluIHRleHQuanMgMi4wLjEgb3Ig
bGF0ZXIuCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgb25YaHJDb21wbGV0ZTogZnVuY3Rp
b24gKHhociwgdXJsKSB7CisgICAgICAgICAgICAgICAgLy9DYWxsZWQgd2hlbmV2ZXIgYW4gWEhS
IGhhcyBjb21wbGV0ZWQgaXRzIHdvcmsuIFVzZWZ1bAorICAgICAgICAgICAgICAgIC8vaWYgYnJv
d3Nlci1zcGVjaWZpYyB4aHIgY2xlYW51cCBuZWVkcyB0byBiZSBkb25lLgorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfSk7CitgYGAKKworIyMjIEZvcmNpbmcgdGhlIGVudmlyb25t
ZW50IGltcGxlbWVudGF0aW9uCisKK1RoZSB0ZXh0IHBsdWdpbiB0cmllcyB0byBkZXRlY3Qgd2hh
dCBlbnZpcm9ubWVudCBpdCBpcyBhdmFpbGFibGUgZm9yIGxvYWRpbmcKK3RleHQgcmVzb3VyY2Vz
LCBOb2RlLCBYTUxIdHRwUmVxdWVzdCAoWEhSKSBvciBSaGlubywgYnV0IHNvbWV0aW1lcyB0aGUK
K05vZGUgb3IgUmhpbm8gZW52aXJvbm1lbnQgbWF5IGhhdmUgbG9hZGVkIGEgbGlicmFyeSB0aGF0
IGludHJvZHVjZXMgYW4gWEhSCitpbXBsZW1lbnRhdGlvbi4gWW91IGNhbiBmb3JjZSB0aGUgZW52
aXJvbm1lbnQgaW1wbGVtZW50YXRpb24gdG8gdXNlIGJ5IHBhc3NpbmcKK2FuICJlbnYiIG1vZHVs
ZSBjb25maWcgdG8gdGhlIHBsdWdpbjoKKworYGBgamF2YXNjcmlwdAorcmVxdWlyZWpzLmNvbmZp
Zyh7CisgICAgY29uZmlnOiB7CisgICAgICAgIHRleHQ6IHsKKyAgICAgICAgICAgIC8vVmFsaWQg
dmFsdWVzIGFyZSAnbm9kZScsICd4aHInLCBvciAncmhpbm8nCisgICAgICAgICAgICBlbnY6ICdy
aGlubycKKyAgICAgICAgfQorICAgIH0KK30pOworYGBgCisKKyMjIExpY2Vuc2UKKworTUlUCisK
KyMjIENvZGUgb2YgQ29uZHVjdAorCitbalF1ZXJ5IEZvdW5kYXRpb24gQ29kZSBvZiBDb25kdWN0
XShodHRwczovL2pxdWVyeS5vcmcvY29uZHVjdC8pLgorCisjIyBXaGVyZSBhcmUgdGhlIHRlc3Rz
PworCitUaGV5IGFyZSBpbiB0aGUgW3JlcXVpcmVqc10oaHR0cHM6Ly9naXRodWIuY29tL3JlcXVp
cmVqcy9yZXF1aXJlanMpIGFuZAorW3IuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMv
ci5qcykgcmVwb3MuCisKKyMjIEhpc3RvcnkKKworVGhpcyBwbHVnaW4gd2FzIGluIHRoZSBbcmVx
dWlyZWpzIHJlcG9dKGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzKQordXAg
dW50aWwgdGhlIHJlcXVpcmVqcyAyLjAgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC9ib3dlci5qc29uIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L2Jvd2VyLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjNiZGE5MGI1ZmIyN2YxNGUyYTUzNmE2MDViYjg4ZTQ5ZGIxZTdkNAot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9y
ZXF1aXJlanMtdGV4dC9ib3dlci5qc29uCkBAIC0wLDAgKzEsNiBAQAoreworICAibmFtZSI6ICJ0
ZXh0IiwKKyAgInZlcnNpb24iOiAiMi4wLjE1IiwKKyAgIm1haW4iOiAidGV4dC5qcyIsCisgICJs
aWNlbnNlIjogIk1JVCIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvcGFj
a2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVq
cy10ZXh0L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2YxMDg2ZjhjYzE5MjlmMDBmNjU4OTk3
NTUzYWQ0OGM1ZjQ0NGJlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3BhY2thZ2UuanNvbgpAQCAtMCwwICsxLDg1
IEBACit7CisgICJfYXJncyI6IFsKKyAgICBbCisgICAgICB7CisgICAgICAgICJyYXciOiAicmVx
dWlyZWpzLXRleHRAXjIuMC4xMiIsCisgICAgICAgICJzY29wZSI6IG51bGwsCisgICAgICAgICJl
c2NhcGVkTmFtZSI6ICJyZXF1aXJlanMtdGV4dCIsCisgICAgICAgICJuYW1lIjogInJlcXVpcmVq
cy10ZXh0IiwKKyAgICAgICAgInJhd1NwZWMiOiAiXjIuMC4xMiIsCisgICAgICAgICJzcGVjIjog
Ij49Mi4wLjEyIDwzLjAuMCIsCisgICAgICAgICJ0eXBlIjogInJhbmdlIgorICAgICAgfSwKKyAg
ICAgICIvVXNlcnMvYWRkeW8vRGVza3RvcC9TcGVlZG9tZXRlci1hL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0IgorICAgIF0KKyAgXSwKKyAgIl9mcm9tIjogInJl
cXVpcmVqcy10ZXh0QD49Mi4wLjEyIDwzLjAuMCIsCisgICJfaWQiOiAicmVxdWlyZWpzLXRleHRA
Mi4wLjE1IiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvcmVxdWlyZWpz
LXRleHQiLAorICAiX25vZGVWZXJzaW9uIjogIjcuMi4xIiwKKyAgIl9ucG1PcGVyYXRpb25hbElu
dGVybmFsIjogeworICAgICJob3N0IjogInBhY2thZ2VzLTEyLXdlc3QuaW50ZXJuYWwubnBtanMu
Y29tIiwKKyAgICAidG1wIjogInRtcC9yZXF1aXJlanMtdGV4dC0yLjAuMTUudGd6XzE0ODIwNzQx
MDkzMDJfMC45ODYwNTk4MDg2Mzc5NDY4IgorICB9LAorICAiX25wbVVzZXIiOiB7CisgICAgIm5h
bWUiOiAiY2hlc3RvbiIsCisgICAgImVtYWlsIjogImNoZXN0b25sbG95ZEBnbWFpbC5jb20iCisg
IH0sCisgICJfbnBtVmVyc2lvbiI6ICIzLjEwLjEwIiwKKyAgIl9waGFudG9tQ2hpbGRyZW4iOiB7
fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7CisgICAgInJhdyI6ICJyZXF1aXJlanMtdGV4dEBeMi4wLjEy
IiwKKyAgICAic2NvcGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJyZXF1aXJlanMtdGV4
dCIsCisgICAgIm5hbWUiOiAicmVxdWlyZWpzLXRleHQiLAorICAgICJyYXdTcGVjIjogIl4yLjAu
MTIiLAorICAgICJzcGVjIjogIj49Mi4wLjEyIDwzLjAuMCIsCisgICAgInR5cGUiOiAicmFuZ2Ui
CisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIKKyAgXSwKKyAgIl9yZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJlanMtdGV4dC8tL3JlcXVpcmVqcy10
ZXh0LTIuMC4xNS50Z3oiLAorICAiX3NoYXN1bSI6ICIxMzEzODczMzYxM2ZjNDQ1N2I3ZTEyNDdl
OGNiNzUxZGY3YWE1NDI5IiwKKyAgIl9zaHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogInJl
cXVpcmVqcy10ZXh0QF4yLjAuMTIiLAorICAiX3doZXJlIjogIi9Vc2Vycy9hZGR5by9EZXNrdG9w
L1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQiLAorICAiYnVncyI6IHsKKyAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJl
anMvdGV4dC9pc3N1ZXMiCisgIH0sCisgICJjYXRlZ29yaWVzIjogWworICAgICJMb2FkZXIgcGx1
Z2lucyIKKyAgXSwKKyAgImRlcGVuZGVuY2llcyI6IHt9LAorICAiZGVzY3JpcHRpb24iOiAiQW4g
QU1EIGxvYWRlciBwbHVnaW4gZm9yIGxvYWRpbmcgdGV4dCByZXNvdXJjZXMuIiwKKyAgImRldkRl
cGVuZGVuY2llcyI6IHt9LAorICAiZGlyZWN0b3JpZXMiOiB7fSwKKyAgImRpc3QiOiB7CisgICAg
InNoYXN1bSI6ICIxMzEzODczMzYxM2ZjNDQ1N2I3ZTEyNDdlOGNiNzUxZGY3YWE1NDI5IiwKKyAg
ICAidGFyYmFsbCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJlanMtdGV4dC8t
L3JlcXVpcmVqcy10ZXh0LTIuMC4xNS50Z3oiCisgIH0sCisgICJnaXRIZWFkIjogImNhNGIwOWU3
NzliNzMwMGJlYmVmZDJiNzQ4NjQzYTZkY2RlOTcxZWYiLAorICAiZ2l0aHViIjogImh0dHBzOi8v
Z2l0aHViLmNvbS9yZXF1aXJlanMvdGV4dCIsCisgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1
Yi5jb20vcmVxdWlyZWpzL3RleHQjcmVhZG1lIiwKKyAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgIm1h
aW4iOiAidGV4dC5qcyIsCisgICJtYWludGFpbmVycyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6
ICJjaGVzdG9uIiwKKyAgICAgICJlbWFpbCI6ICJjaGVzdG9ubGxveWRAZ21haWwuY29tIgorICAg
IH0KKyAgXSwKKyAgIm5hbWUiOiAicmVxdWlyZWpzLXRleHQiLAorICAib3B0aW9uYWxEZXBlbmRl
bmNpZXMiOiB7fSwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIiwK
KyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImdpdCto
dHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3RleHQuZ2l0IgorICB9LAorICAic2NyaXB0cyI6
IHt9LAorICAidmVyc2lvbiI6ICIyLjAuMTUiLAorICAidm9sbyI6IHsKKyAgICAidXJsIjogImh0
dHBzOi8vcmF3LmdpdGh1Yi5jb20vcmVxdWlyZWpzL3RleHQve3ZlcnNpb259L3RleHQuanMiCisg
IH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9y
ZXF1aXJlanMtdGV4dC90ZXh0LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL3JlcXVpcmVqcy10ZXh0L3RleHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjgzNzBkNjJmYWM2ZDU4OTBl
OGE0M2M5MjNjYzViNjEyM2I0YjkzYgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC90ZXh0LmpzCkBAIC0wLDAgKzEs
NDA4IEBACisvKioKKyAqIEBsaWNlbnNlIHRleHQgMi4wLjE1IENvcHlyaWdodCBqUXVlcnkgRm91
bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgorICogUmVsZWFzZWQgdW5kZXIgTUlUIGxp
Y2Vuc2UsIGh0dHA6Ly9naXRodWIuY29tL3JlcXVpcmVqcy90ZXh0L0xJQ0VOU0UKKyAqLworLypq
c2xpbnQgcmVnZXhwOiB0cnVlICovCisvKmdsb2JhbCByZXF1aXJlLCBYTUxIdHRwUmVxdWVzdCwg
QWN0aXZlWE9iamVjdCwKKyAgZGVmaW5lLCB3aW5kb3csIHByb2Nlc3MsIFBhY2thZ2VzLAorICBq
YXZhLCBsb2NhdGlvbiwgQ29tcG9uZW50cywgRmlsZVV0aWxzICovCisKK2RlZmluZShbJ21vZHVs
ZSddLCBmdW5jdGlvbiAobW9kdWxlKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIHRl
eHQsIGZzLCBDYywgQ2ksIHhwY0lzV2luZG93cywKKyAgICAgICAgcHJvZ0lkcyA9IFsnTXN4bWwy
LlhNTEhUVFAnLCAnTWljcm9zb2Z0LlhNTEhUVFAnLCAnTXN4bWwyLlhNTEhUVFAuNC4wJ10sCisg
ICAgICAgIHhtbFJlZ0V4cCA9IC9eXHMqPFw/eG1sKFxzKSt2ZXJzaW9uPVtcJ1wiXShcZCkqLihc
ZCkqW1wnXCJdKFxzKSpcPz4vaW0sCisgICAgICAgIGJvZHlSZWdFeHAgPSAvPGJvZHlbXj5dKj5c
cyooW1xzXFNdKylccyo8XC9ib2R5Pi9pbSwKKyAgICAgICAgaGFzTG9jYXRpb24gPSB0eXBlb2Yg
bG9jYXRpb24gIT09ICd1bmRlZmluZWQnICYmIGxvY2F0aW9uLmhyZWYsCisgICAgICAgIGRlZmF1
bHRQcm90b2NvbCA9IGhhc0xvY2F0aW9uICYmIGxvY2F0aW9uLnByb3RvY29sICYmIGxvY2F0aW9u
LnByb3RvY29sLnJlcGxhY2UoL1w6LywgJycpLAorICAgICAgICBkZWZhdWx0SG9zdE5hbWUgPSBo
YXNMb2NhdGlvbiAmJiBsb2NhdGlvbi5ob3N0bmFtZSwKKyAgICAgICAgZGVmYXVsdFBvcnQgPSBo
YXNMb2NhdGlvbiAmJiAobG9jYXRpb24ucG9ydCB8fCB1bmRlZmluZWQpLAorICAgICAgICBidWls
ZE1hcCA9IHt9LAorICAgICAgICBtYXN0ZXJDb25maWcgPSAobW9kdWxlLmNvbmZpZyAmJiBtb2R1
bGUuY29uZmlnKCkpIHx8IHt9OworCisgICAgZnVuY3Rpb24gdXNlRGVmYXVsdCh2YWx1ZSwgZGVm
YXVsdFZhbHVlKSB7CisgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVl
ID09PSAnJyA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlOworICAgIH0KKworICAgIC8vQWxsb3cgZm9y
IGRlZmF1bHQgcG9ydHMgZm9yIGh0dHAgYW5kIGh0dHBzLgorICAgIGZ1bmN0aW9uIGlzU2FtZVBv
cnQocHJvdG9jb2wxLCBwb3J0MSwgcHJvdG9jb2wyLCBwb3J0MikgeworICAgICAgICBpZiAocG9y
dDEgPT09IHBvcnQyKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IGlmIChwcm90b2NvbDEgPT09IHByb3RvY29sMikgeworICAgICAgICAgICAgaWYgKHByb3RvY29s
MSA9PT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHVzZURlZmF1bHQocG9ydDEs
ICc4MCcpID09PSB1c2VEZWZhdWx0KHBvcnQyLCAnODAnKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAocHJvdG9jb2wxID09PSAnaHR0cHMnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHVzZURl
ZmF1bHQocG9ydDEsICc0NDMnKSA9PT0gdXNlRGVmYXVsdChwb3J0MiwgJzQ0MycpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0
ZXh0ID0geworICAgICAgICB2ZXJzaW9uOiAnMi4wLjE1JywKKworICAgICAgICBzdHJpcDogZnVu
Y3Rpb24gKGNvbnRlbnQpIHsKKyAgICAgICAgICAgIC8vU3RyaXBzIDw/eG1sIC4uLj8+IGRlY2xh
cmF0aW9ucyBzbyB0aGF0IGV4dGVybmFsIFNWRyBhbmQgWE1MCisgICAgICAgICAgICAvL2RvY3Vt
ZW50cyBjYW4gYmUgYWRkZWQgdG8gYSBkb2N1bWVudCB3aXRob3V0IHdvcnJ5LiBBbHNvLCBpZiB0
aGUgc3RyaW5nCisgICAgICAgICAgICAvL2lzIGFuIEhUTUwgZG9jdW1lbnQsIG9ubHkgdGhlIHBh
cnQgaW5zaWRlIHRoZSBib2R5IHRhZyBpcyByZXR1cm5lZC4KKyAgICAgICAgICAgIGlmIChjb250
ZW50KSB7CisgICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh4bWxSZWdF
eHAsICIiKTsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2goYm9k
eVJlZ0V4cCk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGVudCA9IG1hdGNoZXNbMV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZW50ID0gIiI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gY29udGVudDsKKyAgICAgICAgfSwKKworICAgICAgICBqc0Vz
Y2FwZTogZnVuY3Rpb24gKGNvbnRlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBjb250ZW50LnJl
cGxhY2UoLyhbJ1xcXSkvZywgJ1xcJDEnKQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXGZd
L2csICJcXGYiKQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXGJdL2csICJcXGIiKQorICAg
ICAgICAgICAgICAgIC5yZXBsYWNlKC9bXG5dL2csICJcXG4iKQorICAgICAgICAgICAgICAgIC5y
ZXBsYWNlKC9bXHRdL2csICJcXHQiKQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXHJdL2cs
ICJcXHIiKQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXHUyMDI4XS9nLCAiXFx1MjAyOCIp
CisgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcdTIwMjldL2csICJcXHUyMDI5Iik7CisgICAg
ICAgIH0sCisKKyAgICAgICAgY3JlYXRlWGhyOiBtYXN0ZXJDb25maWcuY3JlYXRlWGhyIHx8IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vV291bGQgbG92ZSB0byBkdW1wIHRoZSBBY3RpdmVY
IGNyYXAgaW4gaGVyZS4gTmVlZCBJRSA2IHRvIGRpZSBmaXJzdC4KKyAgICAgICAgICAgIHZhciB4
aHIsIGksIHByb2dJZDsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09
ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgQWN0aXZlWE9iamVjdCAhPT0gInVu
ZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7
CisgICAgICAgICAgICAgICAgICAgIHByb2dJZCA9IHByb2dJZHNbaV07CisgICAgICAgICAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9i
amVjdChwcm9nSWQpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQorCisgICAg
ICAgICAgICAgICAgICAgIGlmICh4aHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2dJ
ZHMgPSBbcHJvZ0lkXTsgIC8vIHNvIGZhc3RlciBuZXh0IHRpbWUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4geGhyOworICAgICAgICB9LAorCisg
ICAgICAgIC8qKgorICAgICAgICAgKiBQYXJzZXMgYSByZXNvdXJjZSBuYW1lIGludG8gaXRzIGNv
bXBvbmVudCBwYXJ0cy4gUmVzb3VyY2UgbmFtZXMKKyAgICAgICAgICogbG9vayBsaWtlOiBtb2R1
bGUvbmFtZS5leHQhc3RyaXAsIHdoZXJlIHRoZSAhc3RyaXAgcGFydCBpcworICAgICAgICAgKiBv
cHRpb25hbC4KKyAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlc291cmNlIG5h
bWUKKyAgICAgICAgICogQHJldHVybnMge09iamVjdH0gd2l0aCBwcm9wZXJ0aWVzICJtb2R1bGVO
YW1lIiwgImV4dCIgYW5kICJzdHJpcCIKKyAgICAgICAgICogd2hlcmUgc3RyaXAgaXMgYSBib29s
ZWFuLgorICAgICAgICAgKi8KKyAgICAgICAgcGFyc2VOYW1lOiBmdW5jdGlvbiAobmFtZSkgewor
ICAgICAgICAgICAgdmFyIG1vZE5hbWUsIGV4dCwgdGVtcCwKKyAgICAgICAgICAgICAgICBzdHJp
cCA9IGZhbHNlLAorICAgICAgICAgICAgICAgIGluZGV4ID0gbmFtZS5sYXN0SW5kZXhPZigiLiIp
LAorICAgICAgICAgICAgICAgIGlzUmVsYXRpdmUgPSBuYW1lLmluZGV4T2YoJy4vJykgPT09IDAg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS5pbmRleE9mKCcuLi8nKSA9PT0g
MDsKKworICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSAmJiAoIWlzUmVsYXRpdmUgfHwgaW5k
ZXggPiAxKSkgeworICAgICAgICAgICAgICAgIG1vZE5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBp
bmRleCk7CisgICAgICAgICAgICAgICAgZXh0ID0gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbW9kTmFtZSA9IG5hbWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlbXAgPSBleHQgfHwgbW9kTmFtZTsKKyAgICAg
ICAgICAgIGluZGV4ID0gdGVtcC5pbmRleE9mKCIhIik7CisgICAgICAgICAgICBpZiAoaW5kZXgg
IT09IC0xKSB7CisgICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgc3RyaXAgYXJnLgorICAg
ICAgICAgICAgICAgIHN0cmlwID0gdGVtcC5zdWJzdHJpbmcoaW5kZXggKyAxKSA9PT0gInN0cmlw
IjsKKyAgICAgICAgICAgICAgICB0ZW1wID0gdGVtcC5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAg
ICAgICAgICAgICAgIGlmIChleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0ID0gdGVtcDsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtb2ROYW1lID0g
dGVtcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogbW9kTmFtZSwKKyAgICAgICAgICAg
ICAgICBleHQ6IGV4dCwKKyAgICAgICAgICAgICAgICBzdHJpcDogc3RyaXAKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgeGRSZWdFeHA6IC9eKChcdyspXDopP1wvXC8oW15c
L1xcXSspLywKKworICAgICAgICAvKioKKyAgICAgICAgICogSXMgYW4gVVJMIG9uIGFub3RoZXIg
ZG9tYWluLiBPbmx5IHdvcmtzIGZvciBicm93c2VyIHVzZSwgcmV0dXJucworICAgICAgICAgKiBm
YWxzZSBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudHMuIE9ubHkgdXNlZCB0byBrbm93IGlmIGFu
CisgICAgICAgICAqIG9wdGltaXplZCAuanMgdmVyc2lvbiBvZiBhIHRleHQgcmVzb3VyY2Ugc2hv
dWxkIGJlIGxvYWRlZAorICAgICAgICAgKiBpbnN0ZWFkLgorICAgICAgICAgKiBAcGFyYW0ge1N0
cmluZ30gdXJsCisgICAgICAgICAqIEByZXR1cm5zIEJvb2xlYW4KKyAgICAgICAgICovCisgICAg
ICAgIHVzZVhocjogZnVuY3Rpb24gKHVybCwgcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0KSB7Cisg
ICAgICAgICAgICB2YXIgdVByb3RvY29sLCB1SG9zdE5hbWUsIHVQb3J0LAorICAgICAgICAgICAg
ICAgIG1hdGNoID0gdGV4dC54ZFJlZ0V4cC5leGVjKHVybCk7CisgICAgICAgICAgICBpZiAoIW1h
dGNoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB1UHJvdG9jb2wgPSBtYXRjaFsyXTsKKyAgICAgICAgICAgIHVIb3N0TmFtZSA9IG1h
dGNoWzNdOworCisgICAgICAgICAgICB1SG9zdE5hbWUgPSB1SG9zdE5hbWUuc3BsaXQoJzonKTsK
KyAgICAgICAgICAgIHVQb3J0ID0gdUhvc3ROYW1lWzFdOworICAgICAgICAgICAgdUhvc3ROYW1l
ID0gdUhvc3ROYW1lWzBdOworCisgICAgICAgICAgICByZXR1cm4gKCF1UHJvdG9jb2wgfHwgdVBy
b3RvY29sID09PSBwcm90b2NvbCkgJiYKKyAgICAgICAgICAgICAgICAgICAoIXVIb3N0TmFtZSB8
fCB1SG9zdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gaG9zdG5hbWUudG9Mb3dlckNhc2UoKSkgJiYK
KyAgICAgICAgICAgICAgICAgICAoKCF1UG9ydCAmJiAhdUhvc3ROYW1lKSB8fCBpc1NhbWVQb3J0
KHVQcm90b2NvbCwgdVBvcnQsIHByb3RvY29sLCBwb3J0KSk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgZmluaXNoTG9hZDogZnVuY3Rpb24gKG5hbWUsIHN0cmlwLCBjb250ZW50LCBvbkxvYWQpIHsK
KyAgICAgICAgICAgIGNvbnRlbnQgPSBzdHJpcCA/IHRleHQuc3RyaXAoY29udGVudCkgOiBjb250
ZW50OworICAgICAgICAgICAgaWYgKG1hc3RlckNvbmZpZy5pc0J1aWxkKSB7CisgICAgICAgICAg
ICAgICAgYnVpbGRNYXBbbmFtZV0gPSBjb250ZW50OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgb25Mb2FkKGNvbnRlbnQpOworICAgICAgICB9LAorCisgICAgICAgIGxvYWQ6IGZ1bmN0aW9u
IChuYW1lLCByZXEsIG9uTG9hZCwgY29uZmlnKSB7CisgICAgICAgICAgICAvL05hbWUgaGFzIGZv
cm1hdDogc29tZS5tb2R1bGUuZmlsZXh0IXN0cmlwCisgICAgICAgICAgICAvL1RoZSBzdHJpcCBw
YXJ0IGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgLy9pZiBzdHJpcCBpcyBwcmVzZW50LCB0aGVu
IHRoYXQgbWVhbnMgb25seSBnZXQgdGhlIHN0cmluZyBjb250ZW50cworICAgICAgICAgICAgLy9p
bnNpZGUgYSBib2R5IHRhZyBpbiBhbiBIVE1MIHN0cmluZy4gRm9yIFhNTC9TVkcgY29udGVudCBp
dCBtZWFucworICAgICAgICAgICAgLy9yZW1vdmluZyB0aGUgPD94bWwgLi4uPz4gZGVjbGFyYXRp
b25zIHNvIHRoZSBjb250ZW50IGNhbiBiZSBpbnNlcnRlZAorICAgICAgICAgICAgLy9pbnRvIHRo
ZSBjdXJyZW50IGRvYyB3aXRob3V0IHByb2JsZW1zLgorCisgICAgICAgICAgICAvLyBEbyBub3Qg
Ym90aGVyIHdpdGggdGhlIHdvcmsgaWYgYSBidWlsZCBhbmQgdGV4dCB3aWxsCisgICAgICAgICAg
ICAvLyBub3QgYmUgaW5saW5lZC4KKyAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmlz
QnVpbGQgJiYgIWNvbmZpZy5pbmxpbmVUZXh0KSB7CisgICAgICAgICAgICAgICAgb25Mb2FkKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBt
YXN0ZXJDb25maWcuaXNCdWlsZCA9IGNvbmZpZyAmJiBjb25maWcuaXNCdWlsZDsKKworICAgICAg
ICAgICAgdmFyIHBhcnNlZCA9IHRleHQucGFyc2VOYW1lKG5hbWUpLAorICAgICAgICAgICAgICAg
IG5vblN0cmlwTmFtZSA9IHBhcnNlZC5tb2R1bGVOYW1lICsKKyAgICAgICAgICAgICAgICAgICAg
KHBhcnNlZC5leHQgPyAnLicgKyBwYXJzZWQuZXh0IDogJycpLAorICAgICAgICAgICAgICAgIHVy
bCA9IHJlcS50b1VybChub25TdHJpcE5hbWUpLAorICAgICAgICAgICAgICAgIHVzZVhociA9ICht
YXN0ZXJDb25maWcudXNlWGhyKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQudXNl
WGhyOworCisgICAgICAgICAgICAvLyBEbyBub3QgbG9hZCBpZiBpdCBpcyBhbiBlbXB0eTogdXJs
CisgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJ2VtcHR5OicpID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgb25Mb2FkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvL0xvYWQgdGhlIHRleHQuIFVzZSBYSFIgaWYgcG9zc2libGUgYW5k
IGluIGEgYnJvd3Nlci4KKyAgICAgICAgICAgIGlmICghaGFzTG9jYXRpb24gfHwgdXNlWGhyKHVy
bCwgZGVmYXVsdFByb3RvY29sLCBkZWZhdWx0SG9zdE5hbWUsIGRlZmF1bHRQb3J0KSkgeworICAg
ICAgICAgICAgICAgIHRleHQuZ2V0KHVybCwgZnVuY3Rpb24gKGNvbnRlbnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dC5maW5pc2hMb2FkKG5hbWUsIHBhcnNlZC5zdHJpcCwgY29udGVudCwg
b25Mb2FkKTsKKyAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChvbkxvYWQuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9u
TG9hZC5lcnJvcihlcnIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vTmVlZCB0byBmZXRj
aCB0aGUgcmVzb3VyY2UgYWNyb3NzIGRvbWFpbnMuIEFzc3VtZQorICAgICAgICAgICAgICAgIC8v
dGhlIHJlc291cmNlIGhhcyBiZWVuIG9wdGltaXplZCBpbnRvIGEgSlMgbW9kdWxlLiBGZXRjaAor
ICAgICAgICAgICAgICAgIC8vYnkgdGhlIG1vZHVsZSBuYW1lICsgZXh0ZW5zaW9uLCBidXQgZG8g
bm90IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgLy8hc3RyaXAgcGFydCB0byBhdm9pZCBm
aWxlIHN5c3RlbSBpc3N1ZXMuCisgICAgICAgICAgICAgICAgcmVxKFtub25TdHJpcE5hbWVdLCBm
dW5jdGlvbiAoY29udGVudCkgeworICAgICAgICAgICAgICAgICAgICB0ZXh0LmZpbmlzaExvYWQo
cGFyc2VkLm1vZHVsZU5hbWUgKyAnLicgKyBwYXJzZWQuZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VkLnN0cmlwLCBjb250ZW50LCBvbkxvYWQpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIHdyaXRl
OiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgbW9kdWxlTmFtZSwgd3JpdGUsIGNvbmZpZykgeworICAg
ICAgICAgICAgaWYgKGJ1aWxkTWFwLmhhc093blByb3BlcnR5KG1vZHVsZU5hbWUpKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0ZXh0LmpzRXNjYXBlKGJ1aWxkTWFwW21vZHVsZU5h
bWVdKTsKKyAgICAgICAgICAgICAgICB3cml0ZS5hc01vZHVsZShwbHVnaW5OYW1lICsgIiEiICsg
bW9kdWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5lKGZ1bmN0
aW9uICgpIHsgcmV0dXJuICciICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGVudCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIic7fSk7XG4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICB3cml0ZUZpbGU6IGZ1bmN0aW9uIChw
bHVnaW5OYW1lLCBtb2R1bGVOYW1lLCByZXEsIHdyaXRlLCBjb25maWcpIHsKKyAgICAgICAgICAg
IHZhciBwYXJzZWQgPSB0ZXh0LnBhcnNlTmFtZShtb2R1bGVOYW1lKSwKKyAgICAgICAgICAgICAg
ICBleHRQYXJ0ID0gcGFyc2VkLmV4dCA/ICcuJyArIHBhcnNlZC5leHQgOiAnJywKKyAgICAgICAg
ICAgICAgICBub25TdHJpcE5hbWUgPSBwYXJzZWQubW9kdWxlTmFtZSArIGV4dFBhcnQsCisgICAg
ICAgICAgICAgICAgLy9Vc2UgYSAnLmpzJyBmaWxlIG5hbWUgc28gdGhhdCBpdCBpbmRpY2F0ZXMg
aXQgaXMgYQorICAgICAgICAgICAgICAgIC8vc2NyaXB0IHRoYXQgY2FuIGJlIGxvYWRlZCBhY3Jv
c3MgZG9tYWlucy4KKyAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHJlcS50b1VybChwYXJzZWQu
bW9kdWxlTmFtZSArIGV4dFBhcnQpICsgJy5qcyc7CisKKyAgICAgICAgICAgIC8vTGV2ZXJhZ2Ug
b3duIGxvYWQoKSBtZXRob2QgdG8gbG9hZCBwbHVnaW4gdmFsdWUsIGJ1dCBvbmx5CisgICAgICAg
ICAgICAvL3dyaXRlIG91dCB2YWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgc3RyaXAgYXJndW1l
bnQsCisgICAgICAgICAgICAvL3RvIGF2b2lkIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggISBp
biBmaWxlIG5hbWVzLgorICAgICAgICAgICAgdGV4dC5sb2FkKG5vblN0cmlwTmFtZSwgcmVxLCBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvL1VzZSBvd24gd3JpdGUoKSBtZXRo
b2QgdG8gY29uc3RydWN0IGZ1bGwgbW9kdWxlIHZhbHVlLgorICAgICAgICAgICAgICAgIC8vQnV0
IG5lZWQgdG8gY3JlYXRlIHNoZWxsIHRoYXQgdHJhbnNsYXRlcyB3cml0ZUZpbGUncworICAgICAg
ICAgICAgICAgIC8vd3JpdGUoKSB0byB0aGUgcmlnaHQgaW50ZXJmYWNlLgorICAgICAgICAgICAg
ICAgIHZhciB0ZXh0V3JpdGUgPSBmdW5jdGlvbiAoY29udGVudHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHdyaXRlKGZpbGVOYW1lLCBjb250ZW50cyk7CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICB0ZXh0V3JpdGUuYXNNb2R1bGUgPSBmdW5jdGlvbiAobW9kdWxl
TmFtZSwgY29udGVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlLmFzTW9k
dWxlKG1vZHVsZU5hbWUsIGZpbGVOYW1lLCBjb250ZW50cyk7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIHRleHQud3JpdGUocGx1Z2luTmFtZSwgbm9uU3RyaXBOYW1lLCB0
ZXh0V3JpdGUsIGNvbmZpZyk7CisgICAgICAgICAgICB9LCBjb25maWcpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIGlmIChtYXN0ZXJDb25maWcuZW52ID09PSAnbm9kZScgfHwgKCFtYXN0ZXJD
b25maWcuZW52ICYmCisgICAgICAgICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIg
JiYKKyAgICAgICAgICAgIHByb2Nlc3MudmVyc2lvbnMgJiYKKyAgICAgICAgICAgICEhcHJvY2Vz
cy52ZXJzaW9ucy5ub2RlICYmCisgICAgICAgICAgICAhcHJvY2Vzcy52ZXJzaW9uc1snbm9kZS13
ZWJraXQnXSAmJgorICAgICAgICAgICAgIXByb2Nlc3MudmVyc2lvbnNbJ2F0b20tc2hlbGwnXSkp
IHsKKyAgICAgICAgLy9Vc2luZyBzcGVjaWFsIHJlcXVpcmUubm9kZVJlcXVpcmUsIHNvbWV0aGlu
ZyBhZGRlZCBieSByLmpzLgorICAgICAgICBmcyA9IHJlcXVpcmUubm9kZVJlcXVpcmUoJ2ZzJyk7
CisKKyAgICAgICAgdGV4dC5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaywgZXJyYmFjaykg
eworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGZzLnJlYWRG
aWxlU3luYyh1cmwsICd1dGY4Jyk7CisgICAgICAgICAgICAgICAgLy9SZW1vdmUgQk9NIChCeXRl
IE1hcmsgT3JkZXIpIGZyb20gdXRmOCBmaWxlcyBpZiBpdCBpcyB0aGVyZS4KKyAgICAgICAgICAg
ICAgICBpZiAoZmlsZVswXSA9PT0gJ1x1RkVGRicpIHsKKyAgICAgICAgICAgICAgICAgICAgZmls
ZSA9IGZpbGUuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYWxsYmFjayhmaWxlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZXJyYmFjaykgeworICAgICAgICAgICAgICAgICAgICBlcnJiYWNrKGUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9IGVsc2UgaWYg
KG1hc3RlckNvbmZpZy5lbnYgPT09ICd4aHInIHx8ICghbWFzdGVyQ29uZmlnLmVudiAmJgorICAg
ICAgICAgICAgdGV4dC5jcmVhdGVYaHIoKSkpIHsKKyAgICAgICAgdGV4dC5nZXQgPSBmdW5jdGlv
biAodXJsLCBjYWxsYmFjaywgZXJyYmFjaywgaGVhZGVycykgeworICAgICAgICAgICAgdmFyIHho
ciA9IHRleHQuY3JlYXRlWGhyKCksIGhlYWRlcjsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQn
LCB1cmwsIHRydWUpOworCisgICAgICAgICAgICAvL0FsbG93IHBsdWdpbnMgZGlyZWN0IGFjY2Vz
cyB0byB4aHIgaGVhZGVycworICAgICAgICAgICAgaWYgKGhlYWRlcnMpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGhlYWRlciBpbiBoZWFkZXJzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICho
ZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlci50b0xvd2VyQ2FzZSgpLCBoZWFkZXJzW2hlYWRl
cl0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvL0FsbG93IG92ZXJyaWRlcyBzcGVjaWZpZWQgaW4gY29uZmln
CisgICAgICAgICAgICBpZiAobWFzdGVyQ29uZmlnLm9uWGhyKSB7CisgICAgICAgICAgICAgICAg
bWFzdGVyQ29uZmlnLm9uWGhyKHhociwgdXJsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgc3RhdHVzLCBlcnI7CisgICAgICAgICAgICAgICAgLy9EbyBub3QgZXhwbGljaXRs
eSBoYW5kbGUgZXJyb3JzLCB0aG9zZSBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAvL3Zpc2li
bGUgdmlhIGNvbnNvbGUgb3V0cHV0IGluIHRoZSBicm93c2VyLgorICAgICAgICAgICAgICAgIGlm
ICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSB4
aHIuc3RhdHVzIHx8IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPiAzOTkgJiYg
c3RhdHVzIDwgNjAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0FuIGh0dHAgNHh4IG9y
IDV4eCBlcnJvci4gU2lnbmFsIGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgZXJy
ID0gbmV3IEVycm9yKHVybCArICcgSFRUUCBzdGF0dXM6ICcgKyBzdGF0dXMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyLnhociA9IHhocjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlcnJiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAobWFzdGVyQ29uZmln
Lm9uWGhyQ29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlckNvbmZpZy5v
blhockNvbXBsZXRlKHhociwgdXJsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAg
ICAgICAgfTsKKyAgICB9IGVsc2UgaWYgKG1hc3RlckNvbmZpZy5lbnYgPT09ICdyaGlubycgfHwg
KCFtYXN0ZXJDb25maWcuZW52ICYmCisgICAgICAgICAgICB0eXBlb2YgUGFja2FnZXMgIT09ICd1
bmRlZmluZWQnICYmIHR5cGVvZiBqYXZhICE9PSAndW5kZWZpbmVkJykpIHsKKyAgICAgICAgLy9X
aHkgSmF2YSwgd2h5IGlzIHRoaXMgc28gYXdrd2FyZD8KKyAgICAgICAgdGV4dC5nZXQgPSBmdW5j
dGlvbiAodXJsLCBjYWxsYmFjaykgeworICAgICAgICAgICAgdmFyIHN0cmluZ0J1ZmZlciwgbGlu
ZSwKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9ICJ1dGYtOCIsCisgICAgICAgICAgICAgICAg
ZmlsZSA9IG5ldyBqYXZhLmlvLkZpbGUodXJsKSwKKyAgICAgICAgICAgICAgICBsaW5lU2VwYXJh
dG9yID0gamF2YS5sYW5nLlN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSwKKyAg
ICAgICAgICAgICAgICBpbnB1dCA9IG5ldyBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyKG5ldyBqYXZh
LmlvLklucHV0U3RyZWFtUmVhZGVyKG5ldyBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbShmaWxlKSwg
ZW5jb2RpbmcpKSwKKyAgICAgICAgICAgICAgICBjb250ZW50ID0gJyc7CisgICAgICAgICAgICB0
cnkgeworICAgICAgICAgICAgICAgIHN0cmluZ0J1ZmZlciA9IG5ldyBqYXZhLmxhbmcuU3RyaW5n
QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgbGluZSA9IGlucHV0LnJlYWRMaW5lKCk7CisKKyAg
ICAgICAgICAgICAgICAvLyBCeXRlIE9yZGVyIE1hcmsgKEJPTSkgLSBUaGUgVW5pY29kZSBTdGFu
ZGFyZCwgdmVyc2lvbiAzLjAsIHBhZ2UgMzI0CisgICAgICAgICAgICAgICAgLy8gaHR0cDovL3d3
dy51bmljb2RlLm9yZy9mYXEvdXRmX2JvbS5odG1sCisKKyAgICAgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgd2hlbiB3ZSB1c2UgdXRmLTgsIHRoZSBCT00gc2hvdWxkIGFwcGVhciBhcyAiRUYgQkIg
QkYiLCBidXQgaXQgZG9lc24ndCBkdWUgdG8gdGhpcyBidWcgaW4gdGhlIEpESzoKKyAgICAgICAg
ICAgICAgICAvLyBodHRwOi8vYnVncy5zdW4uY29tL2J1Z2RhdGFiYXNlL3ZpZXdfYnVnLmRvP2J1
Z19pZD00NTA4MDU4CisgICAgICAgICAgICAgICAgaWYgKGxpbmUgJiYgbGluZS5sZW5ndGgoKSAm
JiBsaW5lLmNoYXJBdCgwKSA9PT0gMHhmZWZmKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEVh
dCB0aGUgQk9NLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGZvdW5kIHRoZSBlbmNvZGluZyBvbiB0aGlz
IGZpbGUsCisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBwbGFuIHRvIGNvbmNhdGVuYXRp
bmcgdGhpcyBidWZmZXIgd2l0aCBvdGhlcnM7IHRoZSBCT00gc2hvdWxkCisgICAgICAgICAgICAg
ICAgICAgIC8vIG9ubHkgYXBwZWFyIGF0IHRoZSB0b3Agb2YgYSBmaWxlLgorICAgICAgICAgICAg
ICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGxpbmUgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RyaW5nQnVmZmVyLmFwcGVuZChsaW5lKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGluZSgpKSAhPT0gbnVsbCkgeworICAg
ICAgICAgICAgICAgICAgICBzdHJpbmdCdWZmZXIuYXBwZW5kKGxpbmVTZXBhcmF0b3IpOworICAg
ICAgICAgICAgICAgICAgICBzdHJpbmdCdWZmZXIuYXBwZW5kKGxpbmUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvL01ha2Ugc3VyZSB3ZSByZXR1cm4gYSBKYXZhU2NyaXB0
IHN0cmluZyBhbmQgbm90IGEgSmF2YSBzdHJpbmcuCisgICAgICAgICAgICAgICAgY29udGVudCA9
IFN0cmluZyhzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7IC8vU3RyaW5nCisgICAgICAgICAgICB9
IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGlucHV0LmNsb3NlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYWxsYmFjayhjb250ZW50KTsKKyAgICAgICAgfTsKKyAgICB9IGVsc2Ug
aWYgKG1hc3RlckNvbmZpZy5lbnYgPT09ICd4cGNvbm5lY3QnIHx8ICghbWFzdGVyQ29uZmlnLmVu
diAmJgorICAgICAgICAgICAgdHlwZW9mIENvbXBvbmVudHMgIT09ICd1bmRlZmluZWQnICYmIENv
bXBvbmVudHMuY2xhc3NlcyAmJgorICAgICAgICAgICAgQ29tcG9uZW50cy5pbnRlcmZhY2VzKSkg
eworICAgICAgICAvL0F2ZXJ0IHlvdXIgZ2F6ZSEKKyAgICAgICAgQ2MgPSBDb21wb25lbnRzLmNs
YXNzZXM7CisgICAgICAgIENpID0gQ29tcG9uZW50cy5pbnRlcmZhY2VzOworICAgICAgICBDb21w
b25lbnRzLnV0aWxzWydpbXBvcnQnXSgncmVzb3VyY2U6Ly9ncmUvbW9kdWxlcy9GaWxlVXRpbHMu
anNtJyk7CisgICAgICAgIHhwY0lzV2luZG93cyA9ICgnQG1vemlsbGEub3JnL3dpbmRvd3MtcmVn
aXN0cnkta2V5OzEnIGluIENjKTsKKworICAgICAgICB0ZXh0LmdldCA9IGZ1bmN0aW9uICh1cmws
IGNhbGxiYWNrKSB7CisgICAgICAgICAgICB2YXIgaW5TdHJlYW0sIGNvbnZlcnRTdHJlYW0sIGZp
bGVPYmosCisgICAgICAgICAgICAgICAgcmVhZERhdGEgPSB7fTsKKworICAgICAgICAgICAgaWYg
KHhwY0lzV2luZG93cykgeworICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cLy9n
LCAnXFwnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlsZU9iaiA9IG5ldyBGaWxl
VXRpbHMuRmlsZSh1cmwpOworCisgICAgICAgICAgICAvL1hQQ09NLCB5b3Ugc28gY3JhenkKKyAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaW5TdHJlYW0gPSBDY1snQG1vemlsbGEu
b3JnL25ldHdvcmsvZmlsZS1pbnB1dC1zdHJlYW07MSddCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuY3JlYXRlSW5zdGFuY2UoQ2kubnNJRmlsZUlucHV0U3RyZWFtKTsKKyAgICAgICAgICAg
ICAgICBpblN0cmVhbS5pbml0KGZpbGVPYmosIDEsIDAsIGZhbHNlKTsKKworICAgICAgICAgICAg
ICAgIGNvbnZlcnRTdHJlYW0gPSBDY1snQG1vemlsbGEub3JnL2ludGwvY29udmVydGVyLWlucHV0
LXN0cmVhbTsxJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUluc3Rh
bmNlKENpLm5zSUNvbnZlcnRlcklucHV0U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0
U3RyZWFtLmluaXQoaW5TdHJlYW0sICJ1dGYtOCIsIGluU3RyZWFtLmF2YWlsYWJsZSgpLAorICAg
ICAgICAgICAgICAgIENpLm5zSUNvbnZlcnRlcklucHV0U3RyZWFtLkRFRkFVTFRfUkVQTEFDRU1F
TlRfQ0hBUkFDVEVSKTsKKworICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0ucmVhZFN0cmlu
ZyhpblN0cmVhbS5hdmFpbGFibGUoKSwgcmVhZERhdGEpOworICAgICAgICAgICAgICAgIGNvbnZl
cnRTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBpblN0cmVhbS5jbG9zZSgpOworICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKHJlYWREYXRhLnZhbHVlKTsKKyAgICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKGZpbGVPYmogJiYgZmls
ZU9iai5wYXRoIHx8ICcnKSArICc6ICcgKyBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICB9CisgICAgcmV0dXJuIHRleHQ7Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMvUkVBRE1FLm1kIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy9SRUFETUUubWQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTQ1YjMxZDdlNjU1ZjgyNzQ0MzAzMTNlNjIxZjNiZWU5NGY1Y2JlYwotLS0gL2Rldi9udWxsCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMvUkVBRE1F
Lm1kCkBAIC0wLDAgKzEsOSBAQAorIyByZXF1aXJlanMKKworUmVxdWlyZUpTIGZvciB1c2UgaW4g
Tm9kZS4gaW5jbHVkZXM6CisKKyogci5qczogdGhlIFJlcXVpcmVKUyBvcHRpbWl6ZXIsIGFuZCBB
TUQgcnVudGltZSBmb3IgdXNlIGluIE5vZGUuCisqIHJlcXVpcmUuanM6IFRoZSBicm93c2VyLWJh
c2VkIEFNRCBsb2FkZXIuCisKK01vcmUgaW5mb3JtYXRpb24gYXQgaHR0cDovL3JlcXVpcmVqcy5v
cmcKKwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3Jl
cXVpcmVqcy9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvcmVxdWlyZWpzL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmNmYjQ0NjIzYjdlYTA5N2Fm
ZTM2N2I3N2JiYTRiNGE2YWIyZmYwCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw4
OSBAQAoreworICAiX2FyZ3MiOiBbCisgICAgWworICAgICAgeworICAgICAgICAicmF3IjogInJl
cXVpcmVqc0BeMi4xLjE1IiwKKyAgICAgICAgInNjb3BlIjogbnVsbCwKKyAgICAgICAgImVzY2Fw
ZWROYW1lIjogInJlcXVpcmVqcyIsCisgICAgICAgICJuYW1lIjogInJlcXVpcmVqcyIsCisgICAg
ICAgICJyYXdTcGVjIjogIl4yLjEuMTUiLAorICAgICAgICAic3BlYyI6ICI+PTIuMS4xNSA8My4w
LjAiLAorICAgICAgICAidHlwZSI6ICJyYW5nZSIKKyAgICAgIH0sCisgICAgICAiL1VzZXJzL2Fk
ZHlvL0Rlc2t0b3AvU3BlZWRvbWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodCIKKyAgICBdCisgIF0sCisgICJfZnJvbSI6ICJyZXF1aXJlanNAPj0yLjEu
MTUgPDMuMC4wIiwKKyAgIl9pZCI6ICJyZXF1aXJlanNAMi4zLjMiLAorICAiX2luQ2FjaGUiOiB0
cnVlLAorICAiX2xvY2F0aW9uIjogIi9yZXF1aXJlanMiLAorICAiX25vZGVWZXJzaW9uIjogIjYu
Ny4wIiwKKyAgIl9ucG1PcGVyYXRpb25hbEludGVybmFsIjogeworICAgICJob3N0IjogInBhY2th
Z2VzLTEyLXdlc3QuaW50ZXJuYWwubnBtanMuY29tIiwKKyAgICAidG1wIjogInRtcC9yZXF1aXJl
anMtMi4zLjMudGd6XzE0ODc1MjQwODMyNzVfMC4zMjM3Mjg0MzAzMTc3MTQ4IgorICB9LAorICAi
X25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAianJidXJrZSIsCisgICAgImVtYWlsIjogImpyYnVy
a2VAZ21haWwuY29tIgorICB9LAorICAiX25wbVZlcnNpb24iOiAiMy4xMC4zIiwKKyAgIl9waGFu
dG9tQ2hpbGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7CisgICAgInJhdyI6ICJyZXF1aXJl
anNAXjIuMS4xNSIsCisgICAgInNjb3BlIjogbnVsbCwKKyAgICAiZXNjYXBlZE5hbWUiOiAicmVx
dWlyZWpzIiwKKyAgICAibmFtZSI6ICJyZXF1aXJlanMiLAorICAgICJyYXdTcGVjIjogIl4yLjEu
MTUiLAorICAgICJzcGVjIjogIj49Mi4xLjE1IDwzLjAuMCIsCisgICAgInR5cGUiOiAicmFuZ2Ui
CisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIKKyAgXSwKKyAgIl9yZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJlanMvLS9yZXF1aXJlanMtMi4zLjMu
dGd6IiwKKyAgIl9zaGFzdW0iOiAiYWE1OWZkM2EwMjg3ZWFmNDA3OTU5YTEzODIyODA0NGI1ZGQ2
YTZhMyIsCisgICJfc2hyaW5rd3JhcCI6IG51bGwsCisgICJfc3BlYyI6ICJyZXF1aXJlanNAXjIu
MS4xNSIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL0Rlc2t0b3AvU3BlZWRvbWV0ZXItYS9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodCIsCisgICJhdXRob3Ii
OiB7CisgICAgIm5hbWUiOiAiSmFtZXMgQnVya2UiLAorICAgICJlbWFpbCI6ICJqcmJ1cmtlQGdt
YWlsLmNvbSIsCisgICAgInVybCI6ICJodHRwOi8vZ2l0aHViLmNvbS9qcmJ1cmtlIgorICB9LAor
ICAiYmluIjogeworICAgICJyLmpzIjogIi4vYmluL3IuanMiLAorICAgICJyX2pzIjogIi4vYmlu
L3IuanMiCisgIH0sCisgICJidWdzIjogeworICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29t
L2pyYnVya2Uvci5qcy9pc3N1ZXMiCisgIH0sCisgICJkZXBlbmRlbmNpZXMiOiB7fSwKKyAgImRl
c2NyaXB0aW9uIjogIk5vZGUgYWRhcHRlciBmb3IgUmVxdWlyZUpTLCBmb3IgbG9hZGluZyBBTUQg
bW9kdWxlcy4gSW5jbHVkZXMgUmVxdWlyZUpTIG9wdGltaXplciIsCisgICJkZXZEZXBlbmRlbmNp
ZXMiOiB7fSwKKyAgImRpcmVjdG9yaWVzIjoge30sCisgICJkaXN0IjogeworICAgICJzaGFzdW0i
OiAiYWE1OWZkM2EwMjg3ZWFmNDA3OTU5YTEzODIyODA0NGI1ZGQ2YTZhMyIsCisgICAgInRhcmJh
bGwiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVxdWlyZWpzLy0vcmVxdWlyZWpzLTIu
My4zLnRneiIKKyAgfSwKKyAgImVuZ2luZXMiOiB7CisgICAgIm5vZGUiOiAiPj0wLjQuMCIKKyAg
fSwKKyAgImhvbWVwYWdlIjogImh0dHA6Ly9naXRodWIuY29tL2pyYnVya2Uvci5qcyIsCisgICJs
aWNlbnNlIjogIk1JVCIsCisgICJtYWluIjogIi4vYmluL3IuanMiLAorICAibWFpbnRhaW5lcnMi
OiBbCisgICAgeworICAgICAgIm5hbWUiOiAianJidXJrZSIsCisgICAgICAiZW1haWwiOiAianJi
dXJrZUBnbWFpbC5jb20iCisgICAgfQorICBdLAorICAibmFtZSI6ICJyZXF1aXJlanMiLAorICAi
b3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8gUkVBRE1F
IGRhdGEgZm91bmQhIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAg
ICAidXJsIjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yLmpzLmdpdCIKKyAgfSwK
KyAgInNjcmlwdHMiOiB7fSwKKyAgInZlcnNpb24iOiAiMi4zLjMiCit9CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzL3JlcXVpcmUuanMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzL3JlcXVpcmUu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGZjMTA4MmQ1OWY3YmFjMjM5ZWY4MDhmNWU1NmM3ZTY2Y2FkOGI2OQot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9y
ZXF1aXJlanMvcmVxdWlyZS5qcwpAQCAtMCwwICsxLDIxNDUgQEAKKy8qKiB2aW06IGV0OnRzPTQ6
c3c9NDpzdHM9NAorICogQGxpY2Vuc2UgUmVxdWlyZUpTIDIuMy4zIENvcHlyaWdodCBqUXVlcnkg
Rm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgorICogUmVsZWFzZWQgdW5kZXIgTUlU
IGxpY2Vuc2UsIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2Jsb2IvbWFz
dGVyL0xJQ0VOU0UKKyAqLworLy9Ob3QgdXNpbmcgc3RyaWN0OiB1bmV2ZW4gc3RyaWN0IHN1cHBv
cnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVzZXMKKy8vcHJvYmxlbXMgd2l0aCByZXF1aXJl
anMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1heSBub3QgYmUgc3RyaWN0LgorLypq
c2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5OiB0cnVlICovCisvKmdsb2Jh
bCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQsIGltcG9ydFNjcmlwdHMsIHNldFRpbWVvdXQs
IG9wZXJhICovCisKK3ZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKyhmdW5jdGlvbiAo
Z2xvYmFsLCBzZXRUaW1lb3V0KSB7CisgICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVsZW1lbnQs
IGRhdGFNYWluLCBzcmMsCisgICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRp
bmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCisgICAgICAgIHZlcnNpb24gPSAnMi4zLjMn
LAorICAgICAgICBjb21tZW50UmVnRXhwID0gL1wvXCpbXHNcU10qP1wqXC98KFteOiInPV18Xilc
L1wvLiokL21nLAorICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMq
XChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAorICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9
IC9cLmpzJC8sCisgICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAorICAgICAgICBvcCA9
IE9iamVjdC5wcm90b3R5cGUsCisgICAgICAgIG9zdHJpbmcgPSBvcC50b1N0cmluZywKKyAgICAg
ICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCisgICAgICAgIGlzQnJvd3NlciA9ICEhKHR5
cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRl
ZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCisgICAgICAgIGlzV2ViV29ya2VyID0gIWlzQnJv
d3NlciAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcsCisgICAgICAgIC8v
UFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZvciBj
b21wbGV0ZQorICAgICAgICAvL3NwZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcnLCAn
bG9hZGVkJywgZXhlY3V0aW9uLAorICAgICAgICAvLyB0aGVuICdjb21wbGV0ZScuIFRoZSBVQSBj
aGVjayBpcyB1bmZvcnR1bmF0ZSwgYnV0IG5vdCBzdXJlIGhvdworICAgICAgICAvL3RvIGZlYXR1
cmUgdGVzdCB3L28gY2F1c2luZyBwZXJmIGlzc3Vlcy4KKyAgICAgICAgcmVhZHlSZWdFeHAgPSBp
c0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPworICAg
ICAgICAgICAgICAgICAgICAgIC9eY29tcGxldGUkLyA6IC9eKGNvbXBsZXRlfGxvYWRlZCkkLywK
KyAgICAgICAgZGVmQ29udGV4dE5hbWUgPSAnXycsCisgICAgICAgIC8vT2ggdGhlIHRyYWdlZHks
IGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24uCisg
ICAgICAgIGlzT3BlcmEgPSB0eXBlb2Ygb3BlcmEgIT09ICd1bmRlZmluZWQnICYmIG9wZXJhLnRv
U3RyaW5nKCkgPT09ICdbb2JqZWN0IE9wZXJhXScsCisgICAgICAgIGNvbnRleHRzID0ge30sCisg
ICAgICAgIGNmZyA9IHt9LAorICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdLAorICAgICAgICB1
c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOworCisgICAgLy9Db3VsZCBtYXRjaCBzb21ldGhpbmcgbGlr
ZSAnKS8vY29tbWVudCcsIGRvIG5vdCBsb3NlIHRoZSBwcmVmaXggdG8gY29tbWVudC4KKyAgICBm
dW5jdGlvbiBjb21tZW50UmVwbGFjZShtYXRjaCwgc2luZ2xlUHJlZml4KSB7CisgICAgICAgIHJl
dHVybiBzaW5nbGVQcmVmaXggfHwgJyc7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNGdW5jdGlv
bihpdCkgeworICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgRnVu
Y3Rpb25dJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0FycmF5KGl0KSB7CisgICAgICAgIHJl
dHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBBcnJheV0nOworICAgIH0KKworICAg
IC8qKgorICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXku
IElmIHRoZSBmdW5jIHJldHVybnMKKyAgICAgKiBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsg
b3V0IG9mIHRoZSBsb29wLgorICAgICAqLworICAgIGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7
CisgICAgICAgIGlmIChhcnkpIHsKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgIGlmIChh
cnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBh
cnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCisgICAgICogcmV0dXJucyBhIHRydWUgdmFsdWUs
IGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgorICAgICAqLworICAgIGZ1bmN0aW9uIGVh
Y2hSZXZlcnNlKGFyeSwgZnVuYykgeworICAgICAgICBpZiAoYXJ5KSB7CisgICAgICAgICAgICB2
YXIgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0g
MSkgeworICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHBy
b3ApIHsKKyAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgeworICAgICAgICByZXR1cm4gaGFzUHJvcChv
YmosIHByb3ApICYmIG9ialtwcm9wXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDeWNsZXMg
b3ZlciBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCBhbmQgY2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFj
aAorICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRo
eSB2YWx1ZSwgdGhlbiB0aGUKKyAgICAgKiBpdGVyYXRpb24gaXMgc3RvcHBlZC4KKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsKKyAgICAgICAgdmFyIHByb3A7Cisg
ICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKKyAgICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwg
cHJvcCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnVuYyhvYmpbcHJvcF0sIHByb3ApKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0
byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRvIHRhcmdldCwKKyAgICAgKiBidXQg
b25seSBpZiB0YXJnZXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgcHJvcGVydHkgb2YgdGhlIHNh
bWUgbmFtZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9y
Y2UsIGRlZXBTdHJpbmdNaXhpbikgeworICAgICAgICBpZiAoc291cmNlKSB7CisgICAgICAgICAg
ICBlYWNoUHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgeworICAgICAgICAgICAg
ICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChkZWVwU3RyaW5nTWl4aW4gJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAm
JiB2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIWlzQXJyYXkodmFsdWUpICYmICFp
c0Z1bmN0aW9uKHZhbHVlKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0
YW5jZW9mIFJlZ0V4cCkpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRb
cHJvcF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB7fTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1peGlu
KHRhcmdldFtwcm9wXSwgdmFsdWUsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3Bd
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKwor
ICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgYnV0IHRoZSAndGhpcycg
b2JqZWN0IGlzIHNwZWNpZmllZAorICAgIC8vZmlyc3QsIHNpbmNlIGl0IGlzIGVhc2llciB0byBy
ZWFkL2ZpZ3VyZSBvdXQgd2hhdCAndGhpcycgd2lsbCBiZS4KKyAgICBmdW5jdGlvbiBiaW5kKG9i
aiwgZm4pIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVy
biBmbi5hcHBseShvYmosIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVu
Y3Rpb24gc2NyaXB0cygpIHsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdzY3JpcHQnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihl
cnIpIHsKKyAgICAgICAgdGhyb3cgZXJyOworICAgIH0KKworICAgIC8vQWxsb3cgZ2V0dGluZyBh
IGdsb2JhbCB0aGF0IGlzIGV4cHJlc3NlZCBpbgorICAgIC8vZG90IG5vdGF0aW9uLCBsaWtlICdh
LmIuYycuCisgICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CisgICAgICAgIGlmICghdmFs
dWUpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICB2YXIg
ZyA9IGdsb2JhbDsKKyAgICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlvbiAocGFy
dCkgeworICAgICAgICAgICAgZyA9IGdbcGFydF07CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gZzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdpdGgg
YSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICogQHBhcmFt
IHtTdHJpbmd9IGlkIHRoZSBlcnJvciBJRCB0aGF0IG1hcHMgdG8gYW4gSUQgb24gYSB3ZWIgcGFn
ZS4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBlcnJvci4K
KyAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRoZXJl
IGlzIG9uZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIHtFcnJvcn0KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBtYWtlRXJyb3IoaWQsIG1zZywgZXJyLCByZXF1aXJlTW9kdWxlcykgeworICAgICAg
ICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vy
cm9ycy5odG1sIycgKyBpZCk7CisgICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKKyAgICAgICAg
ZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOworICAgICAgICBpZiAoZXJyKSB7Cisg
ICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGU7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnKSB7
CisgICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90aGVyIEFN
RCBsb2FkZXIsCisgICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICh0eXBlb2YgcmVxdWlyZWpzICE9PSAndW5kZWZpbmVkJykgeworICAg
ICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7CisgICAgICAgICAgICAvL0RvIG5vdCBv
dmVyd3JpdGUgYW4gZXhpc3RpbmcgcmVxdWlyZWpzIGluc3RhbmNlLgorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGNmZyA9IHJlcXVpcmVqczsKKyAgICAgICAgcmVxdWly
ZWpzID0gdW5kZWZpbmVkOworICAgIH0KKworICAgIC8vQWxsb3cgZm9yIGEgcmVxdWlyZSBjb25m
aWcgb2JqZWN0CisgICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiAhaXNG
dW5jdGlvbihyZXF1aXJlKSkgeworICAgICAgICAvL2Fzc3VtZSBpdCBpcyBhIGNvbmZpZyBvYmpl
Y3QuCisgICAgICAgIGNmZyA9IHJlcXVpcmU7CisgICAgICAgIHJlcXVpcmUgPSB1bmRlZmluZWQ7
CisgICAgfQorCisgICAgZnVuY3Rpb24gbmV3Q29udGV4dChjb250ZXh0TmFtZSkgeworICAgICAg
ICB2YXIgaW5DaGVja0xvYWRlZCwgTW9kdWxlLCBjb250ZXh0LCBoYW5kbGVycywKKyAgICAgICAg
ICAgIGNoZWNrTG9hZGVkVGltZW91dElkLAorICAgICAgICAgICAgY29uZmlnID0geworICAgICAg
ICAgICAgICAgIC8vRGVmYXVsdHMuIERvIG5vdCBzZXQgYSBkZWZhdWx0IGZvciBtYXAKKyAgICAg
ICAgICAgICAgICAvL2NvbmZpZyB0byBzcGVlZCB1cCBub3JtYWxpemUoKSwgd2hpY2gKKyAgICAg
ICAgICAgICAgICAvL3dpbGwgcnVuIGZhc3RlciBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorICAg
ICAgICAgICAgICAgIHdhaXRTZWNvbmRzOiA3LAorICAgICAgICAgICAgICAgIGJhc2VVcmw6ICcu
LycsCisgICAgICAgICAgICAgICAgcGF0aHM6IHt9LAorICAgICAgICAgICAgICAgIGJ1bmRsZXM6
IHt9LAorICAgICAgICAgICAgICAgIHBrZ3M6IHt9LAorICAgICAgICAgICAgICAgIHNoaW06IHt9
LAorICAgICAgICAgICAgICAgIGNvbmZpZzoge30KKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICByZWdpc3RyeSA9IHt9LAorICAgICAgICAgICAgLy9yZWdpc3RyeSBvZiBqdXN0IGVuYWJsZWQg
bW9kdWxlcywgdG8gc3BlZWQKKyAgICAgICAgICAgIC8vY3ljbGUgYnJlYWtpbmcgY29kZSB3aGVu
IGxvdHMgb2YgbW9kdWxlcworICAgICAgICAgICAgLy9hcmUgcmVnaXN0ZXJlZCwgYnV0IG5vdCBh
Y3RpdmF0ZWQuCisgICAgICAgICAgICBlbmFibGVkUmVnaXN0cnkgPSB7fSwKKyAgICAgICAgICAg
IHVuZGVmRXZlbnRzID0ge30sCisgICAgICAgICAgICBkZWZRdWV1ZSA9IFtdLAorICAgICAgICAg
ICAgZGVmaW5lZCA9IHt9LAorICAgICAgICAgICAgdXJsRmV0Y2hlZCA9IHt9LAorICAgICAgICAg
ICAgYnVuZGxlc01hcCA9IHt9LAorICAgICAgICAgICAgcmVxdWlyZUNvdW50ZXIgPSAxLAorICAg
ICAgICAgICAgdW5ub3JtYWxpemVkQ291bnRlciA9IDE7CisKKyAgICAgICAgLyoqCisgICAgICAg
ICAqIFRyaW1zIHRoZSAuIGFuZCAuLiBmcm9tIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCisg
ICAgICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0aCBzZWdtZW50IGlmIGEgLi4gd2ls
bCBiZWNvbWUKKyAgICAgICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRo
IG1vZHVsZSBuYW1lIGxvb2t1cHMsCisgICAgICAgICAqIHdoaWNoIGFjdCBsaWtlIHBhdGhzLCBi
dXQgY2FuIGJlIHJlbWFwcGVkLiBCdXQgdGhlIGVuZCByZXN1bHQsCisgICAgICAgICAqIGFsbCBw
YXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29rIG5vcm1hbGl6ZWQuCisgICAg
ICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1dCBhcnJheS4KKyAgICAg
ICAgICogQHBhcmFtIHtBcnJheX0gYXJ5IHRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgorICAg
ICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7CisgICAgICAgICAgICB2
YXIgaSwgcGFydDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOworICAgICAgICAgICAgICAgIGlmIChw
YXJ0ID09PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgaSAtPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFy
dCA9PT0gJy4uJykgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCB0aGUgc3RhcnQsIG9y
IHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLAorICAgICAgICAgICAgICAgICAgICAvLyBrZWVw
IHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5CisgICAgICAgICAg
ICAgICAgICAgIC8vIHN0aWxsIHdvcmsgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoLCBldmVuIHRo
b3VnaAorICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJRCBpdCBpcyBsZXNzIHRoYW4gaWRl
YWwuIEluIGxhcmdlciBwb2ludAorICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5
IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAg
ICBpZiAoaSA9PT0gMCB8fCAoaSA9PT0gMSAmJiBhcnlbMl0gPT09ICcuLicpIHx8IGFyeVtpIC0g
MV0gPT09ICcuLicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhcnkuc3BsaWNlKGkgLSAxLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1v
ZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KKyAgICAgICAgICog
YSByZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4KKyAgICAgICAgICogQHBh
cmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKKyAgICAgICAgICogQHBhcmFtIHtT
dHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZl
CisgICAgICAgICAqIHRvLgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFw
cGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCisgICAgICAgICAqIG9ubHkg
YmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KKyAg
ICAgICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCisgICAgICAgICAqLwor
ICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7Cisg
ICAgICAgICAgICB2YXIgcGtnTWFpbiwgbWFwVmFsdWUsIG5hbWVQYXJ0cywgaSwgaiwgbmFtZVNl
Z21lbnQsIGxhc3RJbmRleCwKKyAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3Vu
ZFN0YXJNYXAsIHN0YXJJLCBub3JtYWxpemVkQmFzZVBhcnRzLAorICAgICAgICAgICAgICAgIGJh
c2VQYXJ0cyA9IChiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdCgnLycpKSwKKyAgICAgICAgICAg
ICAgICBtYXAgPSBjb25maWcubWFwLAorICAgICAgICAgICAgICAgIHN0YXJNYXAgPSBtYXAgJiYg
bWFwWycqJ107CisKKyAgICAgICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy4KKyAg
ICAgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQo
Jy8nKTsKKyAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBuYW1lLmxlbmd0aCAtIDE7CisKKyAg
ICAgICAgICAgICAgICAvLyBJZiB3YW50aW5nIG5vZGUgSUQgY29tcGF0aWJpbGl0eSwgc3RyaXAg
LmpzIGZyb20gZW5kCisgICAgICAgICAgICAgICAgLy8gb2YgSURzLiBIYXZlIHRvIGRvIHRoaXMg
aGVyZSwgYW5kIG5vdCBpbiBuYW1lVG9VcmwKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG5v
ZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBtYXAKKyAgICAgICAgICAgICAgICAv
LyB0byBzYW1lIGZpbGUuCisgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ub2RlSWRDb21wYXQg
JiYganNTdWZmaXhSZWdFeHAudGVzdChuYW1lW2xhc3RJbmRleF0pKSB7CisgICAgICAgICAgICAg
ICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdEluZGV4XS5yZXBsYWNlKGpzU3VmZml4
UmVnRXhwLCAnJyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gU3Rh
cnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWUKKyAgICAgICAgICAgICAgICBpZiAo
bmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9wIG9mZiB0aGUgbGFzdCBw
YXJ0LAorICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVj
dG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdzCisgICAgICAgICAgICAgICAgICAg
IC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFw
cyB0bworICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdvL3RocmVlLmpzJywgYnV0IHdlIHdh
bnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgorICAgICAgICAgICAgICAgICAgICAvL3Ro
aXMgbm9ybWFsaXphdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0
cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CisgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVkQmFzZVBhcnRzLmNvbmNhdChuYW1lKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0cmltRG90cyhuYW1lKTsKKyAgICAgICAg
ICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuCisgICAgICAgICAgICBpZiAoYXBw
bHlNYXAgJiYgbWFwICYmIChiYXNlUGFydHMgfHwgc3Rhck1hcCkpIHsKKyAgICAgICAgICAgICAg
ICBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7CisKKyAgICAgICAgICAgICAgICBvdXRlckxv
b3A6IGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFydHMuc2xpY2UoMCwgaSkuam9pbignLycp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNlTmFtZSBzZWdtZW50IG1hdGNoIGluIHRo
ZSBjb25maWcuCisgICAgICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUg
YmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXAsIGJhc2VQYXJ0
cy5zbGljZSgwLCBqKS5qb2luKCcvJykpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbmFtZS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IGk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvdXRlckxvb3A7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xk
IG9uIHRvIGl0LAorICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBz
ZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgLy9j
b25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2Vn
bWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihz
dGFyTWFwLCBuYW1lU2VnbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFySSA9IGk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgeworICAgICAgICAgICAgICAgICAg
ICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJID0g
c3Rhckk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFw
KSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3Vu
ZE1hcCk7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgdGhl
IG5hbWUgcG9pbnRzIHRvIGEgcGFja2FnZSdzIG5hbWUsIHVzZQorICAgICAgICAgICAgLy8gdGhl
IHBhY2thZ2UgbWFpbiBpbnN0ZWFkLgorICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25m
aWcucGtncywgbmFtZSk7CisKKyAgICAgICAgICAgIHJldHVybiBwa2dNYWluID8gcGtnTWFpbiA6
IG5hbWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkg
eworICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAgICAgICAgICAgIGVhY2goc2Ny
aXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0Tm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
c2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2Rh
dGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdE5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgeworICAgICAgICAgICAgdmFy
IHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CisgICAgICAgICAgICBpZiAo
cGF0aENvbmZpZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcubGVuZ3RoID4g
MSkgeworICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNp
bmNlIGl0IGZhaWxlZCwgYW5kCisgICAgICAgICAgICAgICAgLy9yZXRyeQorICAgICAgICAgICAg
ICAgIHBhdGhDb25maWcuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUu
dW5kZWYoaWQpOworCisgICAgICAgICAgICAgICAgLy9DdXN0b20gcmVxdWlyZSB0aGF0IGRvZXMg
bm90IGRvIG1hcCB0cmFuc2xhdGlvbiwgc2luY2UKKyAgICAgICAgICAgICAgICAvL0lEIGlzICJh
YnNvbHV0ZSIsIGFscmVhZHkgbWFwcGVkL3Jlc29sdmVkLgorICAgICAgICAgICAgICAgIGNvbnRl
eHQubWFrZVJlcXVpcmUobnVsbCwgeworICAgICAgICAgICAgICAgICAgICBza2lwTWFwOiB0cnVl
CisgICAgICAgICAgICAgICAgfSkoW2lkXSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vVHVybnMgYSBwbHVnaW4h
cmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCisgICAgICAgIC8vd2l0aCB0aGUgcGx1Z2lu
IGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQorICAgICAgICAvL2RpZCBub3QgaGF2ZSBhIHBs
dWdpbiBwcmVmaXguCisgICAgICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHsKKyAgICAg
ICAgICAgIHZhciBwcmVmaXgsCisgICAgICAgICAgICAgICAgaW5kZXggPSBuYW1lID8gbmFtZS5p
bmRleE9mKCchJykgOiAtMTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CisgICAgICAg
ICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgICAgICAg
ICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5hbWUubGVuZ3RoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKKyAgICAgICAgfQor
CisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGVzIGEgbW9kdWxlIG1hcHBpbmcgdGhhdCBp
bmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUKKyAgICAgICAgICogbmFtZSwgYW5kIHBhdGgu
IElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3aWxsCisgICAgICAgICAqIGFsc28g
bm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCisgICAgICAgICAqCisg
ICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBtb2R1bGUgbmFtZQorICAgICAgICAg
KiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKKyAg
ICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIG5h
bWVzLgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzTm9ybWFsaXplZDogaXMgdGhlIElE
IGFscmVhZHkgbm9ybWFsaXplZC4KKyAgICAgICAgICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2Fs
bCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KKyAgICAgICAgICogQHBhcmFtIHtC
b29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIElELgorICAgICAg
ICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBhIGRlcGVuZGVuY3ku
CisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CisgICAgICAgICAqLwor
ICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNO
b3JtYWxpemVkLCBhcHBseU1hcCkgeworICAgICAgICAgICAgdmFyIHVybCwgcGx1Z2luTW9kdWxl
LCBzdWZmaXgsIG5hbWVQYXJ0cywKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBudWxsLAorICAg
ICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVN
YXAubmFtZSA6IG51bGwsCisgICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lID0gbmFtZSwKKyAg
ICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCisgICAgICAgICAgICAgICAgbm9ybWFsaXpl
ZE5hbWUgPSAnJzsKKworICAgICAgICAgICAgLy9JZiBubyBuYW1lLCB0aGVuIGl0IG1lYW5zIGl0
IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgorICAgICAgICAgICAgLy9pbnRlcm5hbCBu
YW1lLgorICAgICAgICAgICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICAgICAgaXNEZWZpbmUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIg
Kz0gMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJl
Zml4KG5hbWUpOworICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOworICAgICAgICAg
ICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKKworICAgICAgICAgICAgaWYgKHByZWZpeCkgeworICAg
ICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHBhcmVudE5hbWUsIGFwcGx5
TWFwKTsKKyAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJl
Zml4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2
ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KKyAgICAgICAgICAgIGlmIChuYW1lKSB7
CisgICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
aXNOb3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9
IG5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGx1Z2luTW9kdWxlICYmIHBs
dWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2lu
IGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9ybWFsaXplZE5hbWUgPSBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKG5hbWUsIGZ1bmN0
aW9uIChuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIG5lc3RlZCBwbHVnaW4gcmVmZXJlbmNlcywgdGhlbiBkbyBub3QgdHJ5IHRvCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUsIGFzIGl0IHdpbGwgbm90IG5vcm1hbGl6
ZSBjb3JyZWN0bHkuIFRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWNlcyBhIHJl
c3RyaWN0aW9uIG9uIHJlc291cmNlSWRzLCBhbmQgdGhlIGxvbmdlcgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGVybSBzb2x1dGlvbiBpcyBub3QgdG8gbm9ybWFsaXplIHVudGlsIHBsdWdp
bnMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkZWQgYW5kIGFsbCBub3JtYWxp
emF0aW9ucyB0byBhbGxvdyBmb3IgYXN5bmMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxv
YWRpbmcgb2YgYSBsb2FkZXIgcGx1Z2luLiBCdXQgZm9yIG5vdywgZml4ZXMgdGhlCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjb21tb24gdXNlcy4gRGV0YWlscyBpbiAjMTEzMQorICAgICAg
ICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lLmluZGV4T2YoJyEnKSA9PT0g
LTEgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemUo
bmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vQSByZWd1bGFyIG1vZHVsZS4KKyAg
ICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50
TmFtZSwgYXBwbHlNYXApOworCisgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplZCBuYW1l
IG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZworICAgICAgICAgICAgICAgICAg
ICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFsdWVzIG11c3QK
KyAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIHNvIGRvIG5vdCBu
ZWVkIHRvIHJlZG8gdGhhdCBwYXJ0LgorICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBz
cGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9
IG5hbWVQYXJ0c1swXTsKKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1l
UGFydHNbMV07CisgICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplZE5hbWUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9JZiB0
aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpZiBpdCBuZWVk
cworICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEgdW5pcXVlIElE
IHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQorICAgICAgICAgICAgLy9pZHMgdGhhdCBtYXkgY29u
ZmxpY3QgY2FuIGJlIHNlcGFyYXRlLgorICAgICAgICAgICAgc3VmZml4ID0gcHJlZml4ICYmICFw
bHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/CisgICAgICAgICAgICAgICAgICAgICAnX3Vu
bm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6CisgICAgICAgICAgICAg
ICAgICAgICAnJzsKKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBwcmVm
aXg6IHByZWZpeCwKKyAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSwKKyAgICAg
ICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKKyAgICAgICAgICAgICAgICB1
bm5vcm1hbGl6ZWQ6ICEhc3VmZml4LAorICAgICAgICAgICAgICAgIHVybDogdXJsLAorICAgICAg
ICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAorICAgICAgICAgICAgICAgIGlz
RGVmaW5lOiBpc0RlZmluZSwKKyAgICAgICAgICAgICAgICBpZDogKHByZWZpeCA/CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6CisgICAgICAg
ICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkgKyBzdWZmaXgKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBnZXRNb2R1bGUoZGVwTWFwKSB7CisgICAg
ICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCisgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3du
KHJlZ2lzdHJ5LCBpZCk7CisKKyAgICAgICAgICAgIGlmICghbW9kKSB7CisgICAgICAgICAgICAg
ICAgbW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRleHQuTW9kdWxlKGRlcE1hcCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtb2Q7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7CisgICAgICAgICAgICB2YXIgaWQgPSBk
ZXBNYXAuaWQsCisgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisK
KyAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAmJgorICAgICAgICAgICAgICAg
ICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgeworICAgICAgICAgICAgICAg
IGlmIChuYW1lID09PSAnZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICAgICAgZm4oZGVmaW5l
ZFtpZF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7CisgICAgICAgICAgICAgICAgaWYgKG1v
ZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CisgICAgICAgICAgICAgICAgICAgIGZuKG1v
ZC5lcnJvcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
bW9kLm9uKG5hbWUsIGZuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykgeworICAgICAg
ICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKKyAgICAgICAgICAgICAgICBub3Rp
ZmllZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoZXJyYmFjaykgeworICAgICAgICAgICAg
ICAgIGVycmJhY2soZXJyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0g
Z2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMg
dGltZW91dCBjaGVja3MuCisgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZXJyb3IgPSBlcnI7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcS5vbkVy
cm9yKGVycik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB0byB0cmFuc2ZlciBnbG9i
YWxRdWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncworICAgICAgICAgKiBkZWZRdWV1ZS4KKyAg
ICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxRdWV1ZSgpIHsKKyAgICAgICAg
ICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhlIGNvbnRleHQn
cyBkZWZRdWV1ZQorICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIGVhY2goZ2xvYmFsRGVmUXVldWUsIGZ1bmN0aW9uKHF1ZXVlSXRlbSkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBxdWV1ZUl0ZW1bMF07CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUucHVzaChxdWV1ZUl0ZW0pOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYW5kbGVycyA9IHsKKyAgICAgICAgICAg
ICdyZXF1aXJlJzogZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgIGlmIChtb2QucmVx
dWlyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QucmVxdWly
ZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2QpIHsKKyAg
ICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBp
ZiAobW9kLm1hcC5pc0RlZmluZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV4cG9y
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGVmaW5lZFttb2QubWFwLmlk
XSA9IG1vZC5leHBvcnRzKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRd
ID0ge30pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1vZC5tb2R1bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1v
ZC5tb2R1bGU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIChtb2QubW9kdWxlID0geworICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5t
YXAuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAorICAgICAg
ICAgICAgICAgICAgICAgICAgY29uZmlnOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdldE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKSB8fCB7
fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBl
eHBvcnRzOiBtb2QuZXhwb3J0cyB8fCAobW9kLmV4cG9ydHMgPSB7fSkKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIGZ1bmN0aW9uIGNsZWFuUmVnaXN0cnkoaWQpIHsKKyAgICAgICAgICAgIC8vQ2xl
YW4gdXAgbWFjaGluZXJ5IHVzZWQgZm9yIHdhaXRpbmcgbW9kdWxlcy4KKyAgICAgICAgICAgIGRl
bGV0ZSByZWdpc3RyeVtpZF07CisgICAgICAgICAgICBkZWxldGUgZW5hYmxlZFJlZ2lzdHJ5W2lk
XTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGJyZWFrQ3ljbGUobW9kLCB0cmFjZWQs
IHByb2Nlc3NlZCkgeworICAgICAgICAgICAgdmFyIGlkID0gbW9kLm1hcC5pZDsKKworICAgICAg
ICAgICAgaWYgKG1vZC5lcnJvcikgeworICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcics
IG1vZC5lcnJvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRyYWNl
ZFtpZF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGVhY2gobW9kLmRlcE1hcHMsIGZ1bmN0aW9u
IChkZXBNYXAsIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFwLmlk
LAorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBJZCk7
CisKKyAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUgbm90
IGNvbXBsZXRlZAorICAgICAgICAgICAgICAgICAgICAvL2JlaW5nIGRlZmluZWQsIHNvIHN0aWxs
IGluIHRoZSByZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgLy9hbmQgb25seSBpZiBpdCBo
YXMgbm90IGJlZW4gbWF0Y2hlZCB1cAorICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBtb2R1
bGUgYWxyZWFkeS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlcCAmJiAhbW9kLmRlcE1hdGNo
ZWRbaV0gJiYgIXByb2Nlc3NlZFtkZXBJZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChnZXRPd24odHJhY2VkLCBkZXBJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
b2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb2QuY2hlY2soKTsgLy9wYXNzIGZhbHNlPworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwgdHJh
Y2VkLCBwcm9jZXNzZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc2Vk
W2lkXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBjaGVja0xvYWRlZCgpIHsKKyAgICAgICAgICAgIHZhciBlcnIsIHVzaW5nUGF0aEZhbGxiYWNr
LAorICAgICAgICAgICAgICAgIHdhaXRJbnRlcnZhbCA9IGNvbmZpZy53YWl0U2Vjb25kcyAqIDEw
MDAsCisgICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSB3YWl0
IGludGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAuCisgICAgICAgICAgICAgICAgZXhw
aXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUgKyB3YWl0SW50ZXJ2YWwp
IDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCisgICAgICAgICAgICAgICAgbm9Mb2FkcyA9IFtdLAor
ICAgICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCisgICAgICAgICAgICAgICAgc3RpbGxMb2Fk
aW5nID0gZmFsc2UsCisgICAgICAgICAgICAgICAgbmVlZEN5Y2xlQ2hlY2sgPSB0cnVlOworCisg
ICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdhcyBhIHJlc3VsdCBvZiBh
IGN5Y2xlIGJyZWFrLgorICAgICAgICAgICAgaWYgKGluQ2hlY2tMb2FkZWQpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluQ2hlY2tMb2Fk
ZWQgPSB0cnVlOworCisgICAgICAgICAgICAvL0ZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIGFsbCB0
aGUgbW9kdWxlcy4KKyAgICAgICAgICAgIGVhY2hQcm9wKGVuYWJsZWRSZWdpc3RyeSwgZnVuY3Rp
b24gKG1vZCkgeworICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtb2QubWFwLAorICAgICAgICAg
ICAgICAgICAgICBtb2RJZCA9IG1hcC5pZDsKKworICAgICAgICAgICAgICAgIC8vU2tpcCB0aGlu
Z3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCisgICAgICAgICAgICAg
ICAgaWYgKCFtb2QuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vSWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMgbm90CisgICAg
ICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0
LgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5w
dXNoKG1vZElkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9k
SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbWFwLnByZWZpeCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0aG91Z2gsIGtl
ZXAgZ29pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBi
ZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9p
cyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKG5lZWRDeWNsZUNoZWNrID0gZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMubGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2Yg
dW5sb2FkZWQgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVv
dXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fk
cyk7CisgICAgICAgICAgICAgICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5jb250ZXh0TmFt
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KKyAgICAgICAg
ICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgeworICAgICAgICAgICAgICAgIGVhY2gocmVxQ2FsbHMs
IGZ1bmN0aW9uIChtb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9
LCB7fSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29t
ZXRoaW5nCisgICAgICAgICAgICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3VyY2UsIG9yIHRo
ZXJlIGFyZSBzdGlsbCBvdXRzdGFuZGluZworICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1
c3QgdHJ5IGJhY2sgbGF0ZXIuCisgICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0
aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKKyAgICAgICAgICAgICAgICAvL1NvbWV0aGlu
ZyBpcyBzdGlsbCB3YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25seQorICAgICAg
ICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KKyAgICAg
ICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVk
VGltZW91dElkKSB7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0g
c2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xv
YWRlZFRpbWVvdXRJZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgp
OworICAgICAgICAgICAgICAgICAgICB9LCA1MCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7CisgICAgICAgICAgICB0aGlzLmV2
ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKKyAgICAgICAgICAgIHRo
aXMubWFwID0gbWFwOworICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGlt
LCBtYXAuaWQpOworICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CisgICAgICAgICAg
ICB0aGlzLmRlcE1hcHMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwor
ICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CisgICAgICAgICAgICB0aGlzLmRlcENv
dW50ID0gMDsKKworICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQorICAg
ICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW10sCisgICAgICAgICAgICAgICB0aGlzLmVuYWJs
ZWQsIHRoaXMuZmV0Y2hlZAorICAgICAgICAgICAgKi8KKyAgICAgICAgfTsKKworICAgICAgICBN
b2R1bGUucHJvdG90eXBlID0geworICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGRlcE1hcHMs
IGZhY3RvcnksIGVycmJhY2ssIG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zID0g
b3B0aW9ucyB8fCB7fTsKKworICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1vcmUgaW5pdHMg
aWYgYWxyZWFkeSBkb25lLiBDYW4gaGFwcGVuIGlmIHRoZXJlCisgICAgICAgICAgICAgICAgLy9h
cmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90
CisgICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNv
IG5vdCB1bmV4cGVjdGVkLgorICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRlZCkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKKworICAgICAgICAgICAgICAgIGlmIChlcnJi
YWNrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlz
IG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9y
IGxpc3RlbmVycworICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAg
YW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgorICAgICAgICAgICAgICAgICAgICBlcnJi
YWNrID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVu
ZGVuY3kgYXJyYXksIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAvL3NvdXJjZSBpbnB1dHMgYXJl
IG5vdCBtb2RpZmllZC4gRm9yIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBz
IGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCisgICAgICAgICAgICAgICAgLy9kb2lu
ZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKKyAgICAgICAgICAg
ICAgICAvL3dvdWxkIGFmZmVjdCB0aGF0IGNvbmZpZy4KKyAgICAgICAgICAgICAgICB0aGlzLmRl
cE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7CisKKyAgICAgICAgICAgICAgICB0
aGlzLmVycmJhY2sgPSBlcnJiYWNrOworCisgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlz
IG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKKyAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwor
CisgICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxl
IGluIGVuYWJsZWQgbW9kZSwKKyAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBw
cmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAorICAgICAgICAgICAgICAgIC8v
dGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2FsbGVkLiBTbwor
ICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBl
bmRlbmNpZXMgYXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVk
IHx8IHRoaXMuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAvL0VuYWJsZSB0aGlzIG1v
ZHVsZSBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0
aGlzLmNoZWNrKCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgZGVmaW5lRGVwOiBm
dW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgeworICAgICAgICAgICAgICAgIC8vQmVjYXVzZSBvZiBj
eWNsZXMsIGRlZmluZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAvL2V4
cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5kZXBNYXRjaGVkW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hl
ZFtpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBmZXRjaDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlz
LmZldGNoZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgY29udGV4dC5zdGFydFRpbWUgPSAo
bmV3IERhdGUoKSkuZ2V0VGltZSgpOworCisgICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMu
bWFwOworCisgICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4g
bWFuYWdlZCByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxv
YWQgaXQgbm93LgorICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9
KSh0aGlzLnNoaW0uZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDog
dGhpcy5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRo
aXMubG9hZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5t
YXAudXJsOworCisgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCisgICAgICAg
ICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKKyAgICAgICAgICAgICAgICAgICAgdXJs
RmV0Y2hlZFt1cmxdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkKHRo
aXMubWFwLmlkLCB1cmwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVh
ZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAorICAgICAgICAgICAgICogZGVmaW5lIGl0
LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHZhciBlcnIsIGNqc01vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1h
cC5pZCwKKyAgICAgICAgICAgICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVwRXhwb3J0cywK
KyAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKKyAgICAgICAgICAg
ICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKKworICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5pbml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT25seSBmZXRjaCBpZiBub3Qg
YWxyZWFkeSBpbiB0aGUgZGVmUXVldWUuCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJv
cChjb250ZXh0LmRlZlF1ZXVlTWFwLCBpZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZmV0Y2goKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodGhpcy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9y
JywgdGhpcy5lcnJvcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbmlu
ZykgeworICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0b3J5IGNvdWxkIHRyaWdnZXIgYW5v
dGhlciByZXF1aXJlIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy90aGF0IHdvdWxkIHJlc3Vs
dCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bworICAgICAgICAgICAgICAgICAgICAvL2RlZmlu
ZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKKyAgICAgICAgICAgICAg
ICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29yay4KKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
ZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9y
LiBIb3dldmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25seSBkbyBpdCBmb3Ig
ZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1cmVzIGluCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy90aGVpciBjYWxsYmFja3MgKCM2OTkpLiBIb3dldmVyIGlm
IGEgZ2xvYmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbkVycm9yIGlzIHNldCwg
dXNlIHRoYXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmV2ZW50cy5l
cnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxLm9uRXJyb3IgIT09IGRlZmF1bHRPbkVycm9yKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9y
dHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0Ni
KGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXZvciByZXR1cm4g
dmFsdWUgb3ZlciBleHBvcnRzLiBJZiBub2RlL2NqcyBpbiBwbGF5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZW4gd2lsbCBub3QgaGF2ZSBhIHJldHVybiB2YWx1ZSBhbnl3YXku
IEZhdm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kdWxlLmV4cG9ydHMgYXNz
aWdubWVudCBvdmVyIGV4cG9ydHMgb2JqZWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiBleHBvcnRzID09PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlID0gdGhpcy5tb2R1bGU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjanNNb2R1bGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjanNNb2R1bGUuZXhwb3J0czsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzaW5nRXhwb3J0
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9leHBvcnRzIGFscmVh
ZHkgc2V0IHRoZSBkZWZpbmVkIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyLnJlcXVpcmVNYXAgPSB0aGlzLm1hcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gdGhpcy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRd
IDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBl
ID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoKHRoaXMuZXJyb3IgPSBlcnIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2
YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4
cG9ydHMgPSBleHBvcnRzOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAu
aXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmaW5lZFtpZF0gPSBleHBvcnRzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHJlcS5vblJlc291cmNlTG9hZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmVzTG9hZE1hcHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFj
aCh0aGlzLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc0xvYWRNYXBzLnB1c2goZGVwTWFwLm5vcm1hbGl6ZWRNYXAgfHwg
ZGVwTWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcS5vblJlc291cmNlTG9hZChjb250ZXh0LCB0aGlzLm1h
cCwgcmVzTG9hZE1hcHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiB1cAor
ICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAvL0ZpbmlzaGVkIHRoZSBkZWZpbmUgc3RhZ2UuIEFsbG93
IGNhbGxpbmcgY2hlY2sgYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgLy90byBhbGxvdyBkZWZp
bmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBvZiBhCisgICAgICAgICAgICAgICAg
ICAgIC8vY3ljbGUuCisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSBmYWxzZTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZpbmVkICYmICF0aGlzLmRlZmluZUVt
aXR0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdHRlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlZmluZWQnLCB0aGlzLmV4
cG9ydHMpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0Q29tcGxldGUg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICBjYWxsUGx1Z2luOiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwLAorICAgICAgICAgICAgICAgICAgICBpZCA9
IG1hcC5pZCwKKyAgICAgICAgICAgICAgICAgICAgLy9NYXAgYWxyZWFkeSBub3JtYWxpemVkIHRo
ZSBwcmVmaXguCisgICAgICAgICAgICAgICAgICAgIHBsdWdpbk1hcCA9IG1ha2VNb2R1bGVNYXAo
bWFwLnByZWZpeCk7CisKKyAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVu
Y3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAorICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNl
ZCBmb3IgY3ljbGVzLgorICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKHBsdWdpbk1h
cCk7CisKKyAgICAgICAgICAgICAgICBvbihwbHVnaW5NYXAsICdkZWZpbmVkJywgYmluZCh0aGlz
LCBmdW5jdGlvbiAocGx1Z2luKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkLCBub3Jt
YWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxl
SWQgPSBnZXRPd24oYnVuZGxlc01hcCwgdGhpcy5tYXAuaWQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5tYXAucGFyZW50TWFwLm5hbWUgOiBu
dWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlID0gY29udGV4dC5tYWtl
UmVxdWlyZShtYXAucGFyZW50TWFwLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5h
YmxlQnVpbGRDYWxsYmFjazogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy9JZiBjdXJyZW50IG1hcCBpcyBub3Qgbm9ybWFsaXplZCwgd2Fp
dCBmb3IgdGhhdAorICAgICAgICAgICAgICAgICAgICAvL25vcm1hbGl6ZWQgbmFtZSB0byBsb2Fk
IGluc3RlYWQgb2YgY29udGludWluZy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFw
LnVubm9ybWFsaXplZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhl
IElEIGlmIHRoZSBwbHVnaW4gYWxsb3dzIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBsdWdpbi5ub3JtYWxpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0g
cGx1Z2luLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIHRydWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8ICcnOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL3ByZWZpeCBhbmQgbmFtZSBz
aG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVkCisgICAgICAgICAgICAgICAgICAg
ICAgICAvL2ZvciBhcHBseWluZyBtYXAgY29uZmlnIGFnYWluIGVpdGhlci4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXggKyAn
IScgKyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvbihub3JtYWxpemVkTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVk
JywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5tYXAubm9ybWFsaXplZE1hcCA9IG5vcm1hbGl6ZWRNYXA7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1
cm4gdmFsdWU7IH0sIG51bGwsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuYWJsZWQ6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25v
cmU6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxp
emVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVk
TWFwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJv
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdl
cnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5lbmFibGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy9JZiBhIHBhdGhzIGNv
bmZpZywgdGhlbiBqdXN0IGxvYWQgdGhhdCBmaWxlIGluc3RlYWQgdG8KKyAgICAgICAgICAgICAg
ICAgICAgLy9yZXNvbHZlIHRoZSBwbHVnaW4sIGFzIGl0IGlzIGJ1aWx0IGludG8gdGhhdCBwYXRo
cyBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLm1hcC51cmwgPSBjb250ZXh0Lm5hbWVUb1VybChidW5kbGVJZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGxvYWQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVs
bCwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgICAgICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmVycm9yID0gZXJyOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJl
cXVpcmVNb2R1bGVzID0gW2lkXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUg
dGVtcCB1bm5vcm1hbGl6ZWQgbW9kdWxlcyBmb3IgdGhpcyBtb2R1bGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSByZXNvbHZlZCBvdGhlcndpc2Ug
bm93LgorICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9u
IChtb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pZC5pbmRl
eE9mKGlkICsgJ191bm5vcm1hbGl6ZWQnKSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBvbkVycm9yKGVycik7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICAgICAgICAgIC8vQWxsb3cgcGx1Z2lucyB0byBsb2FkIG90aGVyIGNvZGUgd2l0aG91
dCBoYXZpbmcgdG8ga25vdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy9jb250ZXh0IG9yIGhv
dyB0byAnY29tcGxldGUnIHRoZSBsb2FkLgorICAgICAgICAgICAgICAgICAgICBsb2FkLmZyb21U
ZXh0ID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4dEFsdCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG1vZHVsZU5hbWUgPSBtYXAubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2R1bGVNYXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5hbWUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc0ludGVyYWN0aXZlID0gdXNlSW50ZXJhY3RpdmU7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBvcnQganVzdCBwYXNzaW5nIHRoZSB0
ZXh0LCB0byByZWluZm9yY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZnJvbVRleHQgb25s
eSBiZWluZyBjYWxsZWQgb25jZSBwZXIgcmVzb3VyY2UuIFN0aWxsCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL3N1cHBvcnQgb2xkIHN0eWxlIG9mIHBhc3NpbmcgbW9kdWxlTmFtZSBidXQgZGlz
Y2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IG1vZHVsZU5hbWUgaW4gZmF2b3Ig
b2YgdGhlIGludGVybmFsIHJlZi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0QWx0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRBbHQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vVHVybiBvZmYg
aW50ZXJhY3RpdmUgc2NyaXB0IG1hdGNoaW5nIGZvciBJRSBmb3IgYW55IGRlZmluZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4dCwgdGhlbiB0dXJuIGl0IGJhY2sg
b24gYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
UHJpbWUgdGhlIHN5c3RlbSBieSBjcmVhdGluZyBhIG1vZHVsZSBpbnN0YW5jZSBmb3IKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBnZXRNb2R1
bGUobW9kdWxlTWFwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9UcmFuc2ZlciBhbnkg
Y29uZmlnIHRvIHRoaXMgb3RoZXIgbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc1Byb3AoY29uZmlnLmNvbmZpZywgaWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uZmlnLmNvbmZpZ1ttb2R1bGVOYW1lXSA9IGNvbmZpZy5jb25maWdbaWRdOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5leGVjKHRleHQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBvbkVycm9yKG1ha2VFcnJvcignZnJvbXRleHRldmFsJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tVGV4dCBldmFsIGZvciAnICsgaWQgKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJyArIGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJh
Y3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhlIHBsdWdpbgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy9yZXNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBN
YXBzLnB1c2gobW9kdWxlTWFwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9TdXBwb3J0
IGFub255bW91cyBtb2R1bGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21w
bGV0ZUxvYWQobW9kdWxlTmFtZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCB0
aGUgdmFsdWUgb2YgdGhhdCBtb2R1bGUgdG8gdGhlIHZhbHVlIGZvciB0aGlzCisgICAgICAgICAg
ICAgICAgICAgICAgICAvL3Jlc291cmNlIElELgorICAgICAgICAgICAgICAgICAgICAgICAgbG9j
YWxSZXF1aXJlKFttb2R1bGVOYW1lXSwgbG9hZCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICAgICAgICAgIC8vVXNlIHBhcmVudE5hbWUgaGVyZSBzaW5jZSB0aGUgcGx1
Z2luJ3MgbmFtZSBpcyBub3QgcmVsaWFibGUsCisgICAgICAgICAgICAgICAgICAgIC8vY291bGQg
YmUgc29tZSB3ZWlyZCBzdHJpbmcgd2l0aCBubyBwYXRoIHRoYXQgYWN0dWFsbHkgd2FudHMgdG8K
KyAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIHBhcmVudE5hbWUncyBwYXRoLgor
ICAgICAgICAgICAgICAgICAgICBwbHVnaW4ubG9hZChtYXAubmFtZSwgbG9jYWxSZXF1aXJlLCBs
b2FkLCBjb25maWcpOworICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgIGNv
bnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5wbHVn
aW5NYXBzW3BsdWdpbk1hcC5pZF0gPSBwbHVnaW5NYXA7CisgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBlbmFibGVkUmVn
aXN0cnlbdGhpcy5tYXAuaWRdID0gdGhpczsKKyAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQg
PSB0cnVlOworCisgICAgICAgICAgICAgICAgLy9TZXQgZmxhZyBtZW50aW9uaW5nIHRoYXQgdGhl
IG1vZHVsZSBpcyBlbmFibGluZywKKyAgICAgICAgICAgICAgICAvL3NvIHRoYXQgaW1tZWRpYXRl
IGNhbGxzIHRvIHRoZSBkZWZpbmVkIGNhbGxiYWNrcworICAgICAgICAgICAgICAgIC8vZm9yIGRl
cGVuZGVuY2llcyBkbyBub3QgdHJpZ2dlciBpbmFkdmVydGVudCBsb2FkCisgICAgICAgICAgICAg
ICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6ZXJvLgorICAgICAgICAgICAgICAg
IHRoaXMuZW5hYmxpbmcgPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBk
ZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGJpbmQodGhpcywg
ZnVuY3Rpb24gKGRlcE1hcCwgaSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1vZCwg
aGFuZGxlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcE1hcCA9PT0gJ3N0
cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRGVwZW5kZW5jeSBuZWVkcyB0byBi
ZSBjb252ZXJ0ZWQgdG8gYSBkZXBNYXAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdp
cmVkIHVwIHRvIHRoaXMgbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwTWFwID0g
bWFrZU1vZHVsZU1hcChkZXBNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh0aGlzLm1hcC5pc0RlZmluZSA/IHRoaXMubWFwIDogdGhpcy5tYXAucGFy
ZW50TWFwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0
aGlzLnNraXBNYXApOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzW2ldID0g
ZGVwTWFwOworCisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gZ2V0T3duKGhhbmRs
ZXJzLCBkZXBNYXAuaWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9IGhhbmRs
ZXIodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50
ICs9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2RlZmluZWQnLCBi
aW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBFeHBvcnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMudW5kZWZlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZGVmaW5lRGVwKGksIGRlcEV4cG9ydHMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXJyYmFjaykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCB0aGlz
LmVycmJhY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVu
dHMuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkaXJlY3QgZXJy
YmFjayBvbiB0aGlzIG1vZHVsZSwgYnV0IHNvbWV0aGluZworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGVsc2UgaXMgbGlzdGVuaW5nIGZvciBlcnJvcnMsIHNvIGJlIHN1cmUgdG8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yIGNvcnJlY3Rs
eS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQo
dGhpcywgZnVuY3Rpb24oZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZW1pdCgnZXJyb3InLCBlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOworICAgICAgICAgICAgICAgICAgICBtb2Qg
PSByZWdpc3RyeVtpZF07CisKKyAgICAgICAgICAgICAgICAgICAgLy9Ta2lwIHNwZWNpYWwgbW9k
dWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJworICAgICAgICAgICAgICAg
ICAgICAvL0Fsc28sIGRvbid0IGNhbGwgZW5hYmxlIGlmIGl0IGlzIGFscmVhZHkgZW5hYmxlZCwK
KyAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRhbnQgaW4gY2lyY3VsYXIgZGVwZW5kZW5jeSBj
YXNlcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGhhbmRsZXJzLCBpZCkgJiYg
bW9kICYmICFtb2QuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5l
bmFibGUoZGVwTWFwLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0pKTsKKworICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggcGx1Z2luIHRoYXQgaXMg
dXNlZCBpbgorICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAg
ZWFjaFByb3AodGhpcy5wbHVnaW5NYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW5NYXAp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgcGx1Z2lu
TWFwLmlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAg
ICAgICAgICB0aGlzLmVuYWJsaW5nID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB0aGlzLmNo
ZWNrKCk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBvbjogZnVuY3Rpb24gKG5hbWUs
IGNiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdOworICAg
ICAgICAgICAgICAgIGlmICghY2JzKSB7CisgICAgICAgICAgICAgICAgICAgIGNicyA9IHRoaXMu
ZXZlbnRzW25hbWVdID0gW107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNi
cy5wdXNoKGNiKTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9u
IChuYW1lLCBldnQpIHsKKyAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZXZlbnRzW25hbWVdLCBm
dW5jdGlvbiAoY2IpIHsKKyAgICAgICAgICAgICAgICAgICAgY2IoZXZ0KTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Vycm9yJykgeworICAgICAg
ICAgICAgICAgICAgICAvL05vdyB0aGF0IHRoZSBlcnJvciBoYW5kbGVyIHdhcyB0cmlnZ2VyZWQs
IHJlbW92ZQorICAgICAgICAgICAgICAgICAgICAvL3RoZSBsaXN0ZW5lcnMsIHNpbmNlIHRoaXMg
YnJva2VuIE1vZHVsZSBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgICAvL2NhbiBzdGF5IGFy
b3VuZCBmb3IgYSB3aGlsZSBpbiB0aGUgcmVnaXN0cnkuCisgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLmV2ZW50c1tuYW1lXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gY2FsbEdldE1vZHVsZShhcmdzKSB7Cisg
ICAgICAgICAgICAvL1NraXAgbW9kdWxlcyBhbHJlYWR5IGRlZmluZWQuCisgICAgICAgICAgICBp
ZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKKyAgICAgICAgICAgICAgICBnZXRNb2R1
bGUobWFrZU1vZHVsZU1hcChhcmdzWzBdLCBudWxsLCB0cnVlKSkuaW5pdChhcmdzWzFdLCBhcmdz
WzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJlbW92
ZUxpc3RlbmVyKG5vZGUsIGZ1bmMsIG5hbWUsIGllTmFtZSkgeworICAgICAgICAgICAgLy9GYXZv
ciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQorICAgICAgICAgICAgLy9pc3N1ZSwgc2VlIGF0
dGFjaEV2ZW50L2FkZEV2ZW50TGlzdGVuZXIgY29tbWVudCBlbHNld2hlcmUKKyAgICAgICAgICAg
IC8vaW4gdGhpcyBmaWxlLgorICAgICAgICAgICAgaWYgKG5vZGUuZGV0YWNoRXZlbnQgJiYgIWlz
T3BlcmEpIHsKKyAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJZiBub3QgaXQgd2lsbCB0
aHJvdyBhbiBlcnJvciwgd2hpY2ggd2lsbCBiZQorICAgICAgICAgICAgICAgIC8vdXNlZnVsIHRv
IGtub3cuCisgICAgICAgICAgICAgICAgaWYgKGllTmFtZSkgeworICAgICAgICAgICAgICAgICAg
ICBub2RlLmRldGFjaEV2ZW50KGllTmFtZSwgZnVuYyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVu
ZXIobmFtZSwgZnVuYywgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZyb20gYSBzY3JpcHQgbm9kZSwgZ2V0
IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAorICAgICAgICAgKiBhbmQgdGhlbiByZW1vdmVz
IHRoZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIG5vZGUuCisgICAgICAgICAqIEBwYXJhbSB7RXZl
bnR9IGV2dAorICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQorICAgICAgICAgKi8KKyAgICAg
ICAgZnVuY3Rpb24gZ2V0U2NyaXB0RGF0YShldnQpIHsKKyAgICAgICAgICAgIC8vVXNpbmcgY3Vy
cmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QK
KyAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRo
aXMgb25lIHdhcyBlYXN5IGVub3VnaAorICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGls
bCBtYWtlcyBzZW5zZS4KKyAgICAgICAgICAgIHZhciBub2RlID0gZXZ0LmN1cnJlbnRUYXJnZXQg
fHwgZXZ0LnNyY0VsZW1lbnQ7CisKKyAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBsaXN0ZW5lcnMg
b25jZSBoZXJlLgorICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNj
cmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5nZScpOworICAgICAgICAgICAgcmVt
b3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdEVycm9yLCAnZXJyb3InKTsKKworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAg
ICAgICAgIGlkOiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUn
KQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGludGFrZURl
ZmluZXMoKSB7CisgICAgICAgICAgICB2YXIgYXJnczsKKworICAgICAgICAgICAgLy9BbnkgZGVm
aW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGludGFrZSB0aGVtIG5vdy4KKyAgICAg
ICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOworCisgICAgICAgICAgICAvL01ha2Ugc3VyZSBhbnkg
cmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJseSBwcm9jZXNzZWQuCisgICAgICAg
ICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgYXJncyA9IGRl
ZlF1ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdtaXNtYXRjaCcs
ICdNaXNtYXRjaGVkIGFub255bW91cyBkZWZpbmUoKSBtb2R1bGU6ICcgKworICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwgZGVwcywgZmFjdG9yeS4g
U2hvdWxkIGJlIG5vcm1hbGl6ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vZGVmaW5l
KCkgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dC5kZWZR
dWV1ZU1hcCA9IHt9OworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAg
ICAgIGNvbmZpZzogY29uZmlnLAorICAgICAgICAgICAgY29udGV4dE5hbWU6IGNvbnRleHROYW1l
LAorICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAorICAgICAgICAgICAgZGVmaW5lZDog
ZGVmaW5lZCwKKyAgICAgICAgICAgIHVybEZldGNoZWQ6IHVybEZldGNoZWQsCisgICAgICAgICAg
ICBkZWZRdWV1ZTogZGVmUXVldWUsCisgICAgICAgICAgICBkZWZRdWV1ZU1hcDoge30sCisgICAg
ICAgICAgICBNb2R1bGU6IE1vZHVsZSwKKyAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VN
b2R1bGVNYXAsCisgICAgICAgICAgICBuZXh0VGljazogcmVxLm5leHRUaWNrLAorICAgICAgICAg
ICAgb25FcnJvcjogb25FcnJvciwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBT
ZXQgYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4KKyAgICAgICAgICAgICAqIEBwYXJh
bSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCisgICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgeworICAgICAgICAgICAg
ICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KKyAgICAgICAgICAg
ICAgICBpZiAoY2ZnLmJhc2VVcmwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNl
VXJsLmNoYXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IG9sZCBzdHls
ZSB1cmxBcmdzIHN0cmluZyB0byBhIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIGlmICh0eXBl
b2YgY2ZnLnVybEFyZ3MgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB1
cmxBcmdzID0gY2ZnLnVybEFyZ3M7CisgICAgICAgICAgICAgICAgICAgIGNmZy51cmxBcmdzID0g
ZnVuY3Rpb24oaWQsIHVybCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1cmwu
aW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyB1cmxBcmdzOworICAgICAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vU2F2ZSBv
ZmYgdGhlIHBhdGhzIHNpbmNlIHRoZXkgcmVxdWlyZSBzcGVjaWFsIHByb2Nlc3NpbmcsCisgICAg
ICAgICAgICAgICAgLy90aGV5IGFyZSBhZGRpdGl2ZS4KKyAgICAgICAgICAgICAgICB2YXIgc2hp
bSA9IGNvbmZpZy5zaGltLAorICAgICAgICAgICAgICAgICAgICBvYmpzID0geworICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0aHM6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBidW5k
bGVzOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbWFwOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgICAgICBlYWNoUHJvcChjZmcsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25maWdbcHJvcF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25m
aWdbcHJvcF0gPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUsIHRydWUpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3By
b3BdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgICAgIC8vUmV2ZXJzZSBtYXAgdGhlIGJ1bmRsZXMKKyAgICAgICAgICAg
ICAgICBpZiAoY2ZnLmJ1bmRsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2Zn
LmJ1bmRsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodiAhPT0gcHJvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5k
bGVzTWFwW3ZdID0gcHJvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9NZXJnZSBzaGltCisgICAgICAgICAgICAgICAg
aWYgKGNmZy5zaGltKSB7CisgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5zaGltLCBm
dW5jdGlvbiAodmFsdWUsIGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6
ZSB0aGUgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQpICYmICF2YWx1ZS5leHBvcnRzRm4p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0
Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoaW0gPSBzaGltOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vQWRqdXN0IHBhY2thZ2VzIGlmIG5lY2Vzc2Fy
eS4KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2VzKSB7CisgICAgICAgICAgICAgICAg
ICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbG9jYXRpb24sIG5hbWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8ge25hbWU6IHBrZ09ian0gOiBw
a2dPYmo7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwa2dPYmoubmFtZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uZmlnLnBhdGhzW25hbWVdID0gcGtnT2JqLmxvY2F0aW9uOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL1NhdmUgcG9pbnRlciB0
byBtYWluIG1vZHVsZSBJRCBmb3IgcGtnIG5hbWUuCisgICAgICAgICAgICAgICAgICAgICAgICAv
L1JlbW92ZSBsZWFkaW5nIGRvdCBpbiBtYWluLCBzbyBtYWluIHBhdGhzIGFyZSBub3JtYWxpemVk
LAorICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgcmVtb3ZlIGFueSB0cmFpbGluZyAuanMs
IHNpbmNlIGRpZmZlcmVudCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAvL2VudnMg
aGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAvL3NvbWUgdXNlIGEgZmlsZSBuYW1lLgorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZmlnLnBrZ3NbbmFtZV0gPSBwa2dPYmoubmFtZSArICcvJyArIChwa2dP
YmoubWFpbiB8fCAnbWFpbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LnJlcGxhY2UoY3VyckRpclJlZ0V4cCwgJycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBh
cmUgYW55ICJ3YWl0aW5nIHRvIGV4ZWN1dGUiIG1vZHVsZXMgaW4gdGhlIHJlZ2lzdHJ5LAorICAg
ICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZv
LCBsaWtlIFVSTHMgdG8gbG9hZCwKKyAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQu
CisgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QsIGlkKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVk
LCBzaW5jZSBpdCBpcyB0b28KKyAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0
aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCisgICAgICAgICAgICAgICAgICAgIC8v
c2luY2UgdGhleSBhcmUgdHJhbnNpZW50LgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5p
bml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCwgbnVsbCwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8vSWYgYSBk
ZXBzIGFycmF5IG9yIGEgY29uZmlnIGNhbGxiYWNrIGlzIHNwZWNpZmllZCwgdGhlbiBjYWxsCisg
ICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBpcyB1c2VmdWwg
d2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQorICAgICAgICAgICAgICAgIC8vY29uZmlnIG9i
amVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCisgICAgICAgICAgICAgICAgaWYgKGNm
Zy5kZXBzIHx8IGNmZy5jYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFjayk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAo
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBmbigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHJldDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZhbHVlLmluaXQuYXBwbHkoZ2xvYmFsLCBhcmd1
bWVudHMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuOworICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMp
IHsKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjaykgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKKworICAgICAgICAg
ICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNhbGxiYWNrICYm
IGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVp
cmUgY2FsbCcpLCBlcnJiYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0
ZWQsIGdldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFsdWUgZm9yIHRoZW0gZnJv
bSB0aGUgc3BlY2lhbCBoYW5kbGVycy4gQ2F2ZWF0OgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQuCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2RlcHNdKHJlZ2lz
dHJ5W3JlbE1hcC5pZF0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAvL1N5bmNocm9ub3VzIGFjY2VzcyB0byBvbmUgbW9kdWxlLiBJZiByZXF1
aXJlLmdldCBpcworICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgKGFzIGluIHRo
ZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXEuZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcS5nZXQo
Y29udGV4dCwgZGVwcywgcmVsTWFwLCBsb2NhbFJlcXVpcmUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFt
ZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLgorICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0g
bWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlkID0gbWFwLmlkOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhh
c1Byb3AoZGVmaW5lZCwgaWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29u
dGV4dDogJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dE5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxNYXAg
PyAnJyA6ICcuIFVzZSByZXF1aXJlKFtdKScpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtpZF07CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5n
IGluIHRoZSBnbG9iYWwgcXVldWUuCisgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMo
KTsKKworICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMg
bmVlZGluZyB0byBiZSBsb2FkZWQuCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dFRp
Y2soZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMg
Y291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGFrZURlZmluZXMoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdl
dE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBy
ZXF1aXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2Quc2tpcE1hcCA9IG9wdGlvbnMuc2tp
cE1hcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNh
bGxiYWNrLCBlcnJiYWNrLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDog
dHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNoZWNrTG9hZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgbWl4aW4obG9jYWxSZXF1aXJlLCB7CisgICAgICAgICAgICAgICAgICAgIGlz
QnJvd3NlcjogaXNCcm93c2VyLAorCisgICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAg
ICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFu
IFVSTCBwYXRoLgorICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2Yg
YSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZworICAgICAgICAgICAgICAg
ICAgICAgKiBwbGFpbiBVUkxzIGxpa2UgbmFtZVRvVXJsLgorICAgICAgICAgICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0Lmxhc3RJbmRleE9mKCcuJyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNw
bGl0KCcvJylbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSA9IHNl
Z21lbnQgPT09ICcuJyB8fCBzZWdtZW50ID09PSAnLi4nOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vZG90cyBmcm9tIGEgcmVsYXRpdmUgcGF0aC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgKCFpc1JlbGF0aXZlIHx8IGlu
ZGV4ID4gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1l
UGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZVBsdXNFeHQgPSBtb2R1bGVOYW1lUGx1
c0V4dC5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXpl
KG1vZHVsZU5hbWVQbHVzRXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVsTWFwICYmIHJlbE1hcC5pZCwgdHJ1ZSksIGV4dCwgIHRydWUpOworICAg
ICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0
aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5l
ZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOworICAgICAgICAg
ICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24g
KGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJl
bE1hcCwgZmFsc2UsIHRydWUpLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhh
c1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy9Pbmx5
IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCisgICAgICAgICAgICAgICAg
aWYgKCFyZWxNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0g
ZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRp
bmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgLy9maXggZm9yICM0MDgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1
ZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1vZHVsZU1hcChp
ZCwgcmVsTWFwLCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRP
d24ocmVnaXN0cnksIGlkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbW9kLnVuZGVmZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlZmluZWRbaWRdOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07CisgICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOworCisgICAgICAgICAgICAgICAgICAgICAgICAv
L0NsZWFuIHF1ZXVlZCBkZWZpbmVzIHRvby4gR28gYmFja3dhcmRzCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL2luIGFycmF5IHNvIHRoYXQgdGhlIHNwbGljZXMgZG8gbm90CisgICAgICAgICAg
ICAgICAgICAgICAgICAvL21lc3MgdXAgdGhlIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVhY2hSZXZlcnNlKGRlZlF1ZXVlLCBmdW5jdGlvbihhcmdzLCBpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IGlkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZlF1ZXVlLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1vZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
SG9sZCBvbiB0byBsaXN0ZW5lcnMgaW4gY2FzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvL21vZHVsZSB3aWxsIGJlIGF0dGVtcHRlZCB0byBiZSByZWxvYWRlZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgYSBkaWZmZXJlbnQgY29uZmlnLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXZlbnRzLmRlZmluZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5kZWZFdmVudHNbaWRdID0gbW9kLmV2ZW50czsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGVhblJlZ2lzdHJ5KGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
bG9jYWxSZXF1aXJlOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAgICAg
ICAgICAgKiBDYWxsZWQgdG8gZW5hYmxlIGEgbW9kdWxlIGlmIGl0IGlzIHN0aWxsIGluIHRoZSBy
ZWdpc3RyeQorICAgICAgICAgICAgICogYXdhaXRpbmcgZW5hYmxlbWVudC4gQSBzZWNvbmQgYXJn
LCBwYXJlbnQsIHRoZSBwYXJlbnQgbW9kdWxlLAorICAgICAgICAgICAgICogaXMgcGFzc2VkIGlu
IGZvciBjb250ZXh0LCB3aGVuIHRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkKKyAgICAgICAg
ICAgICAqIHRoZSBvcHRpbWl6ZXIuIE5vdCBzaG93biBoZXJlIHRvIGtlZXAgY29kZSBjb21wYWN0
LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIChkZXBNYXAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBNYXAuaWQp
OworICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TW9k
dWxlKGRlcE1hcCkuZW5hYmxlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwK
KworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBi
eSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCisgICAgICAg
ICAgICAgKiBBIGxvYWQgZXZlbnQgY291bGQgYmUgYSBzY3JpcHQgbG9hZCBvciBqdXN0IGEgbG9h
ZCBwYXNzIGZyb20gYSBzeW5jaHJvbm91cworICAgICAgICAgICAgICogbG9hZCBjYWxsLgorICAg
ICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1v
ZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAg
ICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFtZSkgeworICAgICAgICAgICAgICAg
IHZhciBmb3VuZCwgYXJncywgbW9kLAorICAgICAgICAgICAgICAgICAgICBzaGltID0gZ2V0T3du
KGNvbmZpZy5zaGltLCBtb2R1bGVOYW1lKSB8fCB7fSwKKyAgICAgICAgICAgICAgICAgICAgc2hF
eHBvcnRzID0gc2hpbS5leHBvcnRzOworCisgICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVl
KCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sw
XSA9IG1vZHVsZU5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFscmVhZHkgZm91
bmQgYW4gYW5vbnltb3VzIG1vZHVsZSBhbmQgYm91bmQgaXQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29tZSBvdGhlciBhbm9uIG1vZHVsZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRv
IGZpcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKKworICAgICAgICAg
ICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNl
IHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMg
Y2hhbmdlcyB0aGUgcmVnaXN0cnkuCisgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lz
dHJ5LCBtb2R1bGVOYW1lKTsKKworICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1By
b3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjb25maWcuZW5mb3JjZURlZmluZSAmJiAoIXNoRXhwb3J0cyB8fCAh
Z2V0R2xvYmFsKHNoRXhwb3J0cykpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
UGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBm
b3IgJyArIG1vZHVsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW21vZHVsZU5hbWVdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRo
YXQgZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsR2V0TW9kdWxlKFttb2R1bGVOYW1lLCAoc2hpbS5kZXBzIHx8IFtdKSwgc2hpbS5leHBvcnRz
Rm5dKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAv
KioKKyAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGgu
IFN1cHBvcnRzIGNhc2VzIHdoZXJlCisgICAgICAgICAgICAgKiBtb2R1bGVOYW1lIG1heSBhY3R1
YWxseSBiZSBqdXN0IGFuIFVSTC4KKyAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMg
bm90KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCisgICAgICAgICAgICAgKiBp
dCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4K
KyAgICAgICAgICAgICAqIGludGVybmFsIEFQSSwgbm90IGEgcHVibGljIG9uZS4gVXNlIHRvVXJs
IGZvciB0aGUgcHVibGljIEFQSS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbmFtZVRv
VXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7CisgICAgICAgICAgICAg
ICAgdmFyIHBhdGhzLCBzeW1zLCBpLCBwYXJlbnRNb2R1bGUsIHVybCwKKyAgICAgICAgICAgICAg
ICAgICAgcGFyZW50UGF0aCwgYnVuZGxlSWQsCisgICAgICAgICAgICAgICAgICAgIHBrZ01haW4g
PSBnZXRPd24oY29uZmlnLnBrZ3MsIG1vZHVsZU5hbWUpOworCisgICAgICAgICAgICAgICAgaWYg
KHBrZ01haW4pIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IHBrZ01haW47Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVu
ZGxlc01hcCwgbW9kdWxlTmFtZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkLCBl
eHQsIHNraXBFeHQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vSWYg
YSBjb2xvbiBpcyBpbiB0aGUgVVJMLCBpdCBpbmRpY2F0ZXMgYSBwcm90b2NvbCBpcyB1c2VkIGFu
ZCBpdCBpcyBqdXN0CisgICAgICAgICAgICAgICAgLy9hbiBVUkwgdG8gYSBmaWxlLCBvciBpZiBp
dCBzdGFydHMgd2l0aCBhIHNsYXNoLCBjb250YWlucyBhIHF1ZXJ5IGFyZyAoaS5lLiA/KQorICAg
ICAgICAgICAgICAgIC8vb3IgZW5kcyB3aXRoIC5qcywgdGhlbiBhc3N1bWUgdGhlIHVzZXIgbWVh
bnQgdG8gdXNlIGFuIHVybCBhbmQgbm90IGEgbW9kdWxlIGlkLgorICAgICAgICAgICAgICAgIC8v
VGhlIHNsYXNoIGlzIGltcG9ydGFudCBmb3IgcHJvdG9jb2wtbGVzcyBVUkxzIGFzIHdlbGwgYXMg
ZnVsbCBwYXRocy4KKyAgICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobW9k
dWxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgcGxhaW4gcGF0aCwgbm90
IG1vZHVsZSBuYW1lIGxvb2t1cCwgc28ganVzdCByZXR1cm4gaXQuCisgICAgICAgICAgICAgICAg
ICAgIC8vQWRkIGV4dGVuc2lvbiBpZiBpdCBpcyBpbmNsdWRlZC4gVGhpcyBpcyBhIGJpdCB3b25r
eSwgb25seSBub24tLmpzIHRoaW5ncyBwYXNzCisgICAgICAgICAgICAgICAgICAgIC8vYW4gZXh0
ZW5zaW9uLCB0aGlzIG1ldGhvZCBwcm9iYWJseSBuZWVkcyB0byBiZSByZXdvcmtlZC4KKyAgICAg
ICAgICAgICAgICAgICAgdXJsID0gbW9kdWxlTmFtZSArIChleHQgfHwgJycpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vQSBtb2R1bGUgdGhhdCBuZWVk
cyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBwYXRoLgorICAgICAgICAgICAgICAgICAgICBwYXRocyA9
IGNvbmZpZy5wYXRoczsKKworICAgICAgICAgICAgICAgICAgICBzeW1zID0gbW9kdWxlTmFtZS5z
cGxpdCgnLycpOworICAgICAgICAgICAgICAgICAgICAvL0ZvciBlYWNoIG1vZHVsZSBuYW1lIHNl
Z21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgLy9yZWdp
c3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKKyAgICAgICAgICAg
ICAgICAgICAgLy9hbmQgd29yayB1cCBmcm9tIGl0LgorICAgICAgICAgICAgICAgICAgICBmb3Ig
KGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24ocGF0aHMsIHBhcmVudE1vZHVsZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vSWYgYW4gYXJyYXksIGl0IG1lYW5zIHRoZXJlIGFyZSBhIGZldyBj
aG9pY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hvb3NlIHRoZSBvbmUgdGhh
dCBpcyBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFy
ZW50UGF0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCA9
IHBhcmVudFBhdGhbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy9Kb2luIHRoZSBw
YXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBuZWVkZWQu
CisgICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOworICAgICAgICAgICAg
ICAgICAgICB1cmwgKz0gKGV4dCB8fCAoL15kYXRhXDp8XmJsb2JcOnxcPy8udGVzdCh1cmwpIHx8
IHNraXBFeHQgPyAnJyA6ICcuanMnKSk7CisgICAgICAgICAgICAgICAgICAgIHVybCA9ICh1cmwu
Y2hhckF0KDApID09PSAnLycgfHwgdXJsLm1hdGNoKC9eW1x3XCtcLlwtXSs6LykgPyAnJyA6IGNv
bmZpZy5iYXNlVXJsKSArIHVybDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29uZmlnLnVybEFyZ3MgJiYgIS9eYmxvYlw6Ly50ZXN0KHVybCkgPworICAgICAg
ICAgICAgICAgICAgICAgICB1cmwgKyBjb25maWcudXJsQXJncyhtb2R1bGVOYW1lLCB1cmwpIDog
dXJsOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy9EZWxlZ2F0ZXMgdG8gcmVxLmxv
YWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0bworICAgICAgICAgICAgLy9h
bGxvdyBvdmVycmlkaW5nIGluIHRoZSBvcHRpbWl6ZXIuCisgICAgICAgICAgICBsb2FkOiBmdW5j
dGlvbiAoaWQsIHVybCkgeworICAgICAgICAgICAgICAgIHJlcS5sb2FkKGNvbnRleHQsIGlkLCB1
cmwpOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBF
eGVjdXRlcyBhIG1vZHVsZSBjYWxsYmFjayBmdW5jdGlvbi4gQnJva2VuIG91dCBhcyBhIHNlcGFy
YXRlIGZ1bmN0aW9uCisgICAgICAgICAgICAgKiBzb2xlbHkgdG8gYWxsb3cgdGhlIGJ1aWxkIHN5
c3RlbSB0byBzZXF1ZW5jZSB0aGUgZmlsZXMgaW4gdGhlIGJ1aWx0CisgICAgICAgICAgICAgKiBs
YXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAg
ICogQHByaXZhdGUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZXhlY0NiOiBmdW5jdGlv
biAobmFtZSwgY2FsbGJhY2ssIGFyZ3MsIGV4cG9ydHMpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY2FsbGJhY2suYXBwbHkoZXhwb3J0cywgYXJncyk7CisgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICAvKioKKyAgICAgICAgICAgICAqIGNhbGxiYWNrIGZvciBzY3JpcHQgbG9hZHMsIHVz
ZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCisgICAgICAgICAgICAgKgorICAgICAgICAg
ICAgICogQHBhcmFtIHtFdmVudH0gZXZ0IHRoZSBldmVudCBmcm9tIHRoZSBicm93c2VyIGZvciB0
aGUgc2NyaXB0CisgICAgICAgICAgICAgKiB0aGF0IHdhcyBsb2FkZWQuCisgICAgICAgICAgICAg
Ki8KKyAgICAgICAgICAgIG9uU2NyaXB0TG9hZDogZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAg
ICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZv
eCAyLjAncyBzYWtlLiBOb3QKKyAgICAgICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2ls
bCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKKyAgICAgICAgICAg
ICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgorICAgICAgICAgICAgICAg
IGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAocmVh
ZHlSZWdFeHAudGVzdCgoZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQpLnJlYWR5
U3RhdGUpKSkgeworICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0IGludGVyYWN0aXZlIHNjcmlw
dCBzbyBhIHNjcmlwdCBub2RlIGlzIG5vdCBoZWxkIG9udG8gZm9yCisgICAgICAgICAgICAgICAg
ICAgIC8vdG8gbG9uZy4KKyAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQgPSBu
dWxsOworCisgICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvdXQgdGhlIG5hbWUgb2YgdGhlIG1v
ZHVsZSBhbmQgdGhlIGNvbnRleHQuCisgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0
U2NyaXB0RGF0YShldnQpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9h
ZChkYXRhLmlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAvKioKKyAgICAgICAgICAgICAqIENhbGxiYWNrIGZvciBzY3JpcHQgZXJyb3JzLgorICAg
ICAgICAgICAgICovCisgICAgICAgICAgICBvblNjcmlwdEVycm9yOiBmdW5jdGlvbiAoZXZ0KSB7
CisgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFoYXNQYXRoRmFsbGJhY2soZGF0YS5pZCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIHBhcmVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVn
aXN0cnksIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChrZXkuaW5kZXhPZignX0ByJykgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0aW9uKGRlcE1hcCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZGVwTWFwLmlkID09PSBkYXRhLmlkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goa2V5KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3NjcmlwdGVycm9yJywgJ1NjcmlwdCBl
cnJvciBmb3IgIicgKyBkYXRhLmlkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0aCA/CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnIiwgbmVlZGVkIGJ5OiAnICsgcGFyZW50cy5qb2luKCcsICcp
IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciJyksIGV2
dCwgW2RhdGEuaWRdKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIGNvbnRleHQucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUoKTsK
KyAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWFpbiBl
bnRyeSBwb2ludC4KKyAgICAgKgorICAgICAqIElmIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHJlcXVp
cmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0CisgICAgICogaXMgcmVwcmVzZW50
ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQu
CisgICAgICoKKyAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoZW4g
aXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5CisgICAgICogb2YgZGVwZW5kZW5jeSBzdHJp
bmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgorICAg
ICAqIGJlIHNwZWNpZmllZCB0byBleGVjdXRlIHdoZW4gYWxsIG9mIHRob3NlIGRlcGVuZGVuY2ll
cyBhcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJs
ZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKKyAgICAgKiBvbiBh
IHJlcXVpcmUgdGhhdCBhcmUgbm90IHN0YW5kYXJkaXplZCksIGFuZCB0byBnaXZlIGEgc2hvcnQK
KyAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUgdXNlLgorICAgICAqLwor
ICAgIHJlcSA9IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChkZXBzLCBjYWxsYmFjaywgZXJyYmFjaywg
b3B0aW9uYWwpIHsKKworICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZh
dWx0CisgICAgICAgIHZhciBjb250ZXh0LCBjb25maWcsCisgICAgICAgICAgICBjb250ZXh0TmFt
ZSA9IGRlZkNvbnRleHROYW1lOworCisgICAgICAgIC8vIERldGVybWluZSBpZiBoYXZlIGNvbmZp
ZyBvYmplY3QgaW4gdGhlIGNhbGwuCisgICAgICAgIGlmICghaXNBcnJheShkZXBzKSAmJiB0eXBl
b2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25maWcg
b2JqZWN0CisgICAgICAgICAgICBjb25maWcgPSBkZXBzOworICAgICAgICAgICAgaWYgKGlzQXJy
YXkoY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUg
YXJlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGRlcHMgPSBjYWxsYmFjazsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7CisgICAgICAgICAgICAgICAgZXJyYmFjayA9
IG9wdGlvbmFsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXBzID0g
W107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnICYmIGNv
bmZpZy5jb250ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0TmFtZSA9IGNvbmZpZy5jb250ZXh0
OworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dCA9IGdldE93bihjb250ZXh0cywgY29udGV4
dE5hbWUpOworICAgICAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQgPSBj
b250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgICAgIGNvbnRleHQuY29u
ZmlndXJlKGNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY29udGV4dC5yZXF1
aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICog
U3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvb3BlcmF0ZSB3
aXRoIG90aGVyCisgICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVzLgor
ICAgICAqLworICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7CisgICAgICAgIHJl
dHVybiByZXEoY29uZmlnKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogRXhlY3V0ZSBzb21l
dGhpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgdGljaworICAgICAqIG9mIHRoZSBldmVudCBsb29wLiBP
dmVycmlkZSBmb3Igb3RoZXIgZW52cworICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1dGlv
biB0aGFuIHNldFRpbWVvdXQuCisgICAgICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGZ1bmN0aW9u
IHRvIGV4ZWN1dGUgbGF0ZXIuCisgICAgICovCisgICAgcmVxLm5leHRUaWNrID0gdHlwZW9mIHNl
dFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7CisgICAgICAgIHNldFRp
bWVvdXQoZm4sIDQpOworICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4oKTsgfTsKKworICAgIC8q
KgorICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQgb25seSBpZiBpdCBkb2Vz
IG5vdCBhbHJlYWR5IGV4aXN0LgorICAgICAqLworICAgIGlmICghcmVxdWlyZSkgeworICAgICAg
ICByZXF1aXJlID0gcmVxOworICAgIH0KKworICAgIHJlcS52ZXJzaW9uID0gdmVyc2lvbjsKKwor
ICAgIC8vVXNlZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBhbHJlYWR5IHBh
dGhzLgorICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpzJC87CisgICAgcmVxLmlz
QnJvd3NlciA9IGlzQnJvd3NlcjsKKyAgICBzID0gcmVxLnMgPSB7CisgICAgICAgIGNvbnRleHRz
OiBjb250ZXh0cywKKyAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAorICAgIH07CisKKyAg
ICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCisgICAgcmVxKHt9KTsKKworICAgIC8vRXhwb3J0
cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCisgICAg
ZWFjaChbCisgICAgICAgICd0b1VybCcsCisgICAgICAgICd1bmRlZicsCisgICAgICAgICdkZWZp
bmVkJywKKyAgICAgICAgJ3NwZWNpZmllZCcKKyAgICBdLCBmdW5jdGlvbiAocHJvcCkgeworICAg
ICAgICAvL1JlZmVyZW5jZSBmcm9tIGNvbnRleHRzIGluc3RlYWQgb2YgZWFybHkgYmluZGluZyB0
byBkZWZhdWx0IGNvbnRleHQsCisgICAgICAgIC8vc28gdGhhdCBkdXJpbmcgYnVpbGRzLCB0aGUg
bGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKKyAgICAgICAgLy93aXRoIGl0
cyBjb25maWcgZ2V0cyB1c2VkLgorICAgICAgICByZXFbcHJvcF0gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5hbWVdOworICAgICAgICAg
ICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKKyAgICAg
ICAgfTsKKyAgICB9KTsKKworICAgIGlmIChpc0Jyb3dzZXIpIHsKKyAgICAgICAgaGVhZCA9IHMu
aGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CisgICAgICAg
IC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVt
IGZvciBJRTYuCisgICAgICAgIC8vV2hlbiB0aGF0IGJyb3dzZXIgZGllcywgdGhpcyBjYW4gYmUg
cmVtb3ZlZC4gRGV0YWlscyBpbiB0aGlzIGpRdWVyeSBidWc6CisgICAgICAgIC8vaHR0cDovL2Rl
di5qcXVlcnkuY29tL3RpY2tldC8yNzA5CisgICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKKyAgICAgICAgaWYgKGJhc2VFbGVtZW50
KSB7CisgICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1lbnQucGFyZW50Tm9kZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFueSBlcnJvcnMgdGhhdCByZXF1
aXJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMKKyAgICAgKiBm
dW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50IGN1c3RvbSBlcnJvciBo
YW5kbGluZy4KKyAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4KKyAg
ICAgKi8KKyAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVycm9yOworCisgICAgLyoqCisgICAg
ICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29tbWFuZC4gT25seSB1c2VkIGluIGJy
b3dzZXIgZW52cy4KKyAgICAgKi8KKyAgICByZXEuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChjb25m
aWcsIG1vZHVsZU5hbWUsIHVybCkgeworICAgICAgICB2YXIgbm9kZSA9IGNvbmZpZy54aHRtbCA/
CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgorICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgICAgICBub2RlLnR5cGUgPSBjb25maWcu
c2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKKyAgICAgICAgbm9kZS5jaGFyc2V0ID0g
J3V0Zi04JzsKKyAgICAgICAgbm9kZS5hc3luYyA9IHRydWU7CisgICAgICAgIHJldHVybiBub2Rl
OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBt
b2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCisgICAgICogTWFrZSB0aGlzIGEgc2VwYXJhdGUg
ZnVuY3Rpb24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1lbnRzCisgICAgICogdG8gb3ZlcnJpZGUg
aXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCB0aGUgcmVxdWlyZSBj
b250ZXh0IHRvIGZpbmQgc3RhdGUuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUg
dGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KKyAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRoZSBV
UkwgdG8gdGhlIG1vZHVsZS4KKyAgICAgKi8KKyAgICByZXEubG9hZCA9IGZ1bmN0aW9uIChjb250
ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKKyAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0ICYm
IGNvbnRleHQuY29uZmlnKSB8fCB7fSwKKyAgICAgICAgICAgIG5vZGU7CisgICAgICAgIGlmIChp
c0Jyb3dzZXIpIHsKKyAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0
IHRhZworICAgICAgICAgICAgbm9kZSA9IHJlcS5jcmVhdGVOb2RlKGNvbmZpZywgbW9kdWxlTmFt
ZSwgdXJsKTsKKworICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNv
bnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKKyAgICAgICAgICAgIG5vZGUuc2V0QXR0cmli
dXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVOYW1lKTsKKworICAgICAgICAgICAgLy9T
ZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJzdCBiZWNhdXNlIElFOSBo
YXMKKyAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUgaW4gaXRzIGFkZEV2ZW50TGlzdGVuZXIg
YW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncworICAgICAgICAgICAgLy90aGF0IGRvIG5vdCBtYXRj
aCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJzIHdpdGgKKyAgICAgICAgICAgIC8v
YWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9y
IGEKKyAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFmdGVyIHRoZSBzY3JpcHQgZXhlY3V0aW9u
LiBTZWU6CisgICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2Zl
ZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQtZXZlbnQtaXMtbm90LWZpcmVkLWlt
bWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KKyAgICAgICAgICAgIC8vVU5GT1JUVU5B
VEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhl
IHNjcmlwdAorICAgICAgICAgICAgLy9zY3JpcHQgZXhlY3V0aW9uIG1vZGUuCisgICAgICAgICAg
ICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgorICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlm
IG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQg
b3IKKyAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVseSBzdXBwb3J0ZWQgYnkgYnJvd3Nlcgor
ICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9y
ZXF1aXJlanMvaXNzdWVzLzE4NworICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1Qg
ZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgor
ICAgICAgICAgICAgICAgICAgICAvL2luIElFOCwgbm9kZS5hdHRhY2hFdmVudCBkb2VzIG5vdCBo
YXZlIHRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZvciAi
W25hdGl2ZSBjb2RlIiB3aXRoIG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKKyAgICAgICAgICAgICAg
ICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMjcz
CisgICAgICAgICAgICAgICAgICAgICEobm9kZS5hdHRhY2hFdmVudC50b1N0cmluZyAmJiBub2Rl
LmF0dGFjaEV2ZW50LnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgPCAwKSAmJgor
ICAgICAgICAgICAgICAgICAgICAhaXNPcGVyYSkgeworICAgICAgICAgICAgICAgIC8vUHJvYmFi
bHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJlCisgICAgICAgICAgICAgICAgLy9z
Y3JpcHQgb25sb2FkIHJpZ2h0IGFmdGVyIGV4ZWN1dGluZyB0aGUgc2NyaXB0LCBzbworICAgICAg
ICAgICAgICAgIC8vd2UgY2Fubm90IHRpZSB0aGUgYW5vbnltb3VzIGRlZmluZSBjYWxsIHRvIGEg
bmFtZS4KKyAgICAgICAgICAgICAgICAvL0hvd2V2ZXIsIElFIHJlcG9ydHMgdGhlIHNjcmlwdCBh
cyBiZWluZyBpbiAnaW50ZXJhY3RpdmUnCisgICAgICAgICAgICAgICAgLy9yZWFkeVN0YXRlIGF0
IHRoZSB0aW1lIG9mIHRoZSBkZWZpbmUgY2FsbC4KKyAgICAgICAgICAgICAgICB1c2VJbnRlcmFj
dGl2ZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBub2RlLmF0dGFjaEV2ZW50KCdvbnJlYWR5
c3RhdGVjaGFuZ2UnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCk7CisgICAgICAgICAgICAgICAgLy9J
dCB3b3VsZCBiZSBncmVhdCB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciBoZXJlIHRvIGNhdGNoCisg
ICAgICAgICAgICAgICAgLy80MDRzIGluIElFOSsuIEhvd2V2ZXIsIG9ucmVhZHlzdGF0ZWNoYW5n
ZSB3aWxsIGZpcmUgYmVmb3JlCisgICAgICAgICAgICAgICAgLy90aGUgZXJyb3IgaGFuZGxlciwg
c28gdGhhdCBkb2VzIG5vdCBoZWxwLiBJZiBhZGRFdmVudExpc3RlbmVyCisgICAgICAgICAgICAg
ICAgLy9pcyB1c2VkLCB0aGVuIElFIHdpbGwgZmlyZSBlcnJvciBiZWZvcmUgbG9hZCwgYnV0IHdl
IGNhbm5vdAorICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29u
bmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCisgICAgICAgICAgICAgICAgLy9tZW50aW9uZWQgYWJv
dmUgYWJvdXQgbm90IGRvaW5nIHRoZSAnc2NyaXB0IGV4ZWN1dGUsCisgICAgICAgICAgICAgICAg
Ly90aGVuIGZpcmUgdGhlIHNjcmlwdCBsb2FkIGV2ZW50IGxpc3RlbmVyIGJlZm9yZSBleGVjdXRl
CisgICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4K
KyAgICAgICAgICAgICAgICAvL0Jlc3QgaG9wZTogSUUxMCBmaXhlcyB0aGUgaXNzdWVzLAorICAg
ICAgICAgICAgICAgIC8vYW5kIHRoZW4gZGVzdHJveXMgYWxsIGluc3RhbGxzIG9mIElFIDYtOS4K
KyAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9u
U2NyaXB0RXJyb3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBub2Rl
LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9u
U2NyaXB0RXJyb3IsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGUuc3Jj
ID0gdXJsOworCisgICAgICAgICAgICAvL0NhbGxpbmcgb25Ob2RlQ3JlYXRlZCBhZnRlciBhbGwg
cHJvcGVydGllcyBvbiB0aGUgbm9kZSBoYXZlIGJlZW4KKyAgICAgICAgICAgIC8vc2V0LCBidXQg
YmVmb3JlIGl0IGlzIHBsYWNlZCBpbiB0aGUgRE9NLgorICAgICAgICAgICAgaWYgKGNvbmZpZy5v
bk5vZGVDcmVhdGVkKSB7CisgICAgICAgICAgICAgICAgY29uZmlnLm9uTm9kZUNyZWF0ZWQobm9k
ZSwgY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvL0ZvciBzb21lIGNhY2hlIGNhc2VzIGluIElFIDYtOCwgdGhlIHNjcmlwdCBleGVjdXRlcyBi
ZWZvcmUgdGhlIGVuZAorICAgICAgICAgICAgLy9vZiB0aGUgYXBwZW5kQ2hpbGQgZXhlY3V0aW9u
LCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQorICAgICAgICAgICAgLy9jYWxsIHRvIHRo
ZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRoZSBub2RlKSwgaG9sZCBvbgorICAg
ICAgICAgICAgLy90byBhIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUsIGJ1dCBjbGVhciBhZnRlciB0
aGUgRE9NIGluc2VydGlvbi4KKyAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG5v
ZGU7CisgICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBoZWFk
Lmluc2VydEJlZm9yZShub2RlLCBiYXNlRWxlbWVudCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBudWxsOworCisgICAgICAgICAgICBy
ZXR1cm4gbm9kZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc1dlYldvcmtlcikgeworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAvL0luIGEgd2ViIHdvcmtlciwgdXNlIGltcG9ydFNj
cmlwdHMuIFRoaXMgaXMgbm90IGEgdmVyeQorICAgICAgICAgICAgICAgIC8vZWZmaWNpZW50IHVz
ZSBvZiBpbXBvcnRTY3JpcHRzLCBpbXBvcnRTY3JpcHRzIHdpbGwgYmxvY2sgdW50aWwKKyAgICAg
ICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRlZCBhbmQgZXZhbHVhdGVkLiBIb3dl
dmVyLCBpZiB3ZWIgd29ya2VycworICAgICAgICAgICAgICAgIC8vYXJlIGluIHBsYXksIHRoZSBl
eHBlY3RhdGlvbiBpcyB0aGF0IGEgYnVpbGQgaGFzIGJlZW4gZG9uZSBzbworICAgICAgICAgICAg
ICAgIC8vdGhhdCBvbmx5IG9uZSBzY3JpcHQgbmVlZHMgdG8gYmUgbG9hZGVkIGFueXdheS4gVGhp
cyBtYXkgbmVlZAorICAgICAgICAgICAgICAgIC8vdG8gYmUgcmVldmFsdWF0ZWQgaWYgb3RoZXIg
dXNlIGNhc2VzIGJlY29tZSBjb21tb24uCisKKyAgICAgICAgICAgICAgICAvLyBQb3N0IGEgdGFz
ayB0byB0aGUgZXZlbnQgbG9vcCB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBXZWJLaXQKKyAgICAg
ICAgICAgICAgICAvLyB3aGVyZSB0aGUgd29ya2VyIGdldHMgZ2FyYmFnZS1jb2xsZWN0ZWQgYWZ0
ZXIgY2FsbGluZworICAgICAgICAgICAgICAgIC8vIGltcG9ydFNjcmlwdHMoKTogaHR0cHM6Ly93
ZWJraXQub3JnL2IvMTUzMzE3CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHt9LCAwKTsKKyAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CisKKyAgICAgICAg
ICAgICAgICAvL0FjY291bnQgZm9yIGFub255bW91cyBtb2R1bGVzCisgICAgICAgICAgICAgICAg
Y29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CisgICAgICAgICAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2Ny
aXB0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZh
aWxlZCBmb3IgJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVO
YW1lICsgJyBhdCAnICsgdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNj
cmlwdCgpIHsKKyAgICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2Ny
aXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKKyAgICAgICAgICAgIHJldHVybiBp
bnRlcmFjdGl2ZVNjcmlwdDsKKyAgICAgICAgfQorCisgICAgICAgIGVhY2hSZXZlcnNlKHNjcmlw
dHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgeworICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0
YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFj
dGl2ZVNjcmlwdCA9IHNjcmlwdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg
ICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CisgICAgfQorCisgICAgLy9Mb29rIGZvciBhIGRh
dGEtbWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFz
ZVVybC4KKyAgICBpZiAoaXNCcm93c2VyICYmICFjZmcuc2tpcERhdGFNYWluKSB7CisgICAgICAg
IC8vRmlndXJlIG91dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJl
cXVpcmUuanMgaW4gaXQuCisgICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24g
KHNjcmlwdCkgeworICAgICAgICAgICAgLy9TZXQgdGhlICdoZWFkJyB3aGVyZSB3ZSBjYW4gYXBw
ZW5kIGNoaWxkcmVuIGJ5CisgICAgICAgICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQu
CisgICAgICAgICAgICBpZiAoIWhlYWQpIHsKKyAgICAgICAgICAgICAgICBoZWFkID0gc2NyaXB0
LnBhcmVudE5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vTG9vayBmb3IgYSBk
YXRhLW1haW4gYXR0cmlidXRlIHRvIHNldCBtYWluIHNjcmlwdCBmb3IgdGhlIHBhZ2UKKyAgICAg
ICAgICAgIC8vdG8gbG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBi
ZWNvbWVzIHRoZQorICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBz
ZXQuCisgICAgICAgICAgICBkYXRhTWFpbiA9IHNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFp
bicpOworICAgICAgICAgICAgaWYgKGRhdGFNYWluKSB7CisgICAgICAgICAgICAgICAgLy9QcmVz
ZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCisg
ICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOworCisgICAgICAgICAgICAgICAg
Ly9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBv
bmUsCisgICAgICAgICAgICAgICAgLy9idXQgb25seSBkbyBzbyBpZiB0aGUgZGF0YS1tYWluIHZh
bHVlIGlzIG5vdCBhIGxvYWRlciBwbHVnaW4KKyAgICAgICAgICAgICAgICAvL21vZHVsZSBJRC4K
KyAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsICYmIG1haW5TY3JpcHQuaW5kZXhPZign
IScpID09PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb2ZmIHRoZSBkaXJlY3Rv
cnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vYmFz
ZVVybC4KKyAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlwdC5zcGxpdCgnLycpOwor
ICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gc3JjLnBvcCgpOworICAgICAgICAgICAg
ICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5qb2luKCcvJykgICsgJy8nIDogJy4v
JzsKKworICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCA9IHN1YlBhdGg7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9TdHJpcCBvZmYgYW55IHRyYWlsaW5nIC5q
cyBzaW5jZSBtYWluU2NyaXB0IGlzIG5vdworICAgICAgICAgICAgICAgIC8vbGlrZSBhIG1vZHVs
ZSBuYW1lLgorICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxhY2Uo
anNTdWZmaXhSZWdFeHAsICcnKTsKKworICAgICAgICAgICAgICAgIC8vSWYgbWFpblNjcmlwdCBp
cyBzdGlsbCBhIHBhdGgsIGZhbGwgYmFjayB0byBkYXRhTWFpbgorICAgICAgICAgICAgICAgIGlm
IChyZXEuanNFeHRSZWdFeHAudGVzdChtYWluU2NyaXB0KSkgeworICAgICAgICAgICAgICAgICAg
ICBtYWluU2NyaXB0ID0gZGF0YU1haW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy9QdXQgdGhlIGRhdGEtbWFpbiBzY3JpcHQgaW4gdGhlIGZpbGVzIHRvIGxvYWQuCisg
ICAgICAgICAgICAgICAgY2ZnLmRlcHMgPSBjZmcuZGVwcyA/IGNmZy5kZXBzLmNvbmNhdChtYWlu
U2NyaXB0KSA6IFttYWluU2NyaXB0XTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUg
ZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGRlZmluaXRpb25zIG9mIG1vZHVsZXMuIERpZmZlcnMgZnJv
bQorICAgICAqIHJlcXVpcmUoKSBpbiB0aGF0IGEgc3RyaW5nIGZvciB0aGUgbW9kdWxlIHNob3Vs
ZCBiZSB0aGUgZmlyc3QgYXJndW1lbnQsCisgICAgICogYW5kIHRoZSBmdW5jdGlvbiB0byBleGVj
dXRlIGFmdGVyIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkIHNob3VsZAorICAgICAqIHJldHVybiBh
IHZhbHVlIHRvIGRlZmluZSB0aGUgbW9kdWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGFy
Z3VtZW50J3MKKyAgICAgKiBuYW1lLgorICAgICAqLworICAgIGRlZmluZSA9IGZ1bmN0aW9uIChu
YW1lLCBkZXBzLCBjYWxsYmFjaykgeworICAgICAgICB2YXIgbm9kZSwgY29udGV4dDsKKworICAg
ICAgICAvL0FsbG93IGZvciBhbm9ueW1vdXMgbW9kdWxlcworICAgICAgICBpZiAodHlwZW9mIG5h
bWUgIT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAvL0FkanVzdCBhcmdzIGFwcHJvcHJpYXRl
bHkKKyAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwczsKKyAgICAgICAgICAgIGRlcHMgPSBuYW1l
OworICAgICAgICAgICAgbmFtZSA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvL1RoaXMg
bW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgaWYgKCFpc0FycmF5KGRl
cHMpKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CisgICAgICAgICAgICBkZXBzID0g
bnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlz
IGEgZnVuY3Rpb24sIHRoZW4gZmlndXJlIG91dCBpZiBpdCBhCisgICAgICAgIC8vQ29tbW9uSlMg
dGhpbmcgd2l0aCBkZXBlbmRlbmNpZXMuCisgICAgICAgIGlmICghZGVwcyAmJiBpc0Z1bmN0aW9u
KGNhbGxiYWNrKSkgeworICAgICAgICAgICAgZGVwcyA9IFtdOworICAgICAgICAgICAgLy9SZW1v
dmUgY29tbWVudHMgZnJvbSB0aGUgY2FsbGJhY2sgc3RyaW5nLAorICAgICAgICAgICAgLy9sb29r
IGZvciByZXF1aXJlIGNhbGxzLCBhbmQgcHVsbCB0aGVtIGludG8gdGhlIGRlcGVuZGVuY2llcywK
KyAgICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCisgICAg
ICAgICAgICBpZiAoY2FsbGJhY2subGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sK
KyAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgLnJl
cGxhY2UoY29tbWVudFJlZ0V4cCwgY29tbWVudFJlcGxhY2UpCisgICAgICAgICAgICAgICAgICAg
IC5yZXBsYWNlKGNqc1JlcXVpcmVSZWdFeHAsIGZ1bmN0aW9uIChtYXRjaCwgZGVwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CisKKyAgICAgICAgICAgICAgICAvL01heSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0
aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKKyAgICAgICAgICAgICAgICAvL2NvdWxkIHVz
ZSBleHBvcnRzLCBhbmQgbW9kdWxlLiBBdm9pZCBkb2luZyBleHBvcnRzIGFuZCBtb2R1bGUKKyAg
ICAgICAgICAgICAgICAvL3dvcmsgdGhvdWdoIGlmIGl0IGp1c3QgbmVlZHMgcmVxdWlyZS4KKyAg
ICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1v
bkpTIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAvL29yZGVyIGxpc3RlZCBiZWxv
dy4KKyAgICAgICAgICAgICAgICBkZXBzID0gKGNhbGxiYWNrLmxlbmd0aCA9PT0gMSA/IFsncmVx
dWlyZSddIDogWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10pLmNvbmNhdChkZXBzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBo
aXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQorICAgICAg
ICAvL3dvcmsuCisgICAgICAgIGlmICh1c2VJbnRlcmFjdGl2ZSkgeworICAgICAgICAgICAgbm9k
ZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOworICAg
ICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1
bGUnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRl
eHRzW25vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JyldOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0
aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgaGFuZGxlci4KKyAgICAgICAgLy9U
aGlzIGFsbG93cyBtdWx0aXBsZSBtb2R1bGVzIHRvIGJlIGluIGEgZmlsZSB3aXRob3V0IHByZW1h
dHVyZWx5CisgICAgICAgIC8vdHJhY2luZyBkZXBlbmRlbmNpZXMsIGFuZCBhbGxvd3MgZm9yIGFu
b255bW91cyBtb2R1bGUgc3VwcG9ydCwKKyAgICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUg
aXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGV2ZW50CisgICAgICAgIC8vb2Nj
dXJzLiBJZiBubyBjb250ZXh0LCB1c2UgdGhlIGdsb2JhbCBxdWV1ZSwgYW5kIGdldCBpdCBwcm9j
ZXNzZWQKKyAgICAgICAgLy9pbiB0aGUgb25zY3JpcHQgbG9hZCBjYWxsYmFjay4KKyAgICAgICAg
aWYgKGNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWUucHVzaChbbmFtZSwg
ZGVwcywgY2FsbGJhY2tdKTsKKyAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbbmFtZV0g
PSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ2xvYmFsRGVmUXVldWUucHVz
aChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBkZWZp
bmUuYW1kID0geworICAgICAgICBqUXVlcnk6IHRydWUKKyAgICB9OworCisgICAgLyoqCisgICAg
ICogRXhlY3V0ZXMgdGhlIHRleHQuIE5vcm1hbGx5IGp1c3QgdXNlcyBldmFsLCBidXQgY2FuIGJl
IG1vZGlmaWVkCisgICAgICogdG8gdXNlIGEgYmV0dGVyLCBlbnZpcm9ubWVudC1zcGVjaWZpYyBj
YWxsLiBPbmx5IHVzZWQgZm9yIHRyYW5zcGlsaW5nCisgICAgICogbG9hZGVyIHBsdWdpbnMsIG5v
dCBmb3IgcGxhaW4gSlMgbW9kdWxlcy4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCB0aGUg
dGV4dCB0byBleGVjdXRlL2V2YWx1YXRlLgorICAgICAqLworICAgIHJlcS5leGVjID0gZnVuY3Rp
b24gKHRleHQpIHsKKyAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLworICAgICAgICByZXR1
cm4gZXZhbCh0ZXh0KTsKKyAgICB9OworCisgICAgLy9TZXQgdXAgd2l0aCBjb25maWcgaW5mby4K
KyAgICByZXEoY2ZnKTsKK30odGhpcywgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAndW5kZWZpbmVk
JyA/IHVuZGVmaW5lZCA6IHNldFRpbWVvdXQpKSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3Nz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE3ZWExODAxNjEyMTI2ZjFkYjY1Y2UwNTY4ZjJhMDIzNzNiOTNiNTUKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9k
b212Yy1hcHAtY3NzL2luZGV4LmNzcwpAQCAtMCwwICsxLDM3OCBAQAoraHRtbCwKK2JvZHkgewor
ICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworfQorCitidXR0b24geworICAgIG1hcmdp
bjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjogMDsKKyAgICBiYWNrZ3JvdW5kOiBu
b25lOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7
CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7Cisg
ICAgY29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFw
cGVhcmFuY2U6IG5vbmU7CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhp
bmc6IGFudGlhbGlhc2VkOworfQorCitib2R5IHsKKyAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2Eg
TmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgICAgbGluZS1oZWlnaHQ6IDEu
NGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CisgICAgY29sb3I6ICM0ZDRkNGQ7CisgICAg
bWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lkdGg6IDU1MHB4OworICAgIG1hcmdpbjogMCBh
dXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3ot
Zm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxp
YXNlZDsKKyAgICBmb250LXdlaWdodDogMzAwOworfQorCitidXR0b24sCitpbnB1dFt0eXBlPSJj
aGVja2JveCJdIHsKKyAgICBvdXRsaW5lOiBub25lOworfQorCisuaGlkZGVuIHsKKyAgICBkaXNw
bGF5OiBub25lOworfQorCisjdG9kb2FwcCB7CisgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICBt
YXJnaW46IDEzMHB4IDAgNDBweCAwOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBib3gt
c2hhZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAg
MCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7Cit9CisKKyN0b2RvYXBwIGlucHV0Ojot
d2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAg
Zm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaW5w
dXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250
LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisjdG9kb2FwcCBpbnB1dDo6
aW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdl
aWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQorCisjdG9kb2FwcCBoMSB7CisgICAg
cG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTE1NXB4OworICAgIHdpZHRoOiAxMDAlOwor
ICAgIGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9udC13ZWlnaHQ6IDEwMDsKKyAgICB0ZXh0LWFs
aWduOiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMTUpOworICAgIC13
ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtbW96LXRleHQt
cmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGlt
aXplTGVnaWJpbGl0eTsKK30KKworI25ldy10b2RvLAorLmVkaXQgeworICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXpl
OiAyNHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhl
cml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBib3JkZXI6IDA7CisgICAgb3V0bGlu
ZTogbm9uZTsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgYm9y
ZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAg
cmdiYSgwLCAwLCAwLCAwLjIpOworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdl
YmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGlu
ZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCisj
bmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZweCAxNnB4IDYwcHg7CisgICAgYm9yZGVy
OiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMDMpOworICAgIGJveC1z
aGFkb3c6IGluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAsMCwwLjAzKTsKK30KKworI21haW4gewor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6LWluZGV4OiAyOworICAgIGJvcmRlci10b3A6
IDFweCBzb2xpZCAjZTZlNmU2OworfQorCitsYWJlbFtmb3I9J3RvZ2dsZS1hbGwnXSB7CisgICAg
ZGlzcGxheTogbm9uZTsKK30KKworI3RvZ2dsZS1hbGwgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKKyAgICB0b3A6IC01NXB4OworICAgIGxlZnQ6IC0xMnB4OworICAgIHdpZHRoOiA2MHB4Owor
ICAgIGhlaWdodDogMzRweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiBu
b25lOyAvKiBNb2JpbGUgU2FmYXJpICovCit9CisKKyN0b2dnbGUtYWxsOmJlZm9yZSB7CisgICAg
Y29udGVudDogJ+Kdryc7CisgICAgZm9udC1zaXplOiAyMnB4OworICAgIGNvbG9yOiAjZTZlNmU2
OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAxMHB4IDI3cHg7Cit9CisKKyN0b2dnbGUtYWxsOmNo
ZWNrZWQ6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3MzsKK30KKworI3RvZG8tbGlzdCB7Cisg
ICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKK30K
KworI3RvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGZvbnQtc2l6
ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VkZWRlZDsKK30KKworI3Rv
ZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworfQorCisj
dG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7CisgICAgcGFk
ZGluZzogMDsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsKKyAgICBkaXNwbGF5
OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7CisgICAgcGFkZGluZzogMTNweCAxN3B4IDEycHgg
MTdweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGlu
ZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xl
IHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgd2lkdGg6IDQwcHg7CisgICAgLyogYXV0
bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vzbid0IHN1cHBvcnQgaW5wdXQgc3R5bGlu
ZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9w
OiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBib3JkZXI6IG5v
bmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Cisg
ICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyIHsK
KyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9
Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5v
bmUiIHN0cm9rZT0iI2VkZWRlZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PC9zdmc+Jyk7Cit9CisKKyN0
b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2Rh
dGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv
c3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNp
cmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2JkZGFkNSIg
c3Ryb2tlLXdpZHRoPSIzIi8+PHBhdGggZmlsbD0iIzVkYzJhZiIgZD0iTTcyIDI1TDQyIDcxIDI3
IDU2bC00IDQgMjAgMjAgMzQtNTJ6Ii8+PC9zdmc+Jyk7Cit9CisKKyN0b2RvLWxpc3QgbGkgbGFi
ZWwgeworICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgd29yZC1icmVhazogYnJlYWstd29yZDsK
KyAgICBwYWRkaW5nOiAxNXB4IDYwcHggMTVweCAxNXB4OworICAgIG1hcmdpbi1sZWZ0OiA0NXB4
OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgdHJhbnNp
dGlvbjogY29sb3IgMC40czsKK30KKworI3RvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgewor
ICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwor
fQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90
dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAgIGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46
IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDMwcHg7CisgICAgY29sb3I6ICNjYzlhOWE7CisgICAg
bWFyZ2luLWJvdHRvbTogMTFweDsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2Utb3V0
OworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyIHsKKyAgICBjb2xvcjogI2FmNWI1
ZTsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlciB7CisgICAgY29udGVudDogJ8OX
JzsKK30KKworI3RvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSB7CisgICAgZGlzcGxheTogYmxv
Y2s7Cit9CisKKyN0b2RvLWxpc3QgbGkgLmVkaXQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisK
KyN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsKKyAgICBtYXJnaW4tYm90dG9tOiAt
MXB4OworfQorCisjZm9vdGVyIHsKKyAgICBjb2xvcjogIzc3NzsKKyAgICBwYWRkaW5nOiAxMHB4
IDE1cHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBi
b3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworI2Zvb3RlcjpiZWZvcmUgeworICAg
IGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAg
ICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDUwcHg7CisgICAgb3ZlcmZs
b3c6IGhpZGRlbjsKKyAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIp
LAorICAgICAgICAgICAgICAgIDAgOHB4IDAgLTNweCAjZjZmNmY2LAorICAgICAgICAgICAgICAg
IDAgOXB4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDE2
cHggMCAtNnB4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAgMCAxN3B4IDJweCAtNnB4IHJnYmEo
MCwgMCwgMCwgMC4yKTsKK30KKworI3RvZG8tY291bnQgeworICAgIGZsb2F0OiBsZWZ0OworICAg
IHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKyN0b2RvLWNvdW50IHN0cm9uZyB7CisgICAgZm9udC13
ZWlnaHQ6IDMwMDsKK30KKworI2ZpbHRlcnMgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5n
OiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg
IHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7Cit9CisKKyNmaWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5
OiBpbmxpbmU7Cit9CisKKyNmaWx0ZXJzIGxpIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAg
IG1hcmdpbjogM3B4OworICAgIHBhZGRpbmc6IDNweCA3cHg7CisgICAgdGV4dC1kZWNvcmF0aW9u
OiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci1y
YWRpdXM6IDNweDsKK30KKworI2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCwKKyNmaWx0ZXJzIGxpIGE6
aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xKTsKK30KKwor
I2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcs
IDQ3LCAwLjIpOworfQorCisjY2xlYXItY29tcGxldGVkLAoraHRtbCAjY2xlYXItY29tcGxldGVk
OmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAg
ICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY3Vy
c29yOiBwb2ludGVyOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworI2NsZWFyLWNvbXBs
ZXRlZDpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKyNpbmZv
IHsKKyAgICBtYXJnaW46IDY1cHggYXV0byAwOworICAgIGNvbG9yOiAjYmZiZmJmOworICAgIGZv
bnQtc2l6ZTogMTBweDsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAy
NTUsIDAuNSk7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisjaW5mbyBwIHsKKyAgICBs
aW5lLWhlaWdodDogMTsKK30KKworI2luZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAg
dGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisKKyNpbmZv
IGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKgorICAg
IEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAgIENhbid0
IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3gK
KyovCitAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjAp
IHsKKyAgICAjdG9nZ2xlLWFsbCwKKyAgICAjdG9kby1saXN0IGxpIC50b2dnbGUgeworICAgICAg
ICBiYWNrZ3JvdW5kOiBub25lOworICAgIH0KKworICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7
CisgICAgICAgIGhlaWdodDogNDBweDsKKyAgICB9CisKKyAgICAjdG9nZ2xlLWFsbCB7CisgICAg
ICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOworICAgICAgICB0cmFuc2Zvcm06
IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAg
ICAgYXBwZWFyYW5jZTogbm9uZTsKKyAgICB9Cit9CisKK0BtZWRpYSAobWF4LXdpZHRoOiA0MzBw
eCkgeworICAgICNmb290ZXIgeworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgfQorCisgICAg
I2ZpbHRlcnMgeworICAgICAgICBib3R0b206IDEwcHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNr
YWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1h
cHAtY3NzL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmMxZDBkNTljMGZiMjlhNzgyZGVhMDdh
NWMxNTMyNTJkYzE0ZDQxCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSwx
MDMgQEAKK3sKKyAgIl9hcmdzIjogWworICAgIFsKKyAgICAgIHsKKyAgICAgICAgInJhdyI6ICJ0
b2RvbXZjLWFwcC1jc3NAXjEuMC4wIiwKKyAgICAgICAgInNjb3BlIjogbnVsbCwKKyAgICAgICAg
ImVzY2FwZWROYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisgICAgICAgICJuYW1lIjogInRvZG9t
dmMtYXBwLWNzcyIsCisgICAgICAgICJyYXdTcGVjIjogIl4xLjAuMCIsCisgICAgICAgICJzcGVj
IjogIj49MS4wLjAgPDIuMC4wIiwKKyAgICAgICAgInR5cGUiOiAicmFuZ2UiCisgICAgICB9LAor
ICAgICAgIi9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiCisgICAgXQorICBdLAorICAiX2Zyb20iOiAi
dG9kb212Yy1hcHAtY3NzQD49MS4wLjAgPDIuMC4wIiwKKyAgIl9pZCI6ICJ0b2RvbXZjLWFwcC1j
c3NAMS4wLjQiLAorICAiX2luQ2FjaGUiOiB0cnVlLAorICAiX2xvY2F0aW9uIjogIi90b2RvbXZj
LWFwcC1jc3MiLAorICAiX25vZGVWZXJzaW9uIjogIjAuMTIuMCIsCisgICJfbnBtVXNlciI6IHsK
KyAgICAibmFtZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNA
Z21haWwuY29tIgorICB9LAorICAiX25wbVZlcnNpb24iOiAiMi41LjEiLAorICAiX3BoYW50b21D
aGlsZHJlbiI6IHt9LAorICAiX3JlcXVlc3RlZCI6IHsKKyAgICAicmF3IjogInRvZG9tdmMtYXBw
LWNzc0BeMS4wLjAiLAorICAgICJzY29wZSI6IG51bGwsCisgICAgImVzY2FwZWROYW1lIjogInRv
ZG9tdmMtYXBwLWNzcyIsCisgICAgIm5hbWUiOiAidG9kb212Yy1hcHAtY3NzIiwKKyAgICAicmF3
U3BlYyI6ICJeMS4wLjAiLAorICAgICJzcGVjIjogIj49MS4wLjAgPDIuMC4wIiwKKyAgICAidHlw
ZSI6ICJyYW5nZSIKKyAgfSwKKyAgIl9yZXF1aXJlZEJ5IjogWworICAgICIvIgorICBdLAorICAi
X3Jlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtYXBwLWNzcy8t
L3RvZG9tdmMtYXBwLWNzcy0xLjAuNC50Z3oiLAorICAiX3NoYXN1bSI6ICJkMjUyOTI3OWE2ZGE1
YmVmYjA2YjU1YzBjMzI0YzVmY2ZkOTRkNjU2IiwKKyAgIl9zaHJpbmt3cmFwIjogbnVsbCwKKyAg
Il9zcGVjIjogInRvZG9tdmMtYXBwLWNzc0BeMS4wLjAiLAorICAiX3doZXJlIjogIi9Vc2Vycy9h
ZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQiLAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIlNpbmRyZSBTb3Jo
dXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIiwKKyAgICAidXJsIjog
InNpbmRyZXNvcmh1cy5jb20iCisgIH0sCisgICJidWdzIjogeworICAgICJ1cmwiOiAiaHR0cHM6
Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAtY3NzL2lzc3VlcyIKKyAgfSwKKyAgImRl
cGVuZGVuY2llcyI6IHt9LAorICAiZGVzY3JpcHRpb24iOiAiQ1NTIGZvciBUb2RvTVZDIGFwcHMi
LAorICAiZGV2RGVwZW5kZW5jaWVzIjoge30sCisgICJkaXJlY3RvcmllcyI6IHt9LAorICAiZGlz
dCI6IHsKKyAgICAic2hhc3VtIjogImQyNTI5Mjc5YTZkYTViZWZiMDZiNTVjMGMzMjRjNWZjZmQ5
NGQ2NTYiLAorICAgICJ0YXJiYWxsIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9t
dmMtYXBwLWNzcy8tL3RvZG9tdmMtYXBwLWNzcy0xLjAuNC50Z3oiCisgIH0sCisgICJmaWxlcyI6
IFsKKyAgICAiaW5kZXguY3NzIgorICBdLAorICAiZ2l0SGVhZCI6ICIxZTRlMzg4ODRhMzUxOTNl
YWYxODA4YTViYTQ0NDIxODMyODY3MTg0IiwKKyAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHVi
LmNvbS90YXN0ZWpzL3RvZG9tdmMtYXBwLWNzcyIsCisgICJrZXl3b3JkcyI6IFsKKyAgICAidG9k
b212YyIsCisgICAgInRhc3RlanMiLAorICAgICJhcHAiLAorICAgICJ0b2RvIiwKKyAgICAidGVt
cGxhdGUiLAorICAgICJjc3MiLAorICAgICJzdHlsZSIsCisgICAgInN0eWxlc2hlZXQiCisgIF0s
CisgICJsaWNlbnNlIjogIkNDLUJZLTQuMCIsCisgICJtYWludGFpbmVycyI6IFsKKyAgICB7Cisg
ICAgICAibmFtZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICAgImVtYWlsIjogInNpbmRyZXNvcmh1
c0BnbWFpbC5jb20iCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJhZGR5b3NtYW5pIiwK
KyAgICAgICJlbWFpbCI6ICJhZGR5b3NtYW5pQGdtYWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogInBhc3N5IiwKKyAgICAgICJlbWFpbCI6ICJwaGFydGlnQHJkcmVpLm5ldCIK
KyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInN0ZXBoZW5wbHVzcGx1cyIsCisgICAgICAi
ZW1haWwiOiAic2F3Y2h1a0BnbWFpbC5jb20iCisgICAgfQorICBdLAorICAibmFtZSI6ICJ0b2Rv
bXZjLWFwcC1jc3MiLAorICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInJlYWRtZSI6
ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAg
InR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vdGFzdGVq
cy90b2RvbXZjLWFwcC1jc3MuZ2l0IgorICB9LAorICAic2NyaXB0cyI6IHt9LAorICAidmVyc2lv
biI6ICIxLjAuNCIKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVf
bW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFkbWUubWQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRk
YmViZjAyNGMwNGFlYjYwMjBjYWYxMzFhMmVkMDMxODkwODBhNQotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVh
ZG1lLm1kCkBAIC0wLDAgKzEsMjggQEAKKyMgdG9kb212Yy1hcHAtY3NzCisKKz4gQ1NTIGZvciBU
b2RvTVZDIGFwcHMKKworIVtdKHNjcmVlbnNob3QucG5nKQorCisKKyMjIEluc3RhbGwKKworCitg
YGAKKyQgbnBtIGluc3RhbGwgLS1zYXZlIHRvZG9tdmMtYXBwLWNzcworYGBgCisKKworIyMgR2V0
dGluZyBzdGFydGVkCisKK2BgYGh0bWwKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9k
ZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MiPgorYGBgCisKK1NlZSB0aGUgW1Rv
ZG9NVkMgYXBwIHRlbXBsYXRlXShodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFw
cC10ZW1wbGF0ZSkuCisKKworCisjIyBMaWNlbnNlCisKKzxhIHJlbD0ibGljZW5zZSIgaHJlZj0i
aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wL2RlZWQuZW5fVVMiPjxp
bWcgYWx0PSJDcmVhdGl2ZSBDb21tb25zIExpY2Vuc2UiIHN0eWxlPSJib3JkZXItd2lkdGg6MCIg
c3JjPSJodHRwOi8vaS5jcmVhdGl2ZWNvbW1vbnMub3JnL2wvYnkvNC4wLzgweDE1LnBuZyIgLz48
L2E+PGJyIC8+VGhpcyA8c3BhbiB4bWxuczpkY3Q9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8i
IGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9JbnRlcmFjdGl2ZVJlc291cmNlIiBy
ZWw9ImRjdDp0eXBlIj53b3JrPC9zcGFuPiBieSA8YSB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZl
Y29tbW9ucy5vcmcvbnMjIiBocmVmPSJodHRwOi8vc2luZHJlc29yaHVzLmNvbSIgcHJvcGVydHk9
ImNjOmF0dHJpYnV0aW9uTmFtZSIgcmVsPSJjYzphdHRyaWJ1dGlvblVSTCI+U2luZHJlIFNvcmh1
czwvYT4gaXMgbGljZW5zZWQgdW5kZXIgYSA8YSByZWw9ImxpY2Vuc2UiIGhyZWY9Imh0dHA6Ly9j
cmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9kZWVkLmVuX1VTIj5DcmVhdGl2ZSBD
b21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2U8L2E+LgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9u
L2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMt
Y29tbW9uL2Jhc2UuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkMjVkM2M4NGFjNmM2YWVmMjZiOTY4M2EyYmMx
MGM2MWY5NjBjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKQEAgLTAsMCArMSwxNDEgQEAKK2hy
IHsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6IDA7CisgICAgYm9yZGVyLXRvcDog
MXB4IGRhc2hlZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2Y3Zjdm
NzsKK30KKworLmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgdGV4dC1k
ZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1OworfQorCisubGVhcm4gYTpob3Zl
ciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisgICAgY29sb3I6ICM3ODdlN2U7
Cit9CisKKy5sZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luOiAx
MHB4IDA7CisgICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBsaW5lLWhlaWdodDogMS4yOworICAg
IGNvbG9yOiAjMDAwOworfQorCisubGVhcm4gaDMgeworICAgIGZvbnQtc2l6ZTogMjRweDsKK30K
KworLmxlYXJuIGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7Cit9CisKKy5sZWFybiBoNSB7Cisg
ICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6IDE0cHg7Cit9CisKKy5sZWFybiB1
bCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMCAzMHB4IDI1cHg7Cit9CisKKy5s
ZWFybiBsaSB7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9CisKKy5sZWFybiBwIHsKKyAgICBm
b250LXNpemU6IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBsaW5lLWhlaWdodDog
MS4zOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKK30KKworI2lz
c3VlLWNvdW50IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisucXVvdGUgeworICAgIGJvcmRl
cjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7Cit9CisKKy5xdW90ZSBwIHsKKyAg
ICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBwOmJlZm9yZSB7CisgICAgY29udGVu
dDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsKKyAgICBsZWZ0OiAzcHg7Cit9CisK
Ky5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCdJzsKKyAgICBmb250LXNpemU6IDUw
cHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0
b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgeworICAgIHBv
c2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4OworICAgIHJpZ2h0OiAwOworfQor
CisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJhZGl1czogM3B4OworfQorCisucXVv
dGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7CisgICAgdmVydGljYWwtYWxpZ246
IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
KyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgLjA0KTsK
KyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVlY2gtYnViYmxlOmFmdGVyIHsKKyAg
ICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAxMDAlOwor
ICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAg
ICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4wNCk7Cit9CisKKy5sZWFybi1iYXIg
PiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB3aWR0aDogMjcycHg7Cisg
ICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAgIHBhZGRpbmc6IDEwcHg7CisgICAg
Ym9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUs
IDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGxlZnQ7CisgICAgdHJhbnNpdGlv
bi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiA4OTlweCkgeworICAg
IC5sZWFybi1iYXIgeworICAgICAgICB3aWR0aDogYXV0bzsKKyAgICAgICAgcGFkZGluZy1sZWZ0
OiAzMDBweDsKKyAgICB9CisKKyAgICAubGVhcm4tYmFyID4gLmxlYXJuIHsKKyAgICAgICAgbGVm
dDogOHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25v
ZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODFlMDA2
YmM1MDJkZGM0Yzc0ZjQ3YmQxM2E4MzkyMjc3ZjgzMGRiOAotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpz
CkBAIC0wLDAgKzEsMjQ5IEBACisvKiBnbG9iYWwgXyAqLworKGZ1bmN0aW9uICgpIHsKKyAgICAn
dXNlIHN0cmljdCc7CisKKyAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovCisgICAgLy8gVW5k
ZXJzY29yZSdzIFRlbXBsYXRlIE1vZHVsZQorICAgIC8vIENvdXJ0ZXN5IG9mIHVuZGVyc2NvcmVq
cy5vcmcKKyAgICB2YXIgXyA9IChmdW5jdGlvbiAoXykgeworICAgICAgICBfLmRlZmF1bHRzID0g
ZnVuY3Rpb24gKG9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2
YXIgYXJnc0luZGV4ID0gMSwgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGFyZ3NJbmRl
eCA8IGFyZ3NMZW5ndGg7IGFyZ3NJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZXJh
YmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxl
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBpdGVyYWJsZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFtrZXldID09IG51bGwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGl0ZXJhYmxlW2tleV07CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICB9
CisKKyAgICAgICAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1w
bGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyB0ZW1wbGF0
ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KKyAgICAgICAgXy50ZW1w
bGF0ZVNldHRpbmdzID0geworICAgICAgICAgICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNdKz8p
JT4vZywKKyAgICAgICAgICAgIGludGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9nLAorICAg
ICAgICAgICAgZXNjYXBlICAgICAgOiAvPCUtKFtcc1xTXSs/KSU+L2cKKyAgICAgICAgfTsKKwor
ICAgICAgICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRv
bid0IHdhbnQgdG8gZGVmaW5lIGFuCisgICAgICAgIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRp
b24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMKKyAgICAgICAgLy8gZ3Vh
cmFudGVlZCBub3QgdG8gbWF0Y2guCisgICAgICAgIHZhciBub01hdGNoID0gLyguKV4vOworCisg
ICAgICAgIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0
aGV5IGNhbiBiZSBwdXQgaW50byBhCisgICAgICAgIC8vIHN0cmluZyBsaXRlcmFsLgorICAgICAg
ICB2YXIgZXNjYXBlcyA9IHsKKyAgICAgICAgICAgICInIjogICAgICAiJyIsCisgICAgICAgICAg
ICAnXFwnOiAgICAgJ1xcJywKKyAgICAgICAgICAgICdccic6ICAgICAncicsCisgICAgICAgICAg
ICAnXG4nOiAgICAgJ24nLAorICAgICAgICAgICAgJ1x0JzogICAgICd0JywKKyAgICAgICAgICAg
ICdcdTIwMjgnOiAndTIwMjgnLAorICAgICAgICAgICAgJ1x1MjAyOSc6ICd1MjAyOScKKyAgICAg
ICAgfTsKKworICAgICAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIw
MjkvZzsKKworICAgICAgICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIg
dG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgorICAgICAgICAvLyBVbmRlcnNjb3JlIHRl
bXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3Bh
Y2UsCisgICAgICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVy
cG9sYXRlZCBjb2RlLgorICAgICAgICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgZGF0YSwg
c2V0dGluZ3MpIHsKKyAgICAgICAgICAgIHZhciByZW5kZXI7CisgICAgICAgICAgICBzZXR0aW5n
cyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOworCisgICAg
ICAgICAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9u
IHZpYSBhbHRlcm5hdGlvbi4KKyAgICAgICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChb
CisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsCisg
ICAgICAgICAgICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwK
KyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCisg
ICAgICAgICAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7CisKKyAgICAgICAgICAgIC8vIENv
bXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJv
cHJpYXRlbHkuCisgICAgICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICAgICAgdmFyIHNv
dXJjZSA9ICJfX3ArPSciOworICAgICAgICAgICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0
aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7CisgICAg
ICAgICAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkKKyAgICAgICAg
ICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdc
XCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7
CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgZXNjYXBlICsg
IikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4n
IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9
JyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZGV4ID0gb2Zmc2V0ICsg
bWF0Y2gubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgc291cmNlICs9ICInO1xuIjsKKworICAgICAgICAgICAgLy8gSWYg
YSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBz
Y29wZS4KKyAgICAgICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRo
KG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOworCisgICAgICAgICAgICBzb3VyY2UgPSAi
dmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKworICAgICAgICAgICAg
ICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiAr
CisgICAgICAgICAgICAgICAgc291cmNlICsgInJldHVybiBfX3A7XG4iOworCisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52
YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgICAgIGUuc291cmNlID0gc291cmNlOworICAgICAgICAgICAgICAgIHRo
cm93IGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkYXRhKSByZXR1cm4gcmVu
ZGVyKGRhdGEsIF8pOworICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkg
eworICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0
aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KKyAgICAgICAg
ICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8
ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKKworICAgICAgICAgICAgcmV0dXJuIHRl
bXBsYXRlOworICAgICAgICB9OworCisgICAgICAgIHJldHVybiBfOworICAgIH0pKHt9KTsKKwor
ICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3RvZG9tdmMuY29tJykgeworICAgICAgICAo
ZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0aWNzT2JqZWN0J109cjtpW3Jd
PWlbcl18fGZ1bmN0aW9uKCl7CisgICAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1
bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAorICAgICAg
ICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJl
bnROb2RlLmluc2VydEJlZm9yZShhLG0pCisgICAgICAgIH0pKHdpbmRvdyxkb2N1bWVudCwnc2Ny
aXB0JywnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2En
KTsKKyAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS0zMTA4MTA2Mi0xJywgJ2F1dG8nKTsKKyAgICAg
ICAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsKKyAgICB9CisgICAgLyoganNoaW50IGlnbm9yZTpl
bmQgKi8KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgeworICAgICAgICBpZiAobG9jYXRpb24u
aG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsKKyAgICAgICAgICAgIGxvY2F0aW9u
LmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3RlanMuZ2l0aHViLmlvL3RvZG9tdmMn
LCAndG9kb212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmRS
b290KCkgeworICAgICAgICB2YXIgYmFzZSA9IGxvY2F0aW9uLmhyZWYuaW5kZXhPZignZXhhbXBs
ZXMvJyk7CisgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmLnN1YnN0cigwLCBiYXNlKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUsIGNhbGxiYWNrKSB7CisgICAgICAgIGlm
ICghbG9jYXRpb24uaG9zdCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuaW5mbygnTWlz
cyB0aGUgaW5mbyBiYXI/IFJ1biBUb2RvTVZDIGZyb20gYSBzZXJ2ZXIgdG8gYXZvaWQgYSBjcm9z
cy1vcmlnaW4gZXJyb3IuJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgeGhyID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisKKyAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIGZpbmRSb290KCkgKyBm
aWxlLCB0cnVlKTsKKyAgICAgICAgeGhyLnNlbmQoKTsKKworICAgICAgICB4aHIub25sb2FkID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiBjYWxs
YmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIExlYXJuKGxlYXJu
SlNPTiwgY29uZmlnKSB7CisgICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBMZWFybikpIHsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5KU09OLCBjb25maWcpOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlLCBmcmFtZXdvcms7CisKKyAgICAgICAgaWYgKHR5
cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIGxlYXJuSlNPTiA9IEpTT04ucGFyc2UobGVhcm5KU09OKTsKKyAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnKSB7CisgICAgICAgICAgICB0ZW1wbGF0ZSA9
IGNvbmZpZy50ZW1wbGF0ZTsKKyAgICAgICAgICAgIGZyYW1ld29yayA9IGNvbmZpZy5mcmFtZXdv
cms7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlbXBsYXRlICYmIGxlYXJuSlNPTi50ZW1w
bGF0ZXMpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGVhcm5KU09OLnRlbXBsYXRlcy50b2Rv
bXZjOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmcmFtZXdvcmsgJiYgZG9jdW1lbnQucXVl
cnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpKSB7CisgICAgICAgICAgICBmcmFtZXdvcmsg
PSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykuZGF0YXNldC5mcmFt
ZXdvcms7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7CisK
KyAgICAgICAgaWYgKGxlYXJuSlNPTi5iYWNrZW5kKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1l
d29ya0pTT04gPSBsZWFybkpTT04uYmFja2VuZDsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3b3Jr
SlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQoewor
ICAgICAgICAgICAgICAgIGJhY2tlbmQ6IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
IGVsc2UgaWYgKGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7CisgICAgICAgICAgICB0aGlzLmZyYW1l
d29ya0pTT04gPSBsZWFybkpTT05bZnJhbWV3b3JrXTsKKyAgICAgICAgICAgIHRoaXMuZnJhbWV3
b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAgICAgICAgdGhpcy5hcHBlbmQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZmV0Y2hJc3N1ZUNvdW50KCk7CisgICAgfQor
CisgICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIChvcHRzKSB7CisgICAgICAg
IHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FzaWRlJyk7CisgICAgICAgIGFz
aWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1wbGF0ZSwgdGhpcy5mcmFtZXdvcmtK
U09OKTsKKyAgICAgICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xlYXJuJzsKKworICAgICAgICBpZiAo
b3B0cyAmJiBvcHRzLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBkZW1vIGxpbmsK
KyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rcyA9IGFzaWRlLnF1ZXJ5U2VsZWN0b3IoJy5zb3Vy
Y2UtbGlua3MnKTsKKyAgICAgICAgICAgIHZhciBoZWFkaW5nID0gc291cmNlTGlua3MuZmlyc3RF
bGVtZW50Q2hpbGQ7CisgICAgICAgICAgICB2YXIgc291cmNlTGluayA9IHNvdXJjZUxpbmtzLmxh
c3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICAvLyBDb3JyZWN0IGxpbmsgcGF0aAorICAgICAg
ICAgICAgdmFyIGhyZWYgPSBzb3VyY2VMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpOworICAgICAg
ICAgICAgc291cmNlTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmLnN1YnN0cihocmVmLmxh
c3RJbmRleE9mKCdodHRwJykpKTsKKyAgICAgICAgICAgIHNvdXJjZUxpbmtzLmlubmVySFRNTCA9
IGhlYWRpbmcub3V0ZXJIVE1MICsgc291cmNlTGluay5vdXRlckhUTUw7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBMb2NhbGl6ZSBkZW1vIGxpbmtzCisgICAgICAgICAgICB2YXIg
ZGVtb0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgnLmRlbW8tbGluaycpOworICAgICAg
ICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkZW1vTGlua3MsIGZ1bmN0aW9uIChk
ZW1vTGluaykgeworICAgICAgICAgICAgICAgIGlmIChkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hy
ZWYnKS5zdWJzdHIoMCwgNCkgIT09ICdodHRwJykgeworICAgICAgICAgICAgICAgICAgICBkZW1v
TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgpICsgZGVtb0xpbmsuZ2V0QXR0cmli
dXRlKCdocmVmJykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAoZG9jdW1lbnQuYm9keS5j
bGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5p
bnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lkZS5vdXRlckhUTUwpOworICAgIH07
CisKKyAgICBMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNvdW50ID0gZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgaXNzdWVMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lzc3VlLWNv
dW50LWxpbmsnKTsKKyAgICAgICAgaWYgKGlzc3VlTGluaykgeworICAgICAgICAgICAgdmFyIHVy
bCA9IGlzc3VlTGluay5ocmVmLnJlcGxhY2UoJ2h0dHBzOi8vZ2l0aHViLmNvbScsICdodHRwczov
L2FwaS5naXRodWIuY29tL3JlcG9zJyk7CisgICAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0
dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAg
ICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgIHZh
ciBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVzcG9uc2VUZXh0KTsKKyAg
ICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2UgaW5zdGFuY2VvZiBBcnJheSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZWRSZXNwb25zZS5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaXNzdWVMaW5rLmlubmVySFRNTCA9ICdUaGlzIGFwcCBoYXMgJyArIGNvdW50ICsgJyBvcGVu
IGlzc3Vlcyc7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaXNzdWUtY291bnQnKS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAg
eGhyLnNlbmQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICByZWRpcmVjdCgpOworICAgIGdl
dEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3BhY2thZ2UuanNvbiBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNr
YWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODlmOWE4YmRiZDkyMWQ0MjkyMDcwOWQ5MjdjNmRiY2Q4NWZm
MzE4OAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9k
dWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSwxMDQgQEAKK3sKKyAg
Il9hcmdzIjogWworICAgIFsKKyAgICAgIHsKKyAgICAgICAgInJhdyI6ICJ0b2RvbXZjLWNvbW1v
bkBeMS4wLjEiLAorICAgICAgICAic2NvcGUiOiBudWxsLAorICAgICAgICAiZXNjYXBlZE5hbWUi
OiAidG9kb212Yy1jb21tb24iLAorICAgICAgICAibmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisg
ICAgICAgICJyYXdTcGVjIjogIl4xLjAuMSIsCisgICAgICAgICJzcGVjIjogIj49MS4wLjEgPDIu
MC4wIiwKKyAgICAgICAgInR5cGUiOiAicmFuZ2UiCisgICAgICB9LAorICAgICAgIi9Vc2Vycy9h
ZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQiCisgICAgXQorICBdLAorICAiX2Zyb20iOiAidG9kb212Yy1jb21tb25A
Pj0xLjAuMSA8Mi4wLjAiLAorICAiX2lkIjogInRvZG9tdmMtY29tbW9uQDEuMC4zIiwKKyAgIl9p
bkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvdG9kb212Yy1jb21tb24iLAorICAiX25v
ZGVWZXJzaW9uIjogIjcuMS4wIiwKKyAgIl9ucG1PcGVyYXRpb25hbEludGVybmFsIjogeworICAg
ICJob3N0IjogInBhY2thZ2VzLTE4LWVhc3QuaW50ZXJuYWwubnBtanMuY29tIiwKKyAgICAidG1w
IjogInRtcC90b2RvbXZjLWNvbW1vbi0xLjAuMy50Z3pfMTQ3OTI3NjM2MTIyN18wLjUxMTI0ODgw
MTM2OTIyIgorICB9LAorICAiX25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAic2luZHJlc29yaHVz
IiwKKyAgICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWlsLmNvbSIKKyAgfSwKKyAgIl9ucG1W
ZXJzaW9uIjogIjMuMTAuOSIsCisgICJfcGhhbnRvbUNoaWxkcmVuIjoge30sCisgICJfcmVxdWVz
dGVkIjogeworICAgICJyYXciOiAidG9kb212Yy1jb21tb25AXjEuMC4xIiwKKyAgICAic2NvcGUi
OiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJ0b2RvbXZjLWNvbW1vbiIsCisgICAgIm5hbWUi
OiAidG9kb212Yy1jb21tb24iLAorICAgICJyYXdTcGVjIjogIl4xLjAuMSIsCisgICAgInNwZWMi
OiAiPj0xLjAuMSA8Mi4wLjAiLAorICAgICJ0eXBlIjogInJhbmdlIgorICB9LAorICAiX3JlcXVp
cmVkQnkiOiBbCisgICAgIi8iCisgIF0sCisgICJfcmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvdG9kb212Yy1jb21tb24vLS90b2RvbXZjLWNvbW1vbi0xLjAuMy50Z3oiLAor
ICAiX3NoYXN1bSI6ICJjYmExODY4MTA5Y2FhNDAxYjkwOGViZjc3Nzk0Y2MxMDE0Yjc0ODczIiwK
KyAgIl9zaHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogInRvZG9tdmMtY29tbW9uQF4xLjAu
MSIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL0Rlc2t0b3AvU3BlZWRvbWV0ZXItYS9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodCIsCisgICJhdXRob3IiOiB7
CisgICAgIm5hbWUiOiAiVGFzdGVKUyIKKyAgfSwKKyAgImJ1Z3MiOiB7CisgICAgInVybCI6ICJo
dHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWNvbW1vbi9pc3N1ZXMiCisgIH0sCisg
ICJkZXBlbmRlbmNpZXMiOiB7fSwKKyAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBUb2RvTVZDIHV0
aWxpdGllcyB1c2VkIGJ5IG91ciBhcHBzIiwKKyAgImRldkRlcGVuZGVuY2llcyI6IHt9LAorICAi
ZGlyZWN0b3JpZXMiOiB7fSwKKyAgImRpc3QiOiB7CisgICAgInNoYXN1bSI6ICJjYmExODY4MTA5
Y2FhNDAxYjkwOGViZjc3Nzk0Y2MxMDE0Yjc0ODczIiwKKyAgICAidGFyYmFsbCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWNvbW1vbi8tL3RvZG9tdmMtY29tbW9uLTEuMC4z
LnRneiIKKyAgfSwKKyAgImZpbGVzIjogWworICAgICJiYXNlLmpzIiwKKyAgICAiYmFzZS5jc3Mi
CisgIF0sCisgICJnaXRIZWFkIjogImU3NDI1YmFmYjk1NjFkNzY2Yjc2OTg0NDgxMGUwNDk2NzM0
ZmZlOGMiLAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212
Yy1jb21tb24jcmVhZG1lIiwKKyAgImtleXdvcmRzIjogWworICAgICJ0b2RvbXZjIiwKKyAgICAi
dGFzdGVqcyIsCisgICAgInV0aWwiLAorICAgICJ1dGlsaXRpZXMiCisgIF0sCisgICJsaWNlbnNl
IjogIk1JVCIsCisgICJtYWluIjogImJhc2UuanMiLAorICAibWFpbnRhaW5lcnMiOiBbCisgICAg
eworICAgICAgIm5hbWUiOiAic2luZHJlc29yaHVzIiwKKyAgICAgICJlbWFpbCI6ICJzaW5kcmVz
b3JodXNAZ21haWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiYWRkeW9zbWFu
aSIsCisgICAgICAiZW1haWwiOiAiYWRkeW9zbWFuaUBnbWFpbC5jb20iCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJwYXNzeSIsCisgICAgICAiZW1haWwiOiAicGhhcnRpZ0ByZHJlaS5u
ZXQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJzdGVwaGVucGx1c3BsdXMiLAorICAg
ICAgImVtYWlsIjogInNhd2NodWtAZ21haWwuY29tIgorICAgIH0KKyAgXSwKKyAgIm5hbWUiOiAi
dG9kb212Yy1jb21tb24iLAorICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInJlYWRt
ZSI6ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIiwKKyAgInJlcG9zaXRvcnkiOiB7Cisg
ICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vdGFz
dGVqcy90b2RvbXZjLWNvbW1vbi5naXQiCisgIH0sCisgICJzY3JpcHRzIjoge30sCisgICJzdHls
ZSI6ICJiYXNlLmNzcyIsCisgICJ2ZXJzaW9uIjogIjEuMC4zIgorfQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL3JlYWRtZS5t
ZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9y
ZWFkbWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E1ZGU1MTE4ZjNmYzc3NThlOGRkYzBhNjg2ODc0OWNlZTlj
YWY5NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9k
dWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQKQEAgLTAsMCArMSwxNSBAQAorIyB0b2RvbXZj
LWNvbW1vbgorCis+IENvbW1vbiBUb2RvTVZDIHV0aWxpdGllcyB1c2VkIGJ5IG91ciBhcHBzCisK
KworIyMgSW5zdGFsbAorCitgYGAKKyQgbnBtIGluc3RhbGwgLS1zYXZlIHRvZG9tdmMtY29tbW9u
CitgYGAKKworCisjIyBMaWNlbnNlCisKK01JVCDCqSBbVGFzdGVKU10oaHR0cDovL3Rhc3RlanMu
Y29tKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvcGFja2FnZS5qc29uIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0Njc4NGRk
OWZkMWFiNmM4MjA1YWUxNDZkYzRjZWYyZmZlNjQyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSwxMyBAQAoreworCSJw
cml2YXRlIjogdHJ1ZSwKKwkiZGVwZW5kZW5jaWVzIjogeworCQkiZGVwb3QiOiAiXjAuMS42IiwK
KwkJImVzNS1zaGltIjogIl4yLjAuMCIsCisJCSJmbGlnaHRqcyI6ICJmbGlnaHRqcy9mbGlnaHQj
djEuMy4wIiwKKwkJImpxdWVyeSI6ICJeMi4xLjAiLAorCQkicmVxdWlyZWpzIjogIl4yLjEuMTUi
LAorCQkicmVxdWlyZWpzLXRleHQiOiAiXjIuMC4xMiIsCisJCSJ0b2RvbXZjLWFwcC1jc3MiOiAi
XjEuMC4wIiwKKwkJInRvZG9tdmMtY29tbW9uIjogIl4xLjAuMSIKKwl9Cit9ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9pbmRleC5odG1s
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzZGFjZWVjNjA4ODZlOTUxNjUwYTRlMWYwNDZiMzhmNzE5YjI1MjdiLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvaW5k
ZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgot
PGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJmbGlnaHQiPgotICAgIDxoZWFkPgotICAg
ICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Ci0gICAgICAgIDx0aXRsZT5GbGlnaHQg4oCiIFRv
ZG88L3RpdGxlPgotICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImJvd2VyX2Nv
bXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgotICAgIDwvaGVhZD4KLSAgICA8Ym9k
eT4KLSAgICAgICAgPHNlY3Rpb24gaWQ9InRvZG9hcHAiPgotICAgICAgICAgICAgPGhlYWRlciBp
ZD0iaGVhZGVyIj4KLSAgICAgICAgICAgICAgICA8aDE+dG9kb3M8L2gxPgotICAgICAgICAgICAg
ICAgIDxpbnB1dCBpZD0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRv
bmU/IiBhdXRvZm9jdXM+Ci0gICAgICAgICAgICA8L2hlYWRlcj4KLSAgICAgICAgICAgIDxzZWN0
aW9uIGlkPSJtYWluIj4KLSAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9InRvZ2dsZS1hbGwiIHR5
cGU9ImNoZWNrYm94Ij4KLSAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxsIj5N
YXJrIGFsbCBhcyBjb21wbGV0ZTwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgPHVsIGlkPSJ0b2Rv
LWxpc3QiPjwvdWw+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgICAgICA8Zm9vdGVy
IGlkPSJmb290ZXIiPjwvZm9vdGVyPgotICAgICAgICA8L3NlY3Rpb24+Ci0gICAgICAgIDxmb290
ZXIgaWQ9ImluZm8iPgotICAgICAgICAgICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2Rv
PC9wPgotICAgICAgICAgICAgPHA+Q3JlYXRlZCBieSA8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNv
bS9ta3VrbGlzIj5NaWNoYWwgS3VrbGlzPC9hPjwvcD4KLSAgICAgICAgICAgIDxwPlBhcnQgb2Yg
PGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KLSAgICAgICAgPC9m
b290ZXI+Ci0gICAgICAgIDxzY3JpcHQgc3JjPSJib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29t
bW9uL2Jhc2UuanMiPjwvc2NyaXB0PgotICAgICAgICA8c2NyaXB0IGRhdGEtbWFpbj0iYXBwL2pz
L21haW4iIHNyYz0iYm93ZXJfY29tcG9uZW50cy9yZXF1aXJlanMvcmVxdWlyZS5qcyI+PC9zY3Jp
cHQ+Ci0gICAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9r
YXJtYS5jb25mLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9rYXJtYS5jb25mLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzOWMyNDJiOTUzNzIyMmFlM2ExYTI0YzU0NmM1MzQ1NTFmYTNl
MDVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQva2FybWEuY29uZi5qcworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAK
LS8vIEthcm1hIGNvbmZpZ3VyYXRpb24gZmlsZQotLy8KLS8vIEZvciBhbGwgYXZhaWxhYmxlIGNv
bmZpZyBvcHRpb25zIGFuZCBkZWZhdWx0IHZhbHVlcywgc2VlOgotLy8gaHR0cHM6Ly9naXRodWIu
Y29tL2thcm1hLXJ1bm5lci9rYXJtYS9ibG9iL3N0YWJsZS9saWIvY29uZmlnLmpzI0w1NAotCi1t
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb25maWcpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0K
LSAgICBjb25maWcuc2V0KHsKLSAgICAgICAgLy8gYmFzZSBwYXRoLCB0aGF0IHdpbGwgYmUgdXNl
ZCB0byByZXNvbHZlIGZpbGVzIGFuZCBleGNsdWRlCi0gICAgICAgIGJhc2VQYXRoOiAnJywKLQot
ICAgICAgICBmcmFtZXdvcmtzOiBbJ2phc21pbmUnXSwKLQotICAgICAgICAvLyBsaXN0IG9mIGZp
bGVzIC8gcGF0dGVybnMgdG8gbG9hZCBpbiB0aGUgYnJvd3NlcgotICAgICAgICBmaWxlczogWwot
ICAgICAgICAgICAgLy8gbG9hZGVkIHdpdGhvdXQgcmVxdWlyZQotICAgICAgICAgICAgJ2Jvd2Vy
X2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0uanMnLAotICAgICAgICAgICAgJ2Jvd2VyX2Nv
bXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0uanMnLAotICAgICAgICAgICAgJ2Jvd2VyX2NvbXBv
bmVudHMvanF1ZXJ5L2pxdWVyeS5qcycsCi0gICAgICAgICAgICAnYm93ZXJfY29tcG9uZW50cy9q
YXNtaW5lLWZsaWdodC9saWIvamFzbWluZS1mbGlnaHQuanMnLAotICAgICAgICAgICAgJ2Jvd2Vy
X2NvbXBvbmVudHMvamFzbWluZS1qcXVlcnkvbGliL2phc21pbmUtanF1ZXJ5LmpzJywKLQotICAg
ICAgICAgICAgLy8gaGFjayB0byBsb2FkIFJlcXVpcmVKUyBhZnRlciB0aGUgc2hpbSBsaWJzCi0g
ICAgICAgICAgICAnbm9kZV9tb2R1bGVzL2thcm1hLXJlcXVpcmVqcy9saWIvcmVxdWlyZS5qcycs
Ci0gICAgICAgICAgICAnbm9kZV9tb2R1bGVzL2thcm1hLXJlcXVpcmVqcy9saWIvYWRhcHRlci5q
cycsCi0KLSAgICAgICAgICAgIC8vIGxvYWRlZCB3aXRoIHJlcXVpcmUKLSAgICAgICAgICAgIHsg
cGF0dGVybjogJ2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0LyoqLyouanMnLCBpbmNsdWRlZDogZmFs
c2UgfSwKLSAgICAgICAgICAgIHsgcGF0dGVybjogJ2Jvd2VyX2NvbXBvbmVudHMvZGVwb3QvKiov
Ki5qcycsIGluY2x1ZGVkOiBmYWxzZSB9LAotICAgICAgICAgICAgeyBwYXR0ZXJuOiAnYm93ZXJf
Y29tcG9uZW50cy9yZXF1aXJlanMtdGV4dC90ZXh0LmpzJywgaW5jbHVkZWQ6IGZhbHNlIH0sCi0g
ICAgICAgICAgICB7IHBhdHRlcm46ICdhcHAvKiovKi5qcycsIGluY2x1ZGVkOiBmYWxzZSB9LAot
ICAgICAgICAgICAgeyBwYXR0ZXJuOiAnYXBwLyoqLyouaHRtbCcsIGluY2x1ZGVkOiBmYWxzZSB9
LAotICAgICAgICAgICAgeyBwYXR0ZXJuOiAndGVzdC9zcGVjLyoqLypfc3BlYy5qcycsIGluY2x1
ZGVkOiBmYWxzZSB9LAotICAgICAgICAgICAgeyBwYXR0ZXJuOiAndGVzdC9maXh0dXJlLyouaHRt
bCcsIGluY2x1ZGVkOiBmYWxzZSB9LAotCi0gICAgICAgICAgICAvLyBFbnRyeSBwb2ludCBmb3Ig
a2FybWEuCi0gICAgICAgICAgICAndGVzdC90ZXN0LW1haW4uanMnLAotCi0gICAgICAgICAgICB7
IHBhdHRlcm46ICd0ZXN0L21vY2svKi5qcycsIGluY2x1ZGVkOiB0cnVlIH0KLSAgICAgICAgXSwK
LQotICAgICAgICAvLyBsaXN0IG9mIGZpbGVzIHRvIGV4Y2x1ZGUKLSAgICAgICAgZXhjbHVkZTog
W10sCi0KLSAgICAgICAgLy8gdXNlIGRvdHMgcmVwb3J0ZXIsIGFzIHRyYXZpcyB0ZXJtaW5hbCBk
b2VzIG5vdCBzdXBwb3J0IGVzY2FwaW5nIHNlcXVlbmNlcwotICAgICAgICAvLyBwb3NzaWJsZSB2
YWx1ZXM6ICdkb3RzJywgJ3Byb2dyZXNzJwotICAgICAgICAvLyBDTEkgLS1yZXBvcnRlcnMgcHJv
Z3Jlc3MKLSAgICAgICAgcmVwb3J0ZXJzOiBbJ2RvdHMnXSwKLQotICAgICAgICAvLyBlbmFibGUg
LyBkaXNhYmxlIHdhdGNoaW5nIGZpbGUgYW5kIGV4ZWN1dGluZyB0ZXN0cyB3aGVuZXZlciBhbnkg
ZmlsZSBjaGFuZ2VzCi0gICAgICAgIC8vIENMSSAtLWF1dG8td2F0Y2ggLS1uby1hdXRvLXdhdGNo
Ci0gICAgICAgIGF1dG9XYXRjaDogdHJ1ZSwKLQotICAgICAgICAvLyBTdGFydCB0aGVzZSBicm93
c2VycywgY3VycmVudGx5IGF2YWlsYWJsZToKLSAgICAgICAgLy8gLSBDaHJvbWUKLSAgICAgICAg
Ly8gLSBDaHJvbWVDYW5hcnkKLSAgICAgICAgLy8gLSBGaXJlZm94Ci0gICAgICAgIC8vIC0gT3Bl
cmEKLSAgICAgICAgLy8gLSBTYWZhcmkgKG9ubHkgTWFjKQotICAgICAgICAvLyAtIFBoYW50b21K
UwotICAgICAgICAvLyAtIElFIChvbmx5IFdpbmRvd3MpCi0gICAgICAgIC8vIENMSSAtLWJyb3dz
ZXJzIENocm9tZSwgRmlyZWZveCwgU2FmYXJpCi0gICAgICAgIGJyb3dzZXJzOiBbJ0Nocm9tZScs
ICdGaXJlZm94J10sCi0KLSAgICAgICAgLy8gSWYgYnJvd3NlciBkb2VzIG5vdCBjYXB0dXJlIGlu
IGdpdmVuIHRpbWVvdXQgW21zXSwga2lsbCBpdAotICAgICAgICAvLyBDTEkgLS1jYXB0dXJlLXRp
bWVvdXQgNTAwMAotICAgICAgICBjYXB0dXJlVGltZW91dDogMjAwMDAsCi0KLSAgICAgICAgLy8g
QXV0byBydW4gdGVzdHMgb24gc3RhcnQgKHdoZW4gYnJvd3NlcnMgYXJlIGNhcHR1cmVkKSBhbmQg
ZXhpdAotICAgICAgICAvLyBDTEkgLS1zaW5nbGUtcnVuIC0tbm8tc2luZ2xlLXJ1bgotICAgICAg
ICBzaW5nbGVSdW46IGZhbHNlLAotCi0gICAgICAgIHBsdWdpbnM6IFsKLSAgICAgICAgICAgICdr
YXJtYS1qYXNtaW5lJywKLSAgICAgICAgICAgICdrYXJtYS1yZXF1aXJlanMnLAotICAgICAgICAg
ICAgJ2thcm1hLWNocm9tZS1sYXVuY2hlcicsCi0gICAgICAgICAgICAna2FybWEtZmlyZWZveC1s
YXVuY2hlcicsCi0gICAgICAgICAgICAna2FybWEtaWUtbGF1bmNoZXInLAotICAgICAgICAgICAg
J2thcm1hLXBoYW50b21qcy1sYXVuY2hlcicsCi0gICAgICAgICAgICAna2FybWEtc2FmYXJpLWxh
dW5jaGVyJwotICAgICAgICBdCi0gICAgfSk7Ci19OwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3BhY2thZ2UuanNvbgpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxY2Y3MmM4NWQ2M2U4NzdlMzg5ODY5ZmFkYTYxZTQ0
ZTI5NGFjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3BhY2thZ2UuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAg
QEAKLXsKLSAgIm5hbWUiOiAiZmxpZ2h0LXRvZG9tdmMiLAotICAidmVyc2lvbiI6ICIwLjAuMCIs
Ci0gICJkZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgImthcm1hIjogIn4wLjEwLjEiLAotICAgICJr
YXJtYS1qYXNtaW5lIjogIn4wLjEuMCIsCi0gICAgImthcm1hLXJlcXVpcmVqcyI6ICJ+MC4xLjAi
LAotICAgICJrYXJtYS1jaHJvbWUtbGF1bmNoZXIiOiAifjAuMS4wIiwKLSAgICAia2FybWEtaWUt
bGF1bmNoZXIiOiAifjAuMS4xIiwKLSAgICAia2FybWEtZmlyZWZveC1sYXVuY2hlciI6ICJ+MC4x
LjAiLAotICAgICJrYXJtYS1waGFudG9tanMtbGF1bmNoZXIiOiAifjAuMS4wIiwKLSAgICAia2Fy
bWEtc2FmYXJpLWxhdW5jaGVyIjogIn4wLjEuMSIKLSAgfSwKLSAgInNjcmlwdHMiOiB7Ci0gICAg
InRlc3QiOiAia2FybWEgc3RhcnQgLS1icm93c2VycyBGaXJlZm94IC0tc2luZ2xlLXJ1biIKLSAg
fQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9yZWFkbWUubWQgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L3JlYWRtZS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYTUzNTc5
MTMzODdmZTQ0NmY2MGNiOTIzMTMwYjA4Y2ZmOWViYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3JlYWRtZS5tZAorKysgL2Rl
di9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgRmxpZ2h0IFRvZG9NVkMgRXhhbXBsZQotCi0+IEZs
aWdodCBpcyBhIGxpZ2h0d2VpZ2h0LCBjb21wb25lbnQtYmFzZWQgSmF2YVNjcmlwdCBmcmFtZXdv
cmsgdGhhdCBtYXBzIGJlaGF2aW9yIHRvIERPTSBub2Rlcy4KLQotPiBfW0ZsaWdodCAtIGZsaWdo
dGpzLmdpdGh1Yi5pb10oaHR0cDovL2ZsaWdodGpzLmdpdGh1Yi5pbylfCi0KLQotIyMgTGVhcm5p
bmcgRmxpZ2h0Ci0KLVRoZSBbRmxpZ2h0IHdlYnNpdGVdKGh0dHA6Ly9mbGlnaHRqcy5naXRodWIu
aW8pIGlzIGEgZ3JlYXQgcmVzb3VyY2UgZm9yIGdldHRpbmcgc3RhcnRlZC4KLQotSGVyZSBhcmUg
c29tZSBsaW5rcyB5b3UgbWF5IGZpbmQgaGVscGZ1bDoKLQotKiBbR2l0SHViXShodHRwczovL2dp
dGh1Yi5jb20vZmxpZ2h0anMvZmxpZ2h0KQotKiBbRGVtbyBBcHBsaWNhdGlvbl0oaHR0cDovL3R3
aXR0ZXIuZ2l0aHViLmlvL2ZsaWdodC9kZW1vKQotKiBbSW5zdGFsbGF0aW9uXShodHRwczovL2dp
dGh1Yi5jb20vZmxpZ2h0anMvZmxpZ2h0L2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNpbnN0YWxsYXRp
b24pCi0qIFtGbGlnaHQgb24gVHdpdHRlcl0oaHR0cDovL3R3aXR0ZXIuY29tL2ZsaWdodCkKLQot
X0lmIHlvdSBoYXZlIG90aGVyIGhlbHBmdWwgbGlua3MgdG8gc2hhcmUsIG9yIGZpbmQgYW55IG9m
IHRoZSBsaW5rcyBhYm92ZSBubyBsb25nZXIgd29yaywgcGxlYXNlIFtsZXQgdXMga25vd10oaHR0
cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy9pc3N1ZXMpLl8KLQotCi0jIyBSdW5uaW5n
IHRoZSBUZXN0cwotCi1UbyBydW4gdGhlIHRlc3RzLCB5b3UgbmVlZCB0byBpbnN0YWxsIGFkZGl0
aW9uYWwgaGVscGVycyB2aWEgYm93ZXIgYW5kIG5wbSBhbmQKLXJ1biBgbnBtIHRlc3RgIGFmdGVy
d2FyZHM6Ci0KLWBgYGJhc2gKLWJvd2VyIGluc3RhbGwgJiBucG0gaW5zdGFsbAotbnBtIHRlc3QK
LWBgYAotCi1Zb3UgY2FuIGFsc28gcnVuIGBrYXJtYSBzdGFydGAgYWZ0ZXIgdGhlIGRlcGVuZGVu
Y2llcyBhcmUgaW5zdGFsbGVkIHRvCi1hdXRvbWF0aWNhbGx5IHdhdGNoIGZvciBjaGFuZ2VzIGFu
ZCByZS1ydW4gdGhlIHRlc3Qgc3VpdGUuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rl
c3QvLmpzaGludHJjIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0Ly5qc2hpbnRyYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwMjMzY2VlYTcyOTU1MDYwOWU5OTg1NjgwZTUwNDBjZGE1
OTViOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L3Rlc3QvLmpzaGludHJjCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBA
QAotewotCSJub2RlIjogdHJ1ZSwKLQkiYnJvd3NlciI6IHRydWUsCi0JImVzbmV4dCI6IHRydWUs
Ci0JImJpdHdpc2UiOiB0cnVlLAotCSJjYW1lbGNhc2UiOiB0cnVlLAotCSJjdXJseSI6IHRydWUs
Ci0JImVxZXFlcSI6IHRydWUsCi0JImltbWVkIjogdHJ1ZSwKLQkiaW5kZW50IjogNCwKLQkibGF0
ZWRlZiI6IHRydWUsCi0JIm5ld2NhcCI6IHRydWUsCi0JIm5vYXJnIjogdHJ1ZSwKLQkicXVvdG1h
cmsiOiAic2luZ2xlIiwKLQkicmVnZXhwIjogdHJ1ZSwKLQkidW5kZWYiOiB0cnVlLAotCSJ1bnVz
ZWQiOiB0cnVlLAotCSJzdHJpY3QiOiB0cnVlLAotCSJ0cmFpbGluZyI6IHRydWUsCi0JInNtYXJ0
dGFicyI6IHRydWUsCi0JIndoaXRlIjogdHJ1ZSwKLQkianF1ZXJ5IjogdHJ1ZSwKLQkiZ2xvYmFs
cyI6IHsKLQkJInJlcXVpcmVqcyI6IGZhbHNlLAotCQkiZGVzY3JpYmUiOiBmYWxzZSwKLQkJImRl
c2NyaWJlQ29tcG9uZW50IjogZmFsc2UsCi0JCSJzZXR1cENvbXBvbmVudCI6IGZhbHNlLAotCQki
aXQiOiBmYWxzZSwKLQkJImV4cGVjdCI6IGZhbHNlLAotCQkiYmVmb3JlRWFjaCI6IGZhbHNlLAot
CQkiYWZ0ZXJFYWNoIjogZmFsc2UsCi0JCSJzcHlPbkV2ZW50IjogZmFsc2UsCi0JCSJtb2NrcyI6
IGZhbHNlLAotCQkicmVhZEZpeHR1cmVzIjogZmFsc2UsCi0JCSJzcHlPbiI6IGZhbHNlCi0JfQot
fQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvZml4dHVyZS9mb290ZXIuaHRt
bCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL2Zvb3Rlci5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjN2E4OTcyZmZiYjhhZGY2ZmVmMDNmODk0MTgxNjIwMjhkOTUz
NmExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL2Zvb3Rlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEg
KzAsMCBAQAotPGZvb3RlciBpZD0iZm9vdGVyIj48L2Zvb3Rlcj4KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL25ld190b2RvLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L3Rlc3QvZml4dHVyZS9uZXdfdG9kby5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyYTlmZmQyNWUwYzUxMGI3MjdlZjkyZDY1MjJhOGNlMzgwMjUzNDBjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9m
aXh0dXJlL25ld190b2RvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08aW5wdXQg
aWQ9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBkb25lPyIgYXV0b2Zv
Y3VzPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2ZpeHR1cmUvdG9nZ2xlX2Fs
bC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2ZpeHR1cmUvdG9nZ2xlX2FsbC5odG1sCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWQ1M2RmMWY2OWY1MDZmMzQ0OGJiZmE5NmJm
ODcyZjcyMjM3NjRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL3RvZ2dsZV9hbGwuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xICswLDAgQEAKLTxpbnB1dCBpZD0idG9nZ2xlLWFsbCIgdHlwZT0iY2hlY2ti
b3giPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L21vY2svZGF0YXN0b3JlLmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L21vY2svZGF0YXN0b3JlLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5YmU4NmM0NjAxZjRhM2FiYWEyNGExOGI2NDBmYmIwMDcwODcxOThj
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvdGVzdC9tb2NrL2RhdGFzdG9yZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICsw
LDAgQEAKLShmdW5jdGlvbiAoKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgZnVuY3Rpb24g
RmFrZURhdGFTdG9yZShkYXRhKSB7Ci0gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEgfHwgWwotICAg
ICAgICAgICAge3RpdGxlOiAnYnV5IHNvbWUgdW5pY29ybnMnLCBjb21wbGV0ZWQ6IGZhbHNlLCBp
ZDogJzEwOGU4YzUxLWJiM2YtNjA4ZC0xNWUyLTYxMWNmYzdlNTgzOCd9LAotICAgICAgICAgICAg
e3RpdGxlOiAnZ2V0IGEgYmFndWV0dGUgbXVzdGFjaGUnLCBjb21wbGV0ZWQ6IGZhbHNlLCBpZDog
JzZjZGQwYTFmLWI2ZjgtMjFlMS1mMzViLWFhMThhZjk5YWQ5MSd9LAotICAgICAgICAgICAge3Rp
dGxlOiAnc2hhdmUgeWFrcycsIGNvbXBsZXRlZDogdHJ1ZSwgaWQ6ICdhYmU2NzhkZC0zMDg3LTE5
OGMtZWVmYS0xODAyNDhjYjNkOGInfQotICAgICAgICBdOwotICAgIH0KLQotICAgIEZha2VEYXRh
U3RvcmUucHJvdG90eXBlLmFsbCA9IGZ1bmN0aW9uIGFsbCgpIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuZGF0YTsKLSAgICB9OwotCi0gICAgRmFrZURhdGFTdG9yZS5wcm90b3R5cGUuc2F2ZSA9IGZ1
bmN0aW9uIHNhdmUoZGF0YSkgewotICAgICAgICB0aGlzLmRhdGEucHVzaChkYXRhKTsKLSAgICB9
OwotCi0gICAgRmFrZURhdGFTdG9yZS5wcm90b3R5cGUuZGVzdHJveUFsbCA9IGZ1bmN0aW9uIGRl
c3Ryb3lBbGwoKSB7Ci0gICAgICAgIC8vIFN0dWIKLSAgICB9OwotCi0gICAgd2luZG93Lm1vY2tz
LkRhdGFTdG9yZSA9IEZha2VEYXRhU3RvcmU7Ci19KCkpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC90ZXN0L3NwZWMvZGF0YS9zdGF0c19zcGVjLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90
ZXN0L3NwZWMvZGF0YS9zdGF0c19zcGVjLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA3YjRhNDY1Njg1ZmM4NzQxZjgyZGM4MDdjZDI2YzRlMmY0ODA3OWEyLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9z
cGVjL2RhdGEvc3RhdHNfc3BlYy5qcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLWRl
c2NyaWJlQ29tcG9uZW50KCdhcHAvanMvZGF0YS9zdGF0cycsIGZ1bmN0aW9uICgpIHsKLSAgICAn
dXNlIHN0cmljdCc7Ci0KLSAgICBkZXNjcmliZSgncmVjb3VudCB3aXRob3V0IGRhdGFzdG9yZScs
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAg
ICAgICBzZXR1cENvbXBvbmVudCh7Ci0gICAgICAgICAgICAgICAgZGF0YVN0b3JlOiBuZXcgbW9j
a3MuRGF0YVN0b3JlKFtdKQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuY2xlYXIo
KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCB0cmlnZ2VyIGEgZGF0YVN0YXRz
Q291bnRlZCBldmVudCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHNweU9uRXZlbnQoZG9j
dW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJyk7Ci0gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5y
ZWNvdW50KCk7Ci0gICAgICAgICAgICBleHBlY3QoJ2RhdGFTdGF0c0NvdW50ZWQnKS50b0hhdmVC
ZWVuVHJpZ2dlcmVkT24oZG9jdW1lbnQpOwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgnc2hv
dWxkIHRyaWdnZXIgZGF0YVN0YXRzQ291bnRlZCB3aGVuIHRvZG9zIGFyZSBsb2FkZWQnLCBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgICAgICBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVN0YXRzQ291
bnRlZCcpOwotICAgICAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcignZGF0YVRvZG9zTG9hZGVk
Jyk7Ci0gICAgICAgICAgICBleHBlY3QoJ2RhdGFTdGF0c0NvdW50ZWQnKS50b0hhdmVCZWVuVHJp
Z2dlcmVkT24oZG9jdW1lbnQpOwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgnc2hvdWxkIHBy
b3ZpZGUgZW1wdHkgc3RhdHMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBzcHlPbkV2ZW50
KGRvY3VtZW50LCAnZGF0YVN0YXRzQ291bnRlZCcpOwotICAgICAgICAgICAgdGhpcy5jb21wb25l
bnQucmVjb3VudCgpOwotICAgICAgICAgICAgZXhwZWN0KCdkYXRhU3RhdHNDb3VudGVkJykudG9I
YXZlQmVlblRyaWdnZXJlZE9uQW5kV2l0aChkb2N1bWVudCwgewotICAgICAgICAgICAgICAgIGFs
bDogMCwKLSAgICAgICAgICAgICAgICByZW1haW5pbmc6IDAsCi0gICAgICAgICAgICAgICAgY29t
cGxldGVkOiAwLAotICAgICAgICAgICAgICAgIGZpbHRlcjogJycKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGRlc2NyaWJlKCdyZWNvdW50IHdpdGggZGF0YXN0
b3JlJywgZnVuY3Rpb24gKCkgewotICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgICAgIHNldHVwQ29tcG9uZW50KHsKLSAgICAgICAgICAgICAgICBkYXRhU3RvcmU6IG5l
dyBtb2Nrcy5EYXRhU3RvcmUoKQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0gICAg
ICAgIGl0KCdzaG91bGQgcHJvdmlkZSBmdWxsIHN0YXRzJywgZnVuY3Rpb24gKCkgewotICAgICAg
ICAgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnKTsKLSAgICAgICAg
ICAgIHRoaXMuY29tcG9uZW50LnJlY291bnQoKTsKLSAgICAgICAgICAgIGV4cGVjdCgnZGF0YVN0
YXRzQ291bnRlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbkFuZFdpdGgoZG9jdW1lbnQsIHsKLSAg
ICAgICAgICAgICAgICBhbGw6IDMsCi0gICAgICAgICAgICAgICAgcmVtYWluaW5nOiAyLAotICAg
ICAgICAgICAgICAgIGNvbXBsZXRlZDogMSwKLSAgICAgICAgICAgICAgICBmaWx0ZXI6ICcnCi0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19KTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEvdG9kb3Nfc3BlYy5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvdGVzdC9zcGVjL2RhdGEvdG9kb3Nfc3BlYy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjY2NTJjZWI5NmY0NjAzNDZkMjY2NjUxYjIxOTBhYzk0ZGFkZjQ0ZS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L3Rlc3Qvc3BlYy9kYXRhL3RvZG9zX3NwZWMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCww
IEBACi1kZXNjcmliZUNvbXBvbmVudCgnYXBwL2pzL2RhdGEvdG9kb3MnLCBmdW5jdGlvbiAoKSB7
Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgZGVzY3JpYmUoJ3dpdGhvdXQgZGF0YXN0b3JlJywg
ZnVuY3Rpb24gKCkgewotICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIHRoaXMuZGF0YVN0b3JlID0gbmV3IG1vY2tzLkRhdGFTdG9yZShbXSk7Ci0gICAgICAgICAg
ICBzZXR1cENvbXBvbmVudCh7Ci0gICAgICAgICAgICAgICAgZGF0YVN0b3JlOiB0aGlzLmRhdGFT
dG9yZQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQg
YWRkIGEgbmV3IGVudHJ5JywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIHRpdGxlID0g
J2J1eSBzb21lIHVuaWNvcm5zJzsKLQotICAgICAgICAgICAgc3B5T25FdmVudChkb2N1bWVudCwg
J2RhdGFUb2RvQWRkZWQnKTsKLSAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ3Vp
QWRkUmVxdWVzdGVkJywgewotICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZQotICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgIGV4cGVjdCgnZGF0YVRvZG9BZGRlZCcpLnRvSGF2ZUJlZW5U
cmlnZ2VyZWRPbihkb2N1bWVudCk7Ci0gICAgICAgICAgICBleHBlY3QodGhpcy5kYXRhU3RvcmUu
ZGF0YS5sZW5ndGgpLnRvQmUoMSk7Ci0gICAgICAgICAgICBleHBlY3QodGhpcy5kYXRhU3RvcmUu
YWxsKClbMF0udGl0bGUpLnRvQmUodGl0bGUpOwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAg
IGRlc2NyaWJlKCd3aXRoIGRhdGFzdG9yZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgYmVmb3Jl
RWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLmRhdGFTdG9yZSA9IG5ldyBtb2Nr
cy5EYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIHNldHVwQ29tcG9uZW50KHsKLSAgICAgICAgICAg
ICAgICBkYXRhU3RvcmU6IHRoaXMuZGF0YVN0b3JlCi0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgaXQoJ3JlbW92ZXMgY29tcGxldGVkJywgZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgc3B5T24odGhpcy5kYXRhU3RvcmUsICdkZXN0cm95QWxsJyk7Ci0gICAgICAgICAg
ICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKCd1aUNsZWFyUmVxdWVzdGVkJyk7Ci0gICAgICAgICAg
ICBleHBlY3QodGhpcy5kYXRhU3RvcmUuZGVzdHJveUFsbCkudG9IYXZlQmVlbkNhbGxlZFdpdGgo
eyBjb21wbGV0ZWQ6IHRydWUgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfSk7Ci0KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL3VpL25ld19pdGVtX3NwZWMuanMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS9uZXdfaXRlbV9zcGVjLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiZGQ0MjllOTdiYzc1NDhmOGJkYzc2OGY2YjNlMTQ4MDFkMmVk
YjZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvdGVzdC9zcGVjL3VpL25ld19pdGVtX3NwZWMuanMKKysrIC9kZXYvbnVsbApA
QCAtMSw0OSArMCwwIEBACi1kZXNjcmliZUNvbXBvbmVudCgnYXBwL2pzL3VpL25ld19pdGVtJywg
ZnVuY3Rpb24gKCkgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHZhciBFTlRFUl9LRVkgPSAx
MzsKLQotICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewotICAgICAgICBzZXR1cENvbXBvbmVu
dChyZWFkRml4dHVyZXMoJ25ld190b2RvLmh0bWwnKSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgndHJp
Z2dlcnMgdWlBZGRSZXF1ZXN0ZWQgb24gZW50ZXInLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZh
ciBldmVudCA9ICQuRXZlbnQoJ2tleWRvd24nKTsKLSAgICAgICAgZXZlbnQud2hpY2ggPSBFTlRF
Ul9LRVk7Ci0KLSAgICAgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ3VpQWRkUmVxdWVzdGVkJyk7
Ci0gICAgICAgIHRoaXMuY29tcG9uZW50LiRub2RlLnZhbCgnc2hhdmUgbW9hciB5YWtzJyk7Ci0K
LSAgICAgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcihldmVudCk7Ci0KLSAgICAgICAgZXhwZWN0
KCd1aUFkZFJlcXVlc3RlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbkFuZFdpdGgoZG9jdW1lbnQs
IHsKLSAgICAgICAgICAgIHRpdGxlOiAnc2hhdmUgbW9hciB5YWtzJwotICAgICAgICB9KTsKLSAg
ICB9KTsKLQotICAgIGl0KCd0cmltcyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZh
ciBldmVudCA9ICQuRXZlbnQoJ2tleWRvd24nKTsKLSAgICAgICAgZXZlbnQud2hpY2ggPSBFTlRF
Ul9LRVk7Ci0KLSAgICAgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ3VpQWRkUmVxdWVzdGVkJyk7
Ci0gICAgICAgIHRoaXMuY29tcG9uZW50LiRub2RlLnZhbCgnICB0cmltIGlucHV0cyAnKTsKLQot
ICAgICAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKGV2ZW50KTsKLQotICAgICAgICBleHBlY3Qo
J3VpQWRkUmVxdWVzdGVkJykudG9IYXZlQmVlblRyaWdnZXJlZE9uQW5kV2l0aChkb2N1bWVudCwg
ewotICAgICAgICAgICAgdGl0bGU6ICd0cmltIGlucHV0cycKLSAgICAgICAgfSk7Ci0gICAgfSk7
Ci0KLSAgICBpdCgnaWdub3JlIGVtcHR5IHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
dmFyIGV2ZW50ID0gJC5FdmVudCgna2V5ZG93bicpOwotICAgICAgICBldmVudC53aGljaCA9IEVO
VEVSX0tFWTsKLQotICAgICAgICBzcHlPbkV2ZW50KGRvY3VtZW50LCAndWlBZGRSZXF1ZXN0ZWQn
KTsKLQotICAgICAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKGV2ZW50KTsKLQotICAgICAgICBl
eHBlY3QoJ3VpQWRkUmVxdWVzdGVkJykubm90LnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVu
dCk7Ci0gICAgfSk7Ci19KTsKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Nw
ZWMvdWkvc3RhdHNfc3BlYy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL3VpL3N0YXRz
X3NwZWMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYzg4ZDM5NTljMGM4OWI0
ZDJlYTViNTdiZTEzY2MyMjkyNjE5MGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvc3RhdHNfc3BlYy5q
cworKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLWRlc2NyaWJlQ29tcG9uZW50KCdhcHAv
anMvdWkvc3RhdHMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgYmVm
b3JlRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHNldHVwQ29tcG9uZW50KHJlYWRGaXh0dXJl
cygnZm9vdGVyLmh0bWwnKSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgncmVuZGVycyB3aGVuIHN0YXRz
IGNoYW5nZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGRhdGEgPSB7Ci0gICAgICAgICAg
ICBhbGw6IDMsCi0gICAgICAgICAgICByZW1haW5pbmc6IDIsCi0gICAgICAgICAgICBjb21wbGV0
ZWQ6IDEsCi0gICAgICAgICAgICBmaWx0ZXI6ICcnCi0gICAgICAgIH07Ci0gICAgICAgIGV4cGVj
dCh0aGlzLmNvbXBvbmVudC4kbm9kZSkudG9CZUVtcHR5KCk7Ci0gICAgICAgICQoZG9jdW1lbnQp
LnRyaWdnZXIoJ2RhdGFTdGF0c0NvdW50ZWQnLCBkYXRhKTsKLSAgICAgICAgZXhwZWN0KHRoaXMu
Y29tcG9uZW50LiRub2RlKS5ub3QudG9CZUVtcHR5KCk7Ci0gICAgICAgIGV4cGVjdCh0aGlzLmNv
bXBvbmVudC4kbm9kZSkudG9CZVZpc2libGUoKTsKLSAgICB9KTsKLQotICAgIGl0KCdpcyBoaWRk
ZW4gd2hlbiBkYXRhIGlzIGVtcHR5JywgZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgZGF0YSA9
IHsKLSAgICAgICAgICAgIGFsbDogMCwKLSAgICAgICAgICAgIHJlbWFpbmluZzogMCwKLSAgICAg
ICAgICAgIGNvbXBsZXRlZDogMCwKLSAgICAgICAgICAgIGZpbHRlcjogJycKLSAgICAgICAgfTsK
LSAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcignZGF0YVN0YXRzQ291bnRlZCcsIGRhdGEpOwot
ICAgICAgICBleHBlY3QodGhpcy5jb21wb25lbnQuJG5vZGUpLnRvQmVIaWRkZW4oKTsKLSAgICB9
KTsKLQotICAgIGl0KCdoaWRlcyBjbGVhci1jb21wbGV0ZWQgd2l0aCBubyBjb21wbGV0ZWQgaXRl
bXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAgYWxs
OiAyLAotICAgICAgICAgICAgcmVtYWluaW5nOiAyLAotICAgICAgICAgICAgY29tcGxldGVkOiAw
LAotICAgICAgICAgICAgZmlsdGVyOiAnJwotICAgICAgICB9OwotICAgICAgICB0aGlzLmNvbXBv
bmVudC5yZW5kZXIobnVsbCwgZGF0YSk7Ci0gICAgICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC5z
ZWxlY3QoJ2NsZWFyQ29tcGxldGVkU2VsZWN0b3InKS5sZW5ndGgpLnRvQmUoMCk7Ci0gICAgfSk7
Ci0KLSAgICBpdCgnc2hvd3MgY2xlYXItY29tcGxldGVkIHdpdGggY29tcGxldGVkIGl0ZW1zJywg
ZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgZGF0YSA9IHsKLSAgICAgICAgICAgIGFsbDogMiwK
LSAgICAgICAgICAgIHJlbWFpbmluZzogMSwKLSAgICAgICAgICAgIGNvbXBsZXRlZDogMSwKLSAg
ICAgICAgICAgIGZpbHRlcjogJycKLSAgICAgICAgfTsKLSAgICAgICAgdGhpcy5jb21wb25lbnQu
cmVuZGVyKG51bGwsIGRhdGEpOwotICAgICAgICBleHBlY3QodGhpcy5jb21wb25lbnQuc2VsZWN0
KCdjbGVhckNvbXBsZXRlZFNlbGVjdG9yJykubGVuZ3RoKS50b0JlKDEpOwotICAgIH0pOwotCi0g
ICAgaXQoJ3RyaWdnZXJzIHVpQ2xlYXJSZXF1ZXN0ZWQgb24gY2xpY2snLCBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAgYWxsOiAyLAotICAgICAgICAgICAg
cmVtYWluaW5nOiAxLAotICAgICAgICAgICAgY29tcGxldGVkOiAxLAotICAgICAgICAgICAgZmls
dGVyOiAnJwotICAgICAgICB9OwotICAgICAgICBzcHlPbkV2ZW50KGRvY3VtZW50LCAndWlDbGVh
clJlcXVlc3RlZCcpOwotICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXIobnVsbCwgZGF0YSk7
Ci0gICAgICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIodGhpcy5jb21wb25lbnQuYXR0ci5jbGVh
ckNvbXBsZXRlZFNlbGVjdG9yLCAnY2xpY2snKTsKLSAgICAgICAgZXhwZWN0KCd1aUNsZWFyUmVx
dWVzdGVkJykudG9IYXZlQmVlblRyaWdnZXJlZE9uKHRoaXMuY29tcG9uZW50KTsKLSAgICB9KTsK
LX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvdG9nZ2xlX2Fs
bF9zcGVjLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvdG9nZ2xlX2FsbF9zcGVj
LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjZmYWYxODc1MDkxMTU5M2M5YjRm
ZDdmNjIxMTMzM2YzNjhhYWI4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL3VpL3RvZ2dsZV9hbGxfc3BlYy5q
cworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLWRlc2NyaWJlQ29tcG9uZW50KCdhcHAv
anMvdWkvdG9nZ2xlX2FsbCcsIGZ1bmN0aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAg
ICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgc2V0dXBDb21wb25lbnQocmVhZEZp
eHR1cmVzKCd0b2dnbGVfYWxsLmh0bWwnKSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnY2hlY2sgdGhl
IGNoZWNrYm94IHcvbyByZW1haW5pbmcnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBkYXRh
ID0gewotICAgICAgICAgICAgYWxsOiAyLAotICAgICAgICAgICAgcmVtYWluaW5nOiAwLAotICAg
ICAgICAgICAgY29tcGxldGVkOiAyLAotICAgICAgICAgICAgZmlsdGVyOiAnJwotICAgICAgICB9
OwotICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdkYXRhU3RhdHNDb3VudGVkJywgZGF0YSk7
Ci0gICAgICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC4kbm9kZSkudG9CZUNoZWNrZWQoKTsKLSAg
ICB9KTsKLQotICAgIGl0KCd1bmNoZWNrIHRoZSBjaGVja2JveCB3LyByZW1haW5pbmcnLCBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAgYWxsOiAyLAotICAg
ICAgICAgICAgcmVtYWluaW5nOiAxLAotICAgICAgICAgICAgY29tcGxldGVkOiAxLAotICAgICAg
ICAgICAgZmlsdGVyOiAnJwotICAgICAgICB9OwotICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2Vy
KCdkYXRhU3RhdHNDb3VudGVkJywgZGF0YSk7Ci0gICAgICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVu
dC4kbm9kZSkubm90LnRvQmVDaGVja2VkKCk7Ci0gICAgfSk7Ci19KTsKLQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Rlc3QtbWFpbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVz
dC90ZXN0LW1haW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjY0Y2Y3MGE4
YTQ5MWIyMmY3ODY1MjUzNWVlOWE4Y2Q0ZDdiOWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Rlc3QtbWFpbi5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qanNoaW50IGNhbWVsY2FzZTpmYWxzZSov
Ci0vKmdsb2JhbCBqYXNtaW5lKi8KLSd1c2Ugc3RyaWN0JzsKLQotdmFyIHRlc3RzID0gT2JqZWN0
LmtleXMod2luZG93Ll9fa2FybWFfXy5maWxlcykuZmlsdGVyKGZ1bmN0aW9uIChmaWxlKSB7Ci0g
ICAgcmV0dXJuICgvX3NwZWNcLmpzJC8udGVzdChmaWxlKSk7Ci19KTsKLQotd2luZG93Lm1vY2tz
ID0ge307Ci0KLXJlcXVpcmVqcy5jb25maWcoewotICAgIC8vIEthcm1hIHNlcnZlcyBmaWxlcyBm
cm9tICcvYmFzZScKLSAgICBiYXNlVXJsOiAnL2Jhc2UnLAotCi0gICAgcGF0aHM6IHsKLSAgICAg
ICAgZmxpZ2h0OiAnYm93ZXJfY29tcG9uZW50cy9mbGlnaHQnLAotICAgICAgICBkZXBvdDogJ2Jv
d2VyX2NvbXBvbmVudHMvZGVwb3QvZGVwb3QnLAotICAgICAgICB0ZXh0OiAnYm93ZXJfY29tcG9u
ZW50cy9yZXF1aXJlanMtdGV4dC90ZXh0JwotICAgIH0sCi0KLSAgICAvLyBhc2sgUmVxdWlyZS5q
cyB0byBsb2FkIHRoZXNlIGZpbGVzIChhbGwgb3VyIHRlc3RzKQotICAgIGRlcHM6IHRlc3RzLAot
Ci0gICAgLy8gc3RhcnQgdGVzdCBydW4sIG9uY2UgUmVxdWlyZS5qcyBpcyBkb25lCi0gICAgY2Fs
bGJhY2s6IHdpbmRvdy5fX2thcm1hX18uc3RhcnQKLX0pOwotCi1qYXNtaW5lLmdldEZpeHR1cmVz
KCkuZml4dHVyZXNQYXRoID0gJy9iYXNlL3Rlc3QvZml4dHVyZSc7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309816</attachid>
            <date>2017-05-11 16:28:50 -0700</date>
            <delta_ts>2017-05-11 17:15:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171471-20170511162849.patch</filename>
            <type>text/plain</type>
            <size>1463422</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTY1CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLmM4OGI3MjEwNTAwNTg5NmFhM2I2MWJhODZi
ZDI2YWFmY2U3MGRkNjIgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IFVwZGF0ZSB0aGUgRmxpZ2h0LmpzIGltcGxlbWVudGF0aW9uIHRvIGEgbW9yZSByZWNl
bnQgbGlicmFyeSB2ZXJzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzE0NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTcGVlZG9tZXRlcjogVXBkYXRlIEZsaWdodEpTIFRvZG9NVkMgaW1wbGVtZW50
YXRpb24KKworICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0Ly5naXRpZ25vcmU6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvLmpzaGlu
dHJjOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9tYWluLmpzOiBSZW1vdmVkLgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2FwcC9qcy9zdG9yZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlci5qc29uOiBSZW1v
dmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0uanM6IFJl
bW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanM6
IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2luZGV4Lmpz
OiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9sb2dnZXIu
anM6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5Lmpz
OiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFz
ZS5jc3M6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1v
bi9iZy5wbmc6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9kYXRhL3N0YXRzLmpz
OiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvZGF0YS9zdGF0cy5qcy4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2FwcC9qcy9kYXRhL3RvZG9zLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMv
bWFpbi5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9wYWdlL2FwcC5qczogUmVu
YW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2FwcC5qcy4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL3N0b3JlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL21h
aW5fc2VsZWN0b3IuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9t
YWluX3NlbGVjdG9yLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvbmV3X2l0ZW0uanM6
IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9uZXdfaXRlbS5qcy4KKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3N0YXRzLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS90
b2RvX2xpc3QuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2Rv
X2xpc3QuanMuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS90b2dnbGVfYWxsLmpzOiBSZW5h
bWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvdG9nZ2xlX2FsbC5qcy4KKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5qczogUmVuYW1lZCBmcm9tIFBlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYXBwL2pzL3VpL3dpdGhfZmlsdGVycy5qcy4KKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
YXBwL2pzL3V0aWxzLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdXRp
bHMuanMuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbDogUmVuYW1l
ZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0cy5odG1sLgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbDogUmVuYW1lZCBmcm9tIFBlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwuCisgICAgICAgICogU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2luZGV4
Lmh0bWw6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2luZGV4Lmh0bWwuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9ub2RlX21vZHVsZXMvZGVwb3QvZGVwb3QuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZGVwb3QvZGVwb3QuanMuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9kZXBvdC9kZXBvdC5taW4uanM6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvZGVwb3QvcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoYW0uanM6IFJlbmFtZWQgZnJvbSBQZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0uanMuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUtc2hhbS5taW4uanM6IEFkZGVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoaW0uanM6IEFk
ZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoaW0ubWlu
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9MSUNFTlNF
OiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9pbmRleC5qczog
QWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2FkdmljZS5q
czogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQv
bGliL2FkdmljZS5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIv
YmFzZS5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9m
bGlnaHQvbGliL2Jhc2UuanMuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQv
bGliL2NvbXBvbmVudC5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29t
cG9uZW50cy9mbGlnaHQvbGliL2NvbXBvbmVudC5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9t
b2R1bGVzL2ZsaWdodC9saWIvY29tcG9zZS5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25v
ZGVfbW9kdWxlcy9mbGlnaHQvbGliL2RlYnVnLmpzOiBSZW5hbWVkIGZyb20gUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvZGVidWcuanMuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2xvZ2dlci5qczogQWRkZWQuCisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzOiBSZW5hbWVkIGZyb20g
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL3V0aWxzLmpzOiBSZW5h
bWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvdXRp
bHMuanMuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvUkVBRE1FLm1kOiBB
ZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5q
czogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVl
cnkubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9w
YWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvbWVtb3J5
c3RvcmFnZS9tZW1vcnlzdG9yYWdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9t
b2R1bGVzL3JlcXVpcmVqcy10ZXh0L0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L2Jvd2VyLmpzb246IEFkZGVkLgorICAg
ICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQvcGFja2FnZS5qc29uOiBB
ZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3RleHQu
anM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWly
ZWpzLXRleHQvdGV4dC5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVq
cy9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWly
ZWpzL3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9y
ZXF1aXJlanMvcmVxdWlyZS5qczogUmVuYW1lZCBmcm9tIFBlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJf
Y29tcG9uZW50cy9yZXF1aXJlanMvcmVxdWlyZS5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9t
b2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3M6IEFkZGVkLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kOiBBZGRl
ZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3Nz
OiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jh
c2UuanM6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9k
b212Yy1jb21tb24vYmFzZS5qcy4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9t
dmMtY29tbW9uL3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9k
dWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9w
YWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2thcm1hLmNvbmYuanM6IFJlbW92ZWQuCisg
ICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvcGFja2FnZS5qc29uOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3JlYWRtZS5tZDogUmVt
b3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC90ZXN0Ly5qc2hpbnRyYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0
L2ZpeHR1cmUvZm9vdGVyLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL25l
d190b2RvLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL3RvZ2dsZV9hbGwu
aHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L21vY2svZGF0YXN0b3JlLmpzOiBSZW1vdmVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy9kYXRhL3N0YXRzX3NwZWMuanM6IFJlbW92ZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvdGVzdC9zcGVjL2RhdGEvdG9kb3Nfc3BlYy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90
ZXN0L3NwZWMvdWkvbmV3X2l0ZW1fc3BlYy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Nw
ZWMvdWkvc3RhdHNfc3BlYy5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvdG9n
Z2xlX2FsbF9zcGVjLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvdGVzdC1tYWluLmpzOiBS
ZW1vdmVkLgorCiAyMDE3LTA0LTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBiYWNrIHRlc3RzIGluYWR2ZXJ0ZW50bHkgZGVsZXRlZCBpbiByMjA1
MDMyLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uZ2l0aWdub3JlIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjY1OGQ3
ZDFiMzE4NDhjM2I3MTk2MDU0M2NiMDM2OGU1NmNkNGM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvLmdpdGlnbm9yZQorKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW5vZGVfbW9kdWxlcy8KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvLmpzaGludHJjIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC8uanNoaW50cmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMGIwNGRmNDg4NjY0YjZiYzQ3N2RjOTQ5N2U0MDNk
YTI1YzI1MjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC8uanNoaW50cmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBA
Ci17Ci0JIm5vZGUiOiB0cnVlLAotCSJicm93c2VyIjogdHJ1ZSwKLQkiZXNuZXh0IjogdHJ1ZSwK
LQkiYml0d2lzZSI6IHRydWUsCi0JImNhbWVsY2FzZSI6IHRydWUsCi0JImN1cmx5IjogdHJ1ZSwK
LQkiZXFlcWVxIjogdHJ1ZSwKLQkiaW1tZWQiOiB0cnVlLAotCSJpbmRlbnQiOiA0LAotCSJsYXRl
ZGVmIjogdHJ1ZSwKLQkibmV3Y2FwIjogdHJ1ZSwKLQkibm9hcmciOiB0cnVlLAotCSJxdW90bWFy
ayI6ICJzaW5nbGUiLAotCSJyZWdleHAiOiB0cnVlLAotCSJ1bmRlZiI6IHRydWUsCi0JInVudXNl
ZCI6IHRydWUsCi0JInN0cmljdCI6IHRydWUsCi0JInRyYWlsaW5nIjogdHJ1ZSwKLQkic21hcnR0
YWJzIjogdHJ1ZSwKLQkid2hpdGUiOiB0cnVlLAotCSJ2YWxpZHRoaXMiOiB0cnVlCi19CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9hcHAuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2FwcC9qcy9hcHAuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNGExZTNhNDJm
M2Q2Y2VmZTk4OGU1NWFiNDQzMWI5NTA4MDJkMmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvYXBwLmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLypnbG9iYWwgZGVmaW5lICovCi0ndXNlIHN0cmlj
dCc7Ci0KLWRlZmluZShbCi0gICAgJy4vZGF0YS90b2RvcycsCi0gICAgJy4vZGF0YS9zdGF0cycs
Ci0gICAgJy4vdWkvbmV3X2l0ZW0nLAotICAgICcuL3VpL3RvZG9fbGlzdCcsCi0gICAgJy4vdWkv
c3RhdHMnLAotICAgICcuL3VpL21haW5fc2VsZWN0b3InLAotICAgICcuL3VpL3RvZ2dsZV9hbGwn
Ci1dLCBmdW5jdGlvbiAoVG9kb3NEYXRhLCBTdGF0c0RhdGEsIE5ld0l0ZW1VSSwgVG9kb0xpc3RV
SSwgU3RhdHNVSSwgTWFpblNlbGVjdG9yVUksIFRvZ2dsZUFsbFVJKSB7Ci0gICAgdmFyIGluaXRp
YWxpemUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIFN0YXRzRGF0YS5hdHRhY2hUbyhkb2N1bWVu
dCk7Ci0gICAgICAgIFRvZG9zRGF0YS5hdHRhY2hUbyhkb2N1bWVudCk7Ci0gICAgICAgIE5ld0l0
ZW1VSS5hdHRhY2hUbygnI25ldy10b2RvJyk7Ci0gICAgICAgIE1haW5TZWxlY3RvclVJLmF0dGFj
aFRvKCcjbWFpbicpOwotICAgICAgICBTdGF0c1VJLmF0dGFjaFRvKCcjZm9vdGVyJyk7Ci0gICAg
ICAgIFRvZ2dsZUFsbFVJLmF0dGFjaFRvKCcjdG9nZ2xlLWFsbCcpOwotICAgICAgICBUb2RvTGlz
dFVJLmF0dGFjaFRvKCcjdG9kby1saXN0Jyk7Ci0KLSAgICAgICAgdmFyIGR1bW15Tm9kZVRvTm90
aWZ5QXBwSXNSZWFkeSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICBk
dW1teU5vZGVUb05vdGlmeUFwcElzUmVhZHkuaWQgPSAnYXBwSXNSZWFkeSc7Ci0gICAgICAgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZHVtbXlOb2RlVG9Ob3RpZnlBcHBJc1JlYWR5KTsKLSAg
ICB9OwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgaW5pdGlhbGl6ZTogaW5pdGlhbGl6ZQotICAg
IH07Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMu
anMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9kYXRhL3N0YXRzLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNjk3YzAwYzJhYjljYTNiZmJhMjQ1ZThiOTkxNDY4YmJmMTM1NzY5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvYXBwL2pzL2RhdGEvc3RhdHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCww
IEBACi0vKmdsb2JhbCBkZWZpbmUgKi8KLSd1c2Ugc3RyaWN0JzsKLQotZGVmaW5lKFsKLSAgICAn
ZmxpZ2h0L2xpYi9jb21wb25lbnQnLAotICAgICcuLi9zdG9yZScKLV0sIGZ1bmN0aW9uIChkZWZp
bmVDb21wb25lbnQsIGRhdGFTdG9yZSkgewotICAgIGZ1bmN0aW9uIHN0YXRzKCkgewotICAgICAg
ICB0aGlzLmRlZmF1bHRBdHRycyh7Ci0gICAgICAgICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZQot
ICAgICAgICB9KTsKLQotICAgICAgICB0aGlzLnJlY291bnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB2YXIgdG9kb3MgPSB0aGlzLmF0dHIuZGF0YVN0b3JlLmFsbCgpOwotICAgICAgICAg
ICAgdmFyIGFsbCA9IHRvZG9zLmxlbmd0aDsKLSAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSB0
b2Rvcy5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGVhY2gpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbWVtbyArPSBlYWNoLmNvbXBsZXRlZCA/IDAgOiAxOwotICAgICAgICAgICAgfSwgMCk7Ci0K
LSAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YVN0YXRzQ291bnRlZCcsIHsKLSAgICAgICAg
ICAgICAgICBhbGw6IGFsbCwKLSAgICAgICAgICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZywK
LSAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGFsbCAtIHJlbWFpbmluZywKLSAgICAgICAgICAg
ICAgICBmaWx0ZXI6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmaWx0ZXInKSB8fCAnJwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScs
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb3NM
b2FkZWQnLCB0aGlzLnJlY291bnQpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2Rh
dGFUb2RvQWRkZWQnLCB0aGlzLnJlY291bnQpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVu
dCwgJ2RhdGFUb2RvUmVtb3ZlZCcsIHRoaXMucmVjb3VudCk7Ci0gICAgICAgICAgICB0aGlzLm9u
KGRvY3VtZW50LCAnZGF0YVRvZG9Ub2dnbGVkJywgdGhpcy5yZWNvdW50KTsKLSAgICAgICAgICAg
IHRoaXMub24oZG9jdW1lbnQsICdkYXRhQ2xlYXJlZENvbXBsZXRlZCcsIHRoaXMucmVjb3VudCk7
Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9Ub2dnbGVkQWxsJywgdGhp
cy5yZWNvdW50KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluZUNvbXBv
bmVudChzdGF0cyk7Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2Rh
dGEvdG9kb3MuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy9kYXRhL3RvZG9zLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2E2ZjQyYTJkNjZjOWM0ZDY5ZTAzZGQyYmRhMzgz
YjliN2U0MGE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL2RhdGEvdG9kb3MuanMKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDIgKzAsMCBAQAotLypnbG9iYWwgZGVmaW5lICovCi0ndXNlIHN0cmljdCc7Ci0KLWRlZmlu
ZShbCi0gICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywKLSAgICAnLi4vc3RvcmUnCi1dLCBmdW5j
dGlvbiAoZGVmaW5lQ29tcG9uZW50LCBkYXRhU3RvcmUpIHsKLSAgICBmdW5jdGlvbiB0b2Rvcygp
IHsKLSAgICAgICAgdmFyIGZpbHRlcjsKLSAgICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoewotICAg
ICAgICAgICAgZGF0YVN0b3JlOiBkYXRhU3RvcmUKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhp
cy5hZGQgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyIHRvZG8gPSB0aGlz
LmF0dHIuZGF0YVN0b3JlLnNhdmUoewotICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxl
LAotICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UKLSAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFUb2RvQWRkZWQnLCB7IHRvZG86IHRvZG8sIGZp
bHRlcjogZmlsdGVyIH0pOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMucmVtb3ZlID0gZnVu
Y3Rpb24gKGUsIGRhdGEpIHsKLSAgICAgICAgICAgIHZhciB0b2RvID0gdGhpcy5hdHRyLmRhdGFT
dG9yZS5kZXN0cm95KGRhdGEuaWQpOwotCi0gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFU
b2RvUmVtb3ZlZCcsIHRvZG8pOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMubG9hZCA9IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciB0b2RvczsKLQotICAgICAgICAgICAgZmlsdGVy
ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2ZpbHRlcicpOwotICAgICAgICAgICAgdG9kb3MgPSB0
aGlzLmZpbmQoKTsKLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YVRvZG9zTG9hZGVkJywg
eyB0b2RvczogdG9kb3MgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy51cGRhdGUgPSBm
dW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5zYXZl
KGRhdGEpOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMudG9nZ2xlQ29tcGxldGVkID0gZnVu
Y3Rpb24gKGUsIGRhdGEpIHsKLSAgICAgICAgICAgIHZhciBldmVudFR5cGU7Ci0gICAgICAgICAg
ICB2YXIgdG9kbyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuZ2V0KGRhdGEuaWQpOwotCi0gICAgICAg
ICAgICB0b2RvLmNvbXBsZXRlZCA9ICF0b2RvLmNvbXBsZXRlZDsKLSAgICAgICAgICAgIHRoaXMu
YXR0ci5kYXRhU3RvcmUuc2F2ZSh0b2RvKTsKLQotICAgICAgICAgICAgZXZlbnRUeXBlID0gZmls
dGVyID8gJ2RhdGFUb2RvUmVtb3ZlZCcgOiAnZGF0YVRvZG9Ub2dnbGVkJzsKLQotICAgICAgICAg
ICAgdGhpcy50cmlnZ2VyKGV2ZW50VHlwZSwgdG9kbyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
dGhpcy50b2dnbGVBbGxDb21wbGV0ZWQgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAg
ICAgdGhpcy5hdHRyLmRhdGFTdG9yZS51cGRhdGVBbGwoeyBjb21wbGV0ZWQ6IGRhdGEuY29tcGxl
dGVkIH0pOwotICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhVG9kb1RvZ2dsZWRBbGwnLCB7
IHRvZG9zOiB0aGlzLmZpbmQoZmlsdGVyKSB9KTsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlz
LmZpbHRlciA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7Ci0gICAgICAgICAgICB2YXIgdG9kb3M7Ci0K
LSAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdmaWx0ZXInLCBkYXRhLmZpbHRlcik7
Ci0gICAgICAgICAgICBmaWx0ZXIgPSBkYXRhLmZpbHRlcjsKLSAgICAgICAgICAgIHRvZG9zID0g
dGhpcy5maW5kKCk7Ci0KLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YVRvZG9zRmlsdGVy
ZWQnLCB7IHRvZG9zOiB0b2RvcyB9KTsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLmZpbmQg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgdG9kb3M7Ci0KLSAgICAgICAgICAgIGlm
IChmaWx0ZXIpIHsKLSAgICAgICAgICAgICAgICB0b2RvcyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUu
ZmluZChmdW5jdGlvbiAoZWFjaCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHR5cGVv
ZiBlYWNoW2ZpbHRlcl0gIT09ICd1bmRlZmluZWQnKSA/IGVhY2guY29tcGxldGVkIDogIWVhY2gu
Y29tcGxldGVkOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICB0b2RvcyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuYWxsKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0b2RvczsKLSAgICAgICAgfTsKLQotICAgICAg
ICB0aGlzLmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy5h
dHRyLmRhdGFTdG9yZS5kZXN0cm95QWxsKHsgY29tcGxldGVkOiB0cnVlIH0pOwotCi0gICAgICAg
ICAgICB0aGlzLnRyaWdnZXIoJ3VpRmlsdGVyUmVxdWVzdGVkJywgeyBmaWx0ZXI6IGZpbHRlciB9
KTsKLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YUNsZWFyZWRDb21wbGV0ZWQnKTsKLSAg
ICAgICAgfTsKLQotICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpQWRkUmVxdWVzdGVkJywgdGhpcy5h
ZGQpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpVXBkYXRlUmVxdWVzdGVkJywg
dGhpcy51cGRhdGUpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpUmVtb3ZlUmVx
dWVzdGVkJywgdGhpcy5yZW1vdmUpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3Vp
TG9hZFJlcXVlc3RlZCcsIHRoaXMubG9hZCk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50
LCAndWlUb2dnbGVSZXF1ZXN0ZWQnLCB0aGlzLnRvZ2dsZUNvbXBsZXRlZCk7Ci0gICAgICAgICAg
ICB0aGlzLm9uKGRvY3VtZW50LCAndWlUb2dnbGVBbGxSZXF1ZXN0ZWQnLCB0aGlzLnRvZ2dsZUFs
bENvbXBsZXRlZCk7Ci0gICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlDbGVhclJlcXVl
c3RlZCcsIHRoaXMuY2xlYXJDb21wbGV0ZWQpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVu
dCwgJ3VpRmlsdGVyUmVxdWVzdGVkJywgdGhpcy5maWx0ZXIpOwotICAgICAgICB9KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHRvZG9zKTsKLX0pOwpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvbWFpbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pz
L21haW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYWVhMGMzYjIyMjk5NTM1
ZWI4OTU1YzEwNzZjMTRjODhiNWQzZDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvbWFpbi5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDIyICswLDAgQEAKLSd1c2Ugc3RyaWN0JzsKLQotcmVxdWlyZS5jb25maWcoewot
ICAgIGJhc2VVcmw6ICcuLycsCi0gICAgcGF0aHM6IHsKLSAgICAgICAganF1ZXJ5OiAnYm93ZXJf
Y29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5JywKLSAgICAgICAgZXM1c2hpbTogJ2Jvd2VyX2NvbXBv
bmVudHMvZXM1LXNoaW0vZXM1LXNoaW0nLAotICAgICAgICBlczVzaGFtOiAnYm93ZXJfY29tcG9u
ZW50cy9lczUtc2hpbS9lczUtc2hhbScsCi0gICAgICAgIHRleHQ6ICdib3dlcl9jb21wb25lbnRz
L3JlcXVpcmVqcy10ZXh0L3RleHQnLAotICAgICAgICBmbGlnaHQ6ICdib3dlcl9jb21wb25lbnRz
L2ZsaWdodCcsCi0gICAgICAgIGRlcG90OiAnYm93ZXJfY29tcG9uZW50cy9kZXBvdC9kZXBvdCcK
LSAgICB9LAotICAgIHNoaW06IHsKLSAgICAgICAgJ2FwcC9qcy9hcHAnOiB7Ci0gICAgICAgICAg
ICBkZXBzOiBbJ2pxdWVyeScsICdlczVzaGltJywgJ2VzNXNoYW0nXQotICAgICAgICB9Ci0gICAg
fQotfSk7Ci0KLXJlcXVpcmUoWydhcHAvanMvYXBwJ10sIGZ1bmN0aW9uIChBcHApIHsKLSAgICBB
cHAuaW5pdGlhbGl6ZSgpOwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9q
cy9zdG9yZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL2pzL3N0b3JlLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0YjA5NmY1Y2ZlZjQwMTEyZWUzZjk3NGNjMjQwNDgwZGJkNzhk
Y2NmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvYXBwL2pzL3N0b3JlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBA
Ci0vKmdsb2JhbCBkZWZpbmUgKi8KLQotJ3VzZSBzdHJpY3QnOwotCi1kZWZpbmUoWwotICAgICdk
ZXBvdCcKLV0sIGZ1bmN0aW9uIChkZXBvdCkgewotICAgIHJldHVybiBkZXBvdCgndG9kb3MnLCB7
IGlkQXR0cmlidXRlOiAnaWQnIH0pOwotfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2FwcC9qcy91aS9tYWluX3NlbGVjdG9yLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkv
bWFpbl9zZWxlY3Rvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg4YzJkNGNl
MGE5MmRlMmU0ZTEyMjg3ZmI2ZTE4ODlhZjdlN2QzMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9tYWluX3Nl
bGVjdG9yLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLypnbG9iYWwgZGVmaW5l
ICovCi0ndXNlIHN0cmljdCc7Ci0KLWRlZmluZShbCi0gICAgJ2ZsaWdodC9saWIvY29tcG9uZW50
JwotXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCkgewotICAgIGZ1bmN0aW9uIG1haW5TZWxl
Y3RvcigpIHsKLSAgICAgICAgdGhpcy50b2dnbGUgPSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAg
ICAgICAgICAgdmFyIHRvZ2dsZSA9IGRhdGEuYWxsID4gMDsKLSAgICAgICAgICAgIHRoaXMuJG5v
ZGUudG9nZ2xlKHRvZ2dsZSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5hZnRlcignaW5p
dGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuJG5vZGUuaGlkZSgpOwot
ICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFTdGF0c0NvdW50ZWQnLCB0aGlzLnRv
Z2dsZSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQo
bWFpblNlbGVjdG9yKTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMv
dWkvbmV3X2l0ZW0uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9uZXdfaXRlbS5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFkNmQ4N2UzNDNiNTU4MWE4YTU3YThmYTMz
OTRiNmQzYmE0MjUwYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS9uZXdfaXRlbS5qcworKysgL2Rldi9udWxs
CkBAIC0xLDI5ICswLDAgQEAKLS8qZ2xvYmFsIGRlZmluZSAqLwotJ3VzZSBzdHJpY3QnOwotCi1k
ZWZpbmUoWwotICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcKLV0sIGZ1bmN0aW9uIChkZWZpbmVD
b21wb25lbnQpIHsKLSAgICBmdW5jdGlvbiBuZXdJdGVtKCkgewotICAgICAgICB2YXIgRU5URVJf
S0VZID0gMTM7Ci0KLSAgICAgICAgdGhpcy5jcmVhdGVPbkVudGVyID0gZnVuY3Rpb24gKGUpIHsK
LSAgICAgICAgICAgIGlmIChlLndoaWNoICE9PSBFTlRFUl9LRVkgfHwKLSAgICAgICAgICAgICAg
ICAhdGhpcy4kbm9kZS52YWwoKS50cmltKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlBZGRSZXF1ZXN0ZWQn
LCB7Ci0gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuJG5vZGUudmFsKCkudHJpbSgpCi0gICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgdGhpcy4kbm9kZS52YWwoJycpOwotICAgICAgICB9
OwotCi0gICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICB0aGlzLm9uKCdrZXlkb3duJywgdGhpcy5jcmVhdGVPbkVudGVyKTsKLSAgICAgICAg
fSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChuZXdJdGVtKTsKLX0pOwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdWkvc3RhdHMuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2FwcC9qcy91aS9zdGF0cy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDhlNWVjZGYzM2FmYzAwMTI4OWExMTMzZWUxYjY3ODBjZjZhZTNjZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9q
cy91aS9zdGF0cy5qcworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qZ2xvYmFsIGRl
ZmluZSAqLwotJ3VzZSBzdHJpY3QnOwotCi1kZWZpbmUoWwotICAgICdmbGlnaHQvbGliL2NvbXBv
bmVudCcsCi0gICAgJy4vd2l0aF9maWx0ZXJzJywKLSAgICAndGV4dCFhcHAvdGVtcGxhdGVzL3N0
YXRzLmh0bWwnLAotICAgICcuLi91dGlscycKLV0sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQs
IHdpdGhGaWx0ZXJzLCBzdGF0c1RtcGwsIHV0aWxzKSB7Ci0gICAgZnVuY3Rpb24gc3RhdHMoKSB7
Ci0gICAgICAgIHZhciB0ZW1wbGF0ZSA9IHV0aWxzLnRtcGwoc3RhdHNUbXBsKTsKLQotICAgICAg
ICB0aGlzLmRlZmF1bHRBdHRycyh7Ci0gICAgICAgICAgICBjbGVhckNvbXBsZXRlZFNlbGVjdG9y
OiAnI2NsZWFyLWNvbXBsZXRlZCcKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5yZW5kZXIg
PSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyIHRvZ2dsZSA9IGRhdGEuYWxs
ID4gMDsKLQotICAgICAgICAgICAgdGhpcy4kbm9kZS5odG1sKHRlbXBsYXRlKGRhdGEpKTsKLSAg
ICAgICAgICAgIHRoaXMuJG5vZGUudG9nZ2xlKHRvZ2dsZSk7Ci0gICAgICAgICAgICB0aGlzLm1h
cmtTZWxlY3RlZChkYXRhLmZpbHRlcik7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5jbGVh
ckNvbXBsZXRlZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlD
bGVhclJlcXVlc3RlZCcpOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRp
YWxpemUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLiRub2RlLmhpZGUoKTsKLSAg
ICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJywgdGhpcy5yZW5k
ZXIpOwotICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB7ICdjbGVhckNvbXBsZXRlZFNlbGVj
dG9yJzogdGhpcy5jbGVhckNvbXBsZXRlZCB9KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGRlZmluZUNvbXBvbmVudChzdGF0cywgd2l0aEZpbHRlcnMpOwotfSk7CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2RvX2xpc3QuanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2FwcC9qcy91aS90b2RvX2xpc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDhjODA2ZmEyZjkyYmRlNDU3YTNlZDY3ZjEwMDA4YjIwYTA2YjNkMTcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAv
anMvdWkvdG9kb19saXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qZ2xv
YmFsIGRlZmluZSwgJCAqLwotJ3VzZSBzdHJpY3QnOwotCi1kZWZpbmUoWwotICAgICdmbGlnaHQv
bGliL2NvbXBvbmVudCcsCi0gICAgJ3RleHQhYXBwL3RlbXBsYXRlcy90b2RvLmh0bWwnLAotICAg
ICcuLi91dGlscycKLV0sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQsIHRvZG9UbXBsLCB1dGls
cykgewotICAgIGZ1bmN0aW9uIHRvZG9MaXN0KCkgewotICAgICAgICB2YXIgRU5URVJfS0VZID0g
MTM7Ci0gICAgICAgIHZhciB0ZW1wbGF0ZSA9IHV0aWxzLnRtcGwodG9kb1RtcGwpOwotCi0gICAg
ICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsKLSAgICAgICAgICAgIGRlc3Ryb3lTZWxlY3RvcjogJ2J1
dHRvbi5kZXN0cm95JywKLSAgICAgICAgICAgIHRvZ2dsZVNlbGVjdG9yOiAnaW5wdXQudG9nZ2xl
JywKLSAgICAgICAgICAgIGxhYmVsU2VsZWN0b3I6ICdsYWJlbCcsCi0gICAgICAgICAgICBlZGl0
U2VsZWN0b3I6ICcuZWRpdCcKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5yZW5kZXJBbGwg
PSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdGhpcy4kbm9kZS5odG1sKCcnKTsK
LSAgICAgICAgICAgIGRhdGEudG9kb3MuZm9yRWFjaChmdW5jdGlvbiAoZWFjaCkgewotICAgICAg
ICAgICAgICAgIHRoaXMucmVuZGVyKGUsIHsgdG9kbzogZWFjaCB9KTsKLSAgICAgICAgICAgIH0s
IHRoaXMpOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKGUs
IGRhdGEpIHsKLSAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdkYXRhVG9kb0FkZGVkJyAmJiBk
YXRhLmZpbHRlciA9PT0gJ2NvbXBsZXRlZCcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRoaXMuJG5vZGUuYXBwZW5kKHRlbXBsYXRlKGRh
dGEudG9kbykpOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuZWRpdCA9IGZ1bmN0aW9uIChl
LCBkYXRhKSB7Ci0gICAgICAgICAgICB2YXIgJHRvZG9FbCA9ICQoZGF0YS5lbCkucGFyZW50cygn
bGknKTsKLQotICAgICAgICAgICAgJHRvZG9FbC5hZGRDbGFzcygnZWRpdGluZycpOwotICAgICAg
ICAgICAgdGhpcy5zZWxlY3QoJ2VkaXRTZWxlY3RvcicpLmZvY3VzKCk7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlID0gZnVuY3Rpb24gKGUpIHsKLSAgICAgICAgICAg
IHZhciAkaW5wdXRFbCA9ICQoZS5jdXJyZW50VGFyZ2V0KTsKLSAgICAgICAgICAgIHZhciAkdG9k
b0VsID0gJGlucHV0RWwucGFyZW50cygnbGknKTsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9ICRp
bnB1dEVsLnZhbCgpLnRyaW0oKTsKLSAgICAgICAgICAgIHZhciBpZCA9ICR0b2RvRWwuYXR0cign
aWQnKTsKLQotICAgICAgICAgICAgaWYgKCEkdG9kb0VsLmhhc0NsYXNzKCdlZGl0aW5nJykpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICR0
b2RvRWwucmVtb3ZlQ2xhc3MoJ2VkaXRpbmcnKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgJHRvZG9FbC5maW5kKCdsYWJlbCcpLmh0bWwodmFsdWUpOwotICAg
ICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlVcGRhdGVSZXF1ZXN0ZWQnLCAgeyBpZDogaWQs
IHRpdGxlOiB2YWx1ZSB9KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy50cmlnZ2VyKCd1aVJlbW92ZVJlcXVlc3RlZCcsIHsgaWQ6IGlkIH0pOwotICAgICAgICAg
ICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZU9uRW50ZXIgPSBm
dW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IEVOVEVSX0tF
WSkgewotICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZShlLCBkYXRhKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLnJlcXVlc3RSZW1vdmUgPSBmdW5j
dGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyIGlkID0gJChkYXRhLmVsKS5hdHRyKCdp
ZCcpLnNwbGl0KCdfJylbMV07Ci0gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpUmVtb3ZlUmVx
dWVzdGVkJywgeyBpZDogaWQgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5yZW1vdmUg
PSBmdW5jdGlvbiAoZSwgZGF0YSkgewotICAgICAgICAgICAgdmFyICR0b2RvRWwgPSB0aGlzLiRu
b2RlLmZpbmQoJyMnICsgZGF0YS5pZCk7Ci0gICAgICAgICAgICAkdG9kb0VsLnJlbW92ZSgpOwot
ICAgICAgICB9OwotCi0gICAgICAgIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsK
LSAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJChkYXRhLmVsKS5wYXJlbnRzKCdsaScpOwotCi0g
ICAgICAgICAgICAkdG9kb0VsLnRvZ2dsZUNsYXNzKCdjb21wbGV0ZWQnKTsKLSAgICAgICAgICAg
IHRoaXMudHJpZ2dlcigndWlUb2dnbGVSZXF1ZXN0ZWQnLCB7IGlkOiAkdG9kb0VsLmF0dHIoJ2lk
JykgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb0FkZGVk
JywgdGhpcy5yZW5kZXIpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2Rv
c0xvYWRlZCcsIHRoaXMucmVuZGVyQWxsKTsKLSAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQs
ICdkYXRhVG9kb3NGaWx0ZXJlZCcsIHRoaXMucmVuZGVyQWxsKTsKLSAgICAgICAgICAgIHRoaXMu
b24oZG9jdW1lbnQsICdkYXRhVG9kb1RvZ2dsZWRBbGwnLCB0aGlzLnJlbmRlckFsbCk7Ci0gICAg
ICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9SZW1vdmVkJywgdGhpcy5yZW1vdmUp
OwotCi0gICAgICAgICAgICB0aGlzLm9uKCdjbGljaycsIHsgJ2Rlc3Ryb3lTZWxlY3Rvcic6IHRo
aXMucmVxdWVzdFJlbW92ZSB9KTsKLSAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeyAndG9n
Z2xlU2VsZWN0b3InOiB0aGlzLnRvZ2dsZSB9KTsKLSAgICAgICAgICAgIHRoaXMub24oJ2RibGNs
aWNrJywgeyAnbGFiZWxTZWxlY3Rvcic6IHRoaXMuZWRpdCB9KTsKLQotICAgICAgICAgICAgdGhp
cy4kbm9kZS5vbignYmx1cicsICcuZWRpdCcsIHRoaXMucmVxdWVzdFVwZGF0ZS5iaW5kKHRoaXMp
KTsKLSAgICAgICAgICAgIHRoaXMuJG5vZGUub24oJ2tleWRvd24nLCAnLmVkaXQnLCB0aGlzLnJl
cXVlc3RVcGRhdGVPbkVudGVyLmJpbmQodGhpcykpOwotCi0gICAgICAgICAgICAvLyB0aGVzZSBk
b24ndCB3b3JrCi0gICAgICAgICAgICAvLyB0aGlzLm9uKHRoaXMuYXR0ci5lZGl0U2VsZWN0b3Is
ICdibHVyJywgdGhpcy5yZXF1ZXN0VXBkYXRlKTsKLSAgICAgICAgICAgIC8vIHRoaXMub24oJ2Js
dXInLCB7ICdlZGl0U2VsZWN0b3InOiB0aGlzLnJlcXVlc3RVcGRhdGUgfSk7Ci0KLSAgICAgICAg
ICAgIHRoaXMudHJpZ2dlcigndWlMb2FkUmVxdWVzdGVkJyk7Ci0gICAgICAgIH0pOwotICAgIH0K
LQotICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQodG9kb0xpc3QpOwotfSk7CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS90b2dnbGVfYWxsLmpzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9hcHAvanMvdWkvdG9nZ2xlX2FsbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNGRjNjk4M2MzMWFiNmZjMWIxNzE4MDU4NTcwZDQyMzdkZjc0NzQ4YS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9q
cy91aS90b2dnbGVfYWxsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLypnbG9i
YWwgZGVmaW5lICovCi0ndXNlIHN0cmljdCc7Ci0KLWRlZmluZShbCi0gICAgJ2ZsaWdodC9saWIv
Y29tcG9uZW50JwotXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCkgewotICAgIGZ1bmN0aW9u
IHRvZ2dsZUFsbCgpIHsKLSAgICAgICAgdGhpcy50b2dnbGVBbGxDb21wbGV0ZSA9IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlUb2dnbGVBbGxSZXF1ZXN0ZWQnLCB7
Ci0gICAgICAgICAgICAgICAgY29tcGxldGVkOiB0aGlzLiRub2RlLmlzKCc6Y2hlY2tlZCcpCi0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLnRvZ2dsZUNoZWNrYm94
ID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKLSAgICAgICAgICAgIHRoaXMubm9kZS5jaGVja2VkID0g
IWRhdGEucmVtYWluaW5nOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRp
YWxpemUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlzLm9uKCdjbGljaycsIHRoaXMu
dG9nZ2xlQWxsQ29tcGxldGUpOwotICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFT
dGF0c0NvdW50ZWQnLCB0aGlzLnRvZ2dsZUNoZWNrYm94KTsKLSAgICAgICAgfSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudCh0b2dnbGVBbGwpOwotfSk7CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2FwcC9qcy91aS93aXRoX2ZpbHRlcnMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ2ZjM0YzhmMDdhNjE0MDg2ZTAwZmIwYjUyMjUzZjgyMjRhNDRhODIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9h
cHAvanMvdWkvd2l0aF9maWx0ZXJzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAot
LypnbG9iYWwgZGVmaW5lLCAkICovCi0ndXNlIHN0cmljdCc7Ci0KLWRlZmluZShmdW5jdGlvbiAo
KSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uIHdpdGhGaWx0ZXJzKCkgewotICAgICAgICB0aGlzLmRl
ZmF1bHRBdHRycyh7Ci0gICAgICAgICAgICBmaWx0ZXJTZWxlY3RvcjogJyNmaWx0ZXJzIGEnCi0g
ICAgICAgIH0pOwotCi0gICAgICAgIHRoaXMuY2hvb3NlRmlsdGVyID0gZnVuY3Rpb24gKGUsIGRh
dGEpIHsKLSAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBkYXRhLmVsLmhhc2guc2xpY2UoMik7Ci0K
LSAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdmaWx0ZXJTZWxlY3RvcicpLnJlbW92ZUNsYXNzKCdz
ZWxlY3RlZCcpOwotICAgICAgICAgICAgJChkYXRhLmVsKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTsK
LSAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlGaWx0ZXJSZXF1ZXN0ZWQnLCB7IGZpbHRlcjog
ZmlsdGVyIH0pOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMubWFya1NlbGVjdGVkID0gZnVu
Y3Rpb24gKGZpbHRlcikgewotICAgICAgICAgICAgdGhpcy4kbm9kZS5maW5kKCdbaHJlZj0iIy8n
ICsgZmlsdGVyICsgJyJdJykuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHRoaXMub24oJ2NsaWNrJywgeyBmaWx0ZXJTZWxlY3RvcjogdGhpcy5jaG9vc2VGaWx0ZXIgfSk7
Ci0gICAgICAgIH0pOwotICAgIH07Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
YXBwL2pzL3V0aWxzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdXRpbHMuanMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhODU3MzM5MWMwNTRjNDExOGY0NTg0ZjA5OTBiYjNj
NmQ4ODNhNDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9hcHAvanMvdXRpbHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQg
KzAsMCBAQAotLypnbG9iYWwgZGVmaW5lICovCi0ndXNlIHN0cmljdCc7Ci0KLS8vIHRtcGwgZnVu
Y3Rpb24gc2Nvb3BlZCBmcm9tIHVuZGVyc2NvcmUuCi0vLyBodHRwOi8vZG9jdW1lbnRjbG91ZC5n
aXRodWIuY29tL3VuZGVyc2NvcmUvI3RlbXBsYXRlCi1kZWZpbmUoZnVuY3Rpb24gKCkgewotICAg
IHZhciBfID0ge307Ci0KLSAgICAvLyBMaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5n
LgotICAgIHZhciBlbnRpdHlNYXAgPSB7Ci0gICAgICAgIGVzY2FwZTogewotICAgICAgICAgICAg
JyYnOiAnJmFtcDsnLAotICAgICAgICAgICAgJzwnOiAnJmx0OycsCi0gICAgICAgICAgICAnPic6
ICcmZ3Q7JywKLSAgICAgICAgICAgICciJzogJyZxdW90OycsCi0gICAgICAgICAgICAvKmpzaGlu
dCBxdW90bWFyazpmYWxzZSAqLwotICAgICAgICAgICAgIiciOiAnJiN4Mjc7JywKLSAgICAgICAg
ICAgICcvJzogJyYjeDJGOycKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB2YXIgZXNjYXBlS2V5
cyA9ICcmPD4iXCcvJzsKLSAgICB2YXIgdW5lc2NhcGVLZXlzID0gJyZhbXA7fCZsdDt8Jmd0O3wm
cXVvdDt8JiN4Mjc7fCYjeDJGOyc7Ci0KLSAgICAvLyBSZWdleGVzIGNvbnRhaW5pbmcgdGhlIGtl
eXMgYW5kIHZhbHVlcyBsaXN0ZWQgaW1tZWRpYXRlbHkgYWJvdmUuCi0gICAgdmFyIGVudGl0eVJl
Z2V4ZXMgPSB7Ci0gICAgICAgIGVzY2FwZTogICBuZXcgUmVnRXhwKCdbJyArIGVzY2FwZUtleXMg
KyAnXScsICdnJyksCi0gICAgICAgIHVuZXNjYXBlOiBuZXcgUmVnRXhwKCcoJyArIHVuZXNjYXBl
S2V5cyArICcpJywgJ2cnKQotICAgIH07Ci0KLSAgICAvLyBGdW5jdGlvbnMgZm9yIGVzY2FwaW5n
IGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MgdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uCi0gICAg
Wydlc2NhcGUnLCAndW5lc2NhcGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHsKLSAgICAg
ICAgX1ttZXRob2RdID0gZnVuY3Rpb24gKHN0cmluZykgewotICAgICAgICAgICAgaWYgKHN0cmlu
ZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIHJl
dHVybiAnJzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuICgnJyArIHN0cmlu
ZykucmVwbGFjZShlbnRpdHlSZWdleGVzW21ldGhvZF0sIGZ1bmN0aW9uIChtYXRjaCkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBlbnRpdHlNYXBbbWV0aG9kXVttYXRjaF07Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfTsKLSAgICB9KTsKLQotICAgIHZhciBzZXR0aW5ncyA9IHsKLSAgICAg
ICAgZXZhbHVhdGU6IC88JShbXHNcU10rPyklPi9nLAotICAgICAgICBpbnRlcnBvbGF0ZTogLzwl
PShbXHNcU10rPyklPi9nLAotICAgICAgICBlc2NhcGU6IC88JS0oW1xzXFNdKz8pJT4vZwotICAg
IH07Ci0KLSAgICB2YXIgbm9NYXRjaCA9IC8oLileLzsKLSAgICB2YXIgZXNjYXBlcyA9IHsKLSAg
ICAgICAgLypqc2hpbnQgcXVvdG1hcms6ZmFsc2UgKi8KLSAgICAgICAgIiciOiAiJyIsCi0gICAg
ICAgICdcXCc6ICdcXCcsCi0gICAgICAgICdccic6ICdyJywKLSAgICAgICAgJ1xuJzogJ24nLAot
ICAgICAgICAnXHQnOiAndCcsCi0gICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAotICAgICAgICAn
XHUyMDI5JzogJ3UyMDI5JwotICAgIH07Ci0KLSAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxu
fFx0fFx1MjAyOHxcdTIwMjkvZzsKLQotICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGlu
Zywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCi0gICAgLy8gVW5kZXJz
Y29yZSB0ZW1wbGF0aW5nIGhhbmRsZXMgYXJiaXRyYXJ5IGRlbGltaXRlcnMsIHByZXNlcnZlcyB3
aGl0ZXNwYWNlLAotICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGlu
dGVycG9sYXRlZCBjb2RlLgotICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uICh0ZXh0LCBkYXRh
KSB7Ci0gICAgICAgIHZhciByZW5kZXI7Ci0KLSAgICAgICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJz
IGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCi0gICAgICAgIHZh
ciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCi0gICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8
IG5vTWF0Y2gpLnNvdXJjZSwKLSAgICAgICAgICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBu
b01hdGNoKS5zb3VyY2UsCi0gICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRj
aCkuc291cmNlCi0gICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKLQotICAgICAgICAv
LyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBh
cHByb3ByaWF0ZWx5LgotICAgICAgICB2YXIgaW5kZXggPSAwOwotICAgICAgICB2YXIgc291cmNl
ID0gIl9fcCs9JyI7Ci0gICAgICAgIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbiAobWF0
Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKLSAgICAgICAgICAg
IHNvdXJjZSArPSB0ZXh0LnNsaWNlKGluZGV4LCBvZmZzZXQpCi0gICAgICAgICAgICAucmVwbGFj
ZShlc2NhcGVyLCBmdW5jdGlvbiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1xc
JyArIGVzY2FwZXNbbWF0Y2hdOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChl
c2NhcGUpIHsKLSAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2Fw
ZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7Ci0gICAgICAgICAgICAgICAgc291cmNlICs9ICIn
K1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXZhbHVhdGUpIHsKLSAgICAgICAgICAgICAgICBz
b3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7Ci0gICAgICAgICAgICBy
ZXR1cm4gbWF0Y2g7Ci0gICAgICAgIH0pOwotICAgICAgICBzb3VyY2UgKz0gIic7XG4iOwotCi0g
ICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1
ZXMgaW4gbG9jYWwgc2NvcGUuCi0gICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHsKLSAg
ICAgICAgICAgIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc291cmNlID0gInZhciBfX3QsX19wPScnLF9faj1BcnJheS5w
cm90b3R5cGUuam9pbiwiICsKLSAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19q
LmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiArCi0gICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJu
IF9fcDtcbiI7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8qanNoaW50IGV2aWw6dHJ1
ZSAqLwotICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRpbmdzLnZhcmlhYmxl
IHx8ICdvYmonLCAnXycsIHNvdXJjZSk7Ci0gICAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAg
ICAgICAgZXJyLnNvdXJjZSA9IHNvdXJjZTsKLSAgICAgICAgICAgIHRocm93IGVycjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVyKGRh
dGEsIF8pOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24gKGRh
dGEpIHsKLSAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKLSAg
ICAgICAgfTsKLQotICAgICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbiBzb3Vy
Y2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uCi0gICAgICAgIHRlbXBsYXRl
LnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcp
e1xuJyArIHNvdXJjZSArICd9JzsKLQotICAgICAgICByZXR1cm4gdGVtcGxhdGU7Ci0gICAgfTsK
LQotICAgIHJldHVybiB7Ci0gICAgICAgIHRtcGw6IHRlbXBsYXRlCi0gICAgfTsKLX0pOwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvdGVtcGxhdGVzL3N0YXRzLmh0bWwgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYmFiM2I1Y2YzZjY4YzA2YWUzMTM0ZjQyZTRhMDkwNmExYTcwOGJlNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2FwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAg
QEAKLTxzcGFuIGlkPSJ0b2RvLWNvdW50Ij4KLSAgICA8c3Ryb25nPjwlPSByZW1haW5pbmcgJT48
L3N0cm9uZz4gPCU9IHJlbWFpbmluZyA9PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJyAlPiBsZWZ0Ci08
L3NwYW4+Ci08dWwgaWQ9ImZpbHRlcnMiPgotICAgIDxsaT4KLSAgICAgICAgPGEgaHJlZj0iIy8i
PkFsbDwvYT4KLSAgICA8L2xpPgotICAgIDxsaT4KLSAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUi
PkFjdGl2ZTwvYT4KLSAgICA8L2xpPgotICAgIDxsaT4KLSAgICAgICAgPGEgaHJlZj0iIy9jb21w
bGV0ZWQiPkNvbXBsZXRlZDwvYT4KLSAgICA8L2xpPgotPC91bD4KLTwlIGlmIChjb21wbGV0ZWQp
IHsgJT4KLTxidXR0b24gaWQ9ImNsZWFyLWNvbXBsZXRlZCI+Q2xlYXIgY29tcGxldGVkICg8JT0g
Y29tcGxldGVkICU+KTwvYnV0dG9uPgotPCUgfSAlPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYXBwL3RlbXBs
YXRlcy90b2RvLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZmY3NTM4OWRm
NTcwMTI2MmUxZjUyNjFlYzk0NTMzMjRjM2ViNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9hcHAvdGVtcGxhdGVzL3RvZG8u
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPGxpIGlkPSI8JT0gaWQgJT4iIGNs
YXNzPSI8JT0gY29tcGxldGVkID8gJ2NvbXBsZXRlZCcgOiAnJyAlPiI+Ci0gICAgPGRpdiBjbGFz
cz0idmlldyI+Ci0gICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJjaGVja2JveCIg
PCU9IGNvbXBsZXRlZCA/ICdjaGVja2VkJyA6ICcnICU+PgotICAgICAgICA8bGFiZWw+PCUtIHRp
dGxlICU+PC9sYWJlbD4KLSAgICAgICAgPGJ1dHRvbiBpZD0iZGVzdHJveV88JT0gaWQgJT4iIGNs
YXNzPSJkZXN0cm95Ij48L2J1dHRvbj4KLSAgICA8L2Rpdj4KLSAgICA8aW5wdXQgY2xhc3M9ImVk
aXQiIHZhbHVlPSI8JS0gdGl0bGUgJT4iPgotPC9saT4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvYm93ZXIuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXIuanNvbgpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDVmNTBmNDAxM2VkM2JlYWNmNWY4OGQxY2EzOTAwZGI4OTJk
NjA1NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2Jvd2VyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi17
Ci0gICJuYW1lIjogImZsaWdodC10b2RvbXZjIiwKLSAgInZlcnNpb24iOiAiMC4wLjAiLAotICAi
ZGVwZW5kZW5jaWVzIjogewotICAgICJkZXBvdCI6ICJ+MC4xLjQiLAotICAgICJmbGlnaHQiOiAi
fjEuMS4wIiwKLSAgICAianF1ZXJ5IjogIjEuOC4zIiwKLSAgICAicmVxdWlyZWpzIjogIn4yLjEu
NSIsCi0gICAgInRvZG9tdmMtY29tbW9uIjogIn4wLjEuNCIsCi0gICAgInJlcXVpcmVqcy10ZXh0
IjogIn4yLjAuMTAiCi0gIH0sCi0gICJkZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgImphc21pbmUt
ZmxpZ2h0IjogIn4yLjEuMCIsCi0gICAgImphc21pbmUtanF1ZXJ5IjogIn4xLjUuOCIKLSAgfQot
fQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2RlcG90L2Rl
cG90LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2RlcG90L2RlcG90Lmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzc2Mzg0MjNkZjRmYjhjY2Q1MTgzZDZi
ZGQ0ZTE2ODdhZDgzZDA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9kZXBvdC9kZXBvdC5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vLyBkZXBvdC5qcyB2MC4xLjYKLQotLy8g
KGMpIDIwMTMgTWljaGFsIEt1a2xpcwotLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNl
Ci0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi0KLShmdW5jdGlvbiAobmFt
ZSwgcm9vdCwgZmFjdG9yeSkgewotICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcpIHsK
LSAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTsKLSAgfSBlbHNlIGlmICh0eXBlb2YgZGVm
aW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgewotICAgIGRlZmluZShmYWN0b3J5KTsK
LSAgfSBlbHNlIHsKLSAgICByb290W25hbWVdID0gZmFjdG9yeSgpOwotICB9Ci19KCJkZXBvdCIs
IHRoaXMsIGZ1bmN0aW9uICgpIHsKLQotICAidXNlIHN0cmljdCI7Ci0KLSAgLy8gZGVwb3QgYXBp
Ci0KLSAgdmFyIGFwaSA9IHsKLQotICAgIHNhdmU6IGZ1bmN0aW9uIChyZWNvcmQpIHsKLSAgICAg
IHZhciBpZDsKLQotICAgICAgaWYgKCFyZWNvcmRbdGhpcy5pZEF0dHJpYnV0ZV0pIHsKLSAgICAg
ICAgcmVjb3JkW3RoaXMuaWRBdHRyaWJ1dGVdID0gZ3VpZCgpOwotICAgICAgfQotCi0gICAgICBp
ZCA9IHJlY29yZFt0aGlzLmlkQXR0cmlidXRlXSArICcnOwotCi0gICAgICBpZiAodGhpcy5pZHMu
aW5kZXhPZihpZCkgPCAwKSB7Ci0gICAgICAgIHRoaXMuaWRzLnB1c2goaWQpOwotICAgICAgICB0
aGlzLnN0b3JhZ2VBZGFwdG9yLnNldEl0ZW0odGhpcy5uYW1lLCB0aGlzLmlkcy5qb2luKCIsIikp
OwotICAgICAgfQotCi0gICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnNldEl0ZW0oZ2V0S2V5KHRo
aXMubmFtZSwgaWQpLCBKU09OLnN0cmluZ2lmeShyZWNvcmQpKTsKLQotICAgICAgcmV0dXJuIHJl
Y29yZDsKLSAgICB9LAotCi0gICAgdXBkYXRlOiBmdW5jdGlvbiAoaWQsIGRhdGEpIHsKLSAgICAg
IGlmICh0eXBlb2YgZGF0YSA9PSAndW5kZWZpbmVkJykgewotICAgICAgICBkYXRhID0gaWQ7Ci0g
ICAgICAgIGlkID0gZGF0YVt0aGlzLmlkQXR0cmlidXRlXTsKLSAgICAgIH0KLQotICAgICAgdmFy
IHJlY29yZCA9IHRoaXMuZ2V0KGlkKTsKLQotICAgICAgaWYgKHJlY29yZCkgewotICAgICAgICBy
ZWNvcmQgPSBleHRlbmQocmVjb3JkLCBkYXRhKTsKLSAgICAgICAgdGhpcy5zYXZlKHJlY29yZCk7
Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiByZWNvcmQ7Ci0gICAgfSwKLQotICAgIHVwZGF0ZUFs
bDogZnVuY3Rpb24gKGRhdGEpIHsKLSAgICAgIHZhciByZWNvcmRzID0gdGhpcy5hbGwoKTsKLQot
ICAgICAgcmVjb3Jkcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWNvcmQpIHsKLSAgICAgICAgcmVjb3Jk
ID0gZXh0ZW5kKHJlY29yZCwgZGF0YSk7Ci0gICAgICAgIHRoaXMuc2F2ZShyZWNvcmQpOwotICAg
ICAgfSwgdGhpcyk7Ci0KLSAgICAgIHJldHVybiByZWNvcmRzOwotICAgIH0sCi0KLSAgICBmaW5k
OiBmdW5jdGlvbiAoY3JpdGVyaWEpIHsKLSAgICAgIHZhciBrZXksIG1hdGNoLCByZWNvcmQ7Ci0g
ICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTsKLSAgICAgIHZhciBzZWxmID0gdGhpczsKLQotICAg
ICAgaWYgKCFjcml0ZXJpYSkgcmV0dXJuIHRoaXMuYWxsKCk7Ci0KLSAgICAgIHJldHVybiB0aGlz
Lmlkcy5yZWR1Y2UoZnVuY3Rpb24gKG1lbW8sIGlkKSB7Ci0gICAgICAgIHJlY29yZCA9IGpzb25E
YXRhKHNlbGYuc3RvcmFnZUFkYXB0b3IuZ2V0SXRlbShnZXRLZXkobmFtZSwgaWQpKSk7Ci0gICAg
ICAgIG1hdGNoID0gZmluZE1hdGNoKGNyaXRlcmlhLCByZWNvcmQpOwotCi0gICAgICAgIGlmICht
YXRjaCkgewotICAgICAgICAgIG1lbW8ucHVzaChyZWNvcmQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIG1lbW87Ci0gICAgICB9LCBbXSk7Ci0gICAgfSwKLQotICAgIGdldDogZnVuY3Rp
b24gKGlkKSB7Ci0gICAgICByZXR1cm4ganNvbkRhdGEodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJ
dGVtKGdldEtleSh0aGlzLm5hbWUsIGlkKSkpOwotICAgIH0sCi0KLSAgICBhbGw6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHZhciByZWNvcmQsIHNlbGYgPSB0aGlzLCBuYW1lID0gdGhpcy5uYW1lOwot
Ci0gICAgICByZXR1cm4gdGhpcy5pZHMucmVkdWNlKGZ1bmN0aW9uIChtZW1vLCBpZCkgewotICAg
ICAgICByZWNvcmQgPSBzZWxmLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oZ2V0S2V5KG5hbWUsIGlk
KSk7Ci0KLSAgICAgICAgaWYgKHJlY29yZCkgewotICAgICAgICAgIG1lbW8ucHVzaChqc29uRGF0
YShyZWNvcmQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtZW1vOwotICAgICAgfSwg
W10pOwotICAgIH0sCi0KLSAgICBkZXN0cm95OiBmdW5jdGlvbiAocmVjb3JkKSB7Ci0gICAgICB2
YXIgaW5kZXg7Ci0gICAgICB2YXIgaWQgPSAocmVjb3JkW3RoaXMuaWRBdHRyaWJ1dGVdKSA/IHJl
Y29yZFt0aGlzLmlkQXR0cmlidXRlXSA6IHJlY29yZDsKLSAgICAgIHZhciBrZXkgPSBnZXRLZXko
dGhpcy5uYW1lLCBpZCk7Ci0KLSAgICAgIHJlY29yZCA9IGpzb25EYXRhKHRoaXMuc3RvcmFnZUFk
YXB0b3IuZ2V0SXRlbShrZXkpKTsKLSAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRl
bShrZXkpOwotCi0gICAgICBpbmRleCA9IHRoaXMuaWRzLmluZGV4T2YoaWQpOwotICAgICAgaWYg
KGluZGV4ICE9IC0xKSB0aGlzLmlkcy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgdGhpcy5zdG9y
YWdlQWRhcHRvci5zZXRJdGVtKHRoaXMubmFtZSwgdGhpcy5pZHMuam9pbigiLCIpKTsKLQotICAg
ICAgcmV0dXJuIHJlY29yZDsKLSAgICB9LAotCi0gICAgZGVzdHJveUFsbDogZnVuY3Rpb24gKGNy
aXRlcmlhKSB7Ci0gICAgICB2YXIgYXR0ciwgaWQsIG1hdGNoLCByZWNvcmQsIGtleTsKLQotICAg
ICAgZm9yICh2YXIgaSA9IHRoaXMuaWRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAg
ICAgIGlkID0gdGhpcy5pZHNbaV07Ci0gICAgICAgIGtleSA9IGdldEtleSh0aGlzLm5hbWUsIGlk
KTsKLQotICAgICAgICBpZiAoY3JpdGVyaWEpIHsKLQotICAgICAgICAgIHJlY29yZCA9IGpzb25E
YXRhKHRoaXMuc3RvcmFnZUFkYXB0b3IuZ2V0SXRlbShrZXkpKTsKLSAgICAgICAgICBtYXRjaCA9
IGZpbmRNYXRjaChjcml0ZXJpYSwgcmVjb3JkKTsKLQotICAgICAgICAgIGlmIChtYXRjaCkgewot
ICAgICAgICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5yZW1vdmVJdGVtKGtleSk7Ci0gICAgICAg
ICAgICB0aGlzLmlkcy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5yZW1vdmVJdGVtKGtl
eSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGNyaXRlcmlhKSB7Ci0gICAgICAg
IHRoaXMuc3RvcmFnZUFkYXB0b3Iuc2V0SXRlbSh0aGlzLm5hbWUsIHRoaXMuaWRzLmpvaW4oIiwi
KSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5y
ZW1vdmVJdGVtKHRoaXMubmFtZSk7Ci0gICAgICAgIHRoaXMuaWRzID0gW107Ci0gICAgICB9Ci0g
ICAgfSwKLQotICAgIHNpemU6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiB0aGlzLmlkcy5s
ZW5ndGg7Ci0gICAgfQotICB9OwotCi0gIC8vIGhlbHBlcnMKLQotICBmdW5jdGlvbiBqc29uRGF0
YShkYXRhKSB7Ci0gICAgcmV0dXJuIGRhdGEgJiYgSlNPTi5wYXJzZShkYXRhKTsKLSAgfQotCi0g
IGZ1bmN0aW9uIGdldEtleShuYW1lLCBpZCkgewotICAgIHJldHVybiBuYW1lICsgIi0iICsgaWQ7
Ci0gIH0KLQotICBmdW5jdGlvbiBmaW5kTWF0Y2goY3JpdGVyaWEsIHJlY29yZCkgewotICAgIHZh
ciBtYXRjaCwgYXR0cjsKLQotICAgIGlmICh0eXBlb2YgY3JpdGVyaWEgPT0gJ2Z1bmN0aW9uJykg
ewotICAgICAgbWF0Y2ggPSBjcml0ZXJpYShyZWNvcmQpOwotICAgIH0KLSAgICBlbHNlIHsKLSAg
ICAgIG1hdGNoID0gdHJ1ZTsKLSAgICAgIGZvciAoYXR0ciBpbiBjcml0ZXJpYSkgewotICAgICAg
ICBtYXRjaCAmPSAoY3JpdGVyaWFbYXR0cl0gPT09IHJlY29yZFthdHRyXSk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1hdGNoOwotICB9Ci0KLSAgZnVuY3Rpb24gczQoKSB7Ci0gICAg
cmV0dXJuIE1hdGguZmxvb3IoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApCi0gICAgICAu
dG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGd1aWQoKSB7Ci0g
ICAgcmV0dXJuIHM0KCkgKyBzNCgpICsgJy0nICsgczQoKSArICctJyArIHM0KCkgKwotICAgICAg
Jy0nICtzNCgpICsgJy0nICsgczQoKSArIHM0KCkgKyBzNCgpOwotICB9Ci0KLSAgZnVuY3Rpb24g
ZXh0ZW5kKGRlc3QsIHNvdXJjZSkgewotICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKLSAg
ICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICBkZXN0W2tleV0g
PSBzb3VyY2Vba2V5XTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZGVzdDsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGRlcG90KG5hbWUsIG9wdGlvbnMpIHsKLSAgICB2YXIgc3RvcmUsIGlkczsK
LQotICAgIHZhciBkYXRhID0ge307Ci0gICAgdmFyIGxvY2FsU3RvcmFnZSA9IHsKLSAgICAgICAg
Z2V0SXRlbTogZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGF0YVtrZXldOyB9LAotICAgICAgICBz
ZXRJdGVtOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKCFkYXRhW2tl
eV0pCi0gICAgICAgICAgICAgICAgdGhpcy5sZW5ndGgrKzsKLSAgICAgICAgICAgIGRhdGFba2V5
XSA9IHZhbHVlOwotICAgICAgICB9LAotICAgICAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiAoa2V5
KSB7Ci0gICAgICAgICAgICBkZWxldGUgZGF0YVtrZXldOwotICAgICAgICAgICAgdGhpcy5sZW5n
dGgtLTsKLSAgICAgICAgfSwKLSAgICAgICAga2V5OiBmdW5jdGlvbiAoaW5kZXgpIHsKLSAgICAg
ICAgICAgIHZhciBpID0gMDsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGkgPT0gaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBrZXk7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICAgIH0sCi0gICAgICAgIGxlbmd0aDogMCwKLSAgICB9OwotCi0g
ICAgb3B0aW9ucyA9IGV4dGVuZCh7Ci0gICAgICBpZEF0dHJpYnV0ZTogJ19pZCcsCi0gICAgICBz
dG9yYWdlQWRhcHRvcjogbG9jYWxTdG9yYWdlCi0gICAgfSwgb3B0aW9ucyk7Ci0KLSAgICBpZiAo
IW9wdGlvbnMuc3RvcmFnZUFkYXB0b3IpIHRocm93IG5ldyBFcnJvcigiTm8gc3RvcmFnZSBhZGFw
dG9yIHdhcyBmb3VuZCIpOwotCi0gICAgc3RvcmUgPSBvcHRpb25zLnN0b3JhZ2VBZGFwdG9yLmdl
dEl0ZW0obmFtZSk7Ci0gICAgaWRzID0gKHN0b3JlICYmIHN0b3JlLnNwbGl0KCIsIikpIHx8IFtd
OwotCi0gICAgcmV0dXJuIE9iamVjdC5jcmVhdGUoYXBpLCB7Ci0gICAgICBuYW1lOiB7IHZhbHVl
OiBuYW1lIH0sCi0gICAgICBzdG9yZTogeyB2YWx1ZTogc3RvcmUgfSwKLSAgICAgIGlkczogeyB2
YWx1ZTogaWRzLCB3cml0YWJsZTogdHJ1ZSB9LAotICAgICAgaWRBdHRyaWJ1dGU6IHsgdmFsdWU6
IG9wdGlvbnMuaWRBdHRyaWJ1dGUgfSwKLSAgICAgIHN0b3JhZ2VBZGFwdG9yOiB7IHZhbHVlOiBv
cHRpb25zLnN0b3JhZ2VBZGFwdG9yIH0KLSAgICB9KTsKLSAgfQotCi0gIHJldHVybiBkZXBvdDsK
LX0pKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUt
c2hpbS9lczUtc2hhbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9lczUt
c2hpbS9lczUtc2hhbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFiNDZjYmMx
ZmE2MWY1Y2E0NDJmNGZkNWRjZDc2MDQxOTYxYmU5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMv
ZXM1LXNoaW0vZXM1LXNoYW0uanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjYgKzAsMCBAQAotLy8g
Q29weXJpZ2h0IDIwMDktMjAxMiBieSBjb250cmlidXRvcnMsIE1JVCBMaWNlbnNlCi0vLyB2aW06
IHRzPTQgc3RzPTQgc3c9NCBleHBhbmR0YWIKLQotLy8gTW9kdWxlIHN5c3RlbXMgbWFnaWMgZGFu
Y2UKLShmdW5jdGlvbiAoZGVmaW5pdGlvbikgewotICAgIC8vIFJlcXVpcmVKUwotICAgIGlmICh0
eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgZGVmaW5lKGRlZmluaXRpb24p
OwotICAgIC8vIFlVSTMKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBZVUkgPT0gImZ1bmN0aW9uIikg
ewotICAgICAgICBZVUkuYWRkKCJlczUtc2hhbSIsIGRlZmluaXRpb24pOwotICAgIC8vIENvbW1v
bkpTIGFuZCA8c2NyaXB0PgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlZmluaXRpb24oKTsKLSAg
ICB9Ci19KShmdW5jdGlvbiAoKSB7Ci0KLS8vIEVTNSAxNS4yLjMuMgotLy8gaHR0cDovL2VzNS5n
aXRodWIuY29tLyN4MTUuMi4zLjIKLWlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7Ci0gICAg
Ly8gaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMjaXNzdWUvMgot
ICAgIC8vIGh0dHA6Ly9lam9obi5vcmcvYmxvZy9vYmplY3RnZXRwcm90b3R5cGVvZi8KLSAgICAv
LyByZWNvbW1lbmRlZCBieSBmc2NoYWVmZXIgb24gZ2l0aHViCi0gICAgT2JqZWN0LmdldFByb3Rv
dHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSB7Ci0gICAgICAgIHJldHVy
biBvYmplY3QuX19wcm90b19fIHx8ICgKLSAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3Rvcgot
ICAgICAgICAgICAgICAgID8gb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZQotICAgICAgICAg
ICAgICAgIDogcHJvdG90eXBlT2ZPYmplY3QKLSAgICAgICAgKTsKLSAgICB9OwotfQotCi0vLyBF
UzUgMTUuMi4zLjMKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4zCi1pZiAoIU9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpIHsKLSAgICB2YXIgRVJSX05PTl9PQkpFQ1Qg
PSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSBub24tb2JqZWN0
OiAiOwotCi0gICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB7Ci0gICAgICAgIGlmICgo
dHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIp
IHx8IG9iamVjdCA9PT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihF
UlJfTk9OX09CSkVDVCArIG9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgb2JqZWN0
IGRvZXMgbm90IG93bnMgcHJvcGVydHkgcmV0dXJuIHVuZGVmaW5lZCBpbW1lZGlhdGVseS4KLSAg
ICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKSB7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBvYmplY3QgaGFzIGEgcHJvcGVydHkgdGhlbiBp
dCdzIGZvciBzdXJlIGJvdGggYGVudW1lcmFibGVgIGFuZAotICAgICAgICAvLyBgY29uZmlndXJh
YmxlYC4KLSAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25m
aWd1cmFibGU6IHRydWUgfTsKLQotICAgICAgICAvLyBJZiBKUyBlbmdpbmUgc3VwcG9ydHMgYWNj
ZXNzb3IgcHJvcGVydGllcyB0aGVuIHByb3BlcnR5IG1heSBiZSBhCi0gICAgICAgIC8vIGdldHRl
ciBvciBzZXR0ZXIuCi0gICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycykgewotICAgICAgICAg
ICAgLy8gVW5mb3J0dW5hdGVseSBgX19sb29rdXBHZXR0ZXJfX2Agd2lsbCByZXR1cm4gYSBnZXR0
ZXIgZXZlbgotICAgICAgICAgICAgLy8gaWYgb2JqZWN0IGhhcyBvd24gbm9uIGdldHRlciBwcm9w
ZXJ0eSBhbG9uZyB3aXRoIGEgc2FtZSBuYW1lZAotICAgICAgICAgICAgLy8gaW5oZXJpdGVkIGdl
dHRlci4gVG8gYXZvaWQgbWlzYmVoYXZpb3Igd2UgdGVtcG9yYXJ5IHJlbW92ZQotICAgICAgICAg
ICAgLy8gYF9fcHJvdG9fX2Agc28gdGhhdCBgX19sb29rdXBHZXR0ZXJfX2Agd2lsbCByZXR1cm4g
Z2V0dGVyIG9ubHkKLSAgICAgICAgICAgIC8vIGlmIGl0J3Mgb3duZWQgYnkgYW4gb2JqZWN0Lgot
ICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187Ci0gICAgICAgICAg
ICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7Ci0KLSAgICAgICAgICAgIHZh
ciBnZXR0ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB2
YXIgc2V0dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwotCi0gICAgICAgICAg
ICAvLyBPbmNlIHdlIGhhdmUgZ2V0dGVyIGFuZCBzZXR0ZXIgd2UgY2FuIHB1dCB2YWx1ZXMgYmFj
ay4KLSAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7Ci0KLSAgICAgICAg
ICAgIGlmIChnZXR0ZXIgfHwgc2V0dGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldHRlcikg
ewotICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHNldHRlcikgewotICAgICAgICAgICAgICAg
ICAgICBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgLy8gSWYgaXQgd2FzIGFjY2Vzc29yIHByb3BlcnR5IHdlJ3JlIGRvbmUgYW5kIHJl
dHVybiBoZXJlCi0gICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgYWRkaW5nIGB2
YWx1ZWAgdG8gdGhlIGRlc2NyaXB0b3IuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0
b3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBnb3QgdGhp
cyBmYXIgd2Uga25vdyB0aGF0IG9iamVjdCBoYXMgYW4gb3duIHByb3BlcnR5IHRoYXQgaXMKLSAg
ICAgICAgLy8gbm90IGFuIGFjY2Vzc29yIHNvIHdlIHNldCBpdCBhcyBhIHZhbHVlIGFuZCByZXR1
cm4gZGVzY3JpcHRvci4KLSAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IG9iamVjdFtwcm9wZXJ0
eV07Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS4y
LjMuNAotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjQKLWlmICghT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMpIHsKLSAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1
bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBPYmpl
Y3Qua2V5cyhvYmplY3QpOwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS4yLjMuNQotLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjUKLWlmICghT2JqZWN0LmNyZWF0ZSkgewotICAgIE9i
amVjdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7Ci0g
ICAgICAgIHZhciBvYmplY3Q7Ci0gICAgICAgIGlmIChwcm90b3R5cGUgPT09IG51bGwpIHsKLSAg
ICAgICAgICAgIG9iamVjdCA9IHsgIl9fcHJvdG9fXyI6IG51bGwgfTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlICE9ICJvYmplY3QiKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0eXBl
b2YgcHJvdG90eXBlKSsiXSAhPSAnb2JqZWN0JyIpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgdmFyIFR5cGUgPSBmdW5jdGlvbiAoKSB7fTsKLSAgICAgICAgICAgIFR5cGUucHJvdG90eXBl
ID0gcHJvdG90eXBlOwotICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKLSAgICAgICAg
ICAgIC8vIElFIGhhcyBubyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbiBvZiBgT2JqZWN0LmdldFBy
b3RvdHlwZU9mYAotICAgICAgICAgICAgLy8gbmVpdGhlciBgX19wcm90b19fYCwgYnV0IHRoaXMg
bWFudWFsbHkgc2V0dGluZyBgX19wcm90b19fYCB3aWxsCi0gICAgICAgICAgICAvLyBndWFyYW50
ZWUgdGhhdCBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQgd2l0
aAotICAgICAgICAgICAgLy8gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGBPYmplY3QuY3JlYXRlYAot
ICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAocHJvcGVydGllcyAhPT0gdm9pZCAwKSB7Ci0gICAgICAgICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBvYmplY3Q7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjIuMy42Ci0vLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3gxNS4yLjMuNgotCi0vLyBQYXRjaCBmb3IgV2ViS2l0IGFuZCBJRTggc3Rh
bmRhcmQgbW9kZQotLy8gRGVzaWduZWQgYnkgaGF4IDxoYXguZ2l0aHViLmNvbT4KLS8vIHJlbGF0
ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0vaXNzdWVzI2lz
c3VlLzUKLS8vIElFOCBSZWZlcmVuY2U6Ci0vLyAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNv
bS9lbi11cy9saWJyYXJ5L2RkMjgyOTAwLmFzcHgKLS8vICAgICBodHRwOi8vbXNkbi5taWNyb3Nv
ZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQyMjk5MTYuYXNweAotLy8gV2ViS2l0IEJ1Z3M6Ci0vLyAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDIzCi0KLWZ1bmN0
aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2JqZWN0KSB7Ci0gICAgdHJ5IHsKLSAgICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgInNlbnRpbmVsIiwge30pOwotICAgICAgICBy
ZXR1cm4gInNlbnRpbmVsIiBpbiBvYmplY3Q7Ci0gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0g
ICAgICAgIC8vIHJldHVybnMgZmFsc3kKLSAgICB9Ci19Ci0KLS8vIGNoZWNrIHdoZXRoZXIgZGVm
aW5lUHJvcGVydHkgd29ya3MgaWYgaXQncyBnaXZlbi4gT3RoZXJ3aXNlLAotLy8gc2hpbSBwYXJ0
aWFsbHkuCi1pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7Ci0gICAgdmFyIGRlZmluZVByb3Bl
cnR5V29ya3NPbk9iamVjdCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOwotICAgIHZhciBk
ZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIg
fHwKLSAgICAgICAgZG9lc0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKSk7Ci0gICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmlu
ZVByb3BlcnR5V29ya3NPbkRvbSkgewotICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFj
ayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKLSAgICB9Ci19Ci0KLWlmICghT2JqZWN0LmRlZmlu
ZVByb3BlcnR5IHx8IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKLSAgICB2YXIgRVJSX05PTl9P
QkpFQ1RfREVTQ1JJUFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVj
dDogIjsKLSAgICB2YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9w
ZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIgotICAgIHZhciBFUlJfQUNDRVNTT1JTX05PVF9T
VVBQT1JURUQgPSAiZ2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIgKwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVu
Z2luZSI7Ci0KLSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9w
ZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKSB7Ci0gICAgICAgIGlmICgodHlwZW9m
IG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9i
amVjdCA9PT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9O
X09CSkVDVF9UQVJHRVQgKyBvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgodHlwZW9m
IGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9u
IikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcihFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SICsgZGVzY3JpcHRvcik7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gbWFrZSBhIHZhbGlhbnQgYXR0ZW1wdCB0byB1c2UgdGhlIHJlYWwgZGVmaW5l
UHJvcGVydHkKLSAgICAgICAgLy8gZm9yIEk4J3MgRE9NIGVsZW1lbnRzLgotICAgICAgICBpZiAo
ZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBw
cm9wZXJ0eSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsK
LSAgICAgICAgICAgICAgICAvLyB0cnkgdGhlIHNoaW0gaWYgdGhlIHJlYWwgb25lIGRvZXNuJ3Qg
d29yawotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgaXQncyBhIGRh
dGEgcHJvcGVydHkuCi0gICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7Ci0g
ICAgICAgICAgICAvLyBmYWlsIHNpbGVudGx5IGlmICJ3cml0YWJsZSIsICJlbnVtZXJhYmxlIiwg
b3IgImNvbmZpZ3VyYWJsZSIKLSAgICAgICAgICAgIC8vIGFyZSByZXF1ZXN0ZWQgYnV0IG5vdCBz
dXBwb3J0ZWQKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAvLyBhbHRlcm5hdGUgYXBwcm9h
Y2g6Ci0gICAgICAgICAgICBpZiAoIC8vIGNhbid0IGltcGxlbWVudCB0aGVzZSBmZWF0dXJlczsg
YWxsb3cgZmFsc2UgYnV0IG5vdCB0cnVlCi0gICAgICAgICAgICAgICAgIShvd25zKGRlc2NyaXB0
b3IsICJ3cml0YWJsZSIpID8gZGVzY3JpcHRvci53cml0YWJsZSA6IHRydWUpIHx8Ci0gICAgICAg
ICAgICAgICAgIShvd25zKGRlc2NyaXB0b3IsICJlbnVtZXJhYmxlIikgPyBkZXNjcmlwdG9yLmVu
dW1lcmFibGUgOiB0cnVlKSB8fAotICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAi
Y29uZmlndXJhYmxlIikgPyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA6IHRydWUpCi0gICAgICAg
ICAgICApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCi0gICAgICAgICAg
ICAgICAgICAgICJUaGlzIGltcGxlbWVudGF0aW9uIG9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBk
b2VzIG5vdCAiICsKLSAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgY29uZmlndXJhYmxlLCBl
bnVtZXJhYmxlLCBvciB3cml0YWJsZS4iCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAg
ICovCi0KLSAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVy
KG9iamVjdCwgcHJvcGVydHkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgLy8gQXMgYWNjZXNzb3JzIGFyZSBzdXBwb3J0ZWQgb25seSBvbiBlbmdpbmVz
IGltcGxlbWVudGluZwotICAgICAgICAgICAgICAgIC8vIGBfX3Byb3RvX19gIHdlIGNhbiBzYWZl
bHkgb3ZlcnJpZGUgYF9fcHJvdG9fX2Agd2hpbGUgZGVmaW5pbmcKLSAgICAgICAgICAgICAgICAv
LyBhIHByb3BlcnR5IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGhpdCBhbiBpbmhlcml0ZWQK
LSAgICAgICAgICAgICAgICAvLyBhY2Nlc3Nvci4KLSAgICAgICAgICAgICAgICB2YXIgcHJvdG90
eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKLSAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19f
ID0gcHJvdG90eXBlT2ZPYmplY3Q7Ci0gICAgICAgICAgICAgICAgLy8gRGVsZXRpbmcgYSBwcm9w
ZXJ0eSBhbnl3YXkgc2luY2UgZ2V0dGVyIC8gc2V0dGVyIG1heSBiZQotICAgICAgICAgICAgICAg
IC8vIGRlZmluZWQgb24gb2JqZWN0IGl0c2VsZi4KLSAgICAgICAgICAgICAgICBkZWxldGUgb2Jq
ZWN0W3Byb3BlcnR5XTsKLSAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3Jp
cHRvci52YWx1ZTsKLSAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIG9yaWdpbmFsIGBfX3Byb3Rv
X19gIGJhY2sgbm93LgotICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5
cGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0
eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykgewotICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIC8vIElmIHdlIGdvdCB0aGF0IGZhciB0aGVuIGdldHRlcnMgYW5k
IHNldHRlcnMgY2FuIGJlIGRlZmluZWQgISEKLSAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0
b3IsICJnZXQiKSkgewotICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3Bl
cnR5LCBkZXNjcmlwdG9yLmdldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3du
cyhkZXNjcmlwdG9yLCAic2V0IikpIHsKLSAgICAgICAgICAgICAgICBkZWZpbmVTZXR0ZXIob2Jq
ZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5zZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjIuMy43Ci0v
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNwotaWYgKCFPYmplY3QuZGVmaW5lUHJv
cGVydGllcykgewotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5l
UHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsKLSAgICAgICAgZm9yICh2YXIgcHJvcGVy
dHkgaW4gcHJvcGVydGllcykgewotICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJv
cGVydHkpICYmIHByb3BlcnR5ICE9ICJfX3Byb3RvX18iKSB7Ci0gICAgICAgICAgICAgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHByb3BlcnRpZXNbcHJvcGVydHld
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAg
IH07Ci19Ci0KLS8vIEVTNSAxNS4yLjMuOAotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUu
Mi4zLjgKLWlmICghT2JqZWN0LnNlYWwpIHsKLSAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNl
YWwob2JqZWN0KSB7Ci0gICAgICAgIC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZl
YXR1cmUtZGV0ZWN0aW9uLCBidXQKLSAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUg
dG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29ya2luZwotICAgICAgICAvLyBidXQgaW5zZWN1
cmUgY29kZS4KLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUu
Mi4zLjkKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy45Ci1pZiAoIU9iamVjdC5m
cmVlemUpIHsKLSAgICBPYmplY3QuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewot
ICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcgYW5kIGJyZWFrcyBmZWF0dXJlLWRldGVjdGlv
biwgYnV0Ci0gICAgICAgIC8vIGFsbG93cyAic2VjdXJhYmxlIiBjb2RlIHRvICJncmFjZWZ1bGx5
IiBkZWdyYWRlIHRvIHdvcmtpbmcKLSAgICAgICAgLy8gYnV0IGluc2VjdXJlIGNvZGUuCi0gICAg
ICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfTsKLX0KLQotLy8gZGV0ZWN0IGEgUmhpbm8gYnVnIGFu
ZCBwYXRjaCBpdAotdHJ5IHsKLSAgICBPYmplY3QuZnJlZXplKGZ1bmN0aW9uICgpIHt9KTsKLX0g
Y2F0Y2ggKGV4Y2VwdGlvbikgewotICAgIE9iamVjdC5mcmVlemUgPSAoZnVuY3Rpb24gZnJlZXpl
KGZyZWV6ZU9iamVjdCkgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkg
ewotICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT0gImZ1bmN0aW9uIikgewotICAgICAg
ICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHJldHVybiBmcmVlemVPYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLSAgICB9KShPYmplY3QuZnJlZXplKTsKLX0KLQotLy8gRVM1IDE1LjIuMy4xMAotLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEwCi1pZiAoIU9iamVjdC5wcmV2ZW50RXh0
ZW5zaW9ucykgewotICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uIHByZXZl
bnRFeHRlbnNpb25zKG9iamVjdCkgewotICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcgYW5k
IGJyZWFrcyBmZWF0dXJlLWRldGVjdGlvbiwgYnV0Ci0gICAgICAgIC8vIGFsbG93cyAic2VjdXJh
YmxlIiBjb2RlIHRvICJncmFjZWZ1bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcKLSAgICAgICAgLy8g
YnV0IGluc2VjdXJlIGNvZGUuCi0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfTsKLX0KLQot
Ly8gRVM1IDE1LjIuMy4xMQotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjExCi1p
ZiAoIU9iamVjdC5pc1NlYWxlZCkgewotICAgIE9iamVjdC5pc1NlYWxlZCA9IGZ1bmN0aW9uIGlz
U2VhbGVkKG9iamVjdCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLX0KLQotLy8g
RVM1IDE1LjIuMy4xMgotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEyCi1pZiAo
IU9iamVjdC5pc0Zyb3plbikgewotICAgIE9iamVjdC5pc0Zyb3plbiA9IGZ1bmN0aW9uIGlzRnJv
emVuKG9iamVjdCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLX0KLQotLy8gRVM1
IDE1LjIuMy4xMwotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEzCi1pZiAoIU9i
amVjdC5pc0V4dGVuc2libGUpIHsKLSAgICBPYmplY3QuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24g
aXNFeHRlbnNpYmxlKG9iamVjdCkgewotICAgICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBP
YmplY3QgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgotICAgICAgICBpZiAoT2JqZWN0KG9i
amVjdCkgIT09IG9iamVjdCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAv
LyBUT0RPIG1lc3NhZ2UKLSAgICAgICAgfQotICAgICAgICAvLyAyLiBSZXR1cm4gdGhlIEJvb2xl
YW4gdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8uCi0g
ICAgICAgIHZhciBuYW1lID0gJyc7Ci0gICAgICAgIHdoaWxlIChvd25zKG9iamVjdCwgbmFtZSkp
IHsKLSAgICAgICAgICAgIG5hbWUgKz0gJz8nOwotICAgICAgICB9Ci0gICAgICAgIG9iamVjdFtu
YW1lXSA9IHRydWU7Ci0gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG93bnMob2JqZWN0LCBuYW1l
KTsKLSAgICAgICAgZGVsZXRlIG9iamVjdFtuYW1lXTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwotICAgIH07Ci19Ci0KLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dl
cl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dl
cl9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkNTkxOTdkYjQ1ZjY1M2IxODk2MGE4ZTgyMjQzMWExZjIyZWQzOTc2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5qcworKysgL2Rldi9udWxsCkBAIC0x
LDc3OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAwOS0yMDEyIGJ5IGNvbnRyaWJ1dG9ycywgTUlU
IExpY2Vuc2UKLS8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYgotCi0vLyBNb2R1bGUg
c3lzdGVtcyBtYWdpYyBkYW5jZQotKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7Ci0gICAgLy8gUmVx
dWlyZUpTCi0gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgewotICAgICAgICBk
ZWZpbmUoZGVmaW5pdGlvbik7Ci0gICAgLy8gWVVJMwotICAgIH0gZWxzZSBpZiAodHlwZW9mIFlV
SSA9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgIFlVSS5hZGQoImVzNSIsIGRlZmluaXRpb24pOwot
ICAgIC8vIENvbW1vbkpTIGFuZCA8c2NyaXB0PgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlZmlu
aXRpb24oKTsKLSAgICB9Ci19KShmdW5jdGlvbiAoKSB7Ci0KLS8qKgotICogQnJpbmdzIGFuIGVu
dmlyb25tZW50IGFzIGNsb3NlIHRvIEVDTUFTY3JpcHQgNSBjb21wbGlhbmNlCi0gKiBhcyBpcyBw
b3NzaWJsZSB3aXRoIHRoZSBmYWNpbGl0aWVzIG9mIGVyc3R3aGlsZSBlbmdpbmVzLgotICoKLSAq
IEFubm90YXRlZCBFUzU6IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8gKHNwZWNpZmljIGxpbmtzIGJl
bG93KQotICogRVM1IFNwZWM6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJs
aWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FY21hLTI2Mi5wZGYKLSAqIFJlcXVpcmVkIHJlYWRpbmc6
IGh0dHA6Ly9qYXZhc2NyaXB0d2VibG9nLndvcmRwcmVzcy5jb20vMjAxMS8xMi8wNS9leHRlbmRp
bmctamF2YXNjcmlwdC1uYXRpdmVzLwotICovCi0KLS8vCi0vLyBGdW5jdGlvbgotLy8gPT09PT09
PT0KLS8vCi0KLS8vIEVTLTUgMTUuMy40LjUKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1
LjMuNC41Ci0KLWlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKLSAgICBGdW5jdGlvbi5w
cm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKLSAg
ICAgICAgLy8gMS4gTGV0IFRhcmdldCBiZSB0aGUgdGhpcyB2YWx1ZS4KLSAgICAgICAgdmFyIHRh
cmdldCA9IHRoaXM7Ci0gICAgICAgIC8vIDIuIElmIElzQ2FsbGFibGUoVGFyZ2V0KSBpcyBmYWxz
ZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgotICAgICAgICBpZiAodHlwZW9mIHRhcmdl
dCAhPSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5j
dGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIDMuIExldCBBIGJlIGEgbmV3IChwb3NzaWJseSBlbXB0eSkg
aW50ZXJuYWwgbGlzdCBvZiBhbGwgb2YgdGhlCi0gICAgICAgIC8vICAgYXJndW1lbnQgdmFsdWVz
IHByb3ZpZGVkIGFmdGVyIHRoaXNBcmcgKGFyZzEsIGFyZzIgZXRjKSwgaW4gb3JkZXIuCi0gICAg
ICAgIC8vIFhYWCBzbGljZWRBcmdzIHdpbGwgc3RhbmQgaW4gZm9yICJBIiBpZiB1c2VkCi0gICAg
ICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNh
bGwKLSAgICAgICAgLy8gNC4gTGV0IEYgYmUgYSBuZXcgbmF0aXZlIEVDTUFTY3JpcHQgb2JqZWN0
LgotICAgICAgICAvLyAxMS4gU2V0IHRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5
IG9mIEYgdG8gdGhlIHN0YW5kYXJkCi0gICAgICAgIC8vICAgYnVpbHQtaW4gRnVuY3Rpb24gcHJv
dG90eXBlIG9iamVjdCBhcyBzcGVjaWZpZWQgaW4gMTUuMy4zLjEuCi0gICAgICAgIC8vIDEyLiBT
ZXQgdGhlIFtbQ2FsbF1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCi0g
ICAgICAgIC8vICAgMTUuMy40LjUuMS4KLSAgICAgICAgLy8gMTMuIFNldCB0aGUgW1tDb25zdHJ1
Y3RdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgotICAgICAgICAvLyAg
IDE1LjMuNC41LjIuCi0gICAgICAgIC8vIDE0LiBTZXQgdGhlIFtbSGFzSW5zdGFuY2VdXSBpbnRl
cm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgotICAgICAgICAvLyAgIDE1LjMuNC41
LjMuCi0gICAgICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uICgpIHsKLQotICAgICAgICAgICAgaWYg
KHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgewotICAgICAgICAgICAgICAgIC8vIDE1LjMuNC41LjIg
W1tDb25zdHJ1Y3RdXQotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ29uc3RydWN0XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIGEgZnVuY3Rpb24gb2JqZWN0LAotICAgICAgICAgICAgICAgIC8v
IEYgdGhhdCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0
aCBhCi0gICAgICAgICAgICAgICAgLy8gbGlzdCBvZiBhcmd1bWVudHMgRXh0cmFBcmdzLCB0aGUg
Zm9sbG93aW5nIHN0ZXBzIGFyZSB0YWtlbjoKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdGFy
Z2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dCi0gICAgICAgICAgICAg
ICAgLy8gICBpbnRlcm5hbCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAvLyAyLiBJZiB0YXJn
ZXQgaGFzIG5vIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9kLCBhCi0gICAgICAgICAgICAg
ICAgLy8gICBUeXBlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4KLSAgICAgICAgICAgICAgICAv
LyAzLiBMZXQgYm91bmRBcmdzIGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZEFyZ3NdXSBpbnRl
cm5hbAotICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCi0gICAgICAgICAgICAgICAgLy8g
NC4gTGV0IGFyZ3MgYmUgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyB0
aGUKLSAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVy
IGZvbGxvd2VkIGJ5IHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgLy8gICB2YWx1ZXMgYXMgdGhl
IGxpc3QgRXh0cmFBcmdzIGluIHRoZSBzYW1lIG9yZGVyLgotICAgICAgICAgICAgICAgIC8vIDUu
IFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwK
LSAgICAgICAgICAgICAgICAvLyAgIG1ldGhvZCBvZiB0YXJnZXQgcHJvdmlkaW5nIGFyZ3MgYXMg
dGhlIGFyZ3VtZW50cy4KLQotICAgICAgICAgICAgICAgIHZhciBGID0gZnVuY3Rpb24oKXt9Owot
ICAgICAgICAgICAgICAgIEYucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTsKLSAgICAgICAg
ICAgICAgICB2YXIgc2VsZiA9IG5ldyBGOwotCi0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IHRhcmdldC5hcHBseSgKLSAgICAgICAgICAgICAgICAgICAgc2VsZiwKLSAgICAgICAgICAgICAg
ICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQotICAgICAgICAgICAgICAg
ICk7Ci0gICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGY7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gMTUuMy40LjUuMSBbW0NhbGxdXQotICAgICAgICAgICAgICAgIC8vIFdoZW4g
dGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwgRiwKLSAg
ICAgICAgICAgICAgICAvLyB3aGljaCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlv
biBpcyBjYWxsZWQgd2l0aCBhCi0gICAgICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBhbmQgYSBs
aXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgICAgICAg
ICAvLyBzdGVwcyBhcmUgdGFrZW46Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IGJvdW5kQXJn
cyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwKLSAgICAgICAgICAg
ICAgICAvLyAgIHByb3BlcnR5LgotICAgICAgICAgICAgICAgIC8vIDIuIExldCBib3VuZFRoaXMg
YmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kVGhpc11dIGludGVybmFsCi0gICAgICAgICAgICAg
ICAgLy8gICBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdGFyZ2V0IGJlIHRo
ZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dIGludGVybmFsCi0gICAgICAgICAgICAg
ICAgLy8gICBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5l
dyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZQotICAgICAgICAgICAgICAg
IC8vICAgbGlzdCBib3VuZEFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIgZm9sbG93ZWQgYnkgdGhlIHNh
bWUKLSAgICAgICAgICAgICAgICAvLyAgIHZhbHVlcyBhcyB0aGUgbGlzdCBFeHRyYUFyZ3MgaW4g
dGhlIHNhbWUgb3JkZXIuCi0gICAgICAgICAgICAgICAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQg
b2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kCi0gICAgICAgICAgICAgICAg
Ly8gICBvZiB0YXJnZXQgcHJvdmlkaW5nIGJvdW5kVGhpcyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQK
LSAgICAgICAgICAgICAgICAvLyAgIHByb3ZpZGluZyBhcmdzIGFzIHRoZSBhcmd1bWVudHMuCi0K
LSAgICAgICAgICAgICAgICAvLyBlcXVpdjogdGFyZ2V0LmNhbGwodGhpcywgLi4uYm91bmRBcmdz
LCAuLi5hcmdzKQotICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoCi0gICAgICAg
ICAgICAgICAgICAgIHRoYXQsCi0gICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNl
LmNhbGwoYXJndW1lbnRzKSkKLSAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgfTsKLSAgICAgICAgLy8gWFhYIGJvdW5kLmxlbmd0aCBpcyBuZXZlciB3cml0YWJs
ZSwgc28gZG9uJ3QgZXZlbiB0cnkKLSAgICAgICAgLy8KLSAgICAgICAgLy8gMTUuIElmIHRoZSBb
W0NsYXNzXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgVGFyZ2V0IGlzICJGdW5jdGlvbiIsIHRoZW4K
LSAgICAgICAgLy8gICAgIGEuIExldCBMIGJlIHRoZSBsZW5ndGggcHJvcGVydHkgb2YgVGFyZ2V0
IG1pbnVzIHRoZSBsZW5ndGggb2YgQS4KLSAgICAgICAgLy8gICAgIGIuIFNldCB0aGUgbGVuZ3Ro
IG93biBwcm9wZXJ0eSBvZiBGIHRvIGVpdGhlciAwIG9yIEwsIHdoaWNoZXZlciBpcwotICAgICAg
ICAvLyAgICAgICBsYXJnZXIuCi0gICAgICAgIC8vIDE2LiBFbHNlIHNldCB0aGUgbGVuZ3RoIG93
biBwcm9wZXJ0eSBvZiBGIHRvIDAuCi0gICAgICAgIC8vIDE3LiBTZXQgdGhlIGF0dHJpYnV0ZXMg
b2YgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byB0aGUgdmFsdWVzCi0gICAgICAgIC8v
ICAgc3BlY2lmaWVkIGluIDE1LjMuNS4xLgotCi0gICAgICAgIC8vIFRPRE8KLSAgICAgICAgLy8g
MTguIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0cnVl
LgotCi0gICAgICAgIC8vIFRPRE8KLSAgICAgICAgLy8gMTkuIExldCB0aHJvd2VyIGJlIHRoZSBb
W1Rocm93VHlwZUVycm9yXV0gZnVuY3Rpb24gT2JqZWN0ICgxMy4yLjMpLgotICAgICAgICAvLyAy
MC4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBGIHdp
dGgKLSAgICAgICAgLy8gICBhcmd1bWVudHMgImNhbGxlciIsIFByb3BlcnR5RGVzY3JpcHRvciB7
W1tHZXRdXTogdGhyb3dlciwgW1tTZXRdXToKLSAgICAgICAgLy8gICB0aHJvd2VyLCBbW0VudW1l
cmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IGZhbHNlfSwgYW5kCi0gICAgICAgIC8v
ICAgZmFsc2UuCi0gICAgICAgIC8vIDIxLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aAotICAgICAgICAvLyAgIGFyZ3VtZW50cyAiYXJndW1l
bnRzIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLAotICAgICAgICAvLyAg
IFtbU2V0XV06IHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVd
XTogZmFsc2V9LAotICAgICAgICAvLyAgIGFuZCBmYWxzZS4KLQotICAgICAgICAvLyBUT0RPCi0g
ICAgICAgIC8vIE5PVEUgRnVuY3Rpb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIEZ1bmN0aW9uLnBy
b3RvdHlwZS5iaW5kIGRvIG5vdAotICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5
IG9yIHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJhbWV0ZXJzXV0sIGFuZAotICAgICAgICAvLyBb
W1Njb3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy4KLSAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0
ZSBwcm90b3R5cGUgaW4gcHVyZS1qcy4KLQotICAgICAgICAvLyAyMi4gUmV0dXJuIEYuCi0gICAg
ICAgIHJldHVybiBib3VuZDsKLSAgICB9OwotfQotCi0vLyBTaG9ydGN1dCB0byBhbiBvZnRlbiBh
Y2Nlc3NlZCBwcm9wZXJ0aWVzLCBpbiBvcmRlciB0byBhdm9pZCBtdWx0aXBsZQotLy8gZGVyZWZl
cmVuY2UgdGhhdCBjb3N0cyB1bml2ZXJzYWxseS4KLS8vIF9QbGVhc2Ugbm90ZTogU2hvcnRjdXRz
IGFyZSBkZWZpbmVkIGFmdGVyIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgYXMgd2UKLS8vIHVz
IGl0IGluIGRlZmluaW5nIHNob3J0Y3V0cy4KLXZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBl
LmNhbGw7Ci12YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKLXZhciBwcm90
b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7Ci12YXIgc2xpY2UgPSBwcm90b3R5cGVP
ZkFycmF5LnNsaWNlOwotLy8gSGF2aW5nIGEgdG9TdHJpbmcgbG9jYWwgdmFyaWFibGUgbmFtZSBi
cmVha3MgaW4gT3BlcmEgc28gdXNlIF90b1N0cmluZy4KLXZhciBfdG9TdHJpbmcgPSBjYWxsLmJp
bmQocHJvdG90eXBlT2ZPYmplY3QudG9TdHJpbmcpOwotdmFyIG93bnMgPSBjYWxsLmJpbmQocHJv
dG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpOwotCi0vLyBJZiBKUyBlbmdpbmUgc3VwcG9y
dHMgYWNjZXNzb3JzIGNyZWF0aW5nIHNob3J0Y3V0cy4KLXZhciBkZWZpbmVHZXR0ZXI7Ci12YXIg
ZGVmaW5lU2V0dGVyOwotdmFyIGxvb2t1cEdldHRlcjsKLXZhciBsb29rdXBTZXR0ZXI7Ci12YXIg
c3VwcG9ydHNBY2Nlc3NvcnM7Ci1pZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5
cGVPZk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKLSAgICBkZWZpbmVHZXR0ZXIgPSBj
YWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7Ci0gICAgZGVmaW5l
U2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOwot
ICAgIGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdl
dHRlcl9fKTsKLSAgICBsb29rdXBTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3Qu
X19sb29rdXBTZXR0ZXJfXyk7Ci19Ci0KLS8vCi0vLyBBcnJheQotLy8gPT09PT0KLS8vCi0KLS8v
IEVTNSAxNS40LjMuMgotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC4zLjIKLS8vIGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2Jh
bF9PYmplY3RzL0FycmF5L2lzQXJyYXkKLWlmICghQXJyYXkuaXNBcnJheSkgewotICAgIEFycmF5
LmlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KG9iaikgewotICAgICAgICByZXR1cm4gX3RvU3Ry
aW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsKLSAgICB9OwotfQotCi0vLyBUaGUgSXNDYWxs
YWJsZSgpIGNoZWNrIGluIHRoZSBBcnJheSBmdW5jdGlvbnMKLS8vIGhhcyBiZWVuIHJlcGxhY2Vk
IHdpdGggYSBzdHJpY3QgY2hlY2sgb24gdGhlCi0vLyBpbnRlcm5hbCBjbGFzcyBvZiB0aGUgb2Jq
ZWN0IHRvIHRyYXAgY2FzZXMgd2hlcmUKLS8vIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3YXMgYWN0
dWFsbHkgYSByZWd1bGFyCi0vLyBleHByZXNzaW9uIGxpdGVyYWwsIHdoaWNoIGluIFY4IGFuZAot
Ly8gSmF2YVNjcmlwdENvcmUgaXMgYSB0eXBlb2YgImZ1bmN0aW9uIi4gIE9ubHkgaW4KLS8vIFY4
IGFyZSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbHMgcGVybWl0dGVkIGFzCi0vLyByZWR1Y2Ug
cGFyYW1ldGVycywgc28gaXQgaXMgZGVzaXJhYmxlIGluIHRoZQotLy8gZ2VuZXJhbCBjYXNlIGZv
ciB0aGUgc2hpbSB0byBtYXRjaCB0aGUgbW9yZQotLy8gc3RyaWN0IGFuZCBjb21tb24gYmVoYXZp
b3Igb2YgcmVqZWN0aW5nIHJlZ3VsYXIKLS8vIGV4cHJlc3Npb25zLgotCi0vLyBFUzUgMTUuNC40
LjE4Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTgKLS8vIGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3Rz
L2FycmF5L2ZvckVhY2gKLWlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKLSAgICBBcnJh
eS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7
Ci0gICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCi0gICAgICAgICAgICB0aGlzcCA9
IGFyZ3VtZW50c1sxXSwKLSAgICAgICAgICAgIGkgPSAtMSwKLSAgICAgICAgICAgIGxlbmd0aCA9
IHNlbGYubGVuZ3RoID4+PiAwOwotCi0gICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9u
IG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCi0gICAgICAgIGlmIChf
dG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7Ci0gICAgICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQotICAgICAgICB9Ci0KLSAgICAgICAg
d2hpbGUgKCsraSA8IGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewotICAg
ICAgICAgICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBjYWxsLCBw
YXNzaW5nIGFyZ3VtZW50czoKLSAgICAgICAgICAgICAgICAvLyBjb250ZXh0LCBwcm9wZXJ0eSB2
YWx1ZSwgcHJvcGVydHkga2V5LCB0aGlzQXJnIG9iamVjdCBjb250ZXh0Ci0gICAgICAgICAgICAg
ICAgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfTsKLX0KLQotLy8gRVM1IDE1LjQuNC4xOQotLy8gaHR0cDovL2VzNS5naXRo
dWIuY29tLyN4MTUuNC40LjE5Ci0vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9D
b3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L21hcAotaWYgKCFBcnJh
eS5wcm90b3R5cGUubWFwKSB7Ci0gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1h
cChmdW4gLyosIHRoaXNwKi8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwK
LSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAotICAgICAgICAgICAgcmVz
dWx0ID0gQXJyYXkobGVuZ3RoKSwKLSAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwot
Ci0gICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5v
dCBhIGNhbGxhYmxlIGZ1bmN0aW9uCi0gICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29i
amVjdCBGdW5jdGlvbl0iKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biAr
ICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpIGluIHNlbGYpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfTsKLX0KLQotLy8gRVM1
IDE1LjQuNC4yMAotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIwCi0vLyBodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5j
ZS9PYmplY3RzL0FycmF5L2ZpbHRlcgotaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7Ci0g
ICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNw
ICovKSB7Ci0gICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCi0gICAgICAgICAgICBs
ZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKLSAgICAgICAgICAgIHJlc3VsdCA9IFtdLAotICAg
ICAgICAgICAgdmFsdWUsCi0gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKLQotICAg
ICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBj
YWxsYWJsZSBmdW5jdGlvbgotICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3Qg
RnVuY3Rpb25dIikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlz
IG5vdCBhIGZ1bmN0aW9uIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7Ci0gICAgICAg
ICAgICAgICAgdmFsdWUgPSBzZWxmW2ldOwotICAgICAgICAgICAgICAgIGlmIChmdW4uY2FsbCh0
aGlzcCwgdmFsdWUsIGksIHNlbGYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
KHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUuNC40LjE2Ci0vLyBo
dHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTYKLS8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2V2
ZXJ5Ci1pZiAoIUFycmF5LnByb3RvdHlwZS5ldmVyeSkgewotICAgIEFycmF5LnByb3RvdHlwZS5l
dmVyeSA9IGZ1bmN0aW9uIGV2ZXJ5KGZ1biAvKiwgdGhpc3AgKi8pIHsKLSAgICAgICAgdmFyIHNl
bGYgPSB0b09iamVjdCh0aGlzKSwKLSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+
PiAwLAotICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07Ci0KLSAgICAgICAgLy8gSWYg
bm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVu
Y3Rpb24KLSAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIp
IHsKLSAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5j
dGlvbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNl
bGZbaV0sIGksIHNlbGYpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci19Ci0KLS8v
IEVTNSAxNS40LjQuMTcKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNwotLy8g
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xv
YmFsX09iamVjdHMvQXJyYXkvc29tZQotaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgewotICAg
IEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7
Ci0gICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCi0gICAgICAgICAgICBsZW5ndGgg
PSBzZWxmLmxlbmd0aCA+Pj4gMCwKLSAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwot
Ci0gICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5v
dCBhIGNhbGxhYmxlIGZ1bmN0aW9uCi0gICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29i
amVjdCBGdW5jdGlvbl0iKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biAr
ICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVu
LmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH07Ci19Ci0KLS8vIEVTNSAxNS40LjQuMjEKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8j
eDE1LjQuNC4yMQotLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZh
U2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9yZWR1Y2UKLWlmICghQXJyYXkucHJv
dG90eXBlLnJlZHVjZSkgewotICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiBy
ZWR1Y2UoZnVuIC8qLCBpbml0aWFsKi8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0
aGlzKSwKLSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwotCi0gICAgICAg
IC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxh
YmxlIGZ1bmN0aW9uCi0gICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5j
dGlvbl0iKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90
IGEgZnVuY3Rpb24iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vIHZhbHVlIHRvIHJldHVy
biBpZiBubyBpbml0aWFsIHZhbHVlIGFuZCBhbiBlbXB0eSBhcnJheQotICAgICAgICBpZiAoIWxl
bmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoJ3JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZhciBpID0gMDsKLSAgICAgICAgdmFyIHJlc3VsdDsKLSAg
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgewotICAgICAgICAgICAgcmVzdWx0ID0g
YXJndW1lbnRzWzFdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZG8gewotICAgICAg
ICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
c2VsZltpKytdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGlu
aXRpYWwgdmFsdWUgdG8gcmV0dXJuCi0gICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgp
IHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVkdWNlIG9mIGVt
cHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICg7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBzZWxm
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfTsKLX0KLQotLy8gRVM1IDE1LjQuNC4yMgotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4
MTUuNC40LjIyCi0vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFT
Y3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVjZVJpZ2h0Ci1pZiAoIUFycmF5
LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgewotICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdo
dCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7Ci0gICAgICAgIHZh
ciBzZWxmID0gdG9PYmplY3QodGhpcyksCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0
aCA+Pj4gMDsKLQotICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxs
YmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgotICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1
bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBubyB2YWx1ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkKLSAg
ICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7Ci0gICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5v
IGluaXRpYWwgdmFsdWUnKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciByZXN1bHQsIGkgPSBs
ZW5ndGggLSAxOwotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7Ci0gICAgICAg
ICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmW2ktLV07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGlmIGFycmF5IGNvbnRhaW5zIG5v
IHZhbHVlcywgbm8gaW5pdGlhbCB2YWx1ZSB0byByZXR1cm4KLSAgICAgICAgICAgICAgICBpZiAo
LS1pIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1
Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChpIGluIHRoaXMpIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgc2VsZik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGktLSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9OwotfQotCi0vLyBFUzUgMTUuNC40LjE0Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3gxNS40LjQuMTQKLS8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFT
Y3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2luZGV4T2YKLWlmICghQXJyYXku
cHJvdG90eXBlLmluZGV4T2YpIHsKLSAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0
aW9uIGluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8gKSB7Ci0gICAgICAgIHZhciBzZWxm
ID0gdG9PYmplY3QodGhpcyksCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4g
MDsKLQotICAgICAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIGkgPSAwOwotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA+IDEpIHsKLSAgICAgICAgICAgIGkgPSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIGhhbmRsZSBuZWdhdGl2ZSBpbmRpY2VzCi0gICAgICAgIGkgPSBp
ID49IDAgPyBpIDogTWF0aC5tYXgoMCwgbGVuZ3RoICsgaSk7Ci0gICAgICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc2VsZltpXSA9PT0g
c291Z2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH07Ci19Ci0KLS8vIEVTNSAxNS40LjQuMTUK
LS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNQotLy8gaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJy
YXkvbGFzdEluZGV4T2YKLWlmICghQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSB7Ci0gICAg
QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0
IC8qLCBmcm9tSW5kZXggKi8pIHsKLSAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwK
LSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwotCi0gICAgICAgIGlmICgh
bGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgdmFy
IGkgPSBsZW5ndGggLSAxOwotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKLSAg
ICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMKLSAgICAgICAgaSA9IGkg
Pj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKLSAgICAgICAgZm9yICg7IGkgPj0gMDsg
aS0tKSB7Ci0gICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkg
ewotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAtMTsKLSAgICB9OwotfQotCi0vLwotLy8gT2JqZWN0Ci0vLyA9PT09PT0K
LS8vCi0KLS8vIEVTNSAxNS4yLjMuMTQKLS8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIu
My4xNAotaWYgKCFPYmplY3Qua2V5cykgewotICAgIC8vIGh0dHA6Ly93aGF0dGhlaGVhZHNhaWQu
Y29tLzIwMTAvMTAvYS1zYWZlci1vYmplY3Qta2V5cy1jb21wYXRpYmlsaXR5LWltcGxlbWVudGF0
aW9uCi0gICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKLSAgICAgICAgZG9udEVudW1zID0g
WwotICAgICAgICAgICAgInRvU3RyaW5nIiwKLSAgICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIs
Ci0gICAgICAgICAgICAidmFsdWVPZiIsCi0gICAgICAgICAgICAiaGFzT3duUHJvcGVydHkiLAot
ICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAotICAgICAgICAgICAgInByb3BlcnR5SXNFbnVt
ZXJhYmxlIiwKLSAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKLSAgICAgICAgXSwKLSAgICAgICAg
ZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsKLQotICAgIGZvciAodmFyIGtleSBp
biB7InRvU3RyaW5nIjogbnVsbH0pIHsKLSAgICAgICAgaGFzRG9udEVudW1CdWcgPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7Ci0KLSAg
ICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0g
ImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7Ci0gICAgICAg
IH0KLQotICAgICAgICB2YXIga2V5cyA9IFtdOwotICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9i
amVjdCkgewotICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgewotICAgICAgICAg
ICAgICAgIGtleXMucHVzaChuYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChoYXNEb250RW51bUJ1ZykgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlp
ID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgewotICAgICAgICAgICAgICAgIHZhciBk
b250RW51bSA9IGRvbnRFbnVtc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3Qs
IGRvbnRFbnVtKSkgewotICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1
cm4ga2V5czsKLSAgICB9OwotCi19Ci0KLS8vCi0vLyBEYXRlCi0vLyA9PT09Ci0vLwotCi0vLyBF
UzUgMTUuOS41LjQzCi0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjUuNDMKLS8vIFRo
aXMgZnVuY3Rpb24gcmV0dXJucyBhIFN0cmluZyB2YWx1ZSByZXByZXNlbnQgdGhlIGluc3RhbmNl
IGluIHRpbWUKLS8vIHJlcHJlc2VudGVkIGJ5IHRoaXMgRGF0ZSBvYmplY3QuIFRoZSBmb3JtYXQg
b2YgdGhlIFN0cmluZyBpcyB0aGUgRGF0ZSBUaW1lCi0vLyBzdHJpbmcgZm9ybWF0IGRlZmluZWQg
aW4gMTUuOS4xLjE1LiBBbGwgZmllbGRzIGFyZSBwcmVzZW50IGluIHRoZSBTdHJpbmcuCi0vLyBU
aGUgdGltZSB6b25lIGlzIGFsd2F5cyBVVEMsIGRlbm90ZWQgYnkgdGhlIHN1ZmZpeCBaLiBJZiB0
aGUgdGltZSB2YWx1ZSBvZgotLy8gdGhpcyBvYmplY3QgaXMgbm90IGEgZmluaXRlIE51bWJlciBh
IFJhbmdlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4KLWlmICghRGF0ZS5wcm90b3R5cGUudG9J
U09TdHJpbmcgfHwgKG5ldyBEYXRlKC02MjE5ODc1NTIwMDAwMCkudG9JU09TdHJpbmcoKS5pbmRl
eE9mKCctMDAwMDAxJykgPT09IC0xKSkgewotICAgIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5n
ID0gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7Ci0gICAgICAgIHZhciByZXN1bHQsIGxlbmd0aCwg
dmFsdWUsIHllYXI7Ci0gICAgICAgIGlmICghaXNGaW5pdGUodGhpcykpIHsKLSAgICAgICAgICAg
IHRocm93IG5ldyBSYW5nZUVycm9yKCJEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyBjYWxsZWQg
b24gbm9uLWZpbml0ZSB2YWx1ZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBkYXRl
IHRpbWUgc3RyaW5nIGZvcm1hdCBpcyBzcGVjaWZpZWQgaW4gMTUuOS4xLjE1LgotICAgICAgICBy
ZXN1bHQgPSBbdGhpcy5nZXRVVENNb250aCgpICsgMSwgdGhpcy5nZXRVVENEYXRlKCksCi0gICAg
ICAgICAgICB0aGlzLmdldFVUQ0hvdXJzKCksIHRoaXMuZ2V0VVRDTWludXRlcygpLCB0aGlzLmdl
dFVUQ1NlY29uZHMoKV07Ci0gICAgICAgIHllYXIgPSB0aGlzLmdldFVUQ0Z1bGxZZWFyKCk7Ci0g
ICAgICAgIHllYXIgPSAoeWVhciA8IDAgPyAnLScgOiAoeWVhciA+IDk5OTkgPyAnKycgOiAnJykp
ICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5ZWFyKSkuc2xpY2UoMCA8PSB5ZWFyICYmIHllYXIgPD0g
OTk5OSA/IC00IDogLTYpOwotCi0gICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7Ci0gICAg
ICAgIHdoaWxlIChsZW5ndGgtLSkgewotICAgICAgICAgICAgdmFsdWUgPSByZXN1bHRbbGVuZ3Ro
XTsKLSAgICAgICAgICAgIC8vIHBhZCBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQg
c2Vjb25kcyB0byBoYXZlIHR3byBkaWdpdHMuCi0gICAgICAgICAgICBpZiAodmFsdWUgPCAxMCkg
ewotICAgICAgICAgICAgICAgIHJlc3VsdFtsZW5ndGhdID0gIjAiICsgdmFsdWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gcGFkIG1pbGxpc2Vjb25kcyB0byBoYXZlIHRo
cmVlIGRpZ2l0cy4KLSAgICAgICAgcmV0dXJuIHllYXIgKyAiLSIgKyByZXN1bHQuc2xpY2UoMCwg
Mikuam9pbigiLSIpICsgIlQiICsgcmVzdWx0LnNsaWNlKDIpLmpvaW4oIjoiKSArICIuIiArCi0g
ICAgICAgICAgICAoIjAwMCIgKyB0aGlzLmdldFVUQ01pbGxpc2Vjb25kcygpKS5zbGljZSgtMykg
KyAiWiI7Ci0gICAgfQotfQotCi0vLyBFUzUgMTUuOS40LjQKLS8vIGh0dHA6Ly9lczUuZ2l0aHVi
LmNvbS8jeDE1LjkuNC40Ci1pZiAoIURhdGUubm93KSB7Ci0gICAgRGF0ZS5ub3cgPSBmdW5jdGlv
biBub3coKSB7Ci0gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKLSAgICB9Owot
fQotCi0vLyBFUzUgMTUuOS41LjQ0Ci0vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjUu
NDQKLS8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yg
YSBEYXRlIG9iamVjdCBmb3IgdXNlIGJ5Ci0vLyBKU09OLnN0cmluZ2lmeSAoMTUuMTIuMykuCi1p
ZiAoIURhdGUucHJvdG90eXBlLnRvSlNPTikgewotICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9
IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHsKLSAgICAgICAgLy8gV2hlbiB0aGUgdG9KU09OIG1ldGhv
ZCBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudCBrZXksIHRoZSBmb2xsb3dpbmcKLSAgICAgICAgLy8g
c3RlcHMgYXJlIHRha2VuOgotCi0gICAgICAgIC8vIDEuICBMZXQgTyBiZSB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgVG9PYmplY3QsIGdpdmluZyBpdCB0aGUgdGhpcwotICAgICAgICAvLyB2YWx1ZSBh
cyBpdHMgYXJndW1lbnQuCi0gICAgICAgIC8vIDIuIExldCB0diBiZSBUb1ByaW1pdGl2ZShPLCBo
aW50IE51bWJlcikuCi0gICAgICAgIC8vIDMuIElmIHR2IGlzIGEgTnVtYmVyIGFuZCBpcyBub3Qg
ZmluaXRlLCByZXR1cm4gbnVsbC4KLSAgICAgICAgLy8gWFhYCi0gICAgICAgIC8vIDQuIExldCB0
b0lTTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9k
IG9mCi0gICAgICAgIC8vIE8gd2l0aCBhcmd1bWVudCAidG9JU09TdHJpbmciLgotICAgICAgICAv
LyA1LiBJZiBJc0NhbGxhYmxlKHRvSVNPKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhj
ZXB0aW9uLgotICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9JU09TdHJpbmcgIT0gImZ1bmN0aW9u
IikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndG9JU09TdHJpbmcgcHJvcGVy
dHkgaXMgbm90IGNhbGxhYmxlJyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCi0gICAg
ICAgIC8vICB0b0lTTyB3aXRoIE8gYXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFuIGVtcHR5IGFyZ3Vt
ZW50IGxpc3QuCi0gICAgICAgIHJldHVybiB0aGlzLnRvSVNPU3RyaW5nKCk7Ci0KLSAgICAgICAg
Ly8gTk9URSAxIFRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLgotCi0gICAgICAgIC8vIE5PVEUgMiBU
aGUgdG9KU09OIGZ1bmN0aW9uIGlzIGludGVudGlvbmFsbHkgZ2VuZXJpYzsgaXQgZG9lcyBub3QK
LSAgICAgICAgLy8gcmVxdWlyZSB0aGF0IGl0cyB0aGlzIHZhbHVlIGJlIGEgRGF0ZSBvYmplY3Qu
IFRoZXJlZm9yZSwgaXQgY2FuIGJlCi0gICAgICAgIC8vIHRyYW5zZmVycmVkIHRvIG90aGVyIGtp
bmRzIG9mIG9iamVjdHMgZm9yIHVzZSBhcyBhIG1ldGhvZC4gSG93ZXZlciwKLSAgICAgICAgLy8g
aXQgZG9lcyByZXF1aXJlIHRoYXQgYW55IHN1Y2ggb2JqZWN0IGhhdmUgYSB0b0lTT1N0cmluZyBt
ZXRob2QuIEFuCi0gICAgICAgIC8vIG9iamVjdCBpcyBmcmVlIHRvIHVzZSB0aGUgYXJndW1lbnQg
a2V5IHRvIGZpbHRlciBpdHMKLSAgICAgICAgLy8gc3RyaW5naWZpY2F0aW9uLgotICAgIH07Ci19
Ci0KLS8vIEVTNSAxNS45LjQuMgotLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjIK
LS8vIGJhc2VkIG9uIHdvcmsgc2hhcmVkIGJ5IERhbmllbCBGcmllc2VuIChkYW50bWFuKQotLy8g
aHR0cDovL2dpc3QuZ2l0aHViLmNvbS8zMDMyNDkKLWlmICghRGF0ZS5wYXJzZSB8fCBEYXRlLnBh
cnNlKCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFoiKSAhPT0gOC42NGUxNSkgewotICAgIC8v
IFhYWCBnbG9iYWwgYXNzaWdubWVudCB3b24ndCB3b3JrIGluIGVtYmVkZGluZ3MgdGhhdCB1c2UK
LSAgICAvLyBhbiBhbHRlcm5hdGUgb2JqZWN0IGZvciB0aGUgY29udGV4dC4KLSAgICBEYXRlID0g
KGZ1bmN0aW9uKE5hdGl2ZURhdGUpIHsKLQotICAgICAgICAvLyBEYXRlLmxlbmd0aCA9PT0gNwot
ICAgICAgICB2YXIgRGF0ZSA9IGZ1bmN0aW9uIERhdGUoWSwgTSwgRCwgaCwgbSwgcywgbXMpIHsK
LSAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAg
aWYgKHRoaXMgaW5zdGFuY2VvZiBOYXRpdmVEYXRlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRh
dGUgPSBsZW5ndGggPT0gMSAmJiBTdHJpbmcoWSkgPT09IFkgPyAvLyBpc1N0cmluZyhZKQotICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBleHBsaWNpdGx5IHBhc3MgaXQgdGhyb3VnaCBwYXJzZToK
LSAgICAgICAgICAgICAgICAgICAgbmV3IE5hdGl2ZURhdGUoRGF0ZS5wYXJzZShZKSkgOgotICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIG1hbnVhbGx5IG1ha2UgY2FsbHMgZGVwZW5k
aW5nIG9uIGFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBoZXJlCi0gICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA3ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwg
bSwgcywgbXMpIDoKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDYgPyBuZXcgTmF0aXZl
RGF0ZShZLCBNLCBELCBoLCBtLCBzKSA6Ci0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA1
ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwgbSkgOgotICAgICAgICAgICAgICAgICAgICBs
ZW5ndGggPj0gNCA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgpIDoKLSAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoID49IDMgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBEKSA6Ci0gICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCA+PSAyID8gbmV3IE5hdGl2ZURhdGUoWSwgTSkgOgotICAgICAgICAg
ICAgICAgICAgICBsZW5ndGggPj0gMSA/IG5ldyBOYXRpdmVEYXRlKFkpIDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZSgpOwotICAgICAgICAgICAgICAg
IC8vIFByZXZlbnQgbWl4dXBzIHdpdGggdW5maXhlZCBEYXRlIG9iamVjdAotICAgICAgICAgICAg
ICAgIGRhdGUuY29uc3RydWN0b3IgPSBEYXRlOwotICAgICAgICAgICAgICAgIHJldHVybiBkYXRl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyAxNS45LjEuMTUgRGF0ZSBU
aW1lIFN0cmluZyBGb3JtYXQuCi0gICAgICAgIHZhciBpc29EYXRlRXhwcmVzc2lvbiA9IG5ldyBS
ZWdFeHAoIl4iICsKLSAgICAgICAgICAgICIoXFxkezR9fFtcK1wtXVxcZHs2fSkiICsgLy8gZm91
ci1kaWdpdCB5ZWFyIGNhcHR1cmUgb3Igc2lnbiArIDYtZGlnaXQgZXh0ZW5kZWQgeWVhcgotICAg
ICAgICAgICAgIig/Oi0oXFxkezJ9KSIgKyAvLyBvcHRpb25hbCBtb250aCBjYXB0dXJlCi0gICAg
ICAgICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIGRheSBjYXB0dXJlCi0gICAgICAg
ICAgICAiKD86IiArIC8vIGNhcHR1cmUgaG91cnM6bWludXRlczpzZWNvbmRzLm1pbGxpc2Vjb25k
cwotICAgICAgICAgICAgICAgICJUKFxcZHsyfSkiICsgLy8gaG91cnMgY2FwdHVyZQotICAgICAg
ICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBjYXB0dXJlCi0gICAgICAgICAgICAg
ICAgIig/OiIgKyAvLyBvcHRpb25hbCA6c2Vjb25kcy5taWxsaXNlY29uZHMKLSAgICAgICAgICAg
ICAgICAgICAgIjooXFxkezJ9KSIgKyAvLyBzZWNvbmRzIGNhcHR1cmUKLSAgICAgICAgICAgICAg
ICAgICAgIig/OlxcLihcXGR7M30pKT8iICsgLy8gbWlsbGlzZWNvbmRzIGNhcHR1cmUKLSAgICAg
ICAgICAgICAgICAiKT8iICsKLSAgICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVyZSBVVEMgb2Zm
c2V0IGNvbXBvbmVudAotICAgICAgICAgICAgICAgICJafCIgKyAvLyBVVEMgY2FwdHVyZQotICAg
ICAgICAgICAgICAgICIoPzoiICsgLy8gb2Zmc2V0IHNwZWNpZmllciArLy1ob3VyczptaW51dGVz
Ci0gICAgICAgICAgICAgICAgICAgICIoWy0rXSkiICsgLy8gc2lnbiBjYXB0dXJlCi0gICAgICAg
ICAgICAgICAgICAgICIoXFxkezJ9KSIgKyAvLyBob3VycyBvZmZzZXQgY2FwdHVyZQotICAgICAg
ICAgICAgICAgICAgICAiOihcXGR7Mn0pIiArIC8vIG1pbnV0ZXMgb2Zmc2V0IGNhcHR1cmUKLSAg
ICAgICAgICAgICAgICAiKSIgKwotICAgICAgICAgICAgIik/KT8pPyk/IiArCi0gICAgICAgICIk
Iik7Ci0KLSAgICAgICAgLy8gQ29weSBhbnkgY3VzdG9tIG1ldGhvZHMgYSAzcmQgcGFydHkgbGli
cmFyeSBtYXkgaGF2ZSBhZGRlZAotICAgICAgICBmb3IgKHZhciBrZXkgaW4gTmF0aXZlRGF0ZSkg
ewotICAgICAgICAgICAgRGF0ZVtrZXldID0gTmF0aXZlRGF0ZVtrZXldOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gQ29weSAibmF0aXZlIiBtZXRob2RzIGV4cGxpY2l0bHk7IHRoZXkgbWF5IGJl
IG5vbi1lbnVtZXJhYmxlCi0gICAgICAgIERhdGUubm93ID0gTmF0aXZlRGF0ZS5ub3c7Ci0gICAg
ICAgIERhdGUuVVRDID0gTmF0aXZlRGF0ZS5VVEM7Ci0gICAgICAgIERhdGUucHJvdG90eXBlID0g
TmF0aXZlRGF0ZS5wcm90b3R5cGU7Ci0gICAgICAgIERhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0gRGF0ZTsKLQotICAgICAgICAvLyBVcGdyYWRlIERhdGUucGFyc2UgdG8gaGFuZGxlIHNpbXBs
aWZpZWQgSVNPIDg2MDEgc3RyaW5ncwotICAgICAgICBEYXRlLnBhcnNlID0gZnVuY3Rpb24gcGFy
c2Uoc3RyaW5nKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2ggPSBpc29EYXRlRXhwcmVzc2lvbi5l
eGVjKHN0cmluZyk7Ci0gICAgICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICBt
YXRjaC5zaGlmdCgpOyAvLyBraWxsIG1hdGNoWzBdLCB0aGUgZnVsbCBtYXRjaAotICAgICAgICAg
ICAgICAgIC8vIHBhcnNlIG1vbnRocywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFu
ZCBtaWxsaXNlY29uZHMKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDc7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICAvLyBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGlmIG5l
Y2Vzc2FyeQotICAgICAgICAgICAgICAgICAgICBtYXRjaFtpXSA9ICsobWF0Y2hbaV0gfHwgKGkg
PCAzID8gMSA6IDApKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMV0gaXMgdGhlIG1v
bnRoLiBNb250aHMgYXJlIDAtMTEgaW4gSmF2YVNjcmlwdAotICAgICAgICAgICAgICAgICAgICAv
LyBgRGF0ZWAgb2JqZWN0cywgYnV0IDEtMTIgaW4gSVNPIG5vdGF0aW9uLCBzbyB3ZQotICAgICAg
ICAgICAgICAgICAgICAvLyBkZWNyZW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChpID09
IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoW2ldLS07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBwYXJzZSB0
aGUgVVRDIG9mZnNldCBjb21wb25lbnQKLSAgICAgICAgICAgICAgICB2YXIgbWludXRlT2Zmc2V0
ID0gK21hdGNoLnBvcCgpLCBob3VyT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBzaWduID0gbWF0Y2gu
cG9wKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBleHBsaWNpdCB0aW1lIHpv
bmUgb2Zmc2V0IGlmIHNwZWNpZmllZAotICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwOwot
ICAgICAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRldGVj
dCBpbnZhbGlkIG9mZnNldHMgYW5kIHJldHVybiBlYXJseQotICAgICAgICAgICAgICAgICAgICBp
ZiAoaG91ck9mZnNldCA+IDIzIHx8IG1pbnV0ZU9mZnNldCA+IDU5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTmFOOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gZXhwcmVzcyB0aGUgcHJvdmlkZWQgdGltZSB6b25lIG9mZnNldCBpbiBt
aW51dGVzLiBUaGUgb2Zmc2V0IGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIGZv
ciB0aW1lIHpvbmVzIHdlc3Qgb2YgVVRDOyBwb3NpdGl2ZSBvdGhlcndpc2UuCi0gICAgICAgICAg
ICAgICAgICAgIG9mZnNldCA9IChob3VyT2Zmc2V0ICogNjAgKyBtaW51dGVPZmZzZXQpICogNmU0
ICogKHNpZ24gPT0gIisiID8gLTEgOiAxKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBEYXRlLlVUQyBmb3IgeWVhcnMgYmV0d2VlbiAwIGFuZCA5OSBjb252ZXJ0cyB5
ZWFyIHRvIDE5MDAgKyB5ZWFyCi0gICAgICAgICAgICAgICAgLy8gVGhlIEdyZWdvcmlhbiBjYWxl
bmRhciBoYXMgYSA0MDAteWVhciBjeWNsZSwgc28KLSAgICAgICAgICAgICAgICAvLyB0byBEYXRl
LlVUQyh5ZWFyICsgNDAwLCAuLi4uICkgLSAxMjYyMjc4MDgwMDAwMCA9PSBEYXRlLlVUQyh5ZWFy
LCAuLi4pLAotICAgICAgICAgICAgICAgIC8vIHdoZXJlIDEyNjIyNzgwODAwMDAwIC0gbnVtYmVy
IG9mIG1pbGxpc2Vjb25kcyBpbiBHcmVnb3JpYW4gY2FsZW5kYXIgNDAwIHllYXJzCi0gICAgICAg
ICAgICAgICAgdmFyIHllYXIgPSArbWF0Y2hbMF07Ci0gICAgICAgICAgICAgICAgaWYgKDAgPD0g
eWVhciAmJiB5ZWFyIDw9IDk5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0geWVh
ciArIDQwMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuVVRDLmFwcGx5
KHRoaXMsIG1hdGNoKSArIG9mZnNldCAtIDEyNjIyNzgwODAwMDAwOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgYSBuZXcgVVRDIGRhdGUgdmFsdWUsIGFj
Y291bnRpbmcgZm9yIHRoZSBvcHRpb25hbCBvZmZzZXQKLSAgICAgICAgICAgICAgICByZXR1cm4g
TmF0aXZlRGF0ZS5VVEMuYXBwbHkodGhpcywgbWF0Y2gpICsgb2Zmc2V0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKLSAgICAgICAgfTsKLQotICAgICAgICByZXR1cm4gRGF0ZTsKLSAgICB9KShEYXRlKTsK
LX0KLQotLy8KLS8vIFN0cmluZwotLy8gPT09PT09Ci0vLwotCi0vLyBFUzUgMTUuNS40LjIwCi0v
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMjAKLXZhciB3cyA9ICJceDA5XHgwQVx4
MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiAr
Ci0gICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1
MjA1Rlx1MzAwMFx1MjAyOCIgKwotICAgICJcdTIwMjlcdUZFRkYiOwotaWYgKCFTdHJpbmcucHJv
dG90eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7Ci0gICAgLy8gaHR0cDovL2Jsb2cuc3RldmVubGV2
aXRoYW4uY29tL2FyY2hpdmVzL2Zhc3Rlci10cmltLWphdmFzY3JpcHQKLSAgICAvLyBodHRwOi8v
cGVyZmVjdGlvbmtpbGxzLmNvbS93aGl0ZXNwYWNlLWRldmlhdGlvbnMvCi0gICAgd3MgPSAiWyIg
KyB3cyArICJdIjsKLSAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3
cyArIHdzICsgIioiKSwKLSAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3
cyArICIqJCIpOwotICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7
Ci0gICAgICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQgfHwgdGhpcyA9PT0gbnVsbCkgewotICAg
ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK3RoaXMrIiB0byBv
YmplY3QiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2Uo
dHJpbUJlZ2luUmVnZXhwLCAiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7Ci0gICAgfTsK
LX0KLQotLy8KLS8vIFV0aWwKLS8vID09PT09PQotLy8KLQotLy8gRVM1IDkuNAotLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4OS40Ci0vLyBodHRwOi8vanNwZXJmLmNvbS90by1pbnRlZ2VyCi12
YXIgdG9JbnRlZ2VyID0gZnVuY3Rpb24gKG4pIHsKLSAgICBuID0gK247Ci0gICAgaWYgKG4gIT09
IG4pIHsgLy8gaXNOYU4KLSAgICAgICAgbiA9IDA7Ci0gICAgfSBlbHNlIGlmIChuICE9PSAwICYm
IG4gIT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgewotICAgICAgICBuID0gKG4gPiAwIHx8IC0x
KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOwotICAgIH0KLSAgICByZXR1cm4gbjsKLX07Ci0K
LXZhciBwcmVwYXJlU3RyaW5nID0gImEiWzBdICE9ICJhIjsKLSAgICAvLyBFUzUgOS45Ci0gICAg
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4OS45Ci12YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAo
bykgewotICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQg
dW5kZWZpbmVkCi0gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitv
KyIgdG8gb2JqZWN0Iik7Ci0gICAgfQotICAgIC8vIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vz
bid0IHN1cHBvcnQgYnktaW5kZXggYWNjZXNzIG9mCi0gICAgLy8gc3RyaW5nIGNoYXJhY3RlcnMg
KGV4LiBJRSA8IDkpLCBzcGxpdCB0aGUgc3RyaW5nCi0gICAgaWYgKHByZXBhcmVTdHJpbmcgJiYg
dHlwZW9mIG8gPT0gInN0cmluZyIgJiYgbykgewotICAgICAgICByZXR1cm4gby5zcGxpdCgiIik7
Ci0gICAgfQotICAgIHJldHVybiBPYmplY3Qobyk7Ci19OwotCi19KTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2FkdmljZS5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2FkdmljZS5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4YzM0MDZlNWY2ODIzMzY5ZTQ3OGM1OTZiMWU0
OTMxMDcyNzEwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9hZHZpY2UuanMK
KysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYwotLy8g
TGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCi0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvTUlUCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotZGVmaW5lKAotCi0gIFsKLSAgICAnLi9jb21wb3NlJwotICBdLAotCi0gIGZ1bmN0aW9u
KGNvbXBvc2UpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICB2YXIgYWR2aWNlID0gewotCi0g
ICAgICBhcm91bmQ6IGZ1bmN0aW9uKGJhc2UsIHdyYXBwZWQpIHsKLSAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIGNvbXBvc2VkQXJvdW5kKCkgewotICAgICAgICAgIC8vIHVucGFja2luZyBhcmd1bWVu
dHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKLSAgICAgICAgICB2YXIgaSA9IDAsIGwgPSBh
cmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KGwgKyAxKTsKLSAgICAgICAgICBhcmdz
WzBdID0gYmFzZS5iaW5kKHRoaXMpOwotICAgICAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSBhcmdz
W2kgKyAxXSA9IGFyZ3VtZW50c1tpXTsKLQotICAgICAgICAgIHJldHVybiB3cmFwcGVkLmFwcGx5
KHRoaXMsIGFyZ3MpOwotICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgYmVmb3JlOiBmdW5j
dGlvbihiYXNlLCBiZWZvcmUpIHsKLSAgICAgICAgdmFyIGJlZm9yZUZuID0gKHR5cGVvZiBiZWZv
cmUgPT0gJ2Z1bmN0aW9uJykgPyBiZWZvcmUgOiBiZWZvcmUub2JqW2JlZm9yZS5mbk5hbWVdOwot
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29tcG9zZWRCZWZvcmUoKSB7Ci0gICAgICAgICAgYmVm
b3JlRm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICByZXR1cm4gYmFzZS5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgYWZ0ZXI6
IGZ1bmN0aW9uKGJhc2UsIGFmdGVyKSB7Ci0gICAgICAgIHZhciBhZnRlckZuID0gKHR5cGVvZiBh
ZnRlciA9PSAnZnVuY3Rpb24nKSA/IGFmdGVyIDogYWZ0ZXIub2JqW2FmdGVyLmZuTmFtZV07Ci0g
ICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEFmdGVyKCkgewotICAgICAgICAgIHZhciBy
ZXMgPSAoYmFzZS51bmJvdW5kIHx8IGJhc2UpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgYWZ0ZXJGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgIHJldHVybiBy
ZXM7Ci0gICAgICAgIH07Ci0gICAgICB9LAotCi0gICAgICAvLyBhIG1peGluIHRoYXQgYWxsb3dz
IG90aGVyIG1peGlucyB0byBhdWdtZW50IGV4aXN0aW5nIGZ1bmN0aW9ucyBieSBhZGRpbmcgYWRk
aXRpb25hbAotICAgICAgLy8gY29kZSBiZWZvcmUsIGFmdGVyIG9yIGFyb3VuZC4KLSAgICAgIHdp
dGhBZHZpY2U6IGZ1bmN0aW9uKCkgewotICAgICAgICBbJ2JlZm9yZScsICdhZnRlcicsICdhcm91
bmQnXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHsKLSAgICAgICAgICB0aGlzW21dID0gZnVuY3Rpb24o
bWV0aG9kLCBmbikgewotCi0gICAgICAgICAgICBjb21wb3NlLnVubG9ja1Byb3BlcnR5KHRoaXMs
IG1ldGhvZCwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpc1ttZXRo
b2RdID09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICB0aGlzW21ldGhvZF0gPSBhZHZp
Y2VbbV0odGhpc1ttZXRob2RdLCBmbik7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdGhpc1ttZXRob2RdID0gZm47Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICByZXR1cm4gdGhpc1ttZXRob2RdOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICB9
OwotICAgICAgICB9LCB0aGlzKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgcmV0dXJuIGFkdmlj
ZTsKLSAgfQotKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50
cy9mbGlnaHQvbGliL2Jhc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMv
ZmxpZ2h0L2xpYi9iYXNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjExYTBj
YTE1ODUwZDQ5MTIwZTg0ZWQzNTBjZDIxNjI5ZDk5ZmJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50
cy9mbGlnaHQvbGliL2Jhc2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLy8g
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDb3B5cmlnaHQg
MjAxMyBUd2l0dGVyLCBJbmMKLS8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQotLy8g
aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAotLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWRlZmluZSgKLQotICBbCi0gICAgJy4vdXRpbHMn
LAotICAgICcuL3JlZ2lzdHJ5JywKLSAgICAnLi9kZWJ1ZycKLSAgXSwKLQotICBmdW5jdGlvbih1
dGlscywgcmVnaXN0cnksIGRlYnVnKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgLy8gY29t
bW9uIG1peGluIGFsbG9jYXRlcyBiYXNpYyBmdW5jdGlvbmFsaXR5IC0gdXNlZCBieSBhbGwgY29t
cG9uZW50IHByb3RvdHlwZXMKLSAgICAvLyBjYWxsYmFjayBjb250ZXh0IGlzIGJvdW5kIHRvIGNv
bXBvbmVudAotICAgIHZhciBjb21wb25lbnRJZCA9IDA7Ci0KLSAgICBmdW5jdGlvbiB0ZWFyZG93
bkluc3RhbmNlKGluc3RhbmNlSW5mbyl7Ci0gICAgICBpbnN0YW5jZUluZm8uZXZlbnRzLnNsaWNl
KCkuZm9yRWFjaChmdW5jdGlvbihldmVudCkgewotICAgICAgICB2YXIgYXJncyA9IFtldmVudC50
eXBlXTsKLQotICAgICAgICBldmVudC5lbGVtZW50ICYmIGFyZ3MudW5zaGlmdChldmVudC5lbGVt
ZW50KTsKLSAgICAgICAgKHR5cGVvZiBldmVudC5jYWxsYmFjayA9PSAnZnVuY3Rpb24nKSAmJiBh
cmdzLnB1c2goZXZlbnQuY2FsbGJhY2spOwotCi0gICAgICAgIHRoaXMub2ZmLmFwcGx5KHRoaXMs
IGFyZ3MpOwotICAgICAgfSwgaW5zdGFuY2VJbmZvLmluc3RhbmNlKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBjaGVja1NlcmlhbGl6YWJsZSh0eXBlLCBkYXRhKSB7Ci0gICAgICB0cnkgewotICAg
ICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoZGF0YSwgJyonKTsKLSAgICAgIH0gY2F0Y2goZSkgewot
ICAgICAgICBjb25zb2xlLmxvZygndW5zZXJpYWxpemFibGUgZGF0YSBmb3IgZXZlbnQnLHR5cGUs
JzonLGRhdGEpOwotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCi0gICAgICAgICAgWydUaGUgZXZl
bnQnLCB0eXBlLCAnb24gY29tcG9uZW50JywgdGhpcy50b1N0cmluZygpLCAnd2FzIHRyaWdnZXJl
ZCB3aXRoIG5vbi1zZXJpYWxpemFibGUgZGF0YSddLmpvaW4oJyAnKQotICAgICAgICApOwotICAg
ICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHdpdGhCYXNlKCkgewotCi0gICAgICAvLyBkZWxl
Z2F0ZSB0cmlnZ2VyLCBiaW5kIGFuZCB1bmJpbmQgdG8gYW4gZWxlbWVudAotICAgICAgLy8gaWYg
JGVsZW1lbnQgbm90IHN1cHBsaWVkLCB1c2UgY29tcG9uZW50J3Mgbm9kZQotICAgICAgLy8gb3Ro
ZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24KLSAgICAgIC8vIGV2ZW50IGNhbiBiZSBlaXRoZXIg
YSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZQotICAgICAgLy8gb2YgdGhlIGV2ZW50LCBvciBh
IGhhc2ggc3BlY2lmeWluZyBib3RoIHRoZSB0eXBlCi0gICAgICAvLyBhbmQgYSBkZWZhdWx0IGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZC4KLSAgICAgIHRoaXMudHJpZ2dlciA9IGZ1bmN0aW9uKCkgewot
ICAgICAgICB2YXIgJGVsZW1lbnQsIHR5cGUsIGRhdGEsIGV2ZW50LCBkZWZhdWx0Rm47Ci0gICAg
ICAgIHZhciBsYXN0SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoIC0gMSwgbGFzdEFyZyA9IGFyZ3Vt
ZW50c1tsYXN0SW5kZXhdOwotCi0gICAgICAgIGlmICh0eXBlb2YgbGFzdEFyZyAhPSAnc3RyaW5n
JyAmJiAhKGxhc3RBcmcgJiYgbGFzdEFyZy5kZWZhdWx0QmVoYXZpb3IpKSB7Ci0gICAgICAgICAg
bGFzdEluZGV4LS07Ci0gICAgICAgICAgZGF0YSA9IGxhc3RBcmc7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobGFzdEluZGV4ID09IDEpIHsKLSAgICAgICAgICAkZWxlbWVudCA9ICQoYXJndW1l
bnRzWzBdKTsKLSAgICAgICAgICBldmVudCA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAkZWxlbWVudCA9IHRoaXMuJG5vZGU7Ci0gICAgICAgICAgZXZlbnQgPSBh
cmd1bWVudHNbMF07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdEJlaGF2
aW9yKSB7Ci0gICAgICAgICAgZGVmYXVsdEZuID0gZXZlbnQuZGVmYXVsdEJlaGF2aW9yOwotICAg
ICAgICAgIGV2ZW50ID0gJC5FdmVudChldmVudC50eXBlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHR5cGUgPSBldmVudC50eXBlIHx8IGV2ZW50OwotCi0gICAgICAgIGlmIChkZWJ1Zy5lbmFibGVk
ICYmIHdpbmRvdy5wb3N0TWVzc2FnZSkgewotICAgICAgICAgIGNoZWNrU2VyaWFsaXphYmxlLmNh
bGwodGhpcywgdHlwZSwgZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZW9mIHRo
aXMuYXR0ci5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgZGF0YSA9ICQuZXh0
ZW5kKHRydWUsIHt9LCB0aGlzLmF0dHIuZXZlbnREYXRhLCBkYXRhKTsKLSAgICAgICAgfQotCi0g
ICAgICAgICRlbGVtZW50LnRyaWdnZXIoKGV2ZW50IHx8IHR5cGUpLCBkYXRhKTsKLQotICAgICAg
ICBpZiAoZGVmYXVsdEZuICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgewotICAgICAg
ICAgICh0aGlzW2RlZmF1bHRGbl0gfHwgZGVmYXVsdEZuKS5jYWxsKHRoaXMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuICRlbGVtZW50OwotICAgICAgfTsKLQotICAgICAgdGhpcy5vbiA9
IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgJGVsZW1lbnQsIHR5cGUsIGNhbGxiYWNrLCBvcmln
aW5hbENiOwotICAgICAgICB2YXIgbGFzdEluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCAtIDEsIG9y
aWdpbiA9IGFyZ3VtZW50c1tsYXN0SW5kZXhdOwotCi0gICAgICAgIGlmICh0eXBlb2Ygb3JpZ2lu
ID09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgLy9kZWxlZ2F0ZSBjYWxsYmFjawotICAgICAgICAg
IG9yaWdpbmFsQ2IgPSB1dGlscy5kZWxlZ2F0ZSgKLSAgICAgICAgICAgIHRoaXMucmVzb2x2ZURl
bGVnYXRlUnVsZXMob3JpZ2luKQotICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgb3JpZ2luYWxDYiA9IG9yaWdpbjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXN0
SW5kZXggPT0gMikgewotICAgICAgICAgICRlbGVtZW50ID0gJChhcmd1bWVudHNbMF0pOwotICAg
ICAgICAgIHR5cGUgPSBhcmd1bWVudHNbMV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
JGVsZW1lbnQgPSB0aGlzLiRub2RlOwotICAgICAgICAgIHR5cGUgPSBhcmd1bWVudHNbMF07Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsQ2IgIT0gJ2Z1bmN0aW9uJyAm
JiB0eXBlb2Ygb3JpZ2luYWxDYiAhPSAnb2JqZWN0JykgewotICAgICAgICAgIHRocm93IG5ldyBF
cnJvcignVW5hYmxlIHRvIGJpbmQgdG8gIicgKyB0eXBlICsgJyIgYmVjYXVzZSB0aGUgZ2l2ZW4g
Y2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0Jyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYWxsYmFjayA9IG9yaWdpbmFsQ2IuYmluZCh0aGlzKTsKLSAgICAgICAgY2FsbGJh
Y2sudGFyZ2V0ID0gb3JpZ2luYWxDYjsKLQotICAgICAgICAvLyBpZiB0aGUgb3JpZ2luYWwgY2Fs
bGJhY2sgaXMgYWxyZWFkeSBicmFuZGVkIGJ5IGpRdWVyeSdzIGd1aWQsIGNvcHkgaXQgdG8gdGhl
IGNvbnRleHQtYm91bmQgdmVyc2lvbgotICAgICAgICBpZiAob3JpZ2luYWxDYi5ndWlkKSB7Ci0g
ICAgICAgICAgY2FsbGJhY2suZ3VpZCA9IG9yaWdpbmFsQ2IuZ3VpZDsKLSAgICAgICAgfQotCi0g
ICAgICAgICRlbGVtZW50Lm9uKHR5cGUsIGNhbGxiYWNrKTsKLQotICAgICAgICAvLyBnZXQganF1
ZXJ5J3MgZ3VpZCBmcm9tIG91ciBib3VuZCBmbiwgc28gdW5iaW5kaW5nIHdpbGwgd29yawotICAg
ICAgICBvcmlnaW5hbENiLmd1aWQgPSBjYWxsYmFjay5ndWlkOwotCi0gICAgICAgIHJldHVybiBj
YWxsYmFjazsKLSAgICAgIH07Ci0KLSAgICAgIHRoaXMub2ZmID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHZhciAkZWxlbWVudCwgdHlwZSwgY2FsbGJhY2s7Ci0gICAgICAgIHZhciBsYXN0SW5kZXgg
PSBhcmd1bWVudHMubGVuZ3RoIC0gMTsKLQotICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1ts
YXN0SW5kZXhdID09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICBjYWxsYmFjayA9IGFyZ3VtZW50
c1tsYXN0SW5kZXhdOwotICAgICAgICAgIGxhc3RJbmRleCAtPSAxOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGxhc3RJbmRleCA9PSAxKSB7Ci0gICAgICAgICAgJGVsZW1lbnQgPSAkKGFyZ3Vt
ZW50c1swXSk7Ci0gICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAkZWxlbWVudCA9IHRoaXMuJG5vZGU7Ci0gICAgICAgICAgdHlwZSA9IGFy
Z3VtZW50c1swXTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAkZWxlbWVudC5vZmYodHlw
ZSwgY2FsbGJhY2spOwotICAgICAgfTsKLQotICAgICAgdGhpcy5yZXNvbHZlRGVsZWdhdGVSdWxl
cyA9IGZ1bmN0aW9uKHJ1bGVJbmZvKSB7Ci0gICAgICAgIHZhciBydWxlcyA9IHt9OwotCi0gICAg
ICAgIE9iamVjdC5rZXlzKHJ1bGVJbmZvKS5mb3JFYWNoKGZ1bmN0aW9uKHIpIHsKLSAgICAgICAg
ICBpZiAoIShyIGluIHRoaXMuYXR0cikpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign
Q29tcG9uZW50ICInICsgdGhpcy50b1N0cmluZygpICsgJyIgd2FudHMgdG8gbGlzdGVuIG9uICIn
ICsgciArICciIGJ1dCBubyBzdWNoIGF0dHJpYnV0ZSB3YXMgZGVmaW5lZC4nKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgcnVsZXNbdGhpcy5hdHRyW3JdXSA9IHJ1bGVJbmZvW3JdOwotICAgICAg
ICB9LCB0aGlzKTsKLQotICAgICAgICByZXR1cm4gcnVsZXM7Ci0gICAgICB9OwotCi0gICAgICB0
aGlzLmRlZmF1bHRBdHRycyA9IGZ1bmN0aW9uKGRlZmF1bHRzKSB7Ci0gICAgICAgIHV0aWxzLnB1
c2godGhpcy5kZWZhdWx0cywgZGVmYXVsdHMsIHRydWUpIHx8ICh0aGlzLmRlZmF1bHRzID0gZGVm
YXVsdHMpOwotICAgICAgfTsKLQotICAgICAgdGhpcy5zZWxlY3QgPSBmdW5jdGlvbihhdHRyaWJ1
dGVLZXkpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuJG5vZGUuZmluZCh0aGlzLmF0dHJbYXR0cmli
dXRlS2V5XSk7Ci0gICAgICB9OwotCi0gICAgICB0aGlzLmluaXRpYWxpemUgPSBmdW5jdGlvbihu
b2RlLCBhdHRycykgewotICAgICAgICBhdHRycyB8fCAoYXR0cnMgPSB7fSk7Ci0gICAgICAgIC8v
b25seSBhc3NpZ24gaWRlbnRpdHkgaWYgdGhlcmUgaXNuJ3Qgb25lIChpbml0aWFsaXplIGNhbiBi
ZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMpCi0gICAgICAgIHRoaXMuaWRlbnRpdHkgfHwgKHRoaXMu
aWRlbnRpdHkgPSBjb21wb25lbnRJZCsrKTsKLQotICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBuZWVkcyBhIG5vZGUnKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChub2RlLmpxdWVyeSkgewotICAgICAgICAgIHRoaXMubm9kZSA9IG5v
ZGVbMF07Ci0gICAgICAgICAgdGhpcy4kbm9kZSA9IG5vZGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsKLSAgICAgICAgICB0aGlzLiRub2RlID0gJChub2Rl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1lcmdlIGRlZmF1bHRzIHdpdGggc3VwcGxpZWQg
b3B0aW9ucwotICAgICAgICAvLyBwdXQgb3B0aW9ucyBpbiBhdHRyLl9fcHJvdG9fXyB0byBhdm9p
ZCBtZXJnZSBvdmVyaGVhZAotICAgICAgICB2YXIgYXR0ciA9IE9iamVjdC5jcmVhdGUoYXR0cnMp
OwotICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kZWZhdWx0cykgewotICAgICAgICAgIGlm
ICghYXR0cnMuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgYXR0cltrZXldID0g
dGhpcy5kZWZhdWx0c1trZXldOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRo
aXMuYXR0ciA9IGF0dHI7Ci0KLSAgICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0cyB8fCB7
fSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKLSAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0c1tr
ZXldID09PSBudWxsICYmIHRoaXMuYXR0cltrZXldID09PSBudWxsKSB7Ci0gICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIGF0dHJpYnV0ZSAiJyArIGtleSArICciIG5vdCBzcGVj
aWZpZWQgaW4gYXR0YWNoVG8gZm9yIGNvbXBvbmVudCAiJyArIHRoaXMudG9TdHJpbmcoKSArICci
LicpOwotICAgICAgICAgIH0KLSAgICAgICAgfSwgdGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICB9OwotCi0gICAgICB0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHRlYXJkb3duSW5zdGFuY2UocmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKSk7Ci0g
ICAgICB9OwotICAgIH0KLQotICAgIHJldHVybiB3aXRoQmFzZTsKLSAgfQotKTsKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvbmVu
dC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBv
bmVudC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJjOGI1NTA1NTQ1ZDE1MmU0
MGViODA4YjJiMjUxOTE1NTVlNjAwYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xp
Yi9jb21wb25lbnQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDb3B5cmlnaHQgMjAxMyBU
d2l0dGVyLCBJbmMKLS8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQotLy8gaHR0cDov
L29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0KLWRlZmluZSgKLQotICBbCi0gICAgJy4vYWR2aWNlJywKLSAg
ICAnLi91dGlscycsCi0gICAgJy4vY29tcG9zZScsCi0gICAgJy4vYmFzZScsCi0gICAgJy4vcmVn
aXN0cnknLAotICAgICcuL2xvZ2dlcicsCi0gICAgJy4vZGVidWcnCi0gIF0sCi0KLSAgZnVuY3Rp
b24oYWR2aWNlLCB1dGlscywgY29tcG9zZSwgd2l0aEJhc2UsIHJlZ2lzdHJ5LCB3aXRoTG9nZ2lu
ZywgZGVidWcpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICB2YXIgZnVuY3Rpb25OYW1lUmVn
RXggPSAvZnVuY3Rpb24gKC4qPylccz9cKC87Ci0KLSAgICAvLyB0ZWFyZG93biBmb3IgYWxsIGlu
c3RhbmNlcyBvZiB0aGlzIGNvbnN0cnVjdG9yCi0gICAgZnVuY3Rpb24gdGVhcmRvd25BbGwoKSB7
Ci0gICAgICB2YXIgY29tcG9uZW50SW5mbyA9IHJlZ2lzdHJ5LmZpbmRDb21wb25lbnRJbmZvKHRo
aXMpOwotCi0gICAgICBjb21wb25lbnRJbmZvICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudEluZm8u
aW5zdGFuY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKLSAgICAgICAgdmFyIGluZm8gPSBjb21w
b25lbnRJbmZvLmluc3RhbmNlc1trXTsKLSAgICAgICAgaW5mby5pbnN0YW5jZS50ZWFyZG93bigp
OwotICAgICAgfSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY2hlY2tTZXJpYWxpemFibGUodHlw
ZSwgZGF0YSkgewotICAgICAgdHJ5IHsKLSAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKGRhdGEs
ICcqJyk7Ci0gICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgY29uc29sZS5sb2coJ3Vuc2VyaWFs
aXphYmxlIGRhdGEgZm9yIGV2ZW50Jyx0eXBlLCc6JyxkYXRhKTsKLSAgICAgICAgdGhyb3cgbmV3
IEVycm9yKAotICAgICAgICAgIFsnVGhlIGV2ZW50JywgdHlwZSwgJ29uIGNvbXBvbmVudCcsIHRo
aXMudG9TdHJpbmcoKSwgJ3dhcyB0cmlnZ2VyZWQgd2l0aCBub24tc2VyaWFsaXphYmxlIGRhdGEn
XS5qb2luKCcgJykKLSAgICAgICAgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBh
dHRhY2hUbyhzZWxlY3Rvci8qLCBvcHRpb25zIGFyZ3MgKi8pIHsKLSAgICAgIC8vIHVucGFja2lu
ZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKLSAgICAgIHZhciBsID0gYXJn
dW1lbnRzLmxlbmd0aDsKLSAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGwgLSAxKTsKLSAgICAg
IGZvciAodmFyIGkgPSAxOyBpIDwgbDsgaSsrKSBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsK
LQotICAgICAgaWYgKCFzZWxlY3RvcikgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBv
bmVudCBuZWVkcyB0byBiZSBhdHRhY2hUb1wnZCBhIGpRdWVyeSBvYmplY3QsIG5hdGl2ZSBub2Rl
IG9yIHNlbGVjdG9yIHN0cmluZycpOwotICAgICAgfQotCi0gICAgICB2YXIgb3B0aW9ucyA9IHV0
aWxzLm1lcmdlLmFwcGx5KHV0aWxzLCBhcmdzKTsKLSAgICAgIHZhciBjb21wb25lbnRJbmZvID0g
cmVnaXN0cnkuZmluZENvbXBvbmVudEluZm8odGhpcyk7Ci0KLSAgICAgICQoc2VsZWN0b3IpLmVh
Y2goZnVuY3Rpb24oaSwgbm9kZSkgewotICAgICAgICBpZiAoY29tcG9uZW50SW5mbyAmJiBjb21w
b25lbnRJbmZvLmlzQXR0YWNoZWRUbyhub2RlKSkgewotICAgICAgICAgIC8vIGFscmVhZHkgYXR0
YWNoZWQKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAobmV3IHRoaXMp
LmluaXRpYWxpemUobm9kZSwgb3B0aW9ucyk7Ci0gICAgICB9LmJpbmQodGhpcykpOwotICAgIH0K
LQotICAgIC8vIGRlZmluZSB0aGUgY29uc3RydWN0b3IgZm9yIGEgY3VzdG9tIGNvbXBvbmVudCB0
eXBlCi0gICAgLy8gdGFrZXMgYW4gdW5saW1pdGVkIG51bWJlciBvZiBtaXhpbiBmdW5jdGlvbnMg
YXMgYXJndW1lbnRzCi0gICAgLy8gdHlwaWNhbCBhcGkgY2FsbCB3aXRoIDMgbWl4aW5zOiBkZWZp
bmUodGltZWxpbmUsIHdpdGhUd2VldENhcGFiaWxpdHksIHdpdGhTY3JvbGxDYXBhYmlsaXR5KTsK
LSAgICBmdW5jdGlvbiBkZWZpbmUoLyptaXhpbnMqLykgewotICAgICAgLy8gdW5wYWNraW5nIGFy
Z3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgotICAgICAgdmFyIGwgPSBhcmd1bWVu
dHMubGVuZ3RoOwotICAgICAgLy8gYWRkIHRocmVlIGZvciBjb21tb24gbWl4aW5zCi0gICAgICB2
YXIgbWl4aW5zID0gbmV3IEFycmF5KGwgKyAzKTsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bDsgaSsrKSBtaXhpbnNbaV0gPSBhcmd1bWVudHNbaV07Ci0KLSAgICAgIHZhciBDb21wb25lbnQg
PSBmdW5jdGlvbigpIHt9OwotCi0gICAgICBDb21wb25lbnQudG9TdHJpbmcgPSBDb21wb25lbnQu
cHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBwcmV0dHlQcmlu
dE1peGlucyA9IG1peGlucy5tYXAoZnVuY3Rpb24obWl4aW4pIHsKLSAgICAgICAgICBpZiAobWl4
aW4ubmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBmdW5jdGlvbiBuYW1lIHByb3BlcnR5
IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLCB1c2UgcmVnZXgKLSAgICAgICAgICAgIHZh
ciBtID0gbWl4aW4udG9TdHJpbmcoKS5tYXRjaChmdW5jdGlvbk5hbWVSZWdFeCk7Ci0gICAgICAg
ICAgICByZXR1cm4gKG0gJiYgbVsxXSkgPyBtWzFdIDogJyc7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIHJldHVybiAobWl4aW4ubmFtZSAhPSAnd2l0aEJhc2UnKSA/IG1peGluLm5h
bWUgOiAnJzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5qb2luKCcs
ICcpOwotICAgICAgICByZXR1cm4gcHJldHR5UHJpbnRNaXhpbnM7Ci0gICAgICB9OwotCi0gICAg
ICBpZiAoZGVidWcuZW5hYmxlZCkgewotICAgICAgICBDb21wb25lbnQuZGVzY3JpYmUgPSBDb21w
b25lbnQucHJvdG90eXBlLmRlc2NyaWJlID0gQ29tcG9uZW50LnRvU3RyaW5nKCk7Ci0gICAgICB9
Ci0KLSAgICAgIC8vICdvcHRpb25zJyBpcyBvcHRpb25hbCBoYXNoIHRvIGJlIG1lcmdlZCB3aXRo
ICdkZWZhdWx0cycgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uCi0gICAgICBDb21wb25lbnQu
YXR0YWNoVG8gPSBhdHRhY2hUbzsKLSAgICAgIENvbXBvbmVudC50ZWFyZG93bkFsbCA9IHRlYXJk
b3duQWxsOwotCi0gICAgICAvLyBwcmVwZW5kIGNvbW1vbiBtaXhpbnMgdG8gc3VwcGxpZWQgbGlz
dCwgdGhlbiBtaXhpbiBhbGwgZmxhdm9ycwotICAgICAgaWYgKGRlYnVnLmVuYWJsZWQpIHsKLSAg
ICAgICAgbWl4aW5zLnVuc2hpZnQod2l0aExvZ2dpbmcpOwotICAgICAgfQotICAgICAgbWl4aW5z
LnVuc2hpZnQod2l0aEJhc2UsIGFkdmljZS53aXRoQWR2aWNlLCByZWdpc3RyeS53aXRoUmVnaXN0
cmF0aW9uKTsKLSAgICAgIGNvbXBvc2UubWl4aW4oQ29tcG9uZW50LnByb3RvdHlwZSwgbWl4aW5z
KTsKLQotICAgICAgcmV0dXJuIENvbXBvbmVudDsKLSAgICB9Ci0KLSAgICBkZWZpbmUudGVhcmRv
d25BbGwgPSBmdW5jdGlvbigpIHsKLSAgICAgIHJlZ2lzdHJ5LmNvbXBvbmVudHMuc2xpY2UoKS5m
b3JFYWNoKGZ1bmN0aW9uKGMpIHsKLSAgICAgICAgYy5jb21wb25lbnQudGVhcmRvd25BbGwoKTsK
LSAgICAgIH0pOwotICAgICAgcmVnaXN0cnkucmVzZXQoKTsKLSAgICB9OwotCi0gICAgcmV0dXJu
IGRlZmluZTsKLSAgfQotKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29t
cG9uZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2Nv
bXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA2ZDc5ZDk5ZWUwOWUyOTZiYTkzOTExNDE5NTJhMzNlYjFiZTA3Zjk4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4
NSArMCwwIEBACi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYwotLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1J
VCBMaWNlbnNlCi0vLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotZGVmaW5lKAotCi0gIFsK
LSAgICAnLi91dGlscycsCi0gICAgJy4vZGVidWcnCi0gIF0sCi0KLSAgZnVuY3Rpb24odXRpbHMs
IGRlYnVnKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgLy9lbnVtZXJhYmxlcyBhcmUgc2hp
bXMgLSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Igc2hpbSBkb2Vzbid0IHdvcmsKLSAgICB2YXIg
Y2FuV3JpdGVQcm90ZWN0ID0gZGVidWcuZW5hYmxlZCAmJiAhdXRpbHMuaXNFbnVtZXJhYmxlKE9i
amVjdCwgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicpOwotICAgIC8vd2hpdGVsaXN0IG9mIHVu
bG9ja2FibGUgcHJvcGVydHkgbmFtZXMKLSAgICB2YXIgZG9udExvY2sgPSBbJ21peGVkSW4nXTsK
LQotICAgIGlmIChjYW5Xcml0ZVByb3RlY3QpIHsKLSAgICAgIC8vSUU4IGdldE93blByb3BlcnR5
RGVzY3JpcHRvciBpcyBidWlsdC1pbiBidXQgdGhyb3dzIGV4ZXB0aW9uIG9uIG5vbiBET00gb2Jq
ZWN0cwotICAgICAgdHJ5IHsKLSAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihPYmplY3QsICdrZXlzJyk7Ci0gICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgY2FuV3JpdGVQ
cm90ZWN0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2V0UHJvcGVy
dHlXcml0YWJpbGl0eShvYmosIGlzV3JpdGFibGUpIHsKLSAgICAgIGlmICghY2FuV3JpdGVQcm90
ZWN0KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIHByb3BzID0gT2Jq
ZWN0LmNyZWF0ZShudWxsKTsKLQotICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKAotICAg
ICAgICBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAgICAgaWYgKGRvbnRMb2NrLmluZGV4T2Yoa2V5
KSA8IDApIHsKLSAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihvYmosIGtleSk7Ci0gICAgICAgICAgICBkZXNjLndyaXRhYmxlID0gaXNXcml0YWJs
ZTsKLSAgICAgICAgICAgIHByb3BzW2tleV0gPSBkZXNjOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgKTsKLQotICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCBwcm9wcyk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdW5sb2NrUHJvcGVydHkob2JqLCBwcm9wLCBvcCkgewot
ICAgICAgdmFyIHdyaXRhYmxlOwotCi0gICAgICBpZiAoIWNhbldyaXRlUHJvdGVjdCB8fCAhb2Jq
Lmhhc093blByb3BlcnR5KHByb3ApKSB7Ci0gICAgICAgIG9wLmNhbGwob2JqKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotCi0gICAgICB3cml0YWJsZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3Iob2JqLCBwcm9wKS53cml0YWJsZTsKLSAgICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShvYmosIHByb3AsIHsgd3JpdGFibGU6IHRydWUgfSk7Ci0gICAgICBvcC5jYWxsKG9iaik7
Ci0gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7IHdyaXRhYmxlOiB3cml0
YWJsZSB9KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBtaXhpbihiYXNlLCBtaXhpbnMpIHsKLSAg
ICAgIGJhc2UubWl4ZWRJbiA9IGJhc2UuaGFzT3duUHJvcGVydHkoJ21peGVkSW4nKSA/IGJhc2Uu
bWl4ZWRJbiA6IFtdOwotCi0gICAgICBtaXhpbnMuZm9yRWFjaChmdW5jdGlvbihtaXhpbikgewot
ICAgICAgICBpZiAoYmFzZS5taXhlZEluLmluZGV4T2YobWl4aW4pID09IC0xKSB7Ci0gICAgICAg
ICAgc2V0UHJvcGVydHlXcml0YWJpbGl0eShiYXNlLCBmYWxzZSk7Ci0gICAgICAgICAgbWl4aW4u
Y2FsbChiYXNlKTsKLSAgICAgICAgICBiYXNlLm1peGVkSW4ucHVzaChtaXhpbik7Ci0gICAgICAg
IH0KLSAgICAgIH0pOwotCi0gICAgICBzZXRQcm9wZXJ0eVdyaXRhYmlsaXR5KGJhc2UsIHRydWUp
OwotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICBtaXhpbjogbWl4aW4sCi0gICAgICB1bmxv
Y2tQcm9wZXJ0eTogdW5sb2NrUHJvcGVydHkKLSAgICB9OwotCi0gIH0KLSk7CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9kZWJ1Zy5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2RlYnVnLmpzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjcwYWNmYjM1YThmZDIxNmZkMDFiNzFkNzI4
MDg4ZDYxMDYzYzg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2RlYnVnLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCi0v
LyBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UKLS8vIGh0dHA6Ly9vcGVuc291cmNlLm9y
Zy9saWNlbnNlcy9NSVQKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotCi1kZWZpbmUoCi0KLSAgW10sCi0KLSAgZnVuY3Rpb24oKSB7Ci0gICAgJ3VzZSBzdHJp
Y3QnOwotCi0gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAvLyBT
ZWFyY2ggb2JqZWN0IG1vZGVsCi0gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKLQotICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpIHsK
LSAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotICAgICAgdmFyIG9iaiA9IG9wdGlvbnMu
b2JqIHx8IHdpbmRvdzsKLSAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICgob2JqPT13
aW5kb3cpID8gJ3dpbmRvdycgOiAnJyk7Ci0gICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhv
YmopOwotICAgICAgcHJvcHMuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7Ci0gICAgICAgIGlmICgo
dGVzdHNbdXRpbF0gfHwgdXRpbCkoc2VhcmNoVGVybSwgb2JqLCBwcm9wKSl7Ci0gICAgICAgICAg
Y29uc29sZS5sb2coW3BhdGgsICcuJywgcHJvcF0uam9pbignJyksICctPicsIFsnKCcsIHR5cGVv
ZiBvYmpbcHJvcF0sICcpJ10uam9pbignJyksIG9ialtwcm9wXSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmpbcHJvcF0pID09ICdbb2Jq
ZWN0IE9iamVjdF0nICYmIChvYmpbcHJvcF0gIT0gb2JqKSAmJiBwYXRoLnNwbGl0KCcuJykuaW5k
ZXhPZihwcm9wKSA9PSAtMSkgewotICAgICAgICAgIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0s
IHtvYmo6IG9ialtwcm9wXSwgcGF0aDogW3BhdGgscHJvcF0uam9pbignLicpfSk7Ci0gICAgICAg
IH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNlYXJjaCh1dGlsLCBleHBlY3Rl
ZCwgc2VhcmNoVGVybSwgb3B0aW9ucykgewotICAgICAgaWYgKCFleHBlY3RlZCB8fCB0eXBlb2Yg
c2VhcmNoVGVybSA9PSBleHBlY3RlZCkgewotICAgICAgICB0cmF2ZXJzZSh1dGlsLCBzZWFyY2hU
ZXJtLCBvcHRpb25zKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoW3Nl
YXJjaFRlcm0sICdtdXN0IGJlJywgZXhwZWN0ZWRdLmpvaW4oJyAnKSk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgdmFyIHRlc3RzID0gewotICAgICAgJ25hbWUnOiBmdW5jdGlvbihzZWFyY2hUZXJt
LCBvYmosIHByb3ApIHtyZXR1cm4gc2VhcmNoVGVybSA9PSBwcm9wO30sCi0gICAgICAnbmFtZUNv
bnRhaW5zJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIHByb3AuaW5k
ZXhPZihzZWFyY2hUZXJtKSA+IC0xO30sCi0gICAgICAndHlwZSc6IGZ1bmN0aW9uKHNlYXJjaFRl
cm0sIG9iaiwgcHJvcCkge3JldHVybiBvYmpbcHJvcF0gaW5zdGFuY2VvZiBzZWFyY2hUZXJtO30s
Ci0gICAgICAndmFsdWUnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4g
b2JqW3Byb3BdID09PSBzZWFyY2hUZXJtO30sCi0gICAgICAndmFsdWVDb2VyY2VkJzogZnVuY3Rp
b24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIG9ialtwcm9wXSA9PSBzZWFyY2hUZXJt
O30KLSAgICB9OwotCi0gICAgZnVuY3Rpb24gYnlOYW1lKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtz
ZWFyY2goJ25hbWUnLCAnc3RyaW5nJywgc2VhcmNoVGVybSwgb3B0aW9ucyk7fQotICAgIGZ1bmN0
aW9uIGJ5TmFtZUNvbnRhaW5zKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ25hbWVDb250
YWlucycsICdzdHJpbmcnLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9Ci0gICAgZnVuY3Rpb24gYnlU
eXBlKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3R5cGUnLCAnZnVuY3Rpb24nLCBzZWFy
Y2hUZXJtLCBvcHRpb25zKTt9Ci0gICAgZnVuY3Rpb24gYnlWYWx1ZShzZWFyY2hUZXJtLCBvcHRp
b25zKSB7c2VhcmNoKCd2YWx1ZScsIG51bGwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO30KLSAgICBm
dW5jdGlvbiBieVZhbHVlQ29lcmNlZChzZWFyY2hUZXJtLCBvcHRpb25zKSB7c2VhcmNoKCd2YWx1
ZUNvZXJjZWQnLCBudWxsLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9Ci0gICAgZnVuY3Rpb24gY3Vz
dG9tKGZuLCBvcHRpb25zKSB7dHJhdmVyc2UoZm4sIG51bGwsIG9wdGlvbnMpO30KLQotICAgIC8v
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgLy8gRXZlbnQgbG9nZ2luZwot
ICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICB2YXIgQUxMID0g
J2FsbCc7IC8vbm8gZmlsdGVyCi0KLSAgICAvL25vIGxvZ2dpbmcgYnkgZGVmYXVsdAotICAgIHZh
ciBkZWZhdWx0RXZlbnROYW1lc0ZpbHRlciA9IFtdOwotICAgIHZhciBkZWZhdWx0QWN0aW9uc0Zp
bHRlciA9IFtdOwotCi0gICAgdmFyIGxvZ0ZpbHRlciA9IHJldHJpZXZlTG9nRmlsdGVyKCk7Ci0K
LSAgICBmdW5jdGlvbiBmaWx0ZXJFdmVudExvZ3NCeUFjdGlvbigvKmFjdGlvbnMqLykgewotICAg
ICAgdmFyIGFjdGlvbnMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0KLSAgICAgIGxvZ0Zp
bHRlci5ldmVudE5hbWVzLmxlbmd0aCB8fCAobG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBBTEwpOwot
ICAgICAgbG9nRmlsdGVyLmFjdGlvbnMgPSBhY3Rpb25zLmxlbmd0aCA/IGFjdGlvbnMgOiBBTEw7
Ci0gICAgICBzYXZlTG9nRmlsdGVyKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZmlsdGVyRXZl
bnRMb2dzQnlOYW1lKC8qZXZlbnROYW1lcyovKSB7Ci0gICAgICB2YXIgZXZlbnROYW1lcyA9IFtd
LnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKLQotICAgICAgbG9nRmlsdGVyLmFjdGlvbnMubGVuZ3Ro
IHx8IChsb2dGaWx0ZXIuYWN0aW9ucyA9IEFMTCk7Ci0gICAgICBsb2dGaWx0ZXIuZXZlbnROYW1l
cyA9IGV2ZW50TmFtZXMubGVuZ3RoID8gZXZlbnROYW1lcyA6IEFMTDsKLSAgICAgIHNhdmVMb2dG
aWx0ZXIoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBoaWRlQWxsRXZlbnRMb2dzKCkgewotICAg
ICAgbG9nRmlsdGVyLmFjdGlvbnMgPSBbXTsKLSAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzID0g
W107Ci0gICAgICBzYXZlTG9nRmlsdGVyKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2hvd0Fs
bEV2ZW50TG9ncygpIHsKLSAgICAgIGxvZ0ZpbHRlci5hY3Rpb25zID0gQUxMOwotICAgICAgbG9n
RmlsdGVyLmV2ZW50TmFtZXMgPSBBTEw7Ci0gICAgICBzYXZlTG9nRmlsdGVyKCk7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gc2F2ZUxvZ0ZpbHRlcigpIHsKLSAgICAgIGlmICh3aW5kb3cubG9jYWxT
dG9yYWdlKSB7Ci0gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsb2dGaWx0ZXJfZXZlbnRO
YW1lcycsIGxvZ0ZpbHRlci5ldmVudE5hbWVzKTsKLSAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0
ZW0oJ2xvZ0ZpbHRlcl9hY3Rpb25zJywgbG9nRmlsdGVyLmFjdGlvbnMpOwotICAgICAgfQotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHJldHJpZXZlTG9nRmlsdGVyKCkgewotICAgICAgdmFyIHJlc3Vs
dCA9IHsKLSAgICAgICAgZXZlbnROYW1lczogKHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiYgbG9jYWxT
dG9yYWdlLmdldEl0ZW0oJ2xvZ0ZpbHRlcl9ldmVudE5hbWVzJykpIHx8IGRlZmF1bHRFdmVudE5h
bWVzRmlsdGVyLAotICAgICAgICBhY3Rpb25zOiAod2luZG93LmxvY2FsU3RvcmFnZSAmJiBsb2Nh
bFN0b3JhZ2UuZ2V0SXRlbSgnbG9nRmlsdGVyX2FjdGlvbnMnKSkgfHwgZGVmYXVsdEFjdGlvbnNG
aWx0ZXIKLSAgICAgIH07Ci0KLSAgICAgIC8vIHJlY29uc3RpdHV0ZSBhcnJheXMKLSAgICAgIE9i
amVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbihrKSB7Ci0gICAgICAgIHZhciB0aGlz
UHJvcCA9IHJlc3VsdFtrXTsKLSAgICAgICAgaWYgKHR5cGVvZiB0aGlzUHJvcCA9PSAnc3RyaW5n
JyAmJiB0aGlzUHJvcCAhPT0gQUxMKSB7Ci0gICAgICAgICAgcmVzdWx0W2tdID0gdGhpc1Byb3Au
c3BsaXQoJywnKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIH0KLQotICAgIHJldHVybiB7Ci0KLSAgICAgIGVuYWJsZTogZnVuY3Rpb24oZW5hYmxlKSB7
Ci0gICAgICAgIHRoaXMuZW5hYmxlZCA9ICEhZW5hYmxlOwotCi0gICAgICAgIGlmIChlbmFibGUg
JiYgd2luZG93LmNvbnNvbGUpIHsKLSAgICAgICAgICBjb25zb2xlLmluZm8oJ0Jvb3RpbmcgaW4g
REVCVUcgbW9kZScpOwotICAgICAgICAgIGNvbnNvbGUuaW5mbygnWW91IGNhbiBjb25maWd1cmUg
ZXZlbnQgbG9nZ2luZyB3aXRoIERFQlVHLmV2ZW50cy5sb2dBbGwoKS9sb2dOb25lKCkvbG9nQnlO
YW1lKCkvbG9nQnlBY3Rpb24oKScpOwotICAgICAgICB9Ci0KLSAgICAgICAgd2luZG93LkRFQlVH
ID0gdGhpczsKLSAgICAgIH0sCi0KLSAgICAgIGZpbmQ6IHsKLSAgICAgICAgYnlOYW1lOiBieU5h
bWUsCi0gICAgICAgIGJ5TmFtZUNvbnRhaW5zOiBieU5hbWVDb250YWlucywKLSAgICAgICAgYnlU
eXBlOiBieVR5cGUsCi0gICAgICAgIGJ5VmFsdWU6IGJ5VmFsdWUsCi0gICAgICAgIGJ5VmFsdWVD
b2VyY2VkOiBieVZhbHVlQ29lcmNlZCwKLSAgICAgICAgY3VzdG9tOiBjdXN0b20KLSAgICAgIH0s
Ci0KLSAgICAgIGV2ZW50czogewotICAgICAgICBsb2dGaWx0ZXI6IGxvZ0ZpbHRlciwKLQotICAg
ICAgICAvLyBBY2NlcHRzIGFueSBudW1iZXIgb2YgYWN0aW9uIGFyZ3MKLSAgICAgICAgLy8gZS5n
LiBERUJVRy5ldmVudHMubG9nQnlBY3Rpb24oIm9uIiwgIm9mZiIpCi0gICAgICAgIGxvZ0J5QWN0
aW9uOiBmaWx0ZXJFdmVudExvZ3NCeUFjdGlvbiwKLQotICAgICAgICAvLyBBY2NlcHRzIGFueSBu
dW1iZXIgb2YgZXZlbnQgbmFtZSBhcmdzIChpbmMuIHJlZ2V4IG9yIHdpbGRjYXJkcykKLSAgICAg
ICAgLy8gZS5nLiBERUJVRy5ldmVudHMubG9nQnlOYW1lKC91aS4qLywgIipUaHJlYWQqIik7Ci0g
ICAgICAgIGxvZ0J5TmFtZTogZmlsdGVyRXZlbnRMb2dzQnlOYW1lLAotCi0gICAgICAgIGxvZ0Fs
bDogc2hvd0FsbEV2ZW50TG9ncywKLSAgICAgICAgbG9nTm9uZTogaGlkZUFsbEV2ZW50TG9ncwot
ICAgICAgfQotICAgIH07Ci0gIH0KLSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jv
d2VyX2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9pbmRleC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93
ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2luZGV4LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwOTgwNmFhYzRjZjQ1MmIzZWFkYmQ4NGUyMzY4MGM2ZGM1YTk2NmQ1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
Ym93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2luZGV4LmpzCisrKyAvZGV2L251bGwKQEAgLTEs
MzEgKzAsMCBAQAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0vLyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKLS8vIExpY2Vuc2VkIHVuZGVyIFRoZSBN
SVQgTGljZW5zZQotLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAotLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWRlZmluZSgKLQotICBb
Ci0gICAgJy4vYWR2aWNlJywKLSAgICAnLi9jb21wb25lbnQnLAotICAgICcuL2NvbXBvc2UnLAot
ICAgICcuL2xvZ2dlcicsCi0gICAgJy4vcmVnaXN0cnknLAotICAgICcuL3V0aWxzJwotICBdLAot
Ci0gIGZ1bmN0aW9uKGFkdmljZSwgY29tcG9uZW50LCBjb21wb3NlLCBsb2dnZXIsIHJlZ2lzdHJ5
LCB1dGlscykgewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHJldHVybiB7Ci0gICAgICBhZHZp
Y2U6IGFkdmljZSwKLSAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LAotICAgICAgY29tcG9zZTog
Y29tcG9zZSwKLSAgICAgIGxvZ2dlcjogbG9nZ2VyLAotICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5
LAotICAgICAgdXRpbHM6IHV0aWxzCi0gICAgfTsKLQotICB9Ci0pOwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvbG9nZ2VyLmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvbG9nZ2VyLmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWRkM2E4YjVmOGZmYWVjMTg5NDY2NzAzN2I5MGM4
MDM0NjUxMDllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL2xvZ2dlci5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCi0vLyBM
aWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UKLS8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9s
aWNlbnNlcy9NSVQKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi1kZWZpbmUoCi0KLSAgWwotICAgICcuL3V0aWxzJwotICBdLAotCi0gIGZ1bmN0aW9uKHV0
aWxzKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgdmFyIGFjdGlvblN5bWJvbHMgPSB7Ci0g
ICAgICBvbjogJzwtJywKLSAgICAgIHRyaWdnZXI6ICctPicsCi0gICAgICBvZmY6ICd4ICcKLSAg
ICB9OwotCi0gICAgZnVuY3Rpb24gZWxlbVRvU3RyaW5nKGVsZW0pIHsKLSAgICAgIHZhciB0YWdT
dHIgPSBlbGVtLnRhZ05hbWUgPyBlbGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6IGVsZW0udG9T
dHJpbmcoKTsKLSAgICAgIHZhciBjbGFzc1N0ciA9IGVsZW0uY2xhc3NOYW1lID8gJy4nICsgKGVs
ZW0uY2xhc3NOYW1lKSA6ICcnOwotICAgICAgdmFyIHJlc3VsdCA9IHRhZ1N0ciArIGNsYXNzU3Ry
OwotICAgICAgcmV0dXJuIGVsZW0udGFnTmFtZSA/IFsnXCcnLCAnXCcnXS5qb2luKHJlc3VsdCkg
OiByZXN1bHQ7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbG9nKGFjdGlvbiwgY29tcG9uZW50LCBl
dmVudEFyZ3MpIHsKLSAgICAgIHZhciBuYW1lLCBlbGVtLCBmbiwgbG9nRmlsdGVyLCB0b1JlZ0V4
cCwgYWN0aW9uTG9nZ2FibGUsIG5hbWVMb2dnYWJsZTsKLQotICAgICAgaWYgKHR5cGVvZiBldmVu
dEFyZ3NbZXZlbnRBcmdzLmxlbmd0aC0xXSA9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgIGZuID0g
ZXZlbnRBcmdzLnBvcCgpOwotICAgICAgICBmbiA9IGZuLnVuYm91bmQgfHwgZm47IC8vIHVzZSB1
bmJvdW5kIHZlcnNpb24gaWYgYW55IChiZXR0ZXIgaW5mbykKLSAgICAgIH0KLQotICAgICAgaWYg
KHR5cGVvZiBldmVudEFyZ3NbZXZlbnRBcmdzLmxlbmd0aCAtIDFdID09ICdvYmplY3QnKSB7Ci0g
ICAgICAgIGV2ZW50QXJncy5wb3AoKTsgLy8gdHJpZ2dlciBkYXRhIGFyZyAtIG5vdCBsb2dnZWQg
cmlnaHQgbm93Ci0gICAgICB9Ci0KLSAgICAgIGlmIChldmVudEFyZ3MubGVuZ3RoID09IDIpIHsK
LSAgICAgICAgZWxlbSA9IGV2ZW50QXJnc1swXTsKLSAgICAgICAgbmFtZSA9IGV2ZW50QXJnc1sx
XTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGVsZW0gPSBjb21wb25lbnQuJG5vZGVbMF07Ci0g
ICAgICAgIG5hbWUgPSBldmVudEFyZ3NbMF07Ci0gICAgICB9Ci0KLSAgICAgIGlmICh3aW5kb3cu
REVCVUcgJiYgd2luZG93LkRFQlVHLmVuYWJsZWQpIHsKLSAgICAgICAgbG9nRmlsdGVyID0gREVC
VUcuZXZlbnRzLmxvZ0ZpbHRlcjsKLQotICAgICAgICAvLyBubyByZWdleCBmb3IgeW91LCBhY3Rp
b25zLi4uCi0gICAgICAgIGFjdGlvbkxvZ2dhYmxlID0gbG9nRmlsdGVyLmFjdGlvbnMgPT0gJ2Fs
bCcgfHwgKGxvZ0ZpbHRlci5hY3Rpb25zLmluZGV4T2YoYWN0aW9uKSA+IC0xKTsKLSAgICAgICAg
Ly8gZXZlbnQgbmFtZSBmaWx0ZXIgYWxsb3cgd2lsZGNhcmRzIG9yIHJlZ2V4Li4uCi0gICAgICAg
IHRvUmVnRXhwID0gZnVuY3Rpb24oZXhwcikgewotICAgICAgICAgIHJldHVybiBleHByLnRlc3Qg
PyBleHByIDogbmV3IFJlZ0V4cCgnXicgKyBleHByLnJlcGxhY2UoL1wqL2csICcuKicpICsgJyQn
KTsKLSAgICAgICAgfTsKLSAgICAgICAgbmFtZUxvZ2dhYmxlID0KLSAgICAgICAgICBsb2dGaWx0
ZXIuZXZlbnROYW1lcyA9PSAnYWxsJyB8fAotICAgICAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVz
LnNvbWUoZnVuY3Rpb24oZSkge3JldHVybiB0b1JlZ0V4cChlKS50ZXN0KG5hbWUpO30pOwotCi0g
ICAgICAgIGlmIChhY3Rpb25Mb2dnYWJsZSAmJiBuYW1lTG9nZ2FibGUpIHsKLSAgICAgICAgICBj
b25zb2xlLmluZm8oCi0gICAgICAgICAgICBhY3Rpb25TeW1ib2xzW2FjdGlvbl0sCi0gICAgICAg
ICAgICBhY3Rpb24sCi0gICAgICAgICAgICAnWycgKyBuYW1lICsgJ10nLAotICAgICAgICAgICAg
ZWxlbVRvU3RyaW5nKGVsZW0pLAotICAgICAgICAgICAgY29tcG9uZW50LmNvbnN0cnVjdG9yLmRl
c2NyaWJlLnNwbGl0KCcgJykuc2xpY2UoMCwzKS5qb2luKCcgJykgLy8gdHdvIG1peGlucyBvbmx5
Ci0gICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHdpdGhMb2dnaW5nKCkgewotICAgICAgdGhpcy5iZWZvcmUoJ3RyaWdnZXInLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgbG9nKCd0cmlnZ2VyJywgdGhpcywgdXRpbHMudG9BcnJheShhcmd1bWVudHMp
KTsKLSAgICAgIH0pOwotICAgICAgdGhpcy5iZWZvcmUoJ29uJywgZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIGxvZygnb24nLCB0aGlzLCB1dGlscy50b0FycmF5KGFyZ3VtZW50cykpOwotICAgICAgfSk7
Ci0gICAgICB0aGlzLmJlZm9yZSgnb2ZmJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGxvZygnb2Zm
JywgdGhpcywgdXRpbHMudG9BcnJheShhcmd1bWVudHMpKTsKLSAgICAgIH0pOwotICAgIH0KLQot
ICAgIHJldHVybiB3aXRoTG9nZ2luZzsKLSAgfQotKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvYm93ZXJfY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNmE2ODFhZGY0M2EzODJjZTlkYjQxMjFkZjZjMDgxNjA4
NjdkNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMKKysr
IC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0vLyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKLS8vIExp
Y2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQotLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xp
Y2Vuc2VzL01JVAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0KLWRlZmluZSgKLQotICBbXSwKLQotICBmdW5jdGlvbigpIHsKLSAgICAndXNlIHN0cmljdCc7
Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUV2ZW50QXJncyhpbnN0YW5jZSwgYXJncykgewotICAgICAg
dmFyIGVsZW1lbnQsIHR5cGUsIGNhbGxiYWNrOwotICAgICAgdmFyIGVuZCA9IGFyZ3MubGVuZ3Ro
OwotCi0gICAgICBpZiAodHlwZW9mIGFyZ3NbZW5kIC0gMV0gPT09ICdmdW5jdGlvbicpIHsKLSAg
ICAgICAgZW5kIC09IDE7Ci0gICAgICAgIGNhbGxiYWNrID0gYXJnc1tlbmRdOwotICAgICAgfQot
Ci0gICAgICBpZiAodHlwZW9mIGFyZ3NbZW5kIC0gMV0gPT09ICdvYmplY3QnKSB7Ci0gICAgICAg
IGVuZCAtPSAxOwotICAgICAgfQotCi0gICAgICBpZiAoZW5kID09IDIpIHsKLSAgICAgICAgZWxl
bWVudCA9IGFyZ3NbMF07Ci0gICAgICAgIHR5cGUgPSBhcmdzWzFdOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgZWxlbWVudCA9IGluc3RhbmNlLm5vZGU7Ci0gICAgICAgIHR5cGUgPSBhcmdzWzBd
OwotICAgICAgfQotCi0gICAgICByZXR1cm4gewotICAgICAgICBlbGVtZW50OiBlbGVtZW50LAot
ICAgICAgICB0eXBlOiB0eXBlLAotICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sKLSAgICAgIH07
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gbWF0Y2hFdmVudChhLCBiKSB7Ci0gICAgICByZXR1cm4g
KAotICAgICAgICAoYS5lbGVtZW50ID09IGIuZWxlbWVudCkgJiYKLSAgICAgICAgKGEudHlwZSA9
PSBiLnR5cGUpICYmCi0gICAgICAgIChiLmNhbGxiYWNrID09IG51bGwgfHwgKGEuY2FsbGJhY2sg
PT0gYi5jYWxsYmFjaykpCi0gICAgICApOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIFJlZ2lzdHJ5
KCkgewotCi0gICAgICB2YXIgcmVnaXN0cnkgPSB0aGlzOwotCi0gICAgICAodGhpcy5yZXNldCA9
IGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLmNvbXBvbmVudHMgPSBbXTsKLSAgICAgICAgdGhp
cy5hbGxJbnN0YW5jZXMgPSB7fTsKLSAgICAgICAgdGhpcy5ldmVudHMgPSBbXTsKLSAgICAgIH0p
LmNhbGwodGhpcyk7Ci0KLSAgICAgIGZ1bmN0aW9uIENvbXBvbmVudEluZm8oY29tcG9uZW50KSB7
Ci0gICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50OwotICAgICAgICB0aGlzLmF0dGFj
aGVkVG8gPSBbXTsKLSAgICAgICAgdGhpcy5pbnN0YW5jZXMgPSB7fTsKLQotICAgICAgICB0aGlz
LmFkZEluc3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKLSAgICAgICAgICB2YXIgaW5zdGFu
Y2VJbmZvID0gbmV3IEluc3RhbmNlSW5mbyhpbnN0YW5jZSk7Ci0gICAgICAgICAgdGhpcy5pbnN0
YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldID0gaW5zdGFuY2VJbmZvOwotICAgICAgICAgIHRoaXMu
YXR0YWNoZWRUby5wdXNoKGluc3RhbmNlLm5vZGUpOwotCi0gICAgICAgICAgcmV0dXJuIGluc3Rh
bmNlSW5mbzsKLSAgICAgICAgfTsKLQotICAgICAgICB0aGlzLnJlbW92ZUluc3RhbmNlID0gZnVu
Y3Rpb24oaW5zdGFuY2UpIHsKLSAgICAgICAgICBkZWxldGUgdGhpcy5pbnN0YW5jZXNbaW5zdGFu
Y2UuaWRlbnRpdHldOwotICAgICAgICAgIHZhciBpbmRleE9mTm9kZSA9IHRoaXMuYXR0YWNoZWRU
by5pbmRleE9mKGluc3RhbmNlLm5vZGUpOwotICAgICAgICAgIChpbmRleE9mTm9kZSA+IC0xKSAm
JiB0aGlzLmF0dGFjaGVkVG8uc3BsaWNlKGluZGV4T2ZOb2RlLCAxKTsKLQotICAgICAgICAgIGlm
ICghT2JqZWN0LmtleXModGhpcy5pbnN0YW5jZXMpLmxlbmd0aCkgewotICAgICAgICAgICAgLy9p
ZiBJIGhvbGQgbm8gbW9yZSBpbnN0YW5jZXMgcmVtb3ZlIG1lIGZyb20gcmVnaXN0cnkKLSAgICAg
ICAgICAgIHJlZ2lzdHJ5LnJlbW92ZUNvbXBvbmVudEluZm8odGhpcyk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9OwotCi0gICAgICAgIHRoaXMuaXNBdHRhY2hlZFRvID0gZnVuY3Rpb24obm9kZSkg
ewotICAgICAgICAgIHJldHVybiB0aGlzLmF0dGFjaGVkVG8uaW5kZXhPZihub2RlKSA+IC0xOwot
ICAgICAgICB9OwotICAgICAgfQotCi0gICAgICBmdW5jdGlvbiBJbnN0YW5jZUluZm8oaW5zdGFu
Y2UpIHsKLSAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlOwotICAgICAgICB0aGlzLmV2
ZW50cyA9IFtdOwotCi0gICAgICAgIHRoaXMuYWRkQmluZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Ci0g
ICAgICAgICAgdGhpcy5ldmVudHMucHVzaChldmVudCk7Ci0gICAgICAgICAgcmVnaXN0cnkuZXZl
bnRzLnB1c2goZXZlbnQpOwotICAgICAgICB9OwotCi0gICAgICAgIHRoaXMucmVtb3ZlQmluZCA9
IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGU7IGUgPSB0aGlz
LmV2ZW50c1tpXTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2hFdmVudChlLCBldmVudCkp
IHsKLSAgICAgICAgICAgICAgdGhpcy5ldmVudHMuc3BsaWNlKGksIDEpOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5hZGRJbnN0
YW5jZSA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7Ci0gICAgICAgIHZhciBjb21wb25lbnQgPSB0aGlz
LmZpbmRDb21wb25lbnRJbmZvKGluc3RhbmNlKTsKLQotICAgICAgICBpZiAoIWNvbXBvbmVudCkg
ewotICAgICAgICAgIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRJbmZvKGluc3RhbmNlLmNvbnN0
cnVjdG9yKTsKLSAgICAgICAgICB0aGlzLmNvbXBvbmVudHMucHVzaChjb21wb25lbnQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIGluc3QgPSBjb21wb25lbnQuYWRkSW5zdGFuY2UoaW5zdGFu
Y2UpOwotCi0gICAgICAgIHRoaXMuYWxsSW5zdGFuY2VzW2luc3RhbmNlLmlkZW50aXR5XSA9IGlu
c3Q7Ci0KLSAgICAgICAgcmV0dXJuIGNvbXBvbmVudDsKLSAgICAgIH07Ci0KLSAgICAgIHRoaXMu
cmVtb3ZlSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgewotICAgICAgICB2YXIgaW5kZXgs
IGluc3RJbmZvID0gdGhpcy5maW5kSW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKLQotICAgICAgICAv
L3JlbW92ZSBmcm9tIGNvbXBvbmVudCBpbmZvCi0gICAgICAgIHZhciBjb21wb25lbnRJbmZvID0g
dGhpcy5maW5kQ29tcG9uZW50SW5mbyhpbnN0YW5jZSk7Ci0gICAgICAgIGNvbXBvbmVudEluZm8g
JiYgY29tcG9uZW50SW5mby5yZW1vdmVJbnN0YW5jZShpbnN0YW5jZSk7Ci0KLSAgICAgICAgLy9y
ZW1vdmUgZnJvbSByZWdpc3RyeQotICAgICAgICBkZWxldGUgdGhpcy5hbGxJbnN0YW5jZXNbaW5z
dGFuY2UuaWRlbnRpdHldOwotICAgICAgfTsKLQotICAgICAgdGhpcy5yZW1vdmVDb21wb25lbnRJ
bmZvID0gZnVuY3Rpb24oY29tcG9uZW50SW5mbykgewotICAgICAgICB2YXIgaW5kZXggPSB0aGlz
LmNvbXBvbmVudHMuaW5kZXhPZihjb21wb25lbnRJbmZvKTsKLSAgICAgICAgKGluZGV4ID4gLTEp
ICYmIHRoaXMuY29tcG9uZW50cy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgfTsKLQotICAgICAg
dGhpcy5maW5kQ29tcG9uZW50SW5mbyA9IGZ1bmN0aW9uKHdoaWNoKSB7Ci0gICAgICAgIHZhciBj
b21wb25lbnQgPSB3aGljaC5hdHRhY2hUbyA/IHdoaWNoIDogd2hpY2guY29uc3RydWN0b3I7Ci0K
LSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGM7IGMgPSB0aGlzLmNvbXBvbmVudHNbaV07IGkrKykg
ewotICAgICAgICAgIGlmIChjLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KSB7Ci0gICAgICAgICAg
ICByZXR1cm4gYzsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgIH07Ci0KLSAgICAgIHRoaXMuZmluZEluc3RhbmNlSW5mbyA9IGZ1bmN0aW9uKGlu
c3RhbmNlKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmFsbEluc3RhbmNlc1tpbnN0YW5jZS5pZGVu
dGl0eV0gfHwgbnVsbDsKLSAgICAgIH07Ci0KLSAgICAgIHRoaXMuZmluZEluc3RhbmNlSW5mb0J5
Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAg
ICBPYmplY3Qua2V5cyh0aGlzLmFsbEluc3RhbmNlcykuZm9yRWFjaChmdW5jdGlvbihrKSB7Ci0g
ICAgICAgICAgdmFyIHRoaXNJbnN0YW5jZUluZm8gPSB0aGlzLmFsbEluc3RhbmNlc1trXTsKLSAg
ICAgICAgICBpZiAodGhpc0luc3RhbmNlSW5mby5pbnN0YW5jZS5ub2RlID09PSBub2RlKSB7Ci0g
ICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzSW5zdGFuY2VJbmZvKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0sIHRoaXMpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgfTsKLQotICAg
ICAgdGhpcy5vbiA9IGZ1bmN0aW9uKGNvbXBvbmVudE9uKSB7Ci0gICAgICAgIHZhciBpbnN0YW5j
ZSA9IHJlZ2lzdHJ5LmZpbmRJbnN0YW5jZUluZm8odGhpcyksIGJvdW5kQ2FsbGJhY2s7Ci0KLSAg
ICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3Rlcgot
ICAgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSAxOwotICAgICAgICB2YXIgb3Ro
ZXJBcmdzID0gbmV3IEFycmF5KGwgLSAxKTsKLSAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIG90
aGVyQXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07Ci0KLSAgICAgICAgaWYgKGluc3RhbmNlKSB7
Ci0gICAgICAgICAgYm91bmRDYWxsYmFjayA9IGNvbXBvbmVudE9uLmFwcGx5KG51bGwsIG90aGVy
QXJncyk7Ci0gICAgICAgICAgaWYgKGJvdW5kQ2FsbGJhY2spIHsKLSAgICAgICAgICAgIG90aGVy
QXJnc1tvdGhlckFyZ3MubGVuZ3RoLTFdID0gYm91bmRDYWxsYmFjazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgdmFyIGV2ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgb3RoZXJBcmdzKTsKLSAg
ICAgICAgICBpbnN0YW5jZS5hZGRCaW5kKGV2ZW50KTsKLSAgICAgICAgfQotICAgICAgfTsKLQot
ICAgICAgdGhpcy5vZmYgPSBmdW5jdGlvbigvKmVsLCB0eXBlLCBjYWxsYmFjayovKSB7Ci0gICAg
ICAgIHZhciBldmVudCA9IHBhcnNlRXZlbnRBcmdzKHRoaXMsIGFyZ3VtZW50cyksCi0gICAgICAg
ICAgICBpbnN0YW5jZSA9IHJlZ2lzdHJ5LmZpbmRJbnN0YW5jZUluZm8odGhpcyk7Ci0KLSAgICAg
ICAgaWYgKGluc3RhbmNlKSB7Ci0gICAgICAgICAgaW5zdGFuY2UucmVtb3ZlQmluZChldmVudCk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvL3JlbW92ZSBmcm9tIGdsb2JhbCBldmVudCByZWdpc3Ry
eQotICAgICAgICBmb3IgKHZhciBpID0gMCwgZTsgZSA9IHJlZ2lzdHJ5LmV2ZW50c1tpXTsgaSsr
KSB7Ci0gICAgICAgICAgaWYgKG1hdGNoRXZlbnQoZSwgZXZlbnQpKSB7Ci0gICAgICAgICAgICBy
ZWdpc3RyeS5ldmVudHMuc3BsaWNlKGksIDEpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfTsKLQotICAgICAgLy8gZGVidWcgdG9vbHMgbWF5IHdhbnQgdG8gYWRkIGFkdmljZSB0byB0
cmlnZ2VyCi0gICAgICByZWdpc3RyeS50cmlnZ2VyID0gZnVuY3Rpb24oKSB7fTsKLQotICAgICAg
dGhpcy50ZWFyZG93biA9IGZ1bmN0aW9uKCkgewotICAgICAgICByZWdpc3RyeS5yZW1vdmVJbnN0
YW5jZSh0aGlzKTsKLSAgICAgIH07Ci0KLSAgICAgIHRoaXMud2l0aFJlZ2lzdHJhdGlvbiA9IGZ1
bmN0aW9uKCkgewotICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgcmVnaXN0cnkuYWRkSW5zdGFuY2UodGhpcyk7Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIHRoaXMuYXJvdW5kKCdvbicsIHJlZ2lzdHJ5Lm9uKTsKLSAgICAgICAgdGhpcy5hZnRl
cignb2ZmJywgcmVnaXN0cnkub2ZmKTsKLSAgICAgICAgLy9kZWJ1ZyB0b29scyBtYXkgd2FudCB0
byBhZGQgYWR2aWNlIHRvIHRyaWdnZXIKLSAgICAgICAgd2luZG93LkRFQlVHICYmIERFQlVHLmVu
YWJsZWQgJiYgdGhpcy5hZnRlcigndHJpZ2dlcicsIHJlZ2lzdHJ5LnRyaWdnZXIpOwotICAgICAg
ICB0aGlzLmFmdGVyKCd0ZWFyZG93bicsIHtvYmo6IHJlZ2lzdHJ5LCBmbk5hbWU6ICd0ZWFyZG93
bid9KTsKLSAgICAgIH07Ci0KLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IFJlZ2lzdHJ5OwotICB9
Ci0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2ZsaWdo
dC9saWIvdXRpbHMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0
L2xpYi91dGlscy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmMDRkNTkwZGY4
OTc3NDczMmE3NjM0NmI4NTc2MzdlNWE2NDYxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvZmxp
Z2h0L2xpYi91dGlscy5qcworKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIENvcHlyaWdodCAyMDEz
IFR3aXR0ZXIsIEluYwotLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCi0vLyBodHRw
Oi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi0vLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQotZGVmaW5lKAotCi0gIFtdLAotCi0gIGZ1bmN0aW9uKCkg
ewotICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHZhciBhcnJ5ID0gW107Ci0gICAgdmFyIERFRkFV
TFRfSU5URVJWQUwgPSAxMDA7Ci0KLSAgICB2YXIgdXRpbHMgPSB7Ci0KLSAgICAgIGlzRG9tT2Jq
OiBmdW5jdGlvbihvYmopIHsKLSAgICAgICAgcmV0dXJuICEhKG9iai5ub2RlVHlwZSB8fCAob2Jq
ID09PSB3aW5kb3cpKTsKLSAgICAgIH0sCi0KLSAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uKG9iaiwg
ZnJvbSkgewotICAgICAgICByZXR1cm4gYXJyeS5zbGljZS5jYWxsKG9iaiwgZnJvbSk7Ci0gICAg
ICB9LAotCi0gICAgICAvLyByZXR1cm5zIG5ldyBvYmplY3QgcmVwcmVzZW50aW5nIG11bHRpcGxl
IG9iamVjdHMgbWVyZ2VkIHRvZ2V0aGVyCi0gICAgICAvLyBvcHRpb25hbCBmaW5hbCBhcmd1bWVu
dCBpcyBib29sZWFuIHdoaWNoIHNwZWNpZmllcyBpZiBtZXJnZSBpcyByZWN1cnNpdmUKLSAgICAg
IC8vIG9yaWdpbmFsIG9iamVjdHMgYXJlIHVubW9kaWZpZWQKLSAgICAgIC8vCi0gICAgICAvLyB1
c2FnZToKLSAgICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OwotICAgICAgLy8gICB2YXIg
ZXh0cmEgPSB7YjozLCBjOjR9OwotICAgICAgLy8gICBtZXJnZShiYXNlLCBleHRyYSk7IC8ve2E6
MiwgYjozLCBjOjR9Ci0gICAgICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2fQotICAgICAgLy8KLSAg
ICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OwotICAgICAgLy8gICB2YXIgZXh0cmEgPSB7
YjozLCBjOjR9OwotICAgICAgLy8gICB2YXIgZXh0cmFFeHRyYSA9IHthOjQsIGQ6OX07Ci0gICAg
ICAvLyAgIG1lcmdlKGJhc2UsIGV4dHJhLCBleHRyYUV4dHJhKTsgLy97YTo0LCBiOjMsIGM6NC4g
ZDogOX0KLSAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9Ci0gICAgICAvLwotICAgICAgLy8g
ICB2YXIgYmFzZSA9IHthOjIsIGI6e2JiOjQsIGNjOjV9fTsKLSAgICAgIC8vICAgdmFyIGV4dHJh
ID0ge2E6NCwgYjp7Y2M6NywgZGQ6MX19OwotICAgICAgLy8gICBtZXJnZShiYXNlLCBleHRyYSwg
dHJ1ZSk7IC8ve2E6NCwgYjp7YmI6NCwgY2M6NywgZGQ6MX19Ci0gICAgICAvLyAgIGJhc2U7IC8v
e2E6MiwgYjo2fQotCi0gICAgICBtZXJnZTogZnVuY3Rpb24oLypvYmoxLCBvYmoyLC4uLi5kZWVw
Q29weSovKSB7Ci0gICAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1h
cmtlZCBmYXN0ZXIKLSAgICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoLAotICAgICAgICAg
ICAgaSA9IDAsCi0gICAgICAgICAgICBhcmdzID0gbmV3IEFycmF5KGwgKyAxKTsKLSAgICAgICAg
Zm9yICg7IGkgPCBsOyBpKyspIGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldOwotCi0gICAgICAg
IGlmIChsID09PSAwKSB7Ci0gICAgICAgICAgcmV0dXJuIHt9OwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy9zdGFydCB3aXRoIGVtcHR5IG9iamVjdCBzbyBhIGNvcHkgaXMgY3JlYXRlZAotICAgICAg
ICBhcmdzWzBdID0ge307Ci0KLSAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0g
dHJ1ZSkgewotICAgICAgICAgIC8vanF1ZXJ5IGV4dGVuZCByZXF1aXJlcyBkZWVwIGNvcHkgYXMg
Zmlyc3QgYXJnCi0gICAgICAgICAgYXJncy5wb3AoKTsKLSAgICAgICAgICBhcmdzLnVuc2hpZnQo
dHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gJC5leHRlbmQuYXBwbHkodW5kZWZp
bmVkLCBhcmdzKTsKLSAgICAgIH0sCi0KLSAgICAgIC8vIHVwZGF0ZXMgYmFzZSBpbiBwbGFjZSBi
eSBjb3B5aW5nIHByb3BlcnRpZXMgb2YgZXh0cmEgdG8gaXQKLSAgICAgIC8vIG9wdGlvbmFsbHkg
Y2xvYmJlciBwcm90ZWN0ZWQKLSAgICAgIC8vIHVzYWdlOgotICAgICAgLy8gICB2YXIgYmFzZSA9
IHthOjIsIGI6Nn07Ci0gICAgICAvLyAgIHZhciBleHRyYSA9IHtjOjR9OwotICAgICAgLy8gICBw
dXNoKGJhc2UsIGV4dHJhKTsgLy97YToyLCBiOjYsIGM6NH0KLSAgICAgIC8vICAgYmFzZTsgLy97
YToyLCBiOjYsIGM6NH0KLSAgICAgIC8vCi0gICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2
fTsKLSAgICAgIC8vICAgdmFyIGV4dHJhID0ge2I6IDQgYzo0fTsKLSAgICAgIC8vICAgcHVzaChi
YXNlLCBleHRyYSwgdHJ1ZSk7IC8vRXJyb3IgKCJ1dGlscy5wdXNoIGF0dGVtcHRlZCB0byBvdmVy
d3JpdGUgJ2InIHdoaWxlIHJ1bm5pbmcgaW4gcHJvdGVjdGVkIG1vZGUiKQotICAgICAgLy8gICBi
YXNlOyAvL3thOjIsIGI6Nn0KLSAgICAgIC8vCi0gICAgICAvLyBvYmplY3RzIHdpdGggdGhlIHNh
bWUga2V5IHdpbGwgbWVyZ2UgcmVjdXJzaXZlbHkgd2hlbiBwcm90ZWN0IGlzIGZhbHNlCi0gICAg
ICAvLyBlZzoKLSAgICAgIC8vIHZhciBiYXNlID0ge2E6MTYsIGI6e2JiOjQsIGNjOjEwfX07Ci0g
ICAgICAvLyB2YXIgZXh0cmEgPSB7Yjp7Y2M6MjUsIGRkOjE5fSwgYzo1fTsKLSAgICAgIC8vIHB1
c2goYmFzZSwgZXh0cmEpOyAvL3thOjE2LCB7YmI6NCwgY2M6MjUsIGRkOjE5fSwgYzo1fQotICAg
ICAgLy8KLSAgICAgIHB1c2g6IGZ1bmN0aW9uKGJhc2UsIGV4dHJhLCBwcm90ZWN0KSB7Ci0gICAg
ICAgIGlmIChiYXNlKSB7Ci0gICAgICAgICAgT2JqZWN0LmtleXMoZXh0cmEgfHwge30pLmZvckVh
Y2goZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgICAgICBpZiAoYmFzZVtrZXldICYmIHByb3RlY3Qp
IHsKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1dGlscy5wdXNoIGF0dGVtcHRlZCB0
byBvdmVyd3JpdGUgIicgKyBrZXkgKyAnIiB3aGlsZSBydW5uaW5nIGluIHByb3RlY3RlZCBtb2Rl
Jyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVtrZXldID09
ICdvYmplY3QnICYmIHR5cGVvZiBleHRyYVtrZXldID09ICdvYmplY3QnKSB7Ci0gICAgICAgICAg
ICAgIC8vIHJlY3Vyc2UKLSAgICAgICAgICAgICAgdGhpcy5wdXNoKGJhc2Vba2V5XSwgZXh0cmFb
a2V5XSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvLyBubyBwcm90ZWN0
LCBzbyBleHRyYSB3aW5zCi0gICAgICAgICAgICAgIGJhc2Vba2V5XSA9IGV4dHJhW2tleV07Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgdGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gYmFzZTsKLSAgICAgIH0sCi0KLSAgICAgIGlzRW51bWVyYWJsZTogZnVuY3Rpb24ob2Jq
LCBwcm9wZXJ0eSkgewotICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5pbmRleE9mKHBy
b3BlcnR5KSA+IC0xOwotICAgICAgfSwKLQotICAgICAgLy8gYnVpbGQgYSBmdW5jdGlvbiBmcm9t
IG90aGVyIGZ1bmN0aW9uKHMpCi0gICAgICAvLyB1dGlscy5jb21wb3NlKGEsYixjKSAtPiBhKGIo
YygpKSk7Ci0gICAgICAvLyBpbXBsZW1lbnRhdGlvbiBsaWZ0ZWQgZnJvbSB1bmRlcnNjb3JlLmpz
IChjKSAyMDA5LTIwMTIgSmVyZW15IEFzaGtlbmFzCi0gICAgICBjb21wb3NlOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgdmFyIGZ1bmNzID0gYXJndW1lbnRzOwotCi0gICAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50czsKLQotICAgICAgICAgIGZv
ciAodmFyIGkgPSBmdW5jcy5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGFy
Z3MgPSBbZnVuY3NbaV0uYXBwbHkodGhpcywgYXJncyldOwotICAgICAgICAgIH0KLQotICAgICAg
ICAgIHJldHVybiBhcmdzWzBdOwotICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgLy8gQ2Fu
IG9ubHkgdW5pcXVlIGFycmF5cyBvZiBob21vZ2VuZW91cyBwcmltaXRpdmVzLCBlLmcuIGFuIGFy
cmF5IG9mIG9ubHkgc3RyaW5ncywgYW4gYXJyYXkgb2Ygb25seSBib29sZWFucywgb3IgYW4gYXJy
YXkgb2Ygb25seSBudW1lcmljcwotICAgICAgdW5pcXVlQXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7
Ci0gICAgICAgIHZhciB1ID0ge30sIGEgPSBbXTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMCwg
bCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAgICAgICAgIGlmICh1Lmhhc093blBy
b3BlcnR5KGFycmF5W2ldKSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQot
Ci0gICAgICAgICAgYS5wdXNoKGFycmF5W2ldKTsKLSAgICAgICAgICB1W2FycmF5W2ldXSA9IDE7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYTsKLSAgICAgIH0sCi0KLSAgICAgIGRlYm91
bmNlOiBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHsKLSAgICAgICAgaWYgKHR5cGVv
ZiB3YWl0ICE9ICdudW1iZXInKSB7Ci0gICAgICAgICAgd2FpdCA9IERFRkFVTFRfSU5URVJWQUw7
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdGltZW91dCwgcmVzdWx0OwotCi0gICAgICAgIHJl
dHVybiBmdW5jdGlvbigpIHsKLSAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBh
cmd1bWVudHM7Ci0gICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICB0aW1lb3V0ID0gbnVsbDsKLSAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7Ci0gICAgICAg
ICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgfTsKLSAgICAgICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGlt
ZW91dDsKLQotICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKLSAgICAgICAgICB0aW1l
b3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7Ci0KLSAgICAgICAgICBpZiAoY2FsbE5vdykg
ewotICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKLSAgICAg
ICAgICB9Ci0KLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgICAgfSwK
LQotICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHsKLSAgICAgICAgaWYgKHR5
cGVvZiB3YWl0ICE9ICdudW1iZXInKSB7Ci0gICAgICAgICAgd2FpdCA9IERFRkFVTFRfSU5URVJW
QUw7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgdGhy
b3R0bGluZywgbW9yZSwgcmVzdWx0OwotICAgICAgICB2YXIgd2hlbkRvbmUgPSB0aGlzLmRlYm91
bmNlKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgbW9yZSA9IHRocm90dGxpbmcgPSBmYWxzZTsKLSAg
ICAgICAgfSwgd2FpdCk7Ci0KLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAg
IGNvbnRleHQgPSB0aGlzOyBhcmdzID0gYXJndW1lbnRzOwotICAgICAgICAgIHZhciBsYXRlciA9
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdGltZW91dCA9IG51bGw7Ci0gICAgICAgICAgICBp
ZiAobW9yZSkgewotICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFy
Z3MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hlbkRvbmUoKTsKLSAgICAgICAgICB9
OwotCi0gICAgICAgICAgaWYgKCF0aW1lb3V0KSB7Ci0gICAgICAgICAgICB0aW1lb3V0ID0gc2V0
VGltZW91dChsYXRlciwgd2FpdCk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHRocm90
dGxpbmcpIHsKLSAgICAgICAgICAgIG1vcmUgPSB0cnVlOwotICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICB0aHJvdHRsaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMu
YXBwbHkoY29udGV4dCwgYXJncyk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgd2hlbkRvbmUo
KTsKLSAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9OwotICAgICAgfSwKLQotICAg
ICAgY291bnRUaGVuOiBmdW5jdGlvbihudW0sIGJhc2UpIHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgewotICAgICAgICAgIGlmICghLS1udW0pIHsgcmV0dXJuIGJhc2UuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsgfQotICAgICAgICB9OwotICAgICAgfSwKLQotICAgICAgZGVsZWdhdGU6IGZ1
bmN0aW9uKHJ1bGVzKSB7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbihlLCBkYXRhKSB7Ci0gICAg
ICAgICAgdmFyIHRhcmdldCA9ICQoZS50YXJnZXQpLCBwYXJlbnQ7Ci0KLSAgICAgICAgICBPYmpl
Y3Qua2V5cyhydWxlcykuZm9yRWFjaChmdW5jdGlvbihzZWxlY3RvcikgewotICAgICAgICAgICAg
aWYgKChwYXJlbnQgPSB0YXJnZXQuY2xvc2VzdChzZWxlY3RvcikpLmxlbmd0aCkgewotICAgICAg
ICAgICAgICBkYXRhID0gZGF0YSB8fCB7fTsKLSAgICAgICAgICAgICAgZGF0YS5lbCA9IHBhcmVu
dFswXTsKLSAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzW3NlbGVjdG9yXS5hcHBseSh0aGlzLCBb
ZSwgZGF0YV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHRoaXMpOwotICAgICAgICB9
OwotICAgICAgfQotCi0gICAgfTsKLQotICAgIHJldHVybiB1dGlsczsKLSAgfQotKTsKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5Lmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MzE4NTE5ZTg4ZGE2MTZkMzgxYWViMWMxNjA1
MmU2MjgxYmFkNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw5NDcyICswLDAgQEAKLS8qIQotICogalF1ZXJ5IEphdmFTY3JpcHQg
TGlicmFyeSB2MS44LjMKLSAqIGh0dHA6Ly9qcXVlcnkuY29tLwotICoKLSAqIEluY2x1ZGVzIFNp
enpsZS5qcwotICogaHR0cDovL3NpenpsZWpzLmNvbS8KLSAqCi0gKiBDb3B5cmlnaHQgMjAxMiBq
UXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCi0gKiBSZWxlYXNlZCB1bmRl
ciB0aGUgTUlUIGxpY2Vuc2UKLSAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKLSAqCi0gKiBE
YXRlOiBUdWUgTm92IDEzIDIwMTIgMDg6MjA6MzMgR01ULTA1MDAgKEVhc3Rlcm4gU3RhbmRhcmQg
VGltZSkKLSAqLwotKGZ1bmN0aW9uKCB3aW5kb3csIHVuZGVmaW5lZCApIHsKLXZhcgotICAgICAg
ICAvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKLSAg
ICAgICAgcm9vdGpRdWVyeSwKLQotICAgICAgICAvLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00g
cmVhZHkKLSAgICAgICAgcmVhZHlMaXN0LAotCi0gICAgICAgIC8vIFVzZSB0aGUgY29ycmVjdCBk
b2N1bWVudCBhY2NvcmRpbmdseSB3aXRoIHdpbmRvdyBhcmd1bWVudCAoc2FuZGJveCkKLSAgICAg
ICAgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsCi0gICAgICAgIGxvY2F0aW9uID0gd2luZG93
LmxvY2F0aW9uLAotICAgICAgICBuYXZpZ2F0b3IgPSB3aW5kb3cubmF2aWdhdG9yLAotCi0gICAg
ICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQotICAgICAgICBfalF1
ZXJ5ID0gd2luZG93LmpRdWVyeSwKLQotICAgICAgICAvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNl
IG9mIG92ZXJ3cml0ZQotICAgICAgICBfJCA9IHdpbmRvdy4kLAotCi0gICAgICAgIC8vIFNhdmUg
YSByZWZlcmVuY2UgdG8gc29tZSBjb3JlIG1ldGhvZHMKLSAgICAgICAgY29yZV9wdXNoID0gQXJy
YXkucHJvdG90eXBlLnB1c2gsCi0gICAgICAgIGNvcmVfc2xpY2UgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UsCi0gICAgICAgIGNvcmVfaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLAot
ICAgICAgICBjb3JlX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKLSAgICAg
ICAgY29yZV9oYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LAotICAgICAg
ICBjb3JlX3RyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRyaW0sCi0KLSAgICAgICAgLy8gRGVmaW5l
IGEgbG9jYWwgY29weSBvZiBqUXVlcnkKLSAgICAgICAgalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVj
dG9yLCBjb250ZXh0ICkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlz
IGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJwotICAgICAgICAg
ICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0LCByb290
alF1ZXJ5ICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gVXNlZCBmb3IgbWF0Y2hpbmcgbnVt
YmVycwotICAgICAgICBjb3JlX3BudW0gPSAvW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0r
XT9cZCt8KS8uc291cmNlLAotCi0gICAgICAgIC8vIFVzZWQgZm9yIGRldGVjdGluZyBhbmQgdHJp
bW1pbmcgd2hpdGVzcGFjZQotICAgICAgICBjb3JlX3Jub3R3aGl0ZSA9IC9cUy8sCi0gICAgICAg
IGNvcmVfcnNwYWNlID0gL1xzKy8sCi0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9N
IGFuZCBOQlNQIChoZXJlJ3MgbG9va2luZyBhdCB5b3UsIFNhZmFyaSA1LjAgYW5kIElFKQotICAg
ICAgICBydHJpbSA9IC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywKLQotICAg
ICAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5ncwotICAgICAgICAv
LyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFz
aCAoIzk1MjEpCi0gICAgICAgIHJxdWlja0V4cHIgPSAvXig/OlteIzxdKig8W1x3XFddKz4pW14+
XSokfCMoW1x3XC1dKikkKS8sCi0KLSAgICAgICAgLy8gTWF0Y2ggYSBzdGFuZGFsb25lIHRhZwot
ICAgICAgICByc2luZ2xlVGFnID0gL148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLywKLQotICAg
ICAgICAvLyBKU09OIFJlZ0V4cAotICAgICAgICBydmFsaWRjaGFycyA9IC9eW1xdLDp7fVxzXSok
LywKLSAgICAgICAgcnZhbGlkYnJhY2VzID0gLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywKLSAgICAg
ICAgcnZhbGlkZXNjYXBlID0gL1xcKD86WyJcXFwvYmZucnRdfHVbXGRhLWZBLUZdezR9KS9nLAot
ICAgICAgICBydmFsaWR0b2tlbnMgPSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8o
PzpcZFxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQrfCkvZywKLQotICAgICAgICAvLyBNYXRjaGVz
IGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKLSAgICAgICAgcm1zUHJlZml4ID0gL14tbXMt
LywKLSAgICAgICAgcmRhc2hBbHBoYSA9IC8tKFtcZGEtel0pL2dpLAotCi0gICAgICAgIC8vIFVz
ZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKCkKLSAgICAgICAg
ZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gKCBsZXR0ZXIgKyAiIiApLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2QKLSAg
ICAgICAgRE9NQ29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlm
ICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29u
dGVudExvYWRlZCwgZmFsc2UgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFk
eSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09
ICJjb21wbGV0ZSIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBoZXJlIGJl
Y2F1c2UgcmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiBpbiBvbGRJRQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gd2hpY2ggaXMgZ29vZCBlbm91Z2ggZm9yIHVzIHRvIGNhbGwgdGhlIGRvbSBy
ZWFkeSEKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCAib25y
ZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LnJlYWR5KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0g
ICAgICAgIC8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCi0gICAgICAgIGNsYXNzMnR5cGUgPSB7
fTsKLQotalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsKLSAgICAgICAgY29uc3RydWN0
b3I6IGpRdWVyeSwKLSAgICAgICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCBy
b290alF1ZXJ5ICkgewotICAgICAgICAgICAgICAgIHZhciBtYXRjaCwgZWxlbSwgcmV0LCBkb2M7
Ci0KLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgJCgiIiksICQobnVsbCksICQodW5kZWZpbmVk
KSwgJChmYWxzZSkKLSAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSAkKERPTUVsZW1lbnQpCi0gICAgICAgICAgICAgICAgaWYgKCBz
ZWxlY3Rvci5ub2RlVHlwZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4
dCA9IHRoaXNbMF0gPSBzZWxlY3RvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVu
Z3RoID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKLSAgICAg
ICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVj
dG9yLmNoYXJBdCggc2VsZWN0b3IubGVuZ3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVu
Z3RoID49IDMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0
aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAg
dGhlIHJlZ2V4IGNoZWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0g
WyBudWxsLCBzZWxlY3RvciwgbnVsbCBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIu
ZXhlYyggc2VsZWN0b3IgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBz
cGVjaWZpZWQgZm9yICNpZAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAo
bWF0Y2hbMV0gfHwgIWNvbnRleHQpICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG1hdGNoWzFdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4
dFswXSA6IGNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9jID0gKCBjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1l
bnQgfHwgY29udGV4dCA6IGRvY3VtZW50ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBqUXVlcnkucGFyc2VI
VE1MKCBtYXRjaFsxXSwgZG9jLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5Lmlz
UGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0ci5jYWxsKCBzZWxlY3RvciwgY29udGV4dCwgdHJ1
ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIHRo
aXMsIHNlbGVjdG9yICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSEFO
RExFOiAkKCNpZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0
LjYgcmV0dXJucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5v
ZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2Rl
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFIGFuZCBPcGVyYSByZXR1cm4gaXRlbXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IG5hbWUgaW5zdGVh
ZCBvZiBJRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBlbGVtLmlkICE9PSBtYXRjaFsyXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2Vs
ZWN0b3IgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5
IG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5sZW5ndGggPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpc1swXSA9IGVsZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0ID0gZG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHByLCAkKC4u
LikpCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250
ZXh0LmpxdWVyeSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgg
Y29udGV4dCB8fCByb290alF1ZXJ5ICkuZmluZCggc2VsZWN0b3IgKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQo
ZXhwcikKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCgg
c2VsZWN0b3IgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIEhBTkRMRTogJChmdW5jdGlvbikKLSAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dCBmb3Ig
ZG9jdW1lbnQgcmVhZHkKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggc2VsZWN0b3IgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290
alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICggc2VsZWN0b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3RvcjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHNlbGVjdG9yLmNvbnRleHQ7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5tYWtlQXJyYXko
IHNlbGVjdG9yLCB0aGlzICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gU3RhcnQgd2l0aCBh
biBlbXB0eSBzZWxlY3RvcgotICAgICAgICBzZWxlY3RvcjogIiIsCi0KLSAgICAgICAgLy8gVGhl
IGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAotICAgICAgICBqcXVlcnk6ICIx
LjguMyIsCi0KLSAgICAgICAgLy8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVj
dCBpcyAwCi0gICAgICAgIGxlbmd0aDogMCwKLQotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldAotICAgICAgICBzaXpl
OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGg7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGNvcmVfc2xpY2UuY2FsbCggdGhpcyApOwotICAgICAgICB9LAotCi0gICAgICAgIC8v
IEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKLSAgICAg
ICAgLy8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkK
LSAgICAgICAgZ2V0OiBmdW5jdGlvbiggbnVtICkgewotICAgICAgICAgICAgICAgIHJldHVybiBu
dW0gPT0gbnVsbCA/Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBhICdjbGVh
bicgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9BcnJheSgpIDoKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGp1c3QgdGhlIG9iamVjdAotICAgICAgICAg
ICAgICAgICAgICAgICAgKCBudW0gPCAwID8gdGhpc1sgdGhpcy5sZW5ndGggKyBudW0gXSA6IHRo
aXNbIG51bSBdICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gVGFrZSBhbiBhcnJheSBvZiBl
bGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjawotICAgICAgICAvLyAocmV0dXJuaW5n
IHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldCkKLSAgICAgICAgcHVzaFN0YWNrOiBmdW5jdGlv
biggZWxlbXMsIG5hbWUsIHNlbGVjdG9yICkgewotCi0gICAgICAgICAgICAgICAgLy8gQnVpbGQg
YSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKLSAgICAgICAgICAgICAgICB2YXIgcmV0
ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJl
bmNlKQotICAgICAgICAgICAgICAgIHJldC5wcmV2T2JqZWN0ID0gdGhpczsKLQotICAgICAgICAg
ICAgICAgIHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0OwotCi0gICAgICAgICAgICAgICAgaWYg
KCBuYW1lID09PSAiZmluZCIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQuc2VsZWN0
b3IgPSB0aGlzLnNlbGVjdG9yICsgKCB0aGlzLnNlbGVjdG9yID8gIiAiIDogIiIgKSArIHNlbGVj
dG9yOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5hbWUgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsgIi4iICsgbmFtZSArICIo
IiArIHNlbGVjdG9yICsgIikiOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJldDsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBFeGVjdXRlIGEgY2FsbGJhY2sg
Zm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LgotICAgICAgICAvLyAoWW91IGNh
biBzZWVkIHRoZSBhcmd1bWVudHMgd2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBpcwot
ICAgICAgICAvLyBvbmx5IHVzZWQgaW50ZXJuYWxseS4pCi0gICAgICAgIGVhY2g6IGZ1bmN0aW9u
KCBjYWxsYmFjaywgYXJncyApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmVhY2go
IHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcmVhZHk6IGZ1
bmN0aW9uKCBmbiApIHsKLSAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGNhbGxiYWNrCi0gICAg
ICAgICAgICAgICAgalF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBmbiApOwotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZXE6IGZ1bmN0aW9u
KCBpICkgewotICAgICAgICAgICAgICAgIGkgPSAraTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
aSA9PT0gLTEgPwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGljZSggaSApIDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpY2UoIGksIGkgKyAxICk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgZmlyc3Q6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmVxKCAwICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbGFzdDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgc2xpY2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hT
dGFjayggY29yZV9zbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAic2xpY2UiLCBjb3JlX3NsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikg
KTsKLSAgICAgICAgfSwKLQotICAgICAgICBtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVu
Y3Rpb24oIGVsZW0sIGkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJh
Y2suY2FsbCggZWxlbSwgaSwgZWxlbSApOwotICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAg
fSwKLQotICAgICAgICBlbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTsKLSAgICAgICAgfSwKLQot
ICAgICAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCi0gICAgICAgIC8vIEJlaGF2ZXMgbGlr
ZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgotICAgICAgICBw
dXNoOiBjb3JlX3B1c2gsCi0gICAgICAgIHNvcnQ6IFtdLnNvcnQsCi0gICAgICAgIHNwbGljZTog
W10uc3BsaWNlCi19OwotCi0vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJv
dG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCi1qUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUg
PSBqUXVlcnkuZm47Ci0KLWpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5
LCBjbG9uZSwKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0gfHwge30sCi0g
ICAgICAgICAgICAgICAgaSA9IDEsCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRz
Lmxlbmd0aCwKLSAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gSGFu
ZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbgotICAgICAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09
ICJib29sZWFuIiApIHsKLSAgICAgICAgICAgICAgICBkZWVwID0gdGFyZ2V0OwotICAgICAgICAg
ICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTsKLSAgICAgICAgICAgICAgICAvLyBz
a2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICAgaSA9IDI7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmlu
ZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKLSAgICAgICAgaWYgKCB0eXBl
b2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsK
LSAgICAgICAgICAgICAgICB0YXJnZXQgPSB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGV4
dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAotICAgICAg
ICBpZiAoIGxlbmd0aCA9PT0gaSApIHsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzOwot
ICAgICAgICAgICAgICAgIC0taTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoIDsgaSA8IGxl
bmd0aDsgaSsrICkgewotICAgICAgICAgICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxs
L3VuZGVmaW5lZCB2YWx1ZXMKLSAgICAgICAgICAgICAgICBpZiAoIChvcHRpb25zID0gYXJndW1l
bnRzWyBpIF0pICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmQg
dGhlIGJhc2Ugb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9w
dGlvbnMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9IHRhcmdldFsg
bmFtZSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gb3B0aW9uc1sg
bmFtZSBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgbmV2
ZXItZW5kaW5nIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0YXJn
ZXQgPT09IGNvcHkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4g
b2JqZWN0cyBvciBhcnJheXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBk
ZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJy
YXkgPSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGNvcHlJc0FycmF5ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weUlzQXJyYXkgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYm
IGpRdWVyeS5pc0FycmF5KHNyYykgPyBzcmMgOiBbXTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdChz
cmMpID8gc3JjIDoge307Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV2ZXIgbW92
ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9u
ZSwgY29weSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGJy
aW5nIGluIHVuZGVmaW5lZCB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2Jq
ZWN0Ci0gICAgICAgIHJldHVybiB0YXJnZXQ7Ci19OwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICAg
ICAgbm9Db25mbGljdDogZnVuY3Rpb24oIGRlZXAgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB3
aW5kb3cuJCA9PT0galF1ZXJ5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiQg
PSBfJDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYg
d2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgd2lu
ZG93LmpRdWVyeSA9IF9qUXVlcnk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGpRdWVyeTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBJcyB0aGUgRE9NIHJl
YWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgotICAgICAgICBpc1Jl
YWR5OiBmYWxzZSwKLQotICAgICAgICAvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRl
bXMgdG8gd2FpdCBmb3IgYmVmb3JlCi0gICAgICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4g
U2VlICM2NzgxCi0gICAgICAgIHJlYWR5V2FpdDogMSwKLQotICAgICAgICAvLyBIb2xkIChvciBy
ZWxlYXNlKSB0aGUgcmVhZHkgZXZlbnQKLSAgICAgICAgaG9sZFJlYWR5OiBmdW5jdGlvbiggaG9s
ZCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGhvbGQgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkucmVhZHlXYWl0Kys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeSggdHJ1ZSApOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5
Ci0gICAgICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHsKLQotICAgICAgICAgICAgICAgIC8v
IEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHkK
LSAgICAgICAgICAgICAgICBpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQg
OiBqUXVlcnkuaXNSZWFkeSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgYm9keSBleGlz
dHMsIGF0IGxlYXN0LCBpbiBjYXNlIElFIGdldHMgYSBsaXR0bGUgb3ZlcnplYWxvdXMgKHRpY2tl
dCAjNTQ0MykuCi0gICAgICAgICAgICAgICAgaWYgKCAhZG9jdW1lbnQuYm9keSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHRo
ZSBET00gaXMgcmVhZHkKLSAgICAgICAgICAgICAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7Ci0K
LSAgICAgICAgICAgICAgICAvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRl
Y3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZQotICAgICAgICAgICAgICAgIGlmICggd2FpdCAh
PT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElm
IHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKLSAgICAgICAgICAgICAgICBy
ZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHMKLSAgICAgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5mbi50cmlnZ2VyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBTZWUgdGVzdC91bml0L2NvcmUuanMg
Zm9yIGRldGFpbHMgY29uY2VybmluZyBpc0Z1bmN0aW9uLgotICAgICAgICAvLyBTaW5jZSB2ZXJz
aW9uIDEuMywgRE9NIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBsaWtlIGFsZXJ0Ci0gICAgICAgIC8v
IGFyZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCi0gICAg
ICAgIGlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGpRdWVyeS50eXBlKG9iaikgPT09ICJmdW5jdGlvbiI7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
aXNBcnJheTogQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiggb2JqICkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSAiYXJyYXkiOwotICAgICAgICB9LAotCi0g
ICAgICAgIGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkgewotICAgICAgICAgICAgICAgIHJldHVy
biBvYmogIT0gbnVsbCAmJiBvYmogPT0gb2JqLndpbmRvdzsKLSAgICAgICAgfSwKLQotICAgICAg
ICBpc051bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFp
c05hTiggcGFyc2VGbG9hdChvYmopICkgJiYgaXNGaW5pdGUoIG9iaiApOwotICAgICAgICB9LAot
Ci0gICAgICAgIHR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG9iaiA9PSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyggb2JqICkgOgot
ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MydHlwZVsgY29yZV90b1N0cmluZy5jYWxsKG9i
aikgXSB8fCAib2JqZWN0IjsKLSAgICAgICAgfSwKLQotICAgICAgICBpc1BsYWluT2JqZWN0OiBm
dW5jdGlvbiggb2JqICkgewotICAgICAgICAgICAgICAgIC8vIE11c3QgYmUgYW4gT2JqZWN0Lgot
ICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2ZSB0byBjaGVjayB0
aGUgcHJlc2VuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LgotICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IERPTSBub2RlcyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFz
cyB0aHJvdWdoLCBhcyB3ZWxsCi0gICAgICAgICAgICAgICAgaWYgKCAhb2JqIHx8IGpRdWVyeS50
eXBlKG9iaikgIT09ICJvYmplY3QiIHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnkuaXNXaW5kb3co
IG9iaiApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBOb3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAhY29yZV9oYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIp
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjb3JlX2hhc093bi5jYWxsKG9i
ai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICJpc1Byb3RvdHlwZU9mIikgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElFOCw5IFdpbGwgdGhyb3cgZXhjZXB0aW9ucyBvbiBjZXJ0YWluIGhvc3Qgb2Jq
ZWN0cyAjOTg5NwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVt
ZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLAotICAgICAgICAgICAgICAgIC8vIGlmIGxh
c3Qgb25lIGlzIG93biwgdGhlbiBhbGwgcHJvcGVydGllcyBhcmUgb3duLgotCi0gICAgICAgICAg
ICAgICAgdmFyIGtleTsKLSAgICAgICAgICAgICAgICBmb3IgKCBrZXkgaW4gb2JqICkge30KLQot
ICAgICAgICAgICAgICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBjb3JlX2hhc093bi5j
YWxsKCBvYmosIGtleSApOwotICAgICAgICB9LAotCi0gICAgICAgIGlzRW1wdHlPYmplY3Q6IGZ1
bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWU7Ci0gICAgICAgICAgICAg
ICAgZm9yICggbmFtZSBpbiBvYmogKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9LAotCi0gICAgICAgIGVycm9yOiBmdW5jdGlvbiggbXNnICkgewotICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvciggbXNnICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8g
ZGF0YTogc3RyaW5nIG9mIGh0bWwKLSAgICAgICAgLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBz
cGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LCBk
ZWZhdWx0cyB0byBkb2N1bWVudAotICAgICAgICAvLyBzY3JpcHRzIChvcHRpb25hbCk6IElmIHRy
dWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmcKLSAgICAg
ICAgcGFyc2VIVE1MOiBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwgc2NyaXB0cyApIHsKLSAgICAg
ICAgICAgICAgICB2YXIgcGFyc2VkOwotICAgICAgICAgICAgICAgIGlmICggIWRhdGEgfHwgdHlw
ZW9mIGRhdGEgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNv
bnRleHQgPT09ICJib29sZWFuIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMg
PSBjb250ZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IDA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50
OwotCi0gICAgICAgICAgICAgICAgLy8gU2luZ2xlIHRhZwotICAgICAgICAgICAgICAgIGlmICgg
KHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApKSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWzFdICkgXTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwYXJzZWQgPSBqUXVlcnkuYnVpbGRG
cmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgPyBudWxsIDogW10gKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIChwYXJzZWQuY2FjaGVhYmxlID8galF1ZXJ5LmNsb25lKCBwYXJzZWQuZnJhZ21lbnQgKSA6
IHBhcnNlZC5mcmFnbWVudCkuY2hpbGROb2RlcyApOwotICAgICAgICB9LAotCi0gICAgICAgIHBh
cnNlSlNPTjogZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhZGF0YSB8
fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZCAoSUUgY2FuJ3QgaGFu
ZGxlIGl0KQotICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkudHJpbSggZGF0YSApOwotCi0g
ICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBwYXJzZSB1c2luZyB0aGUgbmF0aXZlIEpTT04g
cGFyc2VyIGZpcnN0Ci0gICAgICAgICAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAmJiB3aW5kb3cu
SlNPTi5wYXJzZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuSlNP
Ti5wYXJzZSggZGF0YSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgZGF0YSBpcyBhY3R1YWwgSlNPTgotICAgICAgICAgICAg
ICAgIC8vIExvZ2ljIGJvcnJvd2VkIGZyb20gaHR0cDovL2pzb24ub3JnL2pzb24yLmpzCi0gICAg
ICAgICAgICAgICAgaWYgKCBydmFsaWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxpZGVz
Y2FwZSwgIkAiICkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCBydmFsaWR0b2tl
bnMsICJdIiApCi0gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSggcnZhbGlkYnJhY2Vz
LCAiIikpICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCBuZXcgRnVuY3Rp
b24oICJyZXR1cm4gIiArIGRhdGEgKSApKCk7Ci0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSApOwotICAgICAg
ICB9LAotCi0gICAgICAgIC8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmcKLSAgICAgICAgcGFy
c2VYTUw6IGZ1bmN0aW9uKCBkYXRhICkgewotICAgICAgICAgICAgICAgIHZhciB4bWwsIHRtcDsK
LSAgICAgICAgICAgICAgICBpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3
aW5kb3cuRE9NUGFyc2VyICkgeyAvLyBTdGFuZGFyZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0bXAgPSBuZXcgRE9NUGFyc2VyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEgLCAidGV4dC94bWwiICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBJRQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4bWwgPSBuZXcgQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxET00i
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbC5hc3luYyA9ICJmYWxzZSI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbC5sb2FkWE1MKCBkYXRhICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVtZW50IHx8
IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0
YSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4geG1sOwotICAg
ICAgICB9LAotCi0gICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge30sCi0KLSAgICAgICAgLy8gRXZh
bHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKLSAgICAgICAgLy8gV29ya2Fyb3Vu
ZHMgYmFzZWQgb24gZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCi0gICAgICAgIC8vIGh0dHA6Ly93
ZWJsb2dzLmphdmEubmV0L2Jsb2cvZHJpc2NvbGwvYXJjaGl2ZS8yMDA5LzA5LzA4L2V2YWwtamF2
YXNjcmlwdC1nbG9iYWwtY29udGV4dAotICAgICAgICBnbG9iYWxFdmFsOiBmdW5jdGlvbiggZGF0
YSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGRhdGEgJiYgY29yZV9ybm90d2hpdGUudGVzdCgg
ZGF0YSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIGV4ZWNTY3JpcHQg
b24gSW50ZXJuZXQgRXhwbG9yZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSBh
biBhbm9ueW1vdXMgZnVuY3Rpb24gc28gdGhhdCBjb250ZXh0IGlzIHdpbmRvdwotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4galF1ZXJ5IGluIEZpcmVmb3gKLSAgICAgICAg
ICAgICAgICAgICAgICAgICggd2luZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24oIGRhdGEgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1sgImV2YWwiIF0uY2FsbCgg
d2luZG93LCBkYXRhICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICkoIGRhdGEgKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQ29udmVydCBkYXNoZWQg
dG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwotICAgICAgICAv
LyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpCi0g
ICAgICAgIGNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmluZyApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFs
cGhhLCBmY2FtZWxDYXNlICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbm9kZU5hbWU6IGZ1bmN0
aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1l
ICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpOwot
ICAgICAgICB9LAotCi0gICAgICAgIC8vIGFyZ3MgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkK
LSAgICAgICAgZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IG9iai5sZW5ndGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpc09iaiA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0Z1bmN0aW9u
KCBvYmogKTsKLQotICAgICAgICAgICAgICAgIGlmICggYXJncyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggaXNPYmogKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIG5hbWUgaW4gb2JqICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgbmFtZSBdLCBhcmdzICkgPT09IGZhbHNl
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2su
YXBwbHkoIG9ialsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEEgc3Bl
Y2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBvZiBlYWNoCi0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNPYmogKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2Fs
bCggb2JqWyBuYW1lIF0sIG5hbWUsIG9ialsgbmFtZSBdICkgPT09IGZhbHNlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7ICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBp
IF0sIGksIG9ialsgaSsrIF0gKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gb2JqOwotICAgICAgICB9LAotCi0gICAgICAgIC8vIFVzZSBuYXRpdmUgU3Ry
aW5nLnRyaW0gZnVuY3Rpb24gd2hlcmV2ZXIgcG9zc2libGUKLSAgICAgICAgdHJpbTogY29yZV90
cmltICYmICFjb3JlX3RyaW0uY2FsbCgiXHVGRUZGXHhBMCIpID8KLSAgICAgICAgICAgICAgICBm
dW5jdGlvbiggdGV4dCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0ID09
IG51bGwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvcmVfdHJpbS5jYWxsKCB0ZXh0ICk7Ci0gICAgICAgICAg
ICAgICAgfSA6Ci0KLSAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIG91ciBvd24gdHJp
bW1pbmcgZnVuY3Rpb25hbGl0eQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCB0ZXh0ICsgIiIgKS5yZXBsYWNlKCBydHJpbSwgIiIgKTsKLSAgICAgICAgICAgICAgICB9
LAotCi0gICAgICAgIC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKLSAgICAg
ICAgbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkgewotICAgICAgICAgICAgICAg
IHZhciB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmVzdWx0cyB8fCBbXTsK
LQotICAgICAgICAgICAgICAgIGlmICggYXJyICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgd2luZG93LCBzdHJpbmdzIChhbmQgZnVuY3Rpb25zKSBhbHNvIGhhdmUg
J2xlbmd0aCcKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0
bHkgdG8gaGFuZGxlIEJsYWNrYmVycnkgNC43IFJlZ0V4cCBpc3N1ZXMgIzY5MzAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSBqUXVlcnkudHlwZSggYXJyICk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggYXJyLmxlbmd0aCA9PSBudWxsIHx8IHR5cGUgPT09ICJzdHJpbmci
IHx8IHR5cGUgPT09ICJmdW5jdGlvbiIgfHwgdHlwZSA9PT0gInJlZ2V4cCIgfHwgalF1ZXJ5Lmlz
V2luZG93KCBhcnIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZV9w
dXNoLmNhbGwoIHJldCwgYXJyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgYXJyICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfSwKLQotICAgICAgICBpbkFycmF5OiBmdW5j
dGlvbiggZWxlbSwgYXJyLCBpICkgewotICAgICAgICAgICAgICAgIHZhciBsZW47Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIGFyciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29y
ZV9pbmRleE9mICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29y
ZV9pbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBhcnIubGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaSA9IGkgPyBpIDwgMCA/IE1hdGgubWF4KCAwLCBsZW4gKyBpICkgOiBp
IDogMDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXAgYWNjZXNzaW5nIGluIHNw
YXJzZSBhcnJheXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpIGluIGFy
ciAmJiBhcnJbIGkgXSA9PT0gZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSwKLQotICAgICAgICBtZXJnZTogZnVuY3Rpb24o
IGZpcnN0LCBzZWNvbmQgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGwgPSBzZWNvbmQubGVuZ3Ro
LAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGZpcnN0Lmxlbmd0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGogPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgbCA9PT0g
Im51bWJlciIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGogPCBsOyBqKysg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29u
ZFsgaiBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggc2Vjb25kW2pdICE9PSB1bmRl
ZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9
IHNlY29uZFsgaisrIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgZmlyc3QubGVuZ3RoID0gaTsKLQotICAgICAgICAgICAg
ICAgIHJldHVybiBmaXJzdDsKLSAgICAgICAgfSwKLQotICAgICAgICBncmVwOiBmdW5jdGlvbigg
ZWxlbXMsIGNhbGxiYWNrLCBpbnYgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldFZhbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAg
aSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGg7Ci0g
ICAgICAgICAgICAgICAgaW52ID0gISFpbnY7Ci0KLSAgICAgICAgICAgICAgICAvLyBHbyB0aHJv
dWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zCi0gICAgICAgICAgICAgICAgLy8g
dGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICBmb3IgKCA7
IGkgPCBsZW5ndGg7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbCA9ICEh
Y2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
aW52ICE9PSByZXRWYWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5w
dXNoKCBlbGVtc1sgaSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfSwKLQotICAg
ICAgICAvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKLSAgICAgICAgbWFwOiBmdW5j
dGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVl
LCBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBbXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMu
bGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganF1ZXJ5IG9iamVjdHMgYXJlIHRy
ZWF0ZWQgYXMgYXJyYXlzCi0gICAgICAgICAgICAgICAgICAgICAgICBpc0FycmF5ID0gZWxlbXMg
aW5zdGFuY2VvZiBqUXVlcnkgfHwgbGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxlbmd0
aCA9PT0gIm51bWJlciIgJiYgKCAoIGxlbmd0aCA+IDAgJiYgZWxlbXNbIDAgXSAmJiBlbGVtc1sg
bGVuZ3RoIC0xIF0gKSB8fCBsZW5ndGggPT09IDAgfHwgalF1ZXJ5LmlzQXJyYXkoIGVsZW1zICkg
KSA7Ci0KLSAgICAgICAgICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRp
bmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIKLSAgICAgICAgICAgICAgICBpZiAoIGlzQXJy
YXkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxl
bXNbIGkgXSwgaSwgYXJnICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCB2YWx1ZSAhPSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCi0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGtleSBpbiBlbGVtcyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGtl
eSBdLCBrZXksIGFyZyApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
dmFsdWUgIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXRbIHJldC5sZW5ndGggXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgICAgICAgICAg
ICAgIHJldHVybiByZXQuY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgLy8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCi0gICAgICAgIGd1aWQ6
IDEsCi0KLSAgICAgICAgLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxs
eSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55Ci0gICAgICAgIC8vIGFyZ3VtZW50cy4KLSAgICAgICAg
cHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKLSAgICAgICAgICAgICAgICB2YXIgdG1w
LCBhcmdzLCBwcm94eTsKLQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQgPT09
ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gZm5bIGNvbnRleHQg
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBmbjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZuID0gdG1wOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRo
ZSBzcGVjCi0gICAgICAgICAgICAgICAgLy8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3
ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC4KLSAgICAgICAgICAgICAgICBpZiAoICFqUXVl
cnkuaXNGdW5jdGlvbiggZm4gKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1
bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2ltdWxh
dGVkIGJpbmQKLSAgICAgICAgICAgICAgICBhcmdzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVu
dHMsIDIgKTsKLSAgICAgICAgICAgICAgICBwcm94eSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0LCBhcmdzLmNvbmNhdCggY29y
ZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2Ft
ZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAotICAgICAgICAgICAg
ICAgIHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5OwotICAgICAgICB9LAotCi0gICAgICAgIC8vIE11
bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlv
bgotICAgICAgICAvLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBp
dCdzIGEgZnVuY3Rpb24KLSAgICAgICAgYWNjZXNzOiBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXks
IHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCBwYXNzICkgewotICAgICAgICAgICAgICAgIHZh
ciBleGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVsayA9IGtleSA9PSBudWxsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW5n
dGggPSBlbGVtcy5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXRzIG1hbnkgdmFsdWVz
Ci0gICAgICAgICAgICAgICAgaWYgKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpIGluIGtleSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbaV0s
IDEsIGVtcHR5R2V0LCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhaW5hYmxlID0gMTsKLQotICAgICAgICAgICAgICAgIC8vIFNl
dHMgb25lIHZhbHVlCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVm
aW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wdGlvbmFsbHksIGZ1bmN0aW9u
IHZhbHVlcyBnZXQgZXhlY3V0ZWQgaWYgZXhlYyBpcyB0cnVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBleGVjID0gcGFzcyA9PT0gdW5kZWZpbmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1
ZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGJ1bGsgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBvbmx5IGl0ZXJhdGUgd2hl
biBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZXhlYyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGVjID0gZm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4g
PSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjLmNhbGwoIGpRdWVyeSggZWxlbSAp
LCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgcnVuIGFn
YWluc3QgdGhlIGVudGlyZSBzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKCBl
bGVtcywgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
biA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmbiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKyApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiggZWxlbXNbaV0sIGtl
eSwgZXhlYyA/IHZhbHVlLmNhbGwoIGVsZW1zW2ldLCBpLCBmbiggZWxlbXNbaV0sIGtleSApICkg
OiB2YWx1ZSwgcGFzcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYWluYWJs
ZSA9IDE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYWlu
YWJsZSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtcyA6Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEdldHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1bGsgPwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKCBlbGVtcyApIDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID8gZm4oIGVsZW1zWzBdLCBrZXkgKSA6IGVtcHR5
R2V0OwotICAgICAgICB9LAotCi0gICAgICAgIG5vdzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICggbmV3IERhdGUoKSApLmdldFRpbWUoKTsKLSAgICAgICAgfQotfSk7Ci0K
LWpRdWVyeS5yZWFkeS5wcm9taXNlID0gZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgaWYgKCAh
cmVhZHlMaXN0ICkgewotCi0gICAgICAgICAgICAgICAgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVy
cmVkKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50
KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBv
Y2N1cnJlZC4KLSAgICAgICAgICAgICAgICAvLyB3ZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0
YXRlICJpbnRlcmFjdGl2ZSIgaGVyZSwgYnV0IGl0IGNhdXNlZCBpc3N1ZXMgbGlrZSB0aGUgb25l
Ci0gICAgICAgICAgICAgICAgLy8gZGlzY292ZXJlZCBieSBDaHJpc1MgaGVyZTogaHR0cDovL2J1
Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIyODIjY29tbWVudDoxNQotICAgICAgICAgICAgICAgIGlm
ICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRo
ZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0
VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTdGFuZGFy
ZHMtYmFzZWQgYnJvd3NlcnMgc3VwcG9ydCBET01Db250ZW50TG9hZGVkCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2sKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVk
IiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAibG9hZCIsIGpR
dWVyeS5yZWFkeSwgZmFsc2UgKTsKLQotICAgICAgICAgICAgICAgIC8vIElmIElFIGV2ZW50IG1v
ZGVsIGlzIHVzZWQKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2FkLCBtYXliZSBsYXRlIGJ1dCBzYWZl
IGFsc28gZm9yIGlmcmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmF0dGFj
aEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQg
d2lsbCBhbHdheXMgd29yawotICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2
ZW50KCAib25sb2FkIiwgalF1ZXJ5LnJlYWR5ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIElFIGFuZCBub3QgYSBmcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29u
dGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBpcyByZWFkeQotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHRvcCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSB3aW5kb3cuZnJh
bWVFbGVtZW50ID09IG51bGwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQotCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHRvcCAmJiB0b3AuZG9TY3JvbGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChmdW5jdGlvbiBkb1Njcm9sbENoZWNrKCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5pc1JlYWR5ICkgewotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHRyaWNr
IGJ5IERpZWdvIFBlcmluaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50
TG9hZGVkLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b3AuZG9TY3JvbGwoImxlZnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCggZG9T
Y3JvbGxDaGVjaywgNTAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYW5kIGV4ZWN1dGUgYW55IHdhaXRpbmcgZnVuY3Rpb25zCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVhZHkoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2Jq
ICk7Ci19OwotCi0vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXAKLWpRdWVyeS5lYWNoKCJC
b29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5z
cGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7Ci0gICAgICAgIGNsYXNzMnR5cGVbICJbb2Jq
ZWN0ICIgKyBuYW1lICsgIl0iIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci19KTsKLQotLy8gQWxs
IGpRdWVyeSBvYmplY3RzIHNob3VsZCBwb2ludCBiYWNrIHRvIHRoZXNlCi1yb290alF1ZXJ5ID0g
alF1ZXJ5KGRvY3VtZW50KTsKLS8vIFN0cmluZyB0byBPYmplY3Qgb3B0aW9ucyBmb3JtYXQgY2Fj
aGUKLXZhciBvcHRpb25zQ2FjaGUgPSB7fTsKLQotLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVk
IG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXMgYW5kIHN0b3JlIGluIGNhY2hlCi1m
dW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgewotICAgICAgICB2YXIgb2JqZWN0ID0g
b3B0aW9uc0NhY2hlWyBvcHRpb25zIF0gPSB7fTsKLSAgICAgICAgalF1ZXJ5LmVhY2goIG9wdGlv
bnMuc3BsaXQoIGNvcmVfcnNwYWNlICksIGZ1bmN0aW9uKCBfLCBmbGFnICkgewotICAgICAgICAg
ICAgICAgIG9iamVjdFsgZmxhZyBdID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVy
biBvYmplY3Q7Ci19Ci0KLS8qCi0gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBm
b2xsb3dpbmcgcGFyYW1ldGVyczoKLSAqCi0gKiAgICAgIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxp
c3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKLSAqICAg
ICAgICAgICAgICAgICAgICAgIHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRy
YWRpdGlvbmFsIG9wdGlvbiBvYmplY3QKLSAqCi0gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlz
dCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZQotICogImZp
cmVkIiBtdWx0aXBsZSB0aW1lcy4KLSAqCi0gKiBQb3NzaWJsZSBvcHRpb25zOgotICoKLSAqICAg
ICAgb25jZTogICAgICAgICAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3Qg
Y2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQotICoKLSAqICAgICAgbWVt
b3J5OiAgICAgICAgICAgICAgICAgd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBh
bmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAotICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkg
d2l0aCB0aGUgbGF0ZXN0ICJtZW1vcml6ZWQiCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpCi0gKgotICogICAgICB1bmlxdWU6
ICAgICAgICAgICAgICAgICB3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVk
IG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdCkKLSAqCi0gKiAgICAgIHN0b3BPbkZhbHNl
OiAgICBpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2UKLSAq
Ci0gKi8KLWpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKLQotICAgICAg
ICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3Jt
YXR0ZWQgaWYgbmVlZGVkCi0gICAgICAgIC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdCkKLSAg
ICAgICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/Ci0gICAgICAgICAg
ICAgICAgKCBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSB8fCBjcmVhdGVPcHRpb25zKCBvcHRpb25z
ICkgKSA6Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTsKLQot
ICAgICAgICB2YXIgLy8gTGFzdCBmaXJlIHZhbHVlIChmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3Rz
KQotICAgICAgICAgICAgICAgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAvLyBGbGFnIHRvIGtu
b3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZAotICAgICAgICAgICAgICAgIGZpcmVkLAotICAg
ICAgICAgICAgICAgIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmcK
LSAgICAgICAgICAgICAgICBmaXJpbmcsCi0gICAgICAgICAgICAgICAgLy8gRmlyc3QgY2FsbGJh
Y2sgdG8gZmlyZSAodXNlZCBpbnRlcm5hbGx5IGJ5IGFkZCBhbmQgZmlyZVdpdGgpCi0gICAgICAg
ICAgICAgICAgZmlyaW5nU3RhcnQsCi0gICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRoZSBsb29w
IHdoZW4gZmlyaW5nCi0gICAgICAgICAgICAgICAgZmlyaW5nTGVuZ3RoLAotICAgICAgICAgICAg
ICAgIC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJl
bW92ZSBpZiBuZWVkZWQpCi0gICAgICAgICAgICAgICAgZmlyaW5nSW5kZXgsCi0gICAgICAgICAg
ICAgICAgLy8gQWN0dWFsIGNhbGxiYWNrIGxpc3QKLSAgICAgICAgICAgICAgICBsaXN0ID0gW10s
Ci0gICAgICAgICAgICAgICAgLy8gU3RhY2sgb2YgZmlyZSBjYWxscyBmb3IgcmVwZWF0YWJsZSBs
aXN0cwotICAgICAgICAgICAgICAgIHN0YWNrID0gIW9wdGlvbnMub25jZSAmJiBbXSwKLSAgICAg
ICAgICAgICAgICAvLyBGaXJlIGNhbGxiYWNrcwotICAgICAgICAgICAgICAgIGZpcmUgPSBmdW5j
dGlvbiggZGF0YSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSA9IG9wdGlvbnMu
bWVtb3J5ICYmIGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleCA9IGZpcmluZ1N0YXJ0IHx8IDA7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdTdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZpcmluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGxpc3Qg
JiYgZmlyaW5nSW5kZXggPCBmaXJpbmdMZW5ndGg7IGZpcmluZ0luZGV4KysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSgg
ZGF0YVsgMCBdLCBkYXRhWyAxIF0gKSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgPSBmYWxz
ZTsgLy8gVG8gcHJldmVudCBmdXJ0aGVyIGNhbGxzIHVzaW5nIGFkZAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmaXJpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbGlzdCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGFjayApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YWNrLmxlbmd0aCApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUoIHN0
YWNrLnNoaWZ0KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1lbW9yeSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9LAotICAgICAgICAgICAgICAgIC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0Ci0gICAgICAg
ICAgICAgICAgc2VsZiA9IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhIGNhbGxi
YWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbGlzdCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGaXJzdCwgd2Ugc2F2ZSB0aGUgY3VycmVudCBsZW5ndGgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBsaXN0Lmxlbmd0aDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gYWRkKCBhcmdzICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0galF1ZXJ5LnR5cGUo
IGFyZyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHR5cGUgPT09ICJmdW5jdGlvbiIgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9u
cy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QucHVz
aCggYXJnICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0eXBl
ICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWRkKCBhcmcgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoIGFy
Z3VtZW50cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERv
IHdlIG5lZWQgdG8gYWRkIHRoZSBjYWxsYmFja3MgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBmaXJpbmcgYmF0Y2g/Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJpbmcgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdMZW5ndGggPSBsaXN0
Lmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaXRo
IG1lbW9yeSwgaWYgd2UncmUgbm90IGZpcmluZyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIGNhbGwgcmlnaHQgYXdheQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1lbW9yeSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ1N0YXJ0
ID0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaXJlKCBtZW1vcnkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlz
dAotICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXN0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBf
LCBhcmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkg
KSA+IC0xICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0LnNwbGljZSggaW5kZXgsIDEgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGZpcmluZyBpbmRl
eGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZmlyaW5nICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5nTGVuZ3RoICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlyaW5nTGVuZ3RoLS07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
aW5kZXggPD0gZmlyaW5nSW5kZXggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleC0tOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIENvbnRyb2wgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlz
dAotICAgICAgICAgICAgICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiggZm4gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuaW5BcnJheSggZm4sIGxpc3Qg
KSA+IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdCA9IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBIYXZlIHRoZSBsaXN0IGRvIG5vdGhpbmcgYW55bW9yZQotICAgICAgICAgICAgICAgICAg
ICAgICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpc3QgPSBzdGFjayA9IG1lbW9yeSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXMgaXQgZGlzYWJsZWQ/Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhbGlzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBMb2NrIHRoZSBsaXN0IGluIGl0cyBjdXJyZW50IHN0YXRl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NrOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhY2sgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIW1lbW9yeSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmRpc2FibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
cyBpdCBsb2NrZWQ/Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWQ6IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXN0YWNrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYWxs
IGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MgfHwgW107Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBh
cmdzLnNsaWNlKCkgOiBhcmdzIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggbGlzdCAmJiAoICFmaXJlZCB8fCBzdGFjayApICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCggYXJncyApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJlKCBhcmdzICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENh
bGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmaXJlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBo
YXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQotICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyZWQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gISFmaXJlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9OwotCi0gICAgICAgIHJldHVybiBzZWxmOwotfTsKLWpRdWVyeS5leHRlbmQoewotCi0g
ICAgICAgIERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKLSAgICAgICAgICAgICAgICB2YXIg
dHVwbGVzID0gWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY3Rpb24sIGFk
ZCBsaXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWyAicmVzb2x2ZSIsICJkb25lIiwgalF1ZXJ5LkNhbGxiYWNrcygib25j
ZSBtZW1vcnkiKSwgInJlc29sdmVkIiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksICJy
ZWplY3RlZCIgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAibm90aWZ5Iiwg
InByb2dyZXNzIiwgalF1ZXJ5LkNhbGxiYWNrcygibWVtb3J5IikgXQotICAgICAgICAgICAgICAg
ICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gInBlbmRpbmciLAot
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx3YXlzOiBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5k
b25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbjogZnVuY3Rp
b24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBhcmd1bWVudHM7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5j
dGlvbiggbmV3RGVmZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBhY3Rpb24gPSB0dXBsZVsgMCBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gZm5zWyBpIF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmVk
WyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdE
ZWZlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZFsgdHVwbGVbMV0gXSggalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgPwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybmVkID0gZm4uYXBwbHko
IHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXR1cm5lZCAmJiBqUXVl
cnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm5lZC5wcm9taXNlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
ZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld0RlZmVyWyBhY3Rpb24gKyAiV2l0aCIgXSggdGhpcyA9
PT0gZGVmZXJyZWQgPyBuZXdEZWZlciA6IHRoaXMsIFsgcmV0dXJuZWQgXSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RlZmVyWyBhY3Rpb24gXQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbnMgPSBudWxsOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnByb21pc2UoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBp
cyBhZGRlZCB0byB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
b21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNl
ICkgOiBwcm9taXNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQgPSB7
fTsKLQotICAgICAgICAgICAgICAgIC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXQKLSAgICAg
ICAgICAgICAgICBwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47Ci0KLSAgICAgICAgICAgICAg
ICAvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzCi0gICAgICAgICAgICAgICAgalF1ZXJ5LmVh
Y2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGxpc3QgPSB0dXBsZVsgMiBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHByb21pc2VbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm9taXNlWyB0dXBsZVsxXSBdID0gbGlzdC5hZGQ7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzdGF0ZVN0cmluZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dC5hZGQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc3RhdGUgPSBbIHJlc29sdmVkIHwgcmVqZWN0ZWQgXQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVTdHJpbmc7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gWyByZWplY3RfbGlzdCB8IHJlc29sdmVfbGlzdCBdLmRp
c2FibGU7IHByb2dyZXNzX2xpc3QubG9jawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LCB0dXBsZXNbIGkgXiAxIF1bIDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZGVmZXJyZWRbIHJlc29sdmUgfCByZWplY3QgfCBub3RpZnkgXSA9IGxpc3QuZmlyZQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWzBdIF0gPSBsaXN0LmZpcmU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbMF0gKyAiV2l0aCIgXSA9IGxp
c3QuZmlyZVdpdGg7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBN
YWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2UKLSAgICAgICAgICAgICAgICBwcm9taXNlLnByb21p
c2UoIGRlZmVycmVkICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDYWxsIGdpdmVuIGZ1bmMgaWYg
YW55Ci0gICAgICAgICAgICAgICAgaWYgKCBmdW5jICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBBbGwgZG9uZSEKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVm
ZXJyZWQ7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gRGVmZXJyZWQgaGVscGVyCi0gICAgICAg
IHdoZW46IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkg
ewotICAgICAgICAgICAgICAgIHZhciBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c29sdmVWYWx1ZXMgPSBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAotICAgICAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoID0gcmVzb2x2ZVZhbHVlcy5sZW5ndGgsCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXMKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IGxlbmd0aCAhPT0gMSB8fCAoIHN1Ym9y
ZGluYXRlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdWJvcmRpbmF0ZS5wcm9taXNlICkgKSA/IGxl
bmd0aCA6IDAsCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtYXN0ZXIgRGVmZXJy
ZWQuIElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBq
dXN0IHVzZSB0aGF0LgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQgPSByZW1haW5p
bmcgPT09IDEgPyBzdWJvcmRpbmF0ZSA6IGpRdWVyeS5EZWZlcnJlZCgpLAotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBVcGRhdGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJv
Z3Jlc3MgdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVGdW5jID0gZnVuY3Rp
b24oIGksIGNvbnRleHRzLCB2YWx1ZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dHNbIGkgXSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/
IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhKCAtLXJlbWFpbmluZyApICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2
ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc1Zh
bHVlcywgcHJvZ3Jlc3NDb250ZXh0cywgcmVzb2x2ZUNvbnRleHRzOwotCi0gICAgICAgICAgICAg
ICAgLy8gYWRkIGxpc3RlbmVycyB0byBEZWZlcnJlZCBzdWJvcmRpbmF0ZXM7IHRyZWF0IG90aGVy
cyBhcyByZXNvbHZlZAotICAgICAgICAgICAgICAgIGlmICggbGVuZ3RoID4gMSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxl
bmd0aCApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFy
cmF5KCBsZW5ndGggKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0
aDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc29sdmVW
YWx1ZXNbIGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21p
c2UgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZl
VmFsdWVzWyBpIF0ucHJvbWlzZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNv
bHZlVmFsdWVzICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmZhaWwoIGRlZmVycmVkLnJlamVjdCApCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNz
Q29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
LXJlbWFpbmluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IGlmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXIKLSAg
ICAgICAgICAgICAgICBpZiAoICFyZW1haW5pbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnBy
b21pc2UoKTsKLSAgICAgICAgfQotfSk7Ci1qUXVlcnkuc3VwcG9ydCA9IChmdW5jdGlvbigpIHsK
LQotICAgICAgICB2YXIgc3VwcG9ydCwKLSAgICAgICAgICAgICAgICBhbGwsCi0gICAgICAgICAg
ICAgICAgYSwKLSAgICAgICAgICAgICAgICBzZWxlY3QsCi0gICAgICAgICAgICAgICAgb3B0LAot
ICAgICAgICAgICAgICAgIGlucHV0LAotICAgICAgICAgICAgICAgIGZyYWdtZW50LAotICAgICAg
ICAgICAgICAgIGV2ZW50TmFtZSwKLSAgICAgICAgICAgICAgICBpLAotICAgICAgICAgICAgICAg
IGlzU3VwcG9ydGVkLAotICAgICAgICAgICAgICAgIGNsaWNrRm4sCi0gICAgICAgICAgICAgICAg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0KLSAgICAgICAgLy8gU2V0dXAK
LSAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSggImNsYXNzTmFtZSIsICJ0IiApOwotICAgICAgICBk
aXYuaW5uZXJIVE1MID0gIiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9h
PjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7Ci0KLSAgICAgICAgLy8gU3VwcG9ydCB0ZXN0cyB3
b24ndCBydW4gaW4gc29tZSBsaW1pdGVkIG9yIG5vbi1icm93c2VyIGVudmlyb25tZW50cwotICAg
ICAgICBhbGwgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICAgICAgYSA9IGRp
di5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWyAwIF07Ci0gICAgICAgIGlmICggIWFsbCB8fCAh
YSB8fCAhYWxsLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4ge307Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBGaXJzdCBiYXRjaCBvZiB0ZXN0cwotICAgICAgICBzZWxlY3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICAgICAgb3B0ID0gc2VsZWN0LmFw
cGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwotICAgICAgICBp
bnB1dCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsgMCBdOwotCi0gICAgICAg
IGEuc3R5bGUuY3NzVGV4dCA9ICJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSI7Ci0gICAg
ICAgIHN1cHBvcnQgPSB7Ci0gICAgICAgICAgICAgICAgLy8gSUUgc3RyaXBzIGxlYWRpbmcgd2hp
dGVzcGFjZSB3aGVuIC5pbm5lckhUTUwgaXMgdXNlZAotICAgICAgICAgICAgICAgIGxlYWRpbmdX
aGl0ZXNwYWNlOiAoIGRpdi5maXJzdENoaWxkLm5vZGVUeXBlID09PSAzICksCi0KLSAgICAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0Ym9keSBlbGVtZW50cyBhcmVuJ3QgYXV0b21hdGlj
YWxseSBpbnNlcnRlZAotICAgICAgICAgICAgICAgIC8vIElFIHdpbGwgaW5zZXJ0IHRoZW0gaW50
byBlbXB0eSB0YWJsZXMKLSAgICAgICAgICAgICAgICB0Ym9keTogIWRpdi5nZXRFbGVtZW50c0J5
VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsCi0KLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCBsaW5rIGVsZW1lbnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwK
LSAgICAgICAgICAgICAgICAvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElF
Ci0gICAgICAgICAgICAgICAgaHRtbFNlcmlhbGl6ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoImxpbmsiKS5sZW5ndGgsCi0KLSAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHN0eWxlIGlu
Zm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCi0gICAgICAgICAgICAgICAgLy8gKElFIHVzZXMg
LmNzc1RleHQgaW5zdGVhZCkKLSAgICAgICAgICAgICAgICBzdHlsZTogL3RvcC8udGVzdCggYS5n
ZXRBdHRyaWJ1dGUoInN0eWxlIikgKSwKLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IFVSTHMgYXJlbid0IG1hbmlwdWxhdGVkCi0gICAgICAgICAgICAgICAgLy8gKElFIG5vcm1h
bGl6ZXMgaXQgYnkgZGVmYXVsdCkKLSAgICAgICAgICAgICAgICBocmVmTm9ybWFsaXplZDogKCBh
LmdldEF0dHJpYnV0ZSgiaHJlZiIpID09PSAiL2EiICksCi0KLSAgICAgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhpc3RzCi0gICAgICAgICAgICAgICAgLy8g
KElFIHVzZXMgZmlsdGVyIGluc3RlYWQpCi0gICAgICAgICAgICAgICAgLy8gVXNlIGEgcmVnZXgg
dG8gd29yayBhcm91bmQgYSBXZWJLaXQgaXNzdWUuIFNlZSAjNTE0NQotICAgICAgICAgICAgICAg
IG9wYWNpdHk6IC9eMC41Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKLQotICAgICAgICAgICAg
ICAgIC8vIFZlcmlmeSBzdHlsZSBmbG9hdCBleGlzdGVuY2UKLSAgICAgICAgICAgICAgICAvLyAo
SUUgdXNlcyBzdHlsZUZsb2F0IGluc3RlYWQgb2YgY3NzRmxvYXQpCi0gICAgICAgICAgICAgICAg
Y3NzRmxvYXQ6ICEhYS5zdHlsZS5jc3NGbG9hdCwKLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCBmb3IgYSBjaGVja2JveAotICAgICAg
ICAgICAgICAgIC8vIHRoYXQgaXQgZGVmYXVsdHMgdG8gIm9uIi4KLSAgICAgICAgICAgICAgICAv
LyAoV2ViS2l0IGRlZmF1bHRzIHRvICIiIGluc3RlYWQpCi0gICAgICAgICAgICAgICAgY2hlY2tP
bjogKCBpbnB1dC52YWx1ZSA9PT0gIm9uIiApLAotCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBoYXMgYSB3b3JraW5nIHNlbGVj
dGVkIHByb3BlcnR5LgotICAgICAgICAgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFs
c2UgaW5zdGVhZCBvZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCi0gICAg
ICAgICAgICAgICAgb3B0U2VsZWN0ZWQ6IG9wdC5zZWxlY3RlZCwKLQotICAgICAgICAgICAgICAg
IC8vIFRlc3Qgc2V0QXR0cmlidXRlIG9uIGNhbWVsQ2FzZSBjbGFzcy4gSWYgaXQgd29ya3MsIHdl
IG5lZWQgYXR0ckZpeGVzIHdoZW4gZG9pbmcgZ2V0L3NldEF0dHJpYnV0ZSAoaWU2LzcpCi0gICAg
ICAgICAgICAgICAgZ2V0U2V0QXR0cmlidXRlOiBkaXYuY2xhc3NOYW1lICE9PSAidCIsCi0KLSAg
ICAgICAgICAgICAgICAvLyBUZXN0cyBmb3IgZW5jdHlwZSBzdXBwb3J0IG9uIGEgZm9ybSAoIzY3
NDMpCi0gICAgICAgICAgICAgICAgZW5jdHlwZTogISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJm
b3JtIikuZW5jdHlwZSwKLQotICAgICAgICAgICAgICAgIC8vIE1ha2VzIHN1cmUgY2xvbmluZyBh
biBodG1sNSBlbGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCi0gICAgICAgICAgICAgICAg
Ly8gV2hlcmUgb3V0ZXJIVE1MIGlzIHVuZGVmaW5lZCwgdGhpcyBzdGlsbCB3b3JrcwotICAgICAg
ICAgICAgICAgIGh0bWw1Q2xvbmU6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25l
Tm9kZSggdHJ1ZSApLm91dGVySFRNTCAhPT0gIjw6bmF2PjwvOm5hdj4iLAotCi0gICAgICAgICAg
ICAgICAgLy8galF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgREVQUkVDQVRFRCBpbiAxLjggc2luY2Ug
d2UgZG9uJ3Qgc3VwcG9ydCBRdWlya3MgTW9kZQotICAgICAgICAgICAgICAgIGJveE1vZGVsOiAo
IGRvY3VtZW50LmNvbXBhdE1vZGUgPT09ICJDU1MxQ29tcGF0IiApLAotCi0gICAgICAgICAgICAg
ICAgLy8gV2lsbCBiZSBkZWZpbmVkIGxhdGVyCi0gICAgICAgICAgICAgICAgc3VibWl0QnViYmxl
czogdHJ1ZSwKLSAgICAgICAgICAgICAgICBjaGFuZ2VCdWJibGVzOiB0cnVlLAotICAgICAgICAg
ICAgICAgIGZvY3VzaW5CdWJibGVzOiBmYWxzZSwKLSAgICAgICAgICAgICAgICBkZWxldGVFeHBh
bmRvOiB0cnVlLAotICAgICAgICAgICAgICAgIG5vQ2xvbmVFdmVudDogdHJ1ZSwKLSAgICAgICAg
ICAgICAgICBpbmxpbmVCbG9ja05lZWRzTGF5b3V0OiBmYWxzZSwKLSAgICAgICAgICAgICAgICBz
aHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKLSAgICAgICAgICAgICAgICByZWxpYWJsZU1hcmdpblJp
Z2h0OiB0cnVlLAotICAgICAgICAgICAgICAgIGJveFNpemluZ1JlbGlhYmxlOiB0cnVlLAotICAg
ICAgICAgICAgICAgIHBpeGVsUG9zaXRpb246IGZhbHNlCi0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gTWFrZSBzdXJlIGNoZWNrZWQgc3RhdHVzIGlzIHByb3Blcmx5IGNsb25lZAotICAgICAgICBp
bnB1dC5jaGVja2VkID0gdHJ1ZTsKLSAgICAgICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlu
cHV0LmNsb25lTm9kZSggdHJ1ZSApLmNoZWNrZWQ7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIG9wdGlvbnMgaW5zaWRlIGRpc2FibGVkIHNlbGVjdHMgYXJlbid0IG1hcmtlZCBhcyBk
aXNhYmxlZAotICAgICAgICAvLyAoV2ViS2l0IG1hcmtzIHRoZW0gYXMgZGlzYWJsZWQpCi0gICAg
ICAgIHNlbGVjdC5kaXNhYmxlZCA9IHRydWU7Ci0gICAgICAgIHN1cHBvcnQub3B0RGlzYWJsZWQg
PSAhb3B0LmRpc2FibGVkOwotCi0gICAgICAgIC8vIFRlc3QgdG8gc2VlIGlmIGl0J3MgcG9zc2li
bGUgdG8gZGVsZXRlIGFuIGV4cGFuZG8gZnJvbSBhbiBlbGVtZW50Ci0gICAgICAgIC8vIEZhaWxz
IGluIEludGVybmV0IEV4cGxvcmVyCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZGVs
ZXRlIGRpdi50ZXN0OwotICAgICAgICB9IGNhdGNoKCBlICkgewotICAgICAgICAgICAgICAgIHN1
cHBvcnQuZGVsZXRlRXhwYW5kbyA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAh
ZGl2LmFkZEV2ZW50TGlzdGVuZXIgJiYgZGl2LmF0dGFjaEV2ZW50ICYmIGRpdi5maXJlRXZlbnQg
KSB7Ci0gICAgICAgICAgICAgICAgZGl2LmF0dGFjaEV2ZW50KCAib25jbGljayIsIGNsaWNrRm4g
PSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb25pbmcgYSBub2Rl
IHNob3VsZG4ndCBjb3B5IG92ZXIgYW55Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBib3Vu
ZCBldmVudCBoYW5kbGVycyAoSUUgZG9lcyB0aGlzKQotICAgICAgICAgICAgICAgICAgICAgICAg
c3VwcG9ydC5ub0Nsb25lRXZlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICBkaXYuY2xvbmVOb2RlKCB0cnVlICkuZmlyZUV2ZW50KCJvbmNsaWNrIik7Ci0g
ICAgICAgICAgICAgICAgZGl2LmRldGFjaEV2ZW50KCAib25jbGljayIsIGNsaWNrRm4gKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGlmIGEgcmFkaW8gbWFpbnRhaW5zIGl0cyB2YWx1
ZQotICAgICAgICAvLyBhZnRlciBiZWluZyBhcHBlbmRlZCB0byB0aGUgRE9NCi0gICAgICAgIGlu
cHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgaW5wdXQudmFs
dWUgPSAidCI7Ci0gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAicmFkaW8iICk7
Ci0gICAgICAgIHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7Ci0KLSAg
ICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAiY2hlY2tlZCIsICJjaGVja2VkIiApOwotCi0gICAg
ICAgIC8vICMxMTIxNyAtIFdlYktpdCBsb3NlcyBjaGVjayB3aGVuIHRoZSBuYW1lIGlzIGFmdGVy
IHRoZSBjaGVja2VkIGF0dHJpYnV0ZQotICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1l
IiwgInQiICk7Ci0KLSAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApOwotICAgICAgICBm
cmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgZnJh
Z21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5sYXN0Q2hpbGQgKTsKLQotICAgICAgICAvLyBXZWJLaXQg
ZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMKLSAgICAg
ICAgc3VwcG9ydC5jaGVja0Nsb25lID0gZnJhZ21lbnQuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVO
b2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgYSBk
aXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKLSAgICAgICAgLy8g
dmFsdWUgb2YgdHJ1ZSBhZnRlciBhcHBlbmRlZCB0byB0aGUgRE9NIChJRTYvNykKLSAgICAgICAg
c3VwcG9ydC5hcHBlbmRDaGVja2VkID0gaW5wdXQuY2hlY2tlZDsKLQotICAgICAgICBmcmFnbWVu
dC5yZW1vdmVDaGlsZCggaW5wdXQgKTsKLSAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRp
diApOwotCi0gICAgICAgIC8vIFRlY2huaXF1ZSBmcm9tIEp1cml5IFpheXRzZXYKLSAgICAgICAg
Ly8gaHR0cDovL3BlcmZlY3Rpb25raWxscy5jb20vZGV0ZWN0aW5nLWV2ZW50LXN1cHBvcnQtd2l0
aG91dC1icm93c2VyLXNuaWZmaW5nLwotICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdGhl
IGNhc2Ugd2hlcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHN5c3RlbXMKLSAgICAgICAgLy8gYXJlIHVz
ZWQsIG5hbWVseSBpbiBJRS4gU2hvcnQtY2lyY3VpdGluZyBoZXJlIGhlbHBzIHVzIHRvCi0gICAg
ICAgIC8vIGF2b2lkIGFuIGV2YWwgY2FsbCAoaW4gc2V0QXR0cmlidXRlKSB3aGljaCBjYW4gY2F1
c2UgQ1NQCi0gICAgICAgIC8vIHRvIGdvIGhheXdpcmUuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIu
bW96aWxsYS5vcmcvZW4vU2VjdXJpdHkvQ1NQCi0gICAgICAgIGlmICggZGl2LmF0dGFjaEV2ZW50
ICkgewotICAgICAgICAgICAgICAgIGZvciAoIGkgaW4gewotICAgICAgICAgICAgICAgICAgICAg
ICAgc3VibWl0OiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiB0cnVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNpbjogdHJ1ZQotICAgICAgICAgICAgICAgIH0p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJvbiIgKyBpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBkaXYgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzU3VwcG9ydGVkICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCBldmVudE5hbWUsICJyZXR1cm47
IiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggdHlw
ZW9mIGRpdlsgZXZlbnROYW1lIF0gPT09ICJmdW5jdGlvbiIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRbIGkgKyAiQnViYmxlcyIg
XSA9IGlzU3VwcG9ydGVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFJ1biB0ZXN0cyB0aGF0IG5lZWQgYSBib2R5IGF0IGRvYyByZWFkeQotICAgICAgICBqUXVl
cnkoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciwgZGl2LCB0ZHMs
IG1hcmdpbkRpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpdlJlc2V0ID0gInBhZGRpbmc6
MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjsiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJib2R5IilbMF07Ci0KLSAgICAgICAgICAgICAgICBpZiAoICFib2R5ICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmV0dXJuIGZvciBmcmFtZXNldCBkb2NzIHRoYXQgZG9uJ3QgaGF2
ZSBhIGJvZHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9ICJ2aXNp
YmlsaXR5OmhpZGRlbjtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0
b3A6MDttYXJnaW4tdG9wOjFweCI7Ci0gICAgICAgICAgICAgICAgYm9keS5pbnNlcnRCZWZvcmUo
IGNvbnRhaW5lciwgYm9keS5maXJzdENoaWxkICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDb25z
dHJ1Y3QgdGhlIHRlc3QgZWxlbWVudAotICAgICAgICAgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGls
ZCggZGl2ICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0YWJsZSBjZWxscyBzdGls
bCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHRoZXkgYXJlIHNldAotICAgICAgICAgICAg
ICAgIC8vIHRvIGRpc3BsYXk6bm9uZSBhbmQgdGhlcmUgYXJlIHN0aWxsIG90aGVyIHZpc2libGUg
dGFibGUgY2VsbHMgaW4gYQotICAgICAgICAgICAgICAgIC8vIHRhYmxlIHJvdzsgaWYgc28sIG9m
ZnNldFdpZHRoL0hlaWdodCBhcmUgbm90IHJlbGlhYmxlIGZvciB1c2Ugd2hlbgotICAgICAgICAg
ICAgICAgIC8vIGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVj
dGx5IHVzaW5nCi0gICAgICAgICAgICAgICAgLy8gZGlzcGxheTpub25lIChpdCBpcyBzdGlsbCBz
YWZlIHRvIHVzZSBvZmZzZXRzIGlmIGEgcGFyZW50IGVsZW1lbnQgaXMKLSAgICAgICAgICAgICAg
ICAvLyBoaWRkZW47IGRvbiBzYWZldHkgZ29nZ2xlcyBhbmQgc2VlIGJ1ZyAjNDUxMiBmb3IgbW9y
ZSBpbmZvcm1hdGlvbikuCi0gICAgICAgICAgICAgICAgLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlz
IHRlc3QpCi0gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48
L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IjsKLSAgICAgICAgICAgICAgICB0ZHMgPSBkaXYu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Ci0gICAgICAgICAgICAgICAgdGRzWyAwIF0uc3R5
bGUuY3NzVGV4dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIjsK
LSAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09
PSAwICk7Ci0KLSAgICAgICAgICAgICAgICB0ZHNbIDAgXS5zdHlsZS5kaXNwbGF5ID0gIiI7Ci0g
ICAgICAgICAgICAgICAgdGRzWyAxIF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKLQotICAgICAg
ICAgICAgICAgIC8vIENoZWNrIGlmIGVtcHR5IHRhYmxlIGNlbGxzIHN0aWxsIGhhdmUgb2Zmc2V0
V2lkdGgvSGVpZ2h0Ci0gICAgICAgICAgICAgICAgLy8gKElFIDw9IDggZmFpbCB0aGlzIHRlc3Qp
Ci0gICAgICAgICAgICAgICAgc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgPSBpc1N1cHBv
cnRlZCAmJiAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOwotCi0gICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgYm94LXNpemluZyBhbmQgbWFyZ2luIGJlaGF2aW9yCi0gICAgICAgICAgICAg
ICAgZGl2LmlubmVySFRNTCA9ICIiOwotICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5jc3NUZXh0
ID0gImJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Vi
a2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6
YmxvY2s7d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7
Ci0gICAgICAgICAgICAgICAgc3VwcG9ydC5ib3hTaXppbmcgPSAoIGRpdi5vZmZzZXRXaWR0aCA9
PT0gNCApOwotICAgICAgICAgICAgICAgIHN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJv
ZHlPZmZzZXQgPSAoIGJvZHkub2Zmc2V0VG9wICE9PSAxICk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBOT1RFOiBUbyBhbnkgZnV0dXJlIG1haW50YWluZXIsIHdlJ3ZlIHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlCi0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBqc2RvbSBvbiBub2RlLmpzIHdpbGwg
YnJlYWsgd2l0aG91dCBpdC4KLSAgICAgICAgICAgICAgICBpZiAoIHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5waXhlbFBvc2l0aW9u
ID0gKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICkgfHwge30gKS50b3AgIT09
ICIxJSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxl
ID0gKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICkgfHwgeyB3aWR0aDogIjRw
eCIgfSApLndpZHRoID09PSAiNHB4IjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgaWYgZGl2IHdpdGggZXhwbGljaXQgd2lkdGggYW5kIG5vIG1hcmdpbi1yaWdodCBpbmNvcnJl
Y3RseQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmln
aHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiBGb3IgbW9yZQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaW5mbyBzZWUgYnVnICMzMzMzCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBGYWlscyBpbiBXZWJLaXQgYmVmb3JlIEZlYiAyMDExIG5pZ2h0bGllcwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJu
cyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
YXJnaW5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPSBk
aXZSZXNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS5tYXJnaW5S
aWdodCA9IG1hcmdpbkRpdi5zdHlsZS53aWR0aCA9ICIwIjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRpdi5zdHlsZS53aWR0aCA9ICIxcHgiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGl2
LmFwcGVuZENoaWxkKCBtYXJnaW5EaXYgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBv
cnQucmVsaWFibGVNYXJnaW5SaWdodCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFwYXJzZUZsb2F0KCAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBtYXJnaW5EaXYsIG51bGwg
KSB8fCB7fSApLm1hcmdpblJpZ2h0ICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09ICJ1bmRlZmluZWQiICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxl
bWVudHMgYWN0IGxpa2UgaW5saW5lLWJsb2NrCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBl
bGVtZW50cyB3aGVuIHNldHRpbmcgdGhlaXIgZGlzcGxheSB0byAnaW5saW5lJyBhbmQgZ2l2aW5n
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVtIGxheW91dAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gKElFIDwgOCBkb2VzIHRoaXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBk
aXYuaW5uZXJIVE1MID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXYuc3R5bGUuY3Nz
VGV4dCA9IGRpdlJlc2V0ICsgIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6
b29tOjEiOwotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRz
TGF5b3V0ID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDMgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdyYXAgdGhlaXIg
Y2hpbGRyZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIChJRSA2IGRvZXMgdGhpcykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvdyA9ICJ2aXNpYmxlIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRpdj48L2Rpdj4iOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiNXB4IjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9m
ZnNldFdpZHRoICE9PSAzICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5z
dHlsZS56b29tID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBO
dWxsIGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCi0gICAgICAgICAgICAgICAgYm9keS5y
ZW1vdmVDaGlsZCggY29udGFpbmVyICk7Ci0gICAgICAgICAgICAgICAgY29udGFpbmVyID0gZGl2
ID0gdGRzID0gbWFyZ2luRGl2ID0gbnVsbDsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gTnVs
bCBlbGVtZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRQotICAgICAgICBmcmFnbWVudC5yZW1vdmVD
aGlsZCggZGl2ICk7Ci0gICAgICAgIGFsbCA9IGEgPSBzZWxlY3QgPSBvcHQgPSBpbnB1dCA9IGZy
YWdtZW50ID0gZGl2ID0gbnVsbDsKLQotICAgICAgICByZXR1cm4gc3VwcG9ydDsKLX0pKCk7Ci12
YXIgcmJyYWNlID0gLyg/Olx7W1xzXFNdKlx9fFxbW1xzXFNdKlxdKSQvLAotICAgICAgICBybXVs
dGlEYXNoID0gLyhbQS1aXSkvZzsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0gICAgICAgIGNhY2hlOiB7
fSwKLQotICAgICAgICBkZWxldGVkSWRzOiBbXSwKLQotICAgICAgICAvLyBSZW1vdmUgYXQgbmV4
dCBtYWpvciByZWxlYXNlICgxLjkvMi4wKQotICAgICAgICB1dWlkOiAwLAotCi0gICAgICAgIC8v
IFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQotICAgICAgICAvLyBO
b24tZGlnaXRzIHJlbW92ZWQgdG8gbWF0Y2ggcmlubGluZWpRdWVyeQotICAgICAgICBleHBhbmRv
OiAialF1ZXJ5IiArICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNl
KCAvXEQvZywgIiIgKSwKLQotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGVsZW1lbnRzIHRocm93
IHVuY2F0Y2hhYmxlIGV4Y2VwdGlvbnMgaWYgeW91Ci0gICAgICAgIC8vIGF0dGVtcHQgdG8gYWRk
IGV4cGFuZG8gcHJvcGVydGllcyB0byB0aGVtLgotICAgICAgICBub0RhdGE6IHsKLSAgICAgICAg
ICAgICAgICAiZW1iZWQiOiB0cnVlLAotICAgICAgICAgICAgICAgIC8vIEJhbiBhbGwgb2JqZWN0
cyBleGNlcHQgZm9yIEZsYXNoICh3aGljaCBoYW5kbGUgZXhwYW5kb3MpCi0gICAgICAgICAgICAg
ICAgIm9iamVjdCI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAi
LAotICAgICAgICAgICAgICAgICJhcHBsZXQiOiB0cnVlCi0gICAgICAgIH0sCi0KLSAgICAgICAg
aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0u
bm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBq
UXVlcnkuZXhwYW5kbyBdOwotICAgICAgICAgICAgICAgIHJldHVybiAhIWVsZW0gJiYgIWlzRW1w
dHlEYXRhT2JqZWN0KCBlbGVtICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGF0YTogZnVuY3Rp
b24oIGVsZW0sIG5hbWUsIGRhdGEsIHB2dCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKLSAg
ICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHZhciB0aGlzQ2FjaGUsIHJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVy
bmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRCeU5h
bWUgPSB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIsCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGhhdmUgdG8gaGFuZGxlIERPTSBub2RlcyBhbmQgSlMgb2JqZWN0cyBkaWZmZXJlbnRs
eSBiZWNhdXNlIElFNi03Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4ndCBHQyBvYmpl
Y3QgcmVmZXJlbmNlcyBwcm9wZXJseSBhY3Jvc3MgdGhlIERPTS1KUyBib3VuZGFyeQotICAgICAg
ICAgICAgICAgICAgICAgICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gT25seSBET00gbm9kZXMgbmVlZCB0aGUgZ2xvYmFsIGpRdWVyeSBjYWNo
ZTsgSlMgb2JqZWN0IGRhdGEgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dGFjaGVk
IGRpcmVjdGx5IHRvIHRoZSBvYmplY3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2FsbHkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxl
bSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBkZWZpbmluZyBhbiBJRCBmb3Ig
SlMgb2JqZWN0cyBpZiBpdHMgY2FjaGUgYWxyZWFkeSBleGlzdHMgYWxsb3dzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgY29kZSB0byBzaG9ydGN1dCBvbiB0aGUgc2FtZSBwYXRoIGFz
IGEgRE9NIG5vZGUgd2l0aCBubyBjYWNoZQotICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBp
c05vZGUgPyBlbGVtWyBpbnRlcm5hbEtleSBdIDogZWxlbVsgaW50ZXJuYWxLZXkgXSAmJiBpbnRl
cm5hbEtleTsKLQotICAgICAgICAgICAgICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsg
dGhhbiB3ZSBuZWVkIHRvIHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCi0gICAgICAgICAg
ICAgICAgLy8gb2JqZWN0IHRoYXQgaGFzIG5vIGRhdGEgYXQgYWxsCi0gICAgICAgICAgICAgICAg
aWYgKCAoIWlkIHx8ICFjYWNoZVtpZF0gfHwgKCFwdnQgJiYgIWNhY2hlW2lkXS5kYXRhKSkgJiYg
Z2V0QnlOYW1lICYmIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoICFp
ZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgYSBu
ZXcgdW5pcXVlIElEIGZvciBlYWNoIGVsZW1lbnQgc2luY2UgdGhlaXIgZGF0YQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZW5kcyB1cCBpbiB0aGUgZ2xvYmFsIGNhY2hlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGlzTm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbVsgaW50ZXJuYWxLZXkgXSA9IGlkID0galF1ZXJ5LmRlbGV0ZWRJZHMucG9wKCkg
fHwgalF1ZXJ5Lmd1aWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gaW50ZXJuYWxLZXk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KCAhY2FjaGVbIGlkIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9
IHt9OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5
IG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpcyBzZXJpYWxpemVkIHVzaW5nIEpTT04uc3RyaW5naWZ5Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFpc05vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IEFuIG9iamVjdCBjYW4gYmUgcGFzc2VkIHRvIGpRdWVyeS5kYXRhIGluc3RlYWQgb2YgYSBrZXkv
dmFsdWUgcGFpcjsgdGhpcyBnZXRzCi0gICAgICAgICAgICAgICAgLy8gc2hhbGxvdyBjb3BpZWQg
b3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9m
IG5hbWUgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBwdnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhY2hlWyBpZCBdID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0sIG5hbWUg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlWyBpZCBdLmRhdGEgPSBqUXVlcnkuZXh0ZW5kKCBjYWNoZVsgaWQg
XS5kYXRhLCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdGhpc0NhY2hlID0gY2FjaGVbIGlkIF07Ci0KLSAgICAg
ICAgICAgICAgICAvLyBqUXVlcnkgZGF0YSgpIGlzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVj
dCBpbnNpZGUgdGhlIG9iamVjdCdzIGludGVybmFsIGRhdGEKLSAgICAgICAgICAgICAgICAvLyBj
YWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9ucyBiZXR3ZWVuIGludGVybmFsIGRh
dGEgYW5kIHVzZXItZGVmaW5lZAotICAgICAgICAgICAgICAgIC8vIGRhdGEuCi0gICAgICAgICAg
ICAgICAgaWYgKCAhcHZ0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdGhpc0Nh
Y2hlLmRhdGEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNDYWNoZS5k
YXRhID0ge307Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXNDYWNoZSA9IHRoaXNDYWNoZS5kYXRhOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGJvdGgg
Y29udmVydGVkLXRvLWNhbWVsIGFuZCBub24tY29udmVydGVkIGRhdGEgcHJvcGVydHkgbmFtZXMK
LSAgICAgICAgICAgICAgICAvLyBJZiBhIGRhdGEgcHJvcGVydHkgd2FzIHNwZWNpZmllZAotICAg
ICAgICAgICAgICAgIGlmICggZ2V0QnlOYW1lICkgewotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGaXJzdCBUcnkgdG8gZmluZCBhcy1pcyBwcm9wZXJ0eSBkYXRhCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIG5hbWUgXTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGVzdCBmb3IgbnVsbHx1bmRlZmluZWQgcHJvcGVydHkgZGF0YQotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXQgPT0gbnVsbCApIHsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIGpRdWVyeS5jYW1l
bENhc2UoIG5hbWUgKSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGU7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAg
fSwKLQotICAgICAgICByZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIElu
dGVybmFsIFVzZSBPbmx5ICovICkgewotICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5hY2Nl
cHREYXRhKCBlbGVtICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHRoaXNDYWNoZSwgaSwgbCwKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9u
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6
IGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVy
eS5leHBhbmRvIF0gOiBqUXVlcnkuZXhwYW5kbzsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRo
ZXJlIGlzIGFscmVhZHkgbm8gY2FjaGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0LCB0aGVyZSBpcyBu
bwotICAgICAgICAgICAgICAgIC8vIHB1cnBvc2UgaW4gY29udGludWluZwotICAgICAgICAgICAg
ICAgIGlmICggIWNhY2hlWyBpZCBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggbmFtZSApIHsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF0gOiBj
YWNoZVsgaWQgXS5kYXRhOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXNDYWNo
ZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGFycmF5
IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgbmFtZXMgZm9yIGRhdGEga2V5cwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuaXNBcnJheSggbmFtZSApICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBzdHJp
bmcgYXMgYSBrZXkgYmVmb3JlIGFueSBtYW5pcHVsYXRpb24KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUgaW4gdGhpc0NhY2hlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IFsgbmFtZSBdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBj
YW1lbCBjYXNlZCB2ZXJzaW9uIGJ5IHNwYWNlcyB1bmxlc3MgYSBrZXkgd2l0aCB0aGUgc3BhY2Vz
IGV4aXN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg
PSBbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCIgIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBuYW1lLmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgdGhpc0NhY2hlWyBuYW1lW2ldIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBp
cyBubyBkYXRhIGxlZnQgaW4gdGhlIGNhY2hlLCB3ZSB3YW50IHRvIGNvbnRpbnVlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNl
bGYgZ2V0IGRlc3Ryb3llZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEo
IHB2dCA/IGlzRW1wdHlEYXRhT2JqZWN0IDogalF1ZXJ5LmlzRW1wdHlPYmplY3QgKSggdGhpc0Nh
Y2hlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2VlIGpRdWVy
eS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKCAhcHZ0ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdLmRhdGE7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1
bmxlc3MgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBoYWQgYmVlbiB0aGUgb25seSB0aGluZyBsZWZ0IGluIGl0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdCggY2FjaGVbIGlkIF0gKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIERlc3Ryb3kgdGhlIGNh
Y2hlCi0gICAgICAgICAgICAgICAgaWYgKCBpc05vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSwgdHJ1ZSApOwotCi0gICAgICAgICAgICAg
ICAgLy8gVXNlIGRlbGV0ZSB3aGVuIHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3IgYGNhY2hlYCBp
cyBub3QgYSB3aW5kb3cgcGVyIGlzV2luZG93ICgjMTAwODApCi0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICggalF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyB8fCBjYWNoZSAhPSBjYWNoZS53
aW5kb3cgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGVbIGlkIF07Ci0K
LSAgICAgICAgICAgICAgICAvLyBXaGVuIGFsbCBlbHNlIGZhaWxzLCBudWxsCi0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdID0gbnVs
bDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gRm9yIGludGVy
bmFsIHVzZSBvbmx5LgotICAgICAgICBfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEg
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kYXRhKCBlbGVtLCBuYW1lLCBkYXRh
LCB0cnVlICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWlu
aW5nIGlmIGEgRE9NIG5vZGUgY2FuIGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCi0gICAgICAgIGFj
Y2VwdERhdGE6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHZhciBub0RhdGEg
PSBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNh
c2UoKSBdOwotCi0gICAgICAgICAgICAgICAgLy8gbm9kZXMgYWNjZXB0IGRhdGEgdW5sZXNzIG90
aGVyd2lzZSBzcGVjaWZpZWQ7IHJlamVjdGlvbiBjYW4gYmUgY29uZGl0aW9uYWwKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIW5vRGF0YSB8fCBub0RhdGEgIT09IHRydWUgJiYgZWxlbS5nZXRBdHRy
aWJ1dGUoImNsYXNzaWQiKSA9PT0gbm9EYXRhOwotICAgICAgICB9Ci19KTsKLQotalF1ZXJ5LmZu
LmV4dGVuZCh7Ci0gICAgICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewotICAgICAg
ICAgICAgICAgIHZhciBwYXJ0cywgcGFydCwgYXR0ciwgbmFtZSwgbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0gPSB0aGlzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gbnVsbDsKLQotICAgICAgICAgICAgICAg
IC8vIEdldHMgYWxsIHZhbHVlcwotICAgICAgICAgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmlu
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3RoICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LmRhdGEoIGVsZW0gKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09
IDEgJiYgIWpRdWVyeS5fZGF0YSggZWxlbSwgInBhcnNlZEF0dHJzIiApICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBlbGVtLmF0dHJpYnV0ZXM7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbCA9IGF0dHIubGVu
Z3RoOyBpIDwgbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGF0dHJbaV0ubmFtZTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbmFtZS5pbmRleE9mKCAiZGF0YS0iICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnN1YnN0cmluZyg1KSApOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFB
dHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2VkQXR0cnMiLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gU2V0cyBtdWx0aXBsZSB2YWx1ZXMKLSAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiBrZXkgPT09ICJvYmplY3QiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmRhdGEoIHRoaXMsIGtleSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcGFydHMgPSBrZXkuc3BsaXQoICIu
IiwgMiApOwotICAgICAgICAgICAgICAgIHBhcnRzWzFdID0gcGFydHNbMV0gPyAiLiIgKyBwYXJ0
c1sxXSA6ICIiOwotICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0c1sxXSArICIhIjsKLQotICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUg
KSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMudHJpZ2dlckhh
bmRsZXIoICJnZXREYXRhIiArIHBhcnQsIFsgcGFydHNbMF0gXSApOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBmZXRjaCBhbnkgaW50ZXJuYWxseSBzdG9yZWQg
ZGF0YSBmaXJzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09
IHVuZGVmaW5lZCAmJiBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEgPSBqUXVlcnkuZGF0YSggZWxlbSwga2V5ICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSggcGFydHNb
MF0gKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNb
MV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRo
aXMgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJIYW5k
bGVyKCAic2V0RGF0YSIgKyBwYXJ0LCBwYXJ0cyApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJIYW5kbGVyKCAiY2hhbmdlRGF0YSIgKyBwYXJ0
LCBwYXJ0cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCBmYWxzZSApOwotICAg
ICAgICB9LAotCi0gICAgICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCB0aGlzLCBrZXkgKTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgfQotfSk7Ci0KLWZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEg
KSB7Ci0gICAgICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBm
ZXRjaCBhbnkKLSAgICAgICAgLy8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRl
Ci0gICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEg
KSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9ICJkYXRhLSIgKyBrZXkucmVwbGFjZSgg
cm11bHRpRGFzaCwgIi0kMSIgKS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgICAgICAgICAgZGF0
YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAidHJ1ZSIg
PyB0cnVlIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gImZhbHNl
IiA/IGZhbHNlIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gIm51
bGwiID8gbnVsbCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgY29u
dmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICtkYXRhICsgIiIgPT09IGRhdGEgPyArZGF0YSA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJicmFjZS50ZXN0KCBkYXRhICkgPyBqUXVl
cnkucGFyc2VKU09OKCBkYXRhICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBlICkge30KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBp
dCBpc24ndCBjaGFuZ2VkIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGF0
YSggZWxlbSwga2V5LCBkYXRhICk7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGF0YTsKLX0KLQotLy8gY2hlY2tzIGEgY2FjaGUg
b2JqZWN0IGZvciBlbXB0aW5lc3MKLWZ1bmN0aW9uIGlzRW1wdHlEYXRhT2JqZWN0KCBvYmogKSB7
Ci0gICAgICAgIHZhciBuYW1lOwotICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLQotICAg
ICAgICAgICAgICAgIC8vIGlmIHRoZSBwdWJsaWMgZGF0YSBvYmplY3QgaXMgZW1wdHksIHRoZSBw
cml2YXRlIGlzIHN0aWxsIGVtcHR5Ci0gICAgICAgICAgICAgICAgaWYgKCBuYW1lID09PSAiZGF0
YSIgJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9ialtuYW1lXSApICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICggbmFtZSAhPT0gInRvSlNPTiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci19Ci1qUXVlcnkuZXh0ZW5kKHsKLSAgICAgICAgcXVldWU6IGZ1bmN0aW9uKCBlbGVt
LCB0eXBlLCBkYXRhICkgewotICAgICAgICAgICAgICAgIHZhciBxdWV1ZTsKLQotICAgICAgICAg
ICAgICAgIGlmICggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAoIHR5
cGUgfHwgImZ4IiApICsgInF1ZXVlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0g
alF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3Qg
YSBsb29rdXAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5LmlzQXJyYXkoZGF0
YSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUgPSBq
UXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoZGF0YSkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKCBkYXRhICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBxdWV1ZSB8fCBbXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7Ci0gICAg
ICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKLQotICAgICAgICAgICAgICAgIHZhciBx
dWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBm
biA9IHF1ZXVlLnNoaWZ0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVy
eS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV4
dCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
ZGVxdWV1ZSggZWxlbSwgdHlwZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92
ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWwKLSAgICAgICAgICAgICAgICBpZiAoIGZuID09PSAiaW5w
cm9ncmVzcyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydExlbmd0aC0tOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICggZm4gKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZy
b20gYmVpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1
ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUudW5zaGlmdCggImlucHJvZ3Jlc3MiICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBob29rcy5zdG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgZm4uY2Fs
bCggZWxlbSwgbmV4dCwgaG9va3MgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGhvb2tzLmVtcHR5LmZpcmUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgLy8gbm90IGludGVuZGVkIGZvciBwdWJsaWMgY29uc3VtcHRpb24gLSBnZW5lcmF0
ZXMgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJucyB0aGUgY3VycmVudCBvbmUKLSAgICAg
ICAgX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewotICAgICAgICAgICAgICAg
IHZhciBrZXkgPSB0eXBlICsgInF1ZXVlSG9va3MiOwotICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuX2RhdGEoIGVsZW0sIGtleSApIHx8IGpRdWVyeS5fZGF0YSggZWxlbSwga2V5LCB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1v
cnkiKS5hZGQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlIiwgdHJ1ZSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVl
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9Ci19KTsKLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgICAgIHF1ZXVlOiBmdW5jdGlv
biggdHlwZSwgZGF0YSApIHsKLSAgICAgICAgICAgICAgICB2YXIgc2V0dGVyID0gMjsKLQotICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YSA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gImZ4IjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlci0tOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbMF0s
IHR5cGUgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YSA9PT0gdW5kZWZpbmVkID8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRh
dGEgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmUgYSBob29r
cyBmb3IgdGhpcyBxdWV1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnku
X3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHR5cGUgPT09ICJmeCIgJiYgcXVldWVbMF0gIT09ICJpbnByb2dyZXNzIiApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSgg
dGhpcywgdHlwZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSwKLSAgICAgICAgZGVxdWV1ZTogZnVuY3Rp
b24oIHR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0gICAgICAgIC8vIEJhc2VkIG9mZiBv
ZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi4KLSAgICAgICAg
Ly8gaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5
LwotICAgICAgICBkZWxheTogZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7Ci0gICAgICAgICAgICAg
ICAgdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDog
dGltZTsKLSAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dCggbmV4dCwg
dGltZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoIHRpbWVvdXQg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0sCi0gICAgICAgIGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7Ci0gICAgICAgIH0s
Ci0gICAgICAgIC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0
YWluIHR5cGUKLSAgICAgICAgLy8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1
bHQpCi0gICAgICAgIHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHRtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50cyA9IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ID0gdGhpcy5sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISggLS1jb3VudCAp
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyLnJlc29s
dmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9iaiA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVk
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngi
OwotCi0gICAgICAgICAgICAgICAgd2hpbGUoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRtcCA9IGpRdWVyeS5fZGF0YSggZWxlbWVudHNbIGkgXSwgdHlwZSArICJxdWV1ZUhvb2tz
IiApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlc29sdmUo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7Ci0gICAgICAg
IH0KLX0pOwotdmFyIG5vZGVIb29rLCBib29sSG9vaywgZml4U3BlY2lmaWVkLAotICAgICAgICBy
Y2xhc3MgPSAvW1x0XHJcbl0vZywKLSAgICAgICAgcnJldHVybiA9IC9cci9nLAotICAgICAgICBy
dHlwZSA9IC9eKD86YnV0dG9ufGlucHV0KSQvaSwKLSAgICAgICAgcmZvY3VzYWJsZSA9IC9eKD86
YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLAotICAgICAgICByY2xpY2th
YmxlID0gL15hKD86cmVhfCkkL2ksCi0gICAgICAgIHJib29sZWFuID0gL14oPzphdXRvZm9jdXN8
YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9v
cHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3RlZCkkL2ksCi0g
ICAgICAgIGdldFNldEF0dHJpYnV0ZSA9IGpRdWVyeS5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTsK
LQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1
ZSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5
LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgICAgICB9LAot
Ci0gICAgICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkgewotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9LAotCi0gICAgICAgIHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUs
IHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgICAgICB9LAotCi0gICAgICAgIHJl
bW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkgewotICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVl
cnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeS9jYXRjaCBo
YW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92aW5nIGEgcHJvcGVydHkg
b24gd2luZG93KQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpc1sgbmFtZSBdID0gdW5kZWZpbmVkOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1sgbmFtZSBdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCggZSApIHt9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAg
ICB2YXIgY2xhc3NOYW1lcywgaSwgbCwgZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
dENsYXNzLCBjLCBjbDsKLQotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IHZhbHVlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKCBqICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRo
aXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICggdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxpdCggY29yZV9yc3BhY2Ug
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9
IHRoaXNbIGkgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0u
bm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhZWxlbS5jbGFzc05hbWUgJiYgY2xhc3NOYW1lcy5sZW5ndGggPT09IDEgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNz
TmFtZSA9IHZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldENsYXNzID0gIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICI7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IGNsYXNz
TmFtZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZXRDbGFzcy5pbmRleE9mKCAiICIg
KyBjbGFzc05hbWVzWyBjIF0gKyAiICIgKSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgKz0gY2xh
c3NOYW1lc1sgYyBdICsgIiAiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGpRdWVyeS50cmltKCBzZXRDbGFzcyApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAg
IHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJl
bW92ZXMsIGNsYXNzTmFtZSwgZWxlbSwgYywgY2wsIGksIGw7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywg
aiwgdGhpcy5jbGFzc05hbWUpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCAodmFsdWUgJiYgdHlwZW9mIHZhbHVl
ID09PSAic3RyaW5nIikgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZXMgPSAoIHZhbHVlIHx8ICIiICkuc3BsaXQoIGNvcmVfcnNwYWNlICk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7
IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0
aGlzWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gMSAmJiBlbGVtLmNsYXNzTmFtZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICgiICIgKyBlbGVtLmNsYXNzTmFtZSArICIg
IikucmVwbGFjZSggcmNsYXNzLCAiICIgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGxvb3Agb3ZlciBlYWNoIGl0ZW0gaW4gdGhlIHJlbW92YWwgbGlzdAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9
IHJlbW92ZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB1bnRpbCB0aGVyZSBpcyBub3RoaW5n
IHRvIHJlbW92ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggY2xhc3NOYW1lLmluZGV4T2YoIiAiICsgcmVtb3Zlc1sgYyBdICsgIiAiKSA+
PSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSggIiAiICsgcmVtb3Zlc1sgYyBd
ICsgIiAiICwgIiAiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFs
dWUgPyBqUXVlcnkudHJpbSggY2xhc3NOYW1lICkgOiAiIjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAg
IHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkgewotICAgICAgICAgICAg
ICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgaXNC
b29sID0gdHlwZW9mIHN0YXRlVmFsID09PSAiYm9vbGVhbiI7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywg
aSwgdGhpcy5jbGFzc05hbWUsIHN0YXRlVmFsKSwgc3RhdGVWYWwgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5
cGUgPT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
b2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgY2xhc3NOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGkgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYg
PSBqUXVlcnkoIHRoaXMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IHN0YXRlVmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxpdCggY29yZV9yc3BhY2UgKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBp
KysgXSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hl
Y2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFz
ZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmWyBzdGF0ZSA/ICJhZGRDbGFzcyIgOiAicmVtb3ZlQ2xhc3MiIF0oIGNs
YXNzTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUg
PT09ICJib29sZWFuIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0
aGlzLmNsYXNzTmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIsIHRoaXMuY2xh
c3NOYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0b2dnbGUgd2hvbGUgY2xhc3NOYW1lCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUg
fHwgdmFsdWUgPT09IGZhbHNlID8gIiIgOiBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFt
ZV9fIiApIHx8ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICB9LAotCi0gICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3Ig
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsgIiAi
LAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBsID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYm
ICgiICIgKyB0aGlzW2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5k
ZXhPZiggY2xhc3NOYW1lICkgPj0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9LAotCi0gICAg
ICAgIHZhbDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICAgICAgICAgIHZhciBob29rcywg
cmV0LCBpc0Z1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbMF07
Ci0KLSAgICAgICAgICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwgalF1ZXJ5LnZhbEhv
b2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29r
cy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSkgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
ZWxlbS52YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlw
ZW9mIHJldCA9PT0gInN0cmluZyIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucmVwbGFjZShycmV0dXJuLCAiIikgOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjYXNlcyB3aGVy
ZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCA9PSBudWxsID8gIiIgOiByZXQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24o
IHZhbHVlICk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBp
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZiA9IGpRdWVyeSh0aGlzKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggaXNGdW5jdGlvbiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgc2VsZi52YWwoKSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252ZXJ0IG51
bWJlcnMgdG8gc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbCA9PSBudWxs
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAiIjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgKz0gIiI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGpRdWVyeS5tYXAodmFsLCBmdW5jdGlvbiAo
IHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVy
eS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5v
cm1hbCBzZXR0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJz
ZXQiIGluIGhvb2tzKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgInZhbHVlIiApID09PSB1bmRl
ZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2
YWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0KLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsKLSAgICAgICAgdmFsSG9va3M6IHsKLSAgICAg
ICAgICAgICAgICBvcHRpb246IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0
ZXMudmFsdWUgaXMgdW5kZWZpbmVkIGluIEJsYWNrYmVycnkgNC43IGJ1dAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB1c2VzIC52YWx1ZS4gU2VlICM2OTMyCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLmF0dHJpYnV0ZXMudmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdmFsIHx8IHZhbC5zcGVjaWZp
ZWQgPyBlbGVtLnZhbHVlIDogZWxlbS50ZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc2VsZWN0OiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgdmFsdWUsIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSA9IGVsZW0udHlwZSA9PT0g
InNlbGVjdC1vbmUiIHx8IGluZGV4IDwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5n
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGluZGV4IDwg
MCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXgg
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lID8g
aW5kZXggOiAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvb3AgdGhy
b3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICggOyBpIDwgbWF4OyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uc1sgaSBdOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2xkSUUgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQg
YWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERv
bid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0
Z3JvdXAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCBqUXVlcnkuc3VwcG9ydC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBv
cHRpb24uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpID09PSBudWxsICkgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAhb3B0aW9uLnBh
cmVudE5vZGUuZGlzYWJsZWQgfHwgIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUs
ICJvcHRncm91cCIgKSApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpR
dWVyeSggb3B0aW9uICkudmFsKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3Rz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9u
ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goIHZhbHVlICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbHVlczsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoZWxlbSkuZmluZCgib3B0
aW9uIikuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnNlbGVjdGVkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSh0aGlzKS52YWwo
KSwgdmFsdWVzICkgPj0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGVkSW5k
ZXggPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICAvLyBVbnVzZWQg
aW4gMS44LCBsZWZ0IGluIHNvIGF0dHJGbi1zdGFiYmVycyB3b24ndCBkaWU7IHJlbW92ZSBpbiAx
LjkKLSAgICAgICAgYXR0ckZuOiB7fSwKLQotICAgICAgICBhdHRyOiBmdW5jdGlvbiggZWxlbSwg
bmFtZSwgdmFsdWUsIHBhc3MgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJldCwgaG9va3MsIG5v
dHhtbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQot
ICAgICAgICAgICAgICAgIC8vIGRvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21t
ZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKLSAgICAgICAgICAgICAgICBpZiAoICFlbGVtIHx8IG5U
eXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICggcGFzcyAmJiBqUXVlcnkuaXNGdW5jdGlvbiggalF1ZXJ5LmZuWyBuYW1lIF0gKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkoIGVsZW0gKVsgbmFtZSBdKCB2
YWx1ZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNr
IHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkCi0gICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09ICJ1bmRlZmluZWQiICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1
ZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5vdHhtbCA9IG5UeXBl
ICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKLQotICAgICAgICAgICAgICAgIC8v
IEFsbCBhdHRyaWJ1dGVzIGFyZSBsb3dlcmNhc2UKLSAgICAgICAgICAgICAgICAvLyBHcmFiIG5l
Y2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkCi0gICAgICAgICAgICAgICAgaWYgKCBub3R4
bWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1l
IF0gfHwgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IG5vZGVIb29rICk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZp
bmVkICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSBudWxsICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggZWxl
bSwgbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tz
ICYmIG5vdHhtbCAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0g
dW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyAiIiApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBob29rcyAmJiAiZ2V0
IiBpbiBob29rcyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAh
PT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBlbGVt
LmdldEF0dHJpYnV0ZSggbmFtZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb24t
ZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5l
ZAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgcmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgICAgICAgICAgICAg
IHZhciBwcm9wTmFtZSwgYXR0ck5hbWVzLCBuYW1lLCBpc0Jvb2wsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpID0gMDsKLQotICAgICAgICAgICAgICAgIGlmICggdmFsdWUgJiYgZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWVzID0gdmFs
dWUuc3BsaXQoIGNvcmVfcnNwYWNlICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IDsgaSA8IGF0dHJOYW1lcy5sZW5ndGg7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IGF0dHJOYW1lc1sgaSBdOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Jvb2wgPSByYm9vbGVhbi50ZXN0
KCBuYW1lICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBT
ZWUgIzk2OTkgZm9yIGV4cGxhbmF0aW9uIG9mIHRoaXMgYXBwcm9hY2ggKHNldHRpbmcgZmlyc3Qs
IHRoZW4gcmVtb3ZhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBEbyBub3QgZG8gdGhpcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIChzZWUgIzEwODcwKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQm9vbCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdHRy
KCBlbGVtLCBuYW1lLCAiIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92
ZUF0dHJpYnV0ZSggZ2V0U2V0QXR0cmlidXRlID8gbmFtZSA6IHByb3BOYW1lICk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgY29ycmVzcG9uZGluZyBw
cm9wZXJ0eSB0byBmYWxzZSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Jvb2wgJiYgcHJvcE5hbWUgaW4gZWxlbSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1b
IHByb3BOYW1lIF0gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYXR0
ckhvb2tzOiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogewotICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbid0IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJlIGNoYW5n
ZWQgKHNpbmNlIGl0IGNhdXNlcyBwcm9ibGVtcyBpbiBJRSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBydHlwZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5wYXJl
bnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5lcnJvciggInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFs
dWUgJiYgdmFsdWUgPT09ICJyYWRpbyIgJiYgalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIp
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcg
dGhlIHR5cGUgb24gYSByYWRpbyBidXR0b24gYWZ0ZXIgdGhlIHZhbHVlIHJlc2V0cyB0aGUgdmFs
dWUgaW4gSUU2LTkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZXNldCB2YWx1ZSB0byBpdCdzIGRlZmF1bHQgaW4gY2FzZSB0eXBlIGlzIHNldCBhZnRlciB2YWx1
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9y
IGVsZW1lbnQgY3JlYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgdmFsID0gZWxlbS52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHZhbHVlIHByb3BlcnR5IGZvciBiYWNrIGNv
bXBhdAotICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgbm9kZUhvb2sgZm9yIGJ1dHRvbiBlbGVt
ZW50cyBpbiBJRTYvNyAoIzE5NTQpCi0gICAgICAgICAgICAgICAgdmFsdWU6IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBl
bGVtLCAiYnV0dG9uIiApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSG9vay5nZXQoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bmFtZSBpbiBlbGVtID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLnZhbHVlIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxs
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
dDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRv
biIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvZXMgbm90
IHJldHVybiBzbyB0aGF0IHNldEF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBwcm9wRml4
OiB7Ci0gICAgICAgICAgICAgICAgdGFiaW5kZXg6ICJ0YWJJbmRleCIsCi0gICAgICAgICAgICAg
ICAgcmVhZG9ubHk6ICJyZWFkT25seSIsCi0gICAgICAgICAgICAgICAgImZvciI6ICJodG1sRm9y
IiwKLSAgICAgICAgICAgICAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIiwKLSAgICAgICAgICAgICAg
ICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAotICAgICAgICAgICAgICAgIGNlbGxzcGFjaW5nOiAi
Y2VsbFNwYWNpbmciLAotICAgICAgICAgICAgICAgIGNlbGxwYWRkaW5nOiAiY2VsbFBhZGRpbmci
LAotICAgICAgICAgICAgICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKLSAgICAgICAgICAgICAgICBj
b2xzcGFuOiAiY29sU3BhbiIsCi0gICAgICAgICAgICAgICAgdXNlbWFwOiAidXNlTWFwIiwKLSAg
ICAgICAgICAgICAgICBmcmFtZWJvcmRlcjogImZyYW1lQm9yZGVyIiwKLSAgICAgICAgICAgICAg
ICBjb250ZW50ZWRpdGFibGU6ICJjb250ZW50RWRpdGFibGUiCi0gICAgICAgIH0sCi0KLSAgICAg
ICAgcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewotICAgICAgICAgICAgICAg
IHZhciByZXQsIGhvb2tzLCBub3R4bWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBuVHlwZSA9
IGVsZW0ubm9kZVR5cGU7Ci0KLSAgICAgICAgICAgICAgICAvLyBkb24ndCBnZXQvc2V0IHByb3Bl
cnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCi0gICAgICAgICAgICAg
ICAgaWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0g
MiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1M
RG9jKCBlbGVtICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG5vdHhtbCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3MKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmlu
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhv
b2tzICYmIChyZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkpICE9PSB1bmRlZmlu
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBl
bGVtLCBuYW1lICkpICE9PSBudWxsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmV0OwotCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAg
ICBwcm9wSG9va3M6IHsKLSAgICAgICAgICAgICAgICB0YWJJbmRleDogewotICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlIGNv
cnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIw
MDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0
aC1qYXZhc2NyaXB0LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmli
dXRlTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVO
b2RlLnNwZWNpZmllZCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VJbnQoIGF0dHJpYnV0ZU5vZGUudmFsdWUsIDEwICkgOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8
IHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLX0pOwotCi0v
LyBIb29rIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKLWJvb2xIb29rID0gewotICAgICAgICBnZXQ6
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICAgICAgICAgIC8vIEFsaWduIGJvb2xl
YW4gYXR0cmlidXRlcyB3aXRoIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcwotICAgICAgICAgICAg
ICAgIC8vIEZhbGwgYmFjayB0byBhdHRyaWJ1dGUgcHJlc2VuY2Ugd2hlcmUgc29tZSBib29sZWFu
cyBhcmUgbm90IHN1cHBvcnRlZAotICAgICAgICAgICAgICAgIHZhciBhdHRyTm9kZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUgKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHkgPT09IHRydWUgfHwgdHlwZW9mIHByb3Bl
cnR5ICE9PSAiYm9vbGVhbiIgJiYgKCBhdHRyTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShu
YW1lKSApICYmIGF0dHJOb2RlLm5vZGVWYWx1ZSAhPT0gZmFsc2UgPwotICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZS50b0xvd2VyQ2FzZSgpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu
ZGVmaW5lZDsKLSAgICAgICAgfSwKLSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUs
IG5hbWUgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lOwotICAgICAgICAgICAgICAg
IGlmICggdmFsdWUgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVt
b3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaXMgdHJ1ZSBzaW5j
ZSB3ZSBrbm93IGF0IHRoaXMgcG9pbnQgaXQncyB0eXBlIGJvb2xlYW4gYW5kIG5vdCBmYWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUg
c2FtZSBuYW1lIGFuZCBzZXQgdGhlIERPTSBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHByb3BOYW1lIGluIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE9ubHkgc2V0IHRoZSBJREwgc3BlY2lmaWNhbGx5IGlmIGl0IGFs
cmVhZHkgZXhpc3RzIG9uIHRoZSBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1bIHByb3BOYW1lIF0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50
b0xvd2VyQ2FzZSgpICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biBuYW1lOwotICAgICAgICB9Ci19OwotCi0vLyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5n
L3NldHRpbmcgc29tZSBhdHRyaWJ1dGVzIHdpdGggZ2V0L3NldEF0dHJpYnV0ZQotaWYgKCAhZ2V0
U2V0QXR0cmlidXRlICkgewotCi0gICAgICAgIGZpeFNwZWNpZmllZCA9IHsKLSAgICAgICAgICAg
ICAgICBuYW1lOiB0cnVlLAotICAgICAgICAgICAgICAgIGlkOiB0cnVlLAotICAgICAgICAgICAg
ICAgIGNvb3JkczogdHJ1ZQotICAgICAgICB9OwotCi0gICAgICAgIC8vIFVzZSB0aGlzIGZvciBh
bnkgYXR0cmlidXRlIGluIElFNi83Ci0gICAgICAgIC8vIFRoaXMgZml4ZXMgYWxtb3N0IGV2ZXJ5
IElFNi83IGlzc3VlCi0gICAgICAgIG5vZGVIb29rID0galF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9
IHsKLSAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJldCAmJiAoIGZpeFNwZWNpZmllZFsgbmFtZSBdID8gcmV0LnZhbHVlICE9PSAiIiA6
IHJldC5zcGVjaWZpZWQgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC52
YWx1ZSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsKLSAgICAg
ICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVl
LCBuYW1lICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBleGlzdGluZyBv
ciBjcmVhdGUgYSBuZXcgYXR0cmlidXRlIG5vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIXJldCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlTm9kZSggcmV0ICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCByZXQudmFsdWUg
PSB2YWx1ZSArICIiICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAg
IC8vIFNldCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGF1dG8gaW5zdGVhZCBvZiAwIG9uIGVtcHR5IHN0
cmluZyggQnVnICM4MTUwICkKLSAgICAgICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKLSAgICAg
ICAgalF1ZXJ5LmVhY2goWyAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSAp
IHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0
ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0sIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHZhbHVlID09PSAiIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgImF1dG8iICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIFNldCBjb250ZW50ZWRp
dGFibGUgdG8gZmFsc2Ugb24gcmVtb3ZhbHMoIzEwNDI5KQotICAgICAgICAvLyBTZXR0aW5nIHRv
IGVtcHR5IHN0cmluZyB0aHJvd3MgYW4gZXJyb3IgYXMgYW4gaW52YWxpZCB2YWx1ZQotICAgICAg
ICBqUXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZSA9IHsKLSAgICAgICAgICAgICAgICBn
ZXQ6IG5vZGVIb29rLmdldCwKLSAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2
YWx1ZSwgbmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICIi
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICJmYWxzZSI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlSG9v
ay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9
OwotfQotCi0KLS8vIFNvbWUgYXR0cmlidXRlcyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElF
Ci1pZiAoICFqUXVlcnkuc3VwcG9ydC5ocmVmTm9ybWFsaXplZCApIHsKLSAgICAgICAgalF1ZXJ5
LmVhY2goWyAiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwg
bmFtZSApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVl
cnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0sIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgMiApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDog
cmV0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKLX0KLQotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3R5bGUgKSB7Ci0gICAgICAgIGpR
dWVyeS5hdHRySG9va3Muc3R5bGUgPSB7Ci0gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigg
ZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB1bmRlZmluZWQgaW4g
dGhlIGNhc2Ugb2YgZW1wdHkgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3Jt
YWxpemUgdG8gbG93ZXJjYXNlIHNpbmNlIElFIHVwcGVyY2FzZXMgY3NzIHByb3BlcnR5IG5hbWVz
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zdHlsZS5jc3NUZXh0LnRvTG93
ZXJDYXNlKCkgfHwgdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAg
ICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKCBlbGVtLnN0eWxlLmNzc1RleHQgPSB2YWx1ZSArICIiICk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICB9OwotfQotCi0vLyBTYWZhcmkgbWlzLXJlcG9ydHMgdGhlIGRlZmF1
bHQgc2VsZWN0ZWQgcHJvcGVydHkgb2YgYW4gb3B0aW9uCi0vLyBBY2Nlc3NpbmcgdGhlIHBhcmVu
dCdzIHNlbGVjdGVkSW5kZXggcHJvcGVydHkgZml4ZXMgaXQKLWlmICggIWpRdWVyeS5zdXBwb3J0
Lm9wdFNlbGVjdGVkICkgewotICAgICAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0galF1
ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCwgewotICAgICAgICAgICAgICAg
IGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFy
ZW50ID0gZWxlbS5wYXJlbnROb2RlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBh
cmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnNlbGVjdGVk
SW5kZXg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgaXQgYWxzbyB3b3JrcyB3aXRoIG9wdGdyb3Vwcywgc2VlICM1NzAxCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJ
bmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICB9KTsKLX0KLQotLy8gSUU2LzcgY2FsbCBlbmN0eXBlIGVuY29k
aW5nCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5lbmN0eXBlICkgewotICAgICAgICBqUXVlcnkucHJv
cEZpeC5lbmN0eXBlID0gImVuY29kaW5nIjsKLX0KLQotLy8gUmFkaW9zIGFuZCBjaGVja2JveGVz
IGdldHRlci9zZXR0ZXIKLWlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNrT24gKSB7Ci0gICAgICAg
IGpRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQg
aW5zdGVhZCBvZiAib24iIGlmIGEgdmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgidmFsdWUiKSA9PT0g
bnVsbCA/ICJvbiIgOiBlbGVtLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgIH0pOwotfQotalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAi
Y2hlY2tib3giIF0sIGZ1bmN0aW9uKCkgewotICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMg
XSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLCB7Ci0gICAgICAgICAg
ICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1
ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotfSk7Ci12YXIgcmZvcm1FbGVtcyA9
IC9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSwKLSAgICAgICAgcnR5cGVuYW1lc3BhY2Ug
PSAvXihbXlwuXSp8KSg/OlwuKC4rKXwpJC8sCi0gICAgICAgIHJob3ZlckhhY2sgPSAvKD86Xnxc
cylob3ZlcihcLlxTK3wpXGIvLAotICAgICAgICBya2V5RXZlbnQgPSAvXmtleS8sCi0gICAgICAg
IHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLAotICAgICAgICBy
Zm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLywKLSAgICAgICAg
aG92ZXJIYWNrID0gZnVuY3Rpb24oIGV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LmV2ZW50LnNwZWNpYWwuaG92ZXIgPyBldmVudHMgOiBldmVudHMucmVwbGFjZSggcmhv
dmVySGFjaywgIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiICk7Ci0gICAgICAgIH07Ci0KLS8q
Ci0gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2Yg
dGhlIHB1YmxpYyBpbnRlcmZhY2UuCi0gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50
IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgotICovCi1qUXVlcnkuZXZlbnQgPSB7Ci0K
LSAgICAgICAgYWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVj
dG9yICkgewotCi0gICAgICAgICAgICAgICAgdmFyIGVsZW1EYXRhLCBldmVudEhhbmRsZSwgZXZl
bnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgdCwgdG5zLCB0eXBlLCBuYW1lc3BhY2VzLCBo
YW5kbGVPYmosCi0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmpJbiwgaGFuZGxlcnMs
IHNwZWNpYWw7Ci0KLSAgICAgICAgICAgICAgICAvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5v
RGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGFsbG93IHBsYWluIG9iamVjdHMgdGhvKQotICAg
ICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09
PSA4IHx8ICF0eXBlcyB8fCAhaGFuZGxlciB8fCAhKGVsZW1EYXRhID0galF1ZXJ5Ll9kYXRhKCBl
bGVtICkpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qg
b2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlcgotICAgICAgICAgICAgICAgIGlm
ICggaGFuZGxlci5oYW5kbGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2Jq
SW4gPSBoYW5kbGVyOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZU9i
akluLmhhbmRsZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGhhbmRsZU9i
akluLnNlbGVjdG9yOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3Jl
bW92ZSBpdCBsYXRlcgotICAgICAgICAgICAgICAgIGlmICggIWhhbmRsZXIuZ3VpZCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gSW5pdCB0aGUgZWxlbWVudCdzIGV2
ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdAotICAg
ICAgICAgICAgICAgIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50czsKLSAgICAgICAgICAgICAgICBp
ZiAoICFldmVudHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtRGF0YS5ldmVudHMg
PSBldmVudHMgPSB7fTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZXZlbnRI
YW5kbGUgPSBlbGVtRGF0YS5oYW5kbGU7Ci0gICAgICAgICAgICAgICAgaWYgKCAhZXZlbnRIYW5k
bGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtRGF0YS5oYW5kbGUgPSBldmVudEhh
bmRsZSA9IGZ1bmN0aW9uKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFu
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGFuIGV2ZW50IGlzIGNh
bGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAoIWUgfHwgalF1
ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlKSA/Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBldmVudEhhbmRs
ZS5lbGVtLCBhcmd1bWVudHMgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFkZCBlbGVtIGFzIGEgcHJvcGVydHkgb2YgdGhlIGhhbmRsZSBmbiB0
byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsgd2l0aCBJRSBub24tbmF0aXZlIGV2ZW50cwotICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGUuZWxlbSA9IGVsZW07Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0
ZWQgYnkgYSBzcGFjZQotICAgICAgICAgICAgICAgIC8vIGpRdWVyeSguLi4pLmJpbmQoIm1vdXNl
b3ZlciBtb3VzZW91dCIsIGZuKTsKLSAgICAgICAgICAgICAgICB0eXBlcyA9IGpRdWVyeS50cmlt
KCBob3ZlckhhY2sodHlwZXMpICkuc3BsaXQoICIgIiApOwotICAgICAgICAgICAgICAgIGZvciAo
IHQgPSAwOyB0IDwgdHlwZXMubGVuZ3RoOyB0KysgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gdG5zWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZXNwYWNlcyA9ICggdG5zWzJdIHx8ICIiICkuc3BsaXQoICIuIiApLnNvcnQoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRo
ZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7
fTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0
ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVU
eXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGUKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8
IHt9OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRv
IGFsbCBldmVudCBoYW5kbGVycwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0g
alF1ZXJ5LmV4dGVuZCh7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdUeXBlOiB0bnNbMV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGd1aWQ6IGhhbmRsZXIuZ3VpZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29u
dGV4dC50ZXN0KCBzZWxlY3RvciApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
YW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbigiLiIpCi0gICAgICAgICAgICAgICAgICAgICAgICB9
LCBoYW5kbGVPYmpJbiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbml0IHRoZSBl
dmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdAotICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWhhbmRsZXJzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZlbnQgaWYgdGhl
IHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoICFzcGVjaWFsLnNldHVwIHx8IHNwZWNpYWwuc2V0dXAuY2FsbCgg
ZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmluZCB0aGUgZ2xvYmFsIGV2
ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcigg
dHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVtLmF0dGFjaEV2ZW50ICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hdHRhY2hFdmVudCgg
Im9uIiArIHR5cGUsIGV2ZW50SGFuZGxlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lh
bC5hZGQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwuYWRkLmNh
bGwoIGVsZW0sIGhhbmRsZU9iaiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBo
YW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udAotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBzZWxlY3RvciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
cnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZl
bnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTnVsbGlmeSBlbGVtIHRvIHByZXZl
bnQgbWVtb3J5IGxlYWtzIGluIElFCi0gICAgICAgICAgICAgICAgZWxlbSA9IG51bGw7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgZ2xvYmFsOiB7fSwKLQotICAgICAgICAvLyBEZXRhY2ggYW4gZXZl
bnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKLSAgICAgICAgcmVtb3ZlOiBmdW5j
dGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHsKLQot
ICAgICAgICAgICAgICAgIHZhciB0LCB0bnMsIHR5cGUsIG9yaWdUeXBlLCBuYW1lc3BhY2VzLCBv
cmlnQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBqLCBldmVudHMsIHNwZWNpYWwsIGV2
ZW50VHlwZSwgaGFuZGxlT2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbURhdGEgPSBq
UXVlcnkuaGFzRGF0YSggZWxlbSApICYmIGpRdWVyeS5fZGF0YSggZWxlbSApOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCAhZWxlbURhdGEgfHwgIShldmVudHMgPSBlbGVtRGF0YS5ldmVudHMpICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7
IHR5cGUgbWF5IGJlIG9taXR0ZWQKLSAgICAgICAgICAgICAgICB0eXBlcyA9IGpRdWVyeS50cmlt
KCBob3ZlckhhY2soIHR5cGVzIHx8ICIiICkgKS5zcGxpdCgiICIpOwotICAgICAgICAgICAgICAg
IGZvciAoIHQgPSAwOyB0IDwgdHlwZXMubGVuZ3RoOyB0KysgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0bnMgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG9yaWdUeXBlID0gdG5zWzFdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHRuc1syXTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRl
ZCkgZm9yIHRoZSBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF0eXBlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
cmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBl
IF0gfHwge307Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gKCBzZWxlY3Rvcj8gc3Bl
Y2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgb3JpZ0NvdW50ID0gZXZlbnRUeXBlLmxlbmd0aDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzID8gbmV3IFJlZ0V4cCgiKF58
XFwuKSIgKyBuYW1lc3BhY2VzLnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwufCki
KSArICIoXFwufCQpIikgOiBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1v
dmUgbWF0Y2hpbmcgZXZlbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsg
aiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlT2JqID0gZXZlbnRUeXBlWyBqIF07Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmou
b3JpZ1R5cGUgKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
ICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFuYW1lc3BhY2VzIHx8IG5hbWVz
cGFjZXMudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRs
ZU9iai5zZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gIioqIiAmJiBoYW5kbGVPYmouc2VsZWN0b3Ig
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUu
c3BsaWNlKCBqLS0sIDEgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlLmRlbGVnYXRlQ291bnQtLTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwo
IGVsZW0sIGhhbmRsZU9iaiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZ2VuZXJpYyBl
dmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJz
IGV4aXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3Ig
ZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVy
cykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXZlbnRUeXBlLmxlbmd0aCA9PT0gMCAm
JiBvcmlnQ291bnQgIT09IGV2ZW50VHlwZS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwgc3BlY2lhbC50ZWFyZG93bi5j
YWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50
KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVu
dHNbIHR5cGUgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25n
ZXIgdXNlZAotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50
cyApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3Ig
ZW1wdGluZXNzIGFuZCBjbGVhcnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHNvIHVzZSBpdCBpbnN0ZWFkIG9mIGRlbGV0ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sICJldmVudHMiLCB0cnVlICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIC8vIEV2ZW50cyB0aGF0IGFyZSBz
YWZlIHRvIHNob3J0LWNpcmN1aXQgaWYgbm8gaGFuZGxlcnMgYXJlIGF0dGFjaGVkLgotICAgICAg
ICAvLyBOYXRpdmUgRE9NIGV2ZW50cyBzaG91bGQgbm90IGJlIGFkZGVkLCB0aGV5IG1heSBoYXZl
IGlubGluZSBoYW5kbGVycy4KLSAgICAgICAgY3VzdG9tRXZlbnQ6IHsKLSAgICAgICAgICAgICAg
ICAiZ2V0RGF0YSI6IHRydWUsCi0gICAgICAgICAgICAgICAgInNldERhdGEiOiB0cnVlLAotICAg
ICAgICAgICAgICAgICJjaGFuZ2VEYXRhIjogdHJ1ZQotICAgICAgICB9LAotCi0gICAgICAgIHRy
aWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkgewotICAg
ICAgICAgICAgICAgIC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVz
Ci0gICAgICAgICAgICAgICAgaWYgKCBlbGVtICYmIChlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVs
ZW0ubm9kZVR5cGUgPT09IDgpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEV2ZW50IG9iamVjdCBvciBl
dmVudCB0eXBlCi0gICAgICAgICAgICAgICAgdmFyIGNhY2hlLCBleGNsdXNpdmUsIGksIGN1ciwg
b2xkLCBvbnR5cGUsIHNwZWNpYWwsIGhhbmRsZSwgZXZlbnRQYXRoLCBidWJibGVUeXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gW107Ci0KLSAgICAgICAgICAgICAgICAvLyBm
b2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcg
dGhlbSByaWdodCBub3cKLSAgICAgICAgICAgICAgICBpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5
cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBl
LmluZGV4T2YoICIhIiApID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBFeGNs
dXNpdmUgZXZlbnRzIHRyaWdnZXIgb25seSBmb3IgdGhlIGV4YWN0IGV2ZW50IChubyBuYW1lc3Bh
Y2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUuc2xpY2UoMCwgLTEpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZiggIi4iICkgPj0gMCApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEg
cmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZXNwYWNlcy5zb3J0KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKCAoIWVsZW0gfHwgalF1ZXJ5LmV2ZW50LmN1c3RvbUV2ZW50WyB0eXBlIF0pICYmICFqUXVl
cnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBO
byBqUXVlcnkgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnQgdHlwZSwgYW5kIGl0IGNhbid0IGhhdmUg
aW5saW5lIGhhbmRsZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIEV2
ZW50LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKLSAgICAgICAgICAgICAg
ICBldmVudCA9IHR5cGVvZiBldmVudCA9PT0gIm9iamVjdCIgPwotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8galF1ZXJ5LkV2ZW50IG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnRbIGpRdWVyeS5leHBhbmRvIF0gPyBldmVudCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBPYmplY3QgbGl0ZXJhbAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVu
dCggdHlwZSwgZXZlbnQgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IHRoZSBl
dmVudCB0eXBlIChzdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2
ZW50KCB0eXBlICk7Ci0KLSAgICAgICAgICAgICAgICBldmVudC50eXBlID0gdHlwZTsKLSAgICAg
ICAgICAgICAgICBldmVudC5pc1RyaWdnZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGV2ZW50
LmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2ZTsKLSAgICAgICAgICAgICAgICBldmVudC5uYW1lc3BhY2Ug
PSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOwotICAgICAgICAgICAgICAgIGV2ZW50Lm5hbWVzcGFj
ZV9yZSA9IGV2ZW50Lm5hbWVzcGFjZT8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2Vz
LmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxsOwotICAgICAgICAgICAg
ICAgIG9udHlwZSA9IHR5cGUuaW5kZXhPZiggIjoiICkgPCAwID8gIm9uIiArIHR5cGUgOiAiIjsK
LQotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCi0gICAgICAgICAg
ICAgICAgaWYgKCAhZWxlbSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzog
U3RvcCB0YXVudGluZyB0aGUgZGF0YSBjYWNoZTsgcmVtb3ZlIGdsb2JhbCBldmVudHMgYW5kIGFs
d2F5cyBhdHRhY2ggdG8gZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0g
alF1ZXJ5LmNhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBjYWNoZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaSBdLmV2ZW50
cyAmJiBjYWNoZVsgaSBdLmV2ZW50c1sgdHlwZSBdICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCBldmVudCwgZGF0YSwgY2Fj
aGVbIGkgXS5oYW5kbGUuZWxlbSwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ2xlYW4g
dXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCi0gICAgICAgICAgICAgICAg
ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnRh
cmdldCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGVsZW07Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5n
IGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlz
dAotICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBqUXVlcnkubWFrZUFycmF5
KCBkYXRhICkgOiBbXTsKLSAgICAgICAgICAgICAgICBkYXRhLnVuc2hpZnQoIGV2ZW50ICk7Ci0K
LSAgICAgICAgICAgICAgICAvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUg
dGhlIGxpbmVzCi0gICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFs
WyB0eXBlIF0gfHwge307Ci0gICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsLnRyaWdnZXIgJiYg
c3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBl
ciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKQotICAgICAgICAgICAgICAgIC8vIEJ1YmJsZSB1cCB0
byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3Vt
ZW50IHZhciAoIzk3MjQpCi0gICAgICAgICAgICAgICAgZXZlbnRQYXRoID0gW1sgZWxlbSwgc3Bl
Y2lhbC5iaW5kVHlwZSB8fCB0eXBlIF1dOwotICAgICAgICAgICAgICAgIGlmICggIW9ubHlIYW5k
bGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRl
VHlwZSB8fCB0eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyID0gcmZvY3VzTW9ycGgu
dGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSA/IGVsZW0gOiBlbGVtLnBhcmVudE5vZGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBvbGQgPSBlbGVtOyBjdXI7IGN1ciA9IGN1ci5wYXJl
bnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFBhdGgucHVz
aChbIGN1ciwgYnViYmxlVHlwZSBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2xkID0gY3VyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBu
b3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggb2xkID09PSAoZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRQYXRoLnB1c2goWyBvbGQuZGVmYXVsdFZpZXcg
fHwgb2xkLnBhcmVudFdpbmRvdyB8fCB3aW5kb3csIGJ1YmJsZVR5cGUgXSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
RmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aAotICAgICAgICAgICAgICAgIGZvciAoIGkg
PSAwOyBpIDwgZXZlbnRQYXRoLmxlbmd0aCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQo
KTsgaSsrICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBldmVudFBhdGhbaV1b
MF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZXZlbnRQYXRoW2ldWzFd
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSAoIGpRdWVyeS5fZGF0YSggY3Vy
LCAiZXZlbnRzIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSAmJiBqUXVlcnkuX2RhdGEoIGN1ciwg
ImhhbmRsZSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaXMgYSBiYXJlIEpTIGZ1bmN0aW9uIGFuZCBub3QgYSBqUXVlcnkgaGFuZGxl
cgotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBl
IF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSAmJiBqUXVlcnkuYWNjZXB0
RGF0YSggY3VyICkgJiYgaGFuZGxlLmFwcGx5ICYmIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICkg
PT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBldmVudC50eXBlID0gdHlwZTsKLQotICAgICAgICAgICAgICAg
IC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKLSAg
ICAgICAgICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZl
bnRlZCgpICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICghc3BlY2lhbC5fZGVm
YXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBlbGVtLm93bmVyRG9jdW1lbnQsIGRhdGEg
KSA9PT0gZmFsc2UpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEodHlwZSA9
PT0gImNsaWNrIiAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJhIiApKSAmJiBqUXVlcnkuYWNj
ZXB0RGF0YSggZWxlbSApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFt
ZSBuYW1lIGFzIHRoZSBldmVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q2FuJ3QgdXNlIGFuIC5pc0Z1bmN0aW9uKCkgY2hlY2sgaGVyZSBiZWNhdXNlIElFNi83IGZhaWxz
IHRoYXQgdGVzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8g
ZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMg
YmUgKCM2MTcwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTw5IGRpZXMg
b24gZm9jdXMvYmx1ciB0byBoaWRkZW4gZWxlbWVudCAoIzE0ODYpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggb250eXBlICYmIGVsZW1bIHR5cGUgXSAmJiAoKHR5cGUgIT09
ICJmb2N1cyIgJiYgdHlwZSAhPT0gImJsdXIiKSB8fCBldmVudC50YXJnZXQub2Zmc2V0V2lkdGgg
IT09IDApICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZl
bnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbGQgPSBlbGVtWyBvbnR5cGUgXTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb2xkICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBudWxsOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUg
c2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5
cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgdHlwZSBd
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggb2xkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0gPSBvbGQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKLSAgICAgICAgfSwKLQotICAgICAgICBkaXNw
YXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgewotCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBhIHdy
aXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0Ci0gICAgICAg
ICAgICAgICAgZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCB8fCB3aW5kb3cuZXZlbnQg
KTsKLQotICAgICAgICAgICAgICAgIHZhciBpLCBqLCBjdXIsIHJldCwgc2VsTWF0Y2gsIG1hdGNo
ZWQsIG1hdGNoZXMsIGhhbmRsZU9iaiwgc2VsLCByZWxhdGVkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnMgPSAoIChqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30g
KVsgZXZlbnQudHlwZSBdIHx8IFtdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRl
Q291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
YXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICksCi0gICAgICAgICAgICAgICAgICAg
ICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAmJiAhZXZlbnQubmFtZXNwYWNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVu
dC50eXBlIF0gfHwge30sCi0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUXVldWUgPSBb
XTsKLQotICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRo
ZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50Ci0gICAgICAgICAgICAgICAgYXJn
c1swXSA9IGV2ZW50OwotICAgICAgICAgICAgICAgIGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhp
czsKLQotICAgICAgICAgICAgICAgIC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRo
ZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWQKLSAgICAgICAgICAgICAg
ICBpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0
aGlzLCBldmVudCApID09PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaGFu
ZGxlcnMgdGhhdCBzaG91bGQgcnVuIGlmIHRoZXJlIGFyZSBkZWxlZ2F0ZWQgZXZlbnRzCi0gICAg
ICAgICAgICAgICAgLy8gQXZvaWQgbm9uLWxlZnQtY2xpY2sgYnViYmxpbmcgaW4gRmlyZWZveCAo
IzM4NjEpCi0gICAgICAgICAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYmICEoZXZlbnQuYnV0
dG9uICYmIGV2ZW50LnR5cGUgPT09ICJjbGljayIpICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKCBjdXIgPSBldmVudC50YXJnZXQ7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIucGFy
ZW50Tm9kZSB8fCB0aGlzICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IERvbid0IHByb2Nlc3MgY2xpY2tzIChPTkxZKSBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEs
ICM4MTY1LCAjMTEzODIsICMxMTc2NCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjdXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gImNsaWNrIiApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxNYXRjaCA9IHt9Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGRl
bGVnYXRlQ291bnQ7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3I7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
c2VsTWF0Y2hbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbE1hdGNoWyBzZWwgXSA9IGhhbmRs
ZU9iai5uZWVkc0NvbnRleHQgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1
ciApID49IDAgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0g
KS5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHNlbE1hdGNoWyBzZWwgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKCBoYW5kbGVPYmogKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogY3Vy
LCBtYXRjaGVzOiBtYXRjaGVzIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFk
ZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnMKLSAgICAgICAgICAgICAg
ICBpZiAoIGhhbmRsZXJzLmxlbmd0aCA+IGRlbGVnYXRlQ291bnQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IHRoaXMsIG1hdGNoZXM6IGhhbmRs
ZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9w
IHByb3BhZ2F0aW9uIGJlbmVhdGggdXMKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8
IGhhbmRsZXJRdWV1ZS5sZW5ndGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkr
KyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkg
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVk
LmVsZW07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbWF0Y2hl
ZC5tYXRjaGVzLmxlbmd0aCAmJiAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQo
KTsgaisrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBt
YXRjaGVkLm1hdGNoZXNbIGogXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUcmlnZ2VyZWQgZXZlbnQgbXVzdCBlaXRoZXIgMSkgYmUgbm9uLWV4Y2x1c2l2ZSBhbmQgaGF2
ZSBubyBuYW1lc3BhY2UsIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIp
IGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRvIHRob3NlIGluIHRoZSBib3Vu
ZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJ1bl9hbGwgfHwgKCFldmVudC5uYW1lc3BhY2UgJiYgIWhhbmRs
ZU9iai5uYW1lc3BhY2UpIHx8IGV2ZW50Lm5hbWVzcGFjZV9yZSAmJiBldmVudC5uYW1lc3BhY2Vf
cmUudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRs
ZU9iajsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9ICgg
KGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSkuaGFuZGxl
IHx8IGhhbmRsZU9iai5oYW5kbGVyICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRl
ZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBldmVudC5yZXN1bHQgPSByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJldCA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENh
bGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUKLSAgICAgICAgICAg
ICAgICBpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0OwotICAgICAgICB9
LAotCi0gICAgICAgIC8vIEluY2x1ZGVzIHNvbWUgZXZlbnQgcHJvcHMgc2hhcmVkIGJ5IEtleUV2
ZW50IGFuZCBNb3VzZUV2ZW50Ci0gICAgICAgIC8vICoqKiBhdHRyQ2hhbmdlIGF0dHJOYW1lIHJl
bGF0ZWROb2RlIHNyY0VsZW1lbnQgIGFyZSBub3Qgbm9ybWFsaXplZCwgbm9uLVczQywgZGVwcmVj
YXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIDEuOCAqKioKLSAgICAgICAgcHJvcHM6ICJhdHRyQ2hh
bmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQgYWx0S2V5IGJ1YmJsZXMgY2FuY2Vs
YWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJn
ZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLAotCi0g
ICAgICAgIGZpeEhvb2tzOiB7fSwKLQotICAgICAgICBrZXlIb29rczogewotICAgICAgICAgICAg
ICAgIHByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSwKLSAgICAg
ICAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSBudWxsICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51
bGwgPyBvcmlnaW5hbC5jaGFyQ29kZSA6IG9yaWdpbmFsLmtleUNvZGU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgbW91c2VIb29rczogewotICAg
ICAgICAgICAgICAgIHByb3BzOiAiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21F
bGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVt
ZW50Ii5zcGxpdCgiICIpLAotICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50
LCBvcmlnaW5hbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldmVudERvYywgZG9j
LCBib2R5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24gPSBvcmlnaW5h
bC5idXR0b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FbGVtZW50ID0g
b3JpZ2luYWwuZnJvbUVsZW1lbnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGN1
bGF0ZSBwYWdlWC9ZIGlmIG1pc3NpbmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBvcmlnaW5hbC5jbGll
bnRYICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50RG9j
ID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGV2ZW50RG9jLmJvZHk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucGFnZVggPSBvcmlnaW5hbC5jbGllbnRY
ICsgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwg
MCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQg
fHwgMCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wYWdlWSA9IG9y
aWdpbmFsLmNsaWVudFkgKyAoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJvZHku
c2Nyb2xsVG9wICB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJv
ZHkuY2xpZW50VG9wICB8fCAwICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCByZWxhdGVkVGFyZ2V0LCBpZiBuZWNlc3NhcnkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVs
ZW1lbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRU
YXJnZXQgPSBmcm9tRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0ID8gb3JpZ2luYWwudG9FbGVtZW50
IDogZnJvbUVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1p
ZGRsZTsgMyA9PT0gcmlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IGJ1dHRv
biBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQud2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAx
IDogKCBidXR0b24gJiAyID8gMyA6ICggYnV0dG9uICYgNCA/IDIgOiAwICkgKSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZl
bnQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIGZpeDogZnVuY3Rp
b24oIGV2ZW50ICkgewotICAgICAgICAgICAgICAgIGlmICggZXZlbnRbIGpRdWVyeS5leHBhbmRv
IF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQ7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0
aGUgZXZlbnQgb2JqZWN0IGFuZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzCi0gICAgICAgICAg
ICAgICAgdmFyIGksIHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50
ID0gZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXhIb29rID0galF1ZXJ5LmV2ZW50
LmZpeEhvb2tzWyBldmVudC50eXBlIF0gfHwge30sCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b3B5ID0gZml4SG9vay5wcm9wcyA/IHRoaXMucHJvcHMuY29uY2F0KCBmaXhIb29rLnByb3BzICkg
OiB0aGlzLnByb3BzOwotCi0gICAgICAgICAgICAgICAgZXZlbnQgPSBqUXVlcnkuRXZlbnQoIG9y
aWdpbmFsRXZlbnQgKTsKLQotICAgICAgICAgICAgICAgIGZvciAoIGkgPSBjb3B5Lmxlbmd0aDsg
aTsgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0gY29weVsgLS1pIF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBldmVudFsgcHJvcCBdID0gb3JpZ2luYWxFdmVudFsgcHJvcCBd
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZpeCB0YXJnZXQgcHJv
cGVydHksIGlmIG5lY2Vzc2FyeSAoIzE5MjUsIElFIDYvNy84ICYgU2FmYXJpMikKLSAgICAgICAg
ICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
dmVudC50YXJnZXQgPSBvcmlnaW5hbEV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGFyZ2V0IHNob3VsZCBub3QgYmUg
YSB0ZXh0IG5vZGUgKCM1MDQsIFNhZmFyaSkKLSAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LnRh
cmdldC5ub2RlVHlwZSA9PT0gMyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnRh
cmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIEZvciBtb3VzZS9rZXkgZXZlbnRzLCBtZXRhS2V5PT1mYWxzZSBpZiBp
dCdzIHVuZGVmaW5lZCAoIzMzNjgsICMxMTMyODsgSUU2LzcvOCkKLSAgICAgICAgICAgICAgICBl
dmVudC5tZXRhS2V5ID0gISFldmVudC5tZXRhS2V5OwotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZpeEhvb2suZmlsdGVyPyBmaXhIb29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6
IGV2ZW50OwotICAgICAgICB9LAotCi0gICAgICAgIHNwZWNpYWw6IHsKLSAgICAgICAgICAgICAg
ICBsb2FkOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBp
bWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCi0gICAgICAgICAg
ICAgICAgICAgICAgICBub0J1YmJsZTogdHJ1ZQotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgICAgICBmb2N1czogewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdhdGVUeXBl
OiAiZm9jdXNpbiIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGJsdXI6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IgotICAgICAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICBiZWZvcmV1bmxvYWQ6IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRI
YW5kbGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2Fu
dCB0byBkbyB0aGlzIHNwZWNpYWwgY2FzZSBvbiB3aW5kb3dzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCB0aGlzICkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmJlZm9yZXVubG9hZCA9IGV2ZW50
SGFuZGxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rp
b24oIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRoaXMub25iZWZvcmV1bmxvYWQgPT09IGV2ZW50SGFuZGxlICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxvYWQg
PSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIHNp
bXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHsKLSAgICAgICAg
ICAgICAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZl
cmVudCBvbmUuCi0gICAgICAgICAgICAgICAgLy8gRmFrZSBvcmlnaW5hbEV2ZW50IHRvIGF2b2lk
IGRvbm9yJ3Mgc3RvcFByb3BhZ2F0aW9uLCBidXQgaWYgdGhlCi0gICAgICAgICAgICAgICAgLy8g
c2ltdWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0
aGUgZG9ub3IuCi0gICAgICAgICAgICAgICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAotICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IHR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2ltdWxhdGVkOiB0cnVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiB7fQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgaWYgKCBidWJi
bGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwg
bnVsbCwgZWxlbSApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2guY2FsbCggZWxlbSwgZSApOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIGUuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotfTsKLQotLy8gU29tZSBwbHVnaW5zIGFyZSB1c2luZywg
YnV0IGl0J3MgdW5kb2N1bWVudGVkL2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KLS8v
IFRoZSAxLjcgc3BlY2lhbCBldmVudCBpbnRlcmZhY2Ugc2hvdWxkIHByb3ZpZGUgYWxsIHRoZSBo
b29rcyBuZWVkZWQgbm93LgotalF1ZXJ5LmV2ZW50LmhhbmRsZSA9IGpRdWVyeS5ldmVudC5kaXNw
YXRjaDsKLQotalF1ZXJ5LnJlbW92ZUV2ZW50ID0gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l
ciA/Ci0gICAgICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSwgZmFsc2UgKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0gOgotICAgICAgICBmdW5jdGlvbiggZWxlbSwg
dHlwZSwgaGFuZGxlICkgewotICAgICAgICAgICAgICAgIHZhciBuYW1lID0gIm9uIiArIHR5cGU7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGVsZW0uZGV0YWNoRXZlbnQgKSB7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vICM4NTQ1LCAjNzA1NCwgcHJldmVudGluZyBtZW1vcnkgbGVha3Mg
Zm9yIGN1c3RvbSBldmVudHMgaW4gSUU2LTgKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRl
dGFjaEV2ZW50IG5lZWRlZCBwcm9wZXJ0eSBvbiBlbGVtZW50LCBieSBuYW1lIG9mIHRoYXQgZXZl
bnQsIHRvIHByb3Blcmx5IGV4cG9zZSBpdCB0byBHQwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0eXBlb2YgZWxlbVsgbmFtZSBdID09PSAidW5kZWZpbmVkIiApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbVsgbmFtZSBdID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5kZXRhY2hFdmVudCgg
bmFtZSwgaGFuZGxlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotCi1qUXVlcnku
RXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsKLSAgICAgICAgLy8gQWxsb3cgaW5zdGFu
dGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkCi0gICAgICAgIGlmICggISh0aGlzIGlu
c3RhbmNlb2YgalF1ZXJ5LkV2ZW50KSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGpR
dWVyeS5FdmVudCggc3JjLCBwcm9wcyApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRXZlbnQg
b2JqZWN0Ci0gICAgICAgIGlmICggc3JjICYmIHNyYy50eXBlICkgewotICAgICAgICAgICAgICAg
IHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKLSAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBz
cmMudHlwZTsKLQotICAgICAgICAgICAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9j
dW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkCi0gICAgICAgICAgICAgICAg
Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3Qg
dmFsdWUuCi0gICAgICAgICAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoIHNyYy5k
ZWZhdWx0UHJldmVudGVkIHx8IHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNyYy5nZXRQcmV2ZW50RGVmYXVsdCAmJiBzcmMuZ2V0UHJldmVudERl
ZmF1bHQoKSApID8gcmV0dXJuVHJ1ZSA6IHJldHVybkZhbHNlOwotCi0gICAgICAgIC8vIEV2ZW50
IHR5cGUKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBzcmM7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0
aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdAotICAgICAgICBpZiAoIHByb3BzICkgewotICAgICAg
ICAgICAgICAgIGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZl
IG9uZQotICAgICAgICB0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IGpR
dWVyeS5ub3coKTsKLQotICAgICAgICAvLyBNYXJrIGl0IGFzIGZpeGVkCi0gICAgICAgIHRoaXNb
IGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlOwotfTsKLQotZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLX0KLWZ1bmN0aW9uIHJldHVyblRydWUoKSB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBF
dmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLS8v
IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMx
L2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAotalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKLSAg
ICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHRoaXMu
aXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKLQotICAgICAgICAgICAgICAgIHZhciBl
ID0gdGhpcy5vcmlnaW5hbEV2ZW50OwotICAgICAgICAgICAgICAgIGlmICggIWUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gaWYgcHJldmVudERlZmF1bHQgZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2lu
YWwgZXZlbnQKLSAgICAgICAgICAgICAgICBpZiAoIGUucHJldmVudERlZmF1bHQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBvdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2lu
YWwgZXZlbnQgdG8gZmFsc2UgKElFKQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICB9LAotICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwotCi0g
ICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKCAhZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0cyBy
dW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50Ci0gICAgICAgICAgICAgICAgaWYgKCBlLnN0b3BQ
cm9wYWdhdGlvbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQg
dGhlIGNhbmNlbEJ1YmJsZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gdHJ1ZSAo
SUUpCi0gICAgICAgICAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwotICAgICAgICB9LAot
ICAgICAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwot
ICAgICAgICAgICAgICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIH0sCi0gICAg
ICAgIGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsCi0gICAgICAgIGlzUHJvcGFnYXRp
b25TdG9wcGVkOiByZXR1cm5GYWxzZSwKLSAgICAgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0
b3BwZWQ6IHJldHVybkZhbHNlCi19OwotCi0vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVu
dHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3MKLWpRdWVyeS5lYWNo
KHsKLSAgICAgICAgbW91c2VlbnRlcjogIm1vdXNlb3ZlciIsCi0gICAgICAgIG1vdXNlbGVhdmU6
ICJtb3VzZW91dCIKLX0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7Ci0gICAgICAgIGpRdWVyeS5l
dmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7Ci0gICAgICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiBm
aXgsCi0gICAgICAgICAgICAgICAgYmluZFR5cGU6IGZpeCwKLQotICAgICAgICAgICAgICAgIGhh
bmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJl
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRs
ZU9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBoYW5kbGVP
Ymouc2VsZWN0b3I7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBtb3VzZW50ZXIv
bGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBt
b3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250
YWlucyggdGFyZ2V0LCByZWxhdGVkICkpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1l
bnRzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBmaXg7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmV0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLX0pOwotCi0vLyBJRSBzdWJt
aXQgZGVsZWdhdGlvbgotaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3VibWl0QnViYmxlcyApIHsKLQot
ICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7Ci0gICAgICAgICAgICAgICAg
c2V0dXA6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBuZWVk
IHRoaXMgZm9yIGRlbGVnYXRlZCBmb3JtIHN1Ym1pdCBldmVudHMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiZm9ybSIgKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMYXp5LWFkZCBhIHN1Ym1pdCBo
YW5kbGVyIHdoZW4gYSBkZXNjZW5kYW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRl
ZAotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNr
Ll9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsIGZ1bmN0aW9uKCBlICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBOb2RlIG5hbWUgY2hlY2sgYXZvaWRzIGEgVk1MLXJlbGF0
ZWQgY3Jhc2ggaW4gSUUgKCM5ODA3KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgZWxlbSA9IGUudGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcm0gPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSB8fCBqUXVlcnkubm9k
ZU5hbWUoIGVsZW0sICJidXR0b24iICkgPyBlbGVtLmZvcm0gOiB1bmRlZmluZWQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZm9ybSAmJiAhalF1ZXJ5Ll9kYXRhKCBmb3Jt
LCAiX3N1Ym1pdF9hdHRhY2hlZCIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCBmb3JtLCAic3VibWl0Ll9zdWJtaXQiLCBmdW5j
dGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudC5fc3VibWl0X2J1YmJsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBmb3JtLCAiX3N1Ym1pdF9hdHRhY2hlZCIsIHRydWUgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gdW5kZWZpbmVkIHNpbmNl
IHdlIGRvbid0IG5lZWQgYW4gZXZlbnQgbGlzdGVuZXIKLSAgICAgICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAgICAgcG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBmb3JtIHdhcyBzdWJtaXR0ZWQgYnkgdGhlIHVzZXIsIGJ1
YmJsZSB0aGUgZXZlbnQgdXAgdGhlIHRyZWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZXZlbnQuX3N1Ym1pdF9idWJibGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSBldmVudC5fc3VibWl0X2J1YmJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUo
ICJzdWJtaXQiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50LCB0cnVlICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBmb3Jt
IHN1Ym1pdCBldmVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5vZGVO
YW1lKCB0aGlzLCAiZm9ybSIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBSZW1vdmUgZGVsZWdhdGVkIGhhbmRsZXJzOyBjbGVhbkRhdGEgZXZlbnR1
YWxseSByZWFwcyBzdWJtaXQgaGFuZGxlcnMgYXR0YWNoZWQgYWJvdmUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsICIuX3N1Ym1pdCIgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgIH07Ci19Ci0KLS8vIElFIGNoYW5nZSBkZWxlZ2F0aW9uIGFu
ZCBjaGVja2JveC9yYWRpbyBmaXgKLWlmICggIWpRdWVyeS5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMg
KSB7Ci0KLSAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdlID0gewotCi0gICAgICAg
ICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHJmb3JtRWxlbXMudGVzdCggdGhpcy5ub2RlTmFtZSApICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJRSBkb2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFk
aW8gdW50aWwgYmx1cjsgdHJpZ2dlciBpdCBvbiBjbGljawotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhZnRlciBhIHByb3BlcnR5Y2hhbmdlLiBFYXQgdGhlIGJsdXItY2hhbmdl
IGluIHNwZWNpYWwuY2hhbmdlLmhhbmRsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBzdGlsbCBmaXJlcyBvbmNoYW5nZSBhIHNlY29uZCB0aW1lIGZvciBjaGVjay9y
YWRpbyBhZnRlciBibHVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRo
aXMudHlwZSA9PT0gImNoZWNrYm94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhp
cywgInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGV2ZW50Lm9yaWdp
bmFsRXZlbnQucHJvcGVydHlOYW1lID09PSAiY2hlY2tlZCIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywg
ImNsaWNrLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuX2p1c3RfY2hhbmdlZCAmJiAh
ZXZlbnQuaXNUcmlnZ2VyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9qdXN0X2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IHRyaWdnZXJlZCwgc2lt
dWxhdGVkIGNoYW5nZSBldmVudHMgKCMxMTUwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggImNoYW5nZSIsIHRo
aXMsIGV2ZW50LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZWdhdGVkIGV2ZW50OyBsYXp5LWFkZCBh
IGNoYW5nZSBoYW5kbGVyIG9uIGRlc2NlbmRhbnQgaW5wdXRzCi0gICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1
bmN0aW9uKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9
IGUudGFyZ2V0OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmZvcm1F
bGVtcy50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgIWpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFu
Z2VfYXR0YWNoZWQiICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LmFkZCggZWxlbSwgImNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rpb24oIGV2
ZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0aGlzLnBhcmVudE5vZGUgJiYgIWV2ZW50LmlzU2ltdWxhdGVkICYmICFldmVudC5pc1Ry
aWdnZXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggImNoYW5nZSIsIHRoaXMucGFyZW50Tm9k
ZSwgZXZlbnQsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVs
ZW0sICJfY2hhbmdlX2F0dGFjaGVkIiwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGV2ZW50LnRhcmdldDsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gU3dhbGxvdyBuYXRpdmUgY2hhbmdlIGV2ZW50cyBmcm9tIGNoZWNrYm94
L3JhZGlvLCB3ZSBhbHJlYWR5IHRyaWdnZXJlZCB0aGVtIGFib3ZlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRoaXMgIT09IGVsZW0gfHwgZXZlbnQuaXNTaW11bGF0ZWQgfHwgZXZlbnQu
aXNUcmlnZ2VyIHx8IChlbGVtLnR5cGUgIT09ICJyYWRpbyIgJiYgZWxlbS50eXBlICE9PSAiY2hl
Y2tib3giKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50
LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgdGVh
cmRvd246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LnJlbW92ZSggdGhpcywgIi5fY2hhbmdlIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIXJmb3JtRWxlbXMudGVzdCggdGhpcy5ub2RlTmFtZSApOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgfTsKLX0KLQotLy8gQ3JlYXRlICJidWJibGluZyIgZm9jdXMgYW5kIGJsdXIg
ZXZlbnRzCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5mb2N1c2luQnViYmxlcyApIHsKLSAgICAgICAg
alF1ZXJ5LmVhY2goeyBmb2N1czogImZvY3VzaW4iLCBibHVyOiAiZm9jdXNvdXQiIH0sIGZ1bmN0
aW9uKCBvcmlnLCBmaXggKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBBdHRhY2ggYSBzaW5nbGUg
Y2FwdHVyaW5nIGhhbmRsZXIgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0Ci0g
ICAgICAgICAgICAgICAgdmFyIGF0dGFjaGVzID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5l
dmVudC5maXgoIGV2ZW50ICksIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggYXR0YWNoZXMrKyA9PT0gMCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBo
YW5kbGVyLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bjog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggLS1hdHRh
Y2hlcyA9PT0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9OwotICAgICAgICB9KTsKLX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7
Ci0KLSAgICAgICAgb246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklO
VEVSTkFMKi8gb25lICkgewotICAgICAgICAgICAgICAgIHZhciBvcmlnRm4sIHR5cGU7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnMKLSAg
ICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkg
eyAvLyAmJiBzZWxlY3RvciAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbiggdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVz
WyB0eXBlIF0sIG9uZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICggdHlwZXMsIGZuICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZuID0g
c2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZWN0b3IgPSB1bmRl
ZmluZWQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCB0eXBlcywgc2VsZWN0b3IsIGZu
ICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBkYXRhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCB0
eXBlcywgZGF0YSwgZm4gKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGRh
dGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxlY3RvcjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICggZm4gPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSByZXR1
cm5GYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhZm4gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIG9uZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdG
biA9IGZuOwotICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0
LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkoKS5vZmYoIGV2ZW50ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBzYW1lIGd1
aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlk
KysgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aCggZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRk
KCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0sCi0gICAgICAgIG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0
YSwgZm4gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3Rv
ciwgZGF0YSwgZm4sIDEgKTsKLSAgICAgICAgfSwKLSAgICAgICAgb2ZmOiBmdW5jdGlvbiggdHlw
ZXMsIHNlbGVjdG9yLCBmbiApIHsKLSAgICAgICAgICAgICAgICB2YXIgaGFuZGxlT2JqLCB0eXBl
OwotICAgICAgICAgICAgICAgIGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYg
dHlwZXMuaGFuZGxlT2JqICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCBldmVudCAp
ICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudAotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
T2JqID0gdHlwZXMuaGFuZGxlT2JqOwotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0
eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlT2JqLm5hbWVzcGFjZSA/IGhhbmRsZU9iai5vcmlnVHlwZSArICIuIiArIGhhbmRs
ZU9iai5uYW1lc3BhY2UgOiBoYW5kbGVPYmoub3JpZ1R5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZU9iai5zZWxlY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlT2JqLmhhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdICkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUg
XSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggc2Vs
ZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vICggdHlwZXMgWywgZm5dICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZuID0gc2VsZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rv
ciA9IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBm
biA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbiA9IHJldHVybkZhbHNl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSgg
dGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9LAotCi0gICAgICAgIGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOwotICAg
ICAgICB9LAotICAgICAgICB1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTsKLSAgICAgICAgfSwK
LQotICAgICAgICBsaXZlOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgewotICAgICAgICAg
ICAgICAgIGpRdWVyeSggdGhpcy5jb250ZXh0ICkub24oIHR5cGVzLCB0aGlzLnNlbGVjdG9yLCBk
YXRhLCBmbiApOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotICAg
ICAgICBkaWU6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5
KCB0aGlzLmNvbnRleHQgKS5vZmYoIHR5cGVzLCB0aGlzLnNlbGVjdG9yIHx8ICIqKiIsIGZuICk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGVs
ZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7Ci0gICAg
ICAgIH0sCi0gICAgICAgIHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZu
ICkgewotICAgICAgICAgICAgICAgIC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlw
ZXMgWywgZm5dICkKLSAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0g
MSA/IHRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDogdGhpcy5vZmYoIHR5cGVzLCBzZWxlY3Rv
ciB8fCAiKioiLCBmbiApOwotICAgICAgICB9LAotCi0gICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9u
KCB0eXBlLCBkYXRhICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlw
ZSwgZGF0YSwgdGhpcyApOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotICAgICAg
ICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCB0aGlzWzBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzWzBdLCB0cnVlICk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oIGZuICkgewot
ICAgICAgICAgICAgICAgIC8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNz
IGluIGNsb3N1cmUKLSAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKyssCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2ds
ZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbGFzdFRvZ2dsZSA9ICggalF1ZXJ5Ll9kYXRhKCB0aGlzLCAi
bGFzdFRvZ2dsZSIgKyBmbi5ndWlkICkgfHwgMCApICUgaTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlkLCBs
YXN0VG9nZ2xlICsgMSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IGNsaWNrcyBzdG9wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYW5kIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBhcmdzWyBsYXN0VG9nZ2xlIF0uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyAp
IHx8IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAg
IC8vIGxpbmsgYWxsIHRoZSBmdW5jdGlvbnMsIHNvIGFueSBvZiB0aGVtIGNhbiB1bmJpbmQgdGhp
cyBjbGljayBoYW5kbGVyCi0gICAgICAgICAgICAgICAgdG9nZ2xlci5ndWlkID0gZ3VpZDsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAoIGkgPCBhcmdzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3NbIGkrKyBdLmd1aWQgPSBndWlkOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsaWNrKCB0b2dnbGVyICk7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0
IHx8IGZuT3ZlciApOwotICAgICAgICB9Ci19KTsKLQotalF1ZXJ5LmVhY2goICgiYmx1ciBmb2N1
cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xp
Y2sgIiArCi0gICAgICAgICJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1v
dXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKLSAgICAgICAgImNoYW5nZSBzZWxlY3Qg
c3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiKS5zcGxpdCgi
ICIpLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLQotICAgICAgICAvLyBIYW5kbGUgZXZlbnQgYmlu
ZGluZwotICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHsK
LSAgICAgICAgICAgICAgICBpZiAoIGZuID09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmbiA9IGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gbnVsbDsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0
aCA+IDAgPwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0
YSwgZm4gKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoIG5hbWUgKTsK
LSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIHJrZXlFdmVudC50ZXN0KCBuYW1lICkgKSB7Ci0g
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmZpeEhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXZl
bnQua2V5SG9va3M7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHJtb3VzZUV2ZW50LnRlc3Qo
IG5hbWUgKSApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbIG5hbWUg
XSA9IGpRdWVyeS5ldmVudC5tb3VzZUhvb2tzOwotICAgICAgICB9Ci19KTsKLS8qIQotICogU2l6
emxlIENTUyBTZWxlY3RvciBFbmdpbmUKLSAqIENvcHlyaWdodCAyMDEyIGpRdWVyeSBGb3VuZGF0
aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGlj
ZW5zZQotICogaHR0cDovL3NpenpsZWpzLmNvbS8KLSAqLwotKGZ1bmN0aW9uKCB3aW5kb3csIHVu
ZGVmaW5lZCApIHsKLQotdmFyIGNhY2hlZHJ1bnMsCi0gICAgICAgIGFzc2VydEdldElkTm90TmFt
ZSwKLSAgICAgICAgRXhwciwKLSAgICAgICAgZ2V0VGV4dCwKLSAgICAgICAgaXNYTUwsCi0gICAg
ICAgIGNvbnRhaW5zLAotICAgICAgICBjb21waWxlLAotICAgICAgICBzb3J0T3JkZXIsCi0gICAg
ICAgIGhhc0R1cGxpY2F0ZSwKLSAgICAgICAgb3V0ZXJtb3N0Q29udGV4dCwKLQotICAgICAgICBi
YXNlSGFzRHVwbGljYXRlID0gdHJ1ZSwKLSAgICAgICAgc3RydW5kZWZpbmVkID0gInVuZGVmaW5l
ZCIsCi0KLSAgICAgICAgZXhwYW5kbyA9ICggInNpemNhY2hlIiArIE1hdGgucmFuZG9tKCkgKS5y
ZXBsYWNlKCAiLiIsICIiICksCi0KLSAgICAgICAgVG9rZW4gPSBTdHJpbmcsCi0gICAgICAgIGRv
Y3VtZW50ID0gd2luZG93LmRvY3VtZW50LAotICAgICAgICBkb2NFbGVtID0gZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LAotICAgICAgICBkaXJydW5zID0gMCwKLSAgICAgICAgZG9uZSA9IDAsCi0g
ICAgICAgIHBvcCA9IFtdLnBvcCwKLSAgICAgICAgcHVzaCA9IFtdLnB1c2gsCi0gICAgICAgIHNs
aWNlID0gW10uc2xpY2UsCi0gICAgICAgIC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBp
ZiBhIG5hdGl2ZSBvbmUgaXMgdW5hdmFpbGFibGUKLSAgICAgICAgaW5kZXhPZiA9IFtdLmluZGV4
T2YgfHwgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGkgPSAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAg
Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRo
aXNbaV0gPT09IGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQXVnbWVudCBh
IGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGUKLSAgICAgICAgbWFya0Z1bmN0aW9u
ID0gZnVuY3Rpb24oIGZuLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICBmblsgZXhwYW5kbyBd
ID0gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZm47Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgY2FjaGUgPSB7fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSBb
XTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGtleSwg
dmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGtlZXAgdGhlIG1vc3Qg
cmVjZW50IGVudHJpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgga2V5cy5wdXNoKCBr
ZXkgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHJpZXZlIHdpdGggKGtleSArICIg
IikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIE9iamVjdC5wcm90b3R5cGUgcHJvcGVy
dGllcyAoc2VlIElzc3VlICMxNTcpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNh
Y2hlWyBrZXkgKyAiICIgXSA9IHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9LCBjYWNoZSApOwot
ICAgICAgICB9LAotCi0gICAgICAgIGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLAotICAgICAg
ICB0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKLSAgICAgICAgY29tcGlsZXJDYWNoZSA9IGNy
ZWF0ZUNhY2hlKCksCi0KLSAgICAgICAgLy8gUmVnZXgKLQotICAgICAgICAvLyBXaGl0ZXNwYWNl
IGNoYXJhY3RlcnMgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3Bh
Y2UKLSAgICAgICAgd2hpdGVzcGFjZSA9ICJbXFx4MjBcXHRcXHJcXG5cXGZdIiwKLSAgICAgICAg
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zeW50YXgvI2NoYXJhY3RlcnMKLSAgICAgICAg
Y2hhcmFjdGVyRW5jb2RpbmcgPSAiKD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLAot
Ci0gICAgICAgIC8vIExvb3NlbHkgbW9kZWxlZCBvbiBDU1MgaWRlbnRpZmllciBjaGFyYWN0ZXJz
Ci0gICAgICAgIC8vIEFuIHVucXVvdGVkIHZhbHVlIHNob3VsZCBiZSBhIENTUyBpZGVudGlmaWVy
IChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9y
cykKLSAgICAgICAgLy8gUHJvcGVyIHN5bnRheDogaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEv
c3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCi0gICAgICAgIGlkZW50aWZpZXIgPSBj
aGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCAidyIsICJ3IyIgKSwKLQotICAgICAgICAvLyBBY2Nl
cHRhYmxlIG9wZXJhdG9ycyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0
ZS1zZWxlY3RvcnMKLSAgICAgICAgb3BlcmF0b3JzID0gIihbKl4kfCF+XT89KSIsCi0gICAgICAg
IGF0dHJpYnV0ZXMgPSAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKigiICsgY2hhcmFjdGVyRW5jb2Rp
bmcgKyAiKSIgKyB3aGl0ZXNwYWNlICsKLSAgICAgICAgICAgICAgICAiKig/OiIgKyBvcGVyYXRv
cnMgKyB3aGl0ZXNwYWNlICsgIiooPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgi
ICsgaWRlbnRpZmllciArICIpfCl8KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLAotCi0gICAgICAg
IC8vIFByZWZlciBhcmd1bWVudHMgbm90IGluIHBhcmVucy9icmFja2V0cywKLSAgICAgICAgLy8g
ICB0aGVuIGF0dHJpYnV0ZSBzZWxlY3RvcnMgYW5kIG5vbi1wc2V1ZG9zIChkZW5vdGVkIGJ5IDop
LAotICAgICAgICAvLyAgIHRoZW4gYW55dGhpbmcgZWxzZQotICAgICAgICAvLyBUaGVzZSBwcmVm
ZXJlbmNlcyBhcmUgaGVyZSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMKLSAgICAg
ICAgLy8gICBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBQU0VVRE8gcHJlRmlsdGVyCi0gICAgICAg
IHBzZXVkb3MgPSAiOigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSg/OlxcKCg/OihbJ1wiXSko
KD86XFxcXC58W15cXFxcXSkqPylcXDJ8KFteKClbXFxdXSp8KD86KD86IiArIGF0dHJpYnV0ZXMg
KyAiKXxbXjpdfFxcXFwuKSp8LiopKVxcKXwpIiwKLQotICAgICAgICAvLyBGb3IgbWF0Y2hFeHBy
LlBPUyBhbmQgbWF0Y2hFeHByLm5lZWRzQ29udGV4dAotICAgICAgICBwb3MgPSAiOihldmVufG9k
ZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsgd2hpdGVzcGFjZSArCi0gICAgICAg
ICAgICAgICAgIiooKD86LVxcZCk/XFxkKikiICsgd2hpdGVzcGFjZSArICIqXFwpfCkoPz1bXi1d
fCQpIiwKLQotICAgICAgICAvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0
ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGlu
ZyB0aGUgbGF0dGVyCi0gICAgICAgIHJ0cmltID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFj
ZSArICIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsICJn
IiApLAotCi0gICAgICAgIHJjb21tYSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAi
KiwiICsgd2hpdGVzcGFjZSArICIqIiApLAotICAgICAgICByY29tYmluYXRvcnMgPSBuZXcgUmVn
RXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiooW1xceDIwXFx0XFxyXFxuXFxmPit+XSkiICsgd2hp
dGVzcGFjZSArICIqIiApLAotICAgICAgICBycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyAp
LAotCi0gICAgICAgIC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9y
IENMQVNTIHNlbGVjdG9ycwotICAgICAgICBycXVpY2tFeHByID0gL14oPzojKFtcd1wtXSspfChc
dyspfFwuKFtcd1wtXSspKSQvLAotCi0gICAgICAgIHJub3QgPSAvXjpub3QvLAotICAgICAgICBy
c2libGluZyA9IC9bXHgyMFx0XHJcblxmXSpbK35dLywKLSAgICAgICAgcmVuZHNXaXRoTm90ID0g
Lzpub3RcKCQvLAotCi0gICAgICAgIHJoZWFkZXIgPSAvaFxkL2ksCi0gICAgICAgIHJpbnB1dHMg
PSAvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLAotCi0gICAgICAgIHJiYWNrc2xhc2gg
PSAvXFwoPyFcXCkvZywKLQotICAgICAgICBtYXRjaEV4cHIgPSB7Ci0gICAgICAgICAgICAgICAg
IklEIjogbmV3IFJlZ0V4cCggIl4jKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiApLAotICAg
ICAgICAgICAgICAgICJDTEFTUyI6IG5ldyBSZWdFeHAoICJeXFwuKCIgKyBjaGFyYWN0ZXJFbmNv
ZGluZyArICIpIiApLAotICAgICAgICAgICAgICAgICJOQU1FIjogbmV3IFJlZ0V4cCggIl5cXFtu
YW1lPVsnXCJdPygiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKVsnXCJdP1xcXSIgKSwKLSAgICAg
ICAgICAgICAgICAiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGNoYXJhY3RlckVuY29kaW5nLnJl
cGxhY2UoICJ3IiwgIncqIiApICsgIikiICksCi0gICAgICAgICAgICAgICAgIkFUVFIiOiBuZXcg
UmVnRXhwKCAiXiIgKyBhdHRyaWJ1dGVzICksCi0gICAgICAgICAgICAgICAgIlBTRVVETyI6IG5l
dyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKLSAgICAgICAgICAgICAgICAiUE9TIjogbmV3IFJl
Z0V4cCggcG9zLCAiaSIgKSwKLSAgICAgICAgICAgICAgICAiQ0hJTEQiOiBuZXcgUmVnRXhwKCAi
Xjoob25seXxudGh8Zmlyc3R8bGFzdCktY2hpbGQoPzpcXCgiICsgd2hpdGVzcGFjZSArCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyB3aGl0
ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdoaXRlc3BhY2UgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgIiooXFxkKyl8KSkiICsgd2hpdGVzcGFjZSArICIqXFwpfCkiLCAiaSIgKSwKLSAgICAg
ICAgICAgICAgICAvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKCkKLSAg
ICAgICAgICAgICAgICAibmVlZHNDb250ZXh0IjogbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFj
ZSArICIqWz4rfl18IiArIHBvcywgImkiICkKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBTdXBw
b3J0Ci0KLSAgICAgICAgLy8gVXNlZCBmb3IgdGVzdGluZyBzb21ldGhpbmcgb24gYW4gZWxlbWVu
dAotICAgICAgICBhc3NlcnQgPSBmdW5jdGlvbiggZm4gKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotCi0gICAgICAgICAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbiggZGl2ICk7Ci0gICAgICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQotICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0g
bnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQ2hlY2sg
aWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5zIG9ubHkgZWxlbWVudHMKLSAgICAg
ICAgYXNzZXJ0VGFnTmFtZU5vQ29tbWVudHMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAg
ICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIp
ICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioi
KS5sZW5ndGg7Ci0gICAgICAgIH0pLAotCi0gICAgICAgIC8vIENoZWNrIGlmIGdldEF0dHJpYnV0
ZSByZXR1cm5zIG5vcm1hbGl6ZWQgaHJlZiBhdHRyaWJ1dGVzCi0gICAgICAgIGFzc2VydEhyZWZO
b3ROb3JtYWxpemVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgICAgICAgICAgICAg
ZGl2LmlubmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKLSAgICAgICAgICAgICAgICByZXR1
cm4gZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSAh
PT0gc3RydW5kZWZpbmVkICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBkaXYuZmlyc3RDaGls
ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiOwotICAgICAgICB9KSwKLQotICAgICAgICAv
LyBDaGVjayBpZiBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZXRyaWV2ZWQgYnkgYXR0cmlidXRlIG5v
ZGVzCi0gICAgICAgIGFzc2VydEF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsK
LSAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PC9zZWxlY3Q+IjsKLSAg
ICAgICAgICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBkaXYubGFzdENoaWxkLmdldEF0dHJpYnV0
ZSgibXVsdGlwbGUiKTsKLSAgICAgICAgICAgICAgICAvLyBJRTggcmV0dXJucyBhIHN0cmluZyBm
b3Igc29tZSBhdHRyaWJ1dGVzIGV2ZW4gd2hlbiBub3QgcHJlc2VudAotICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlICE9PSAiYm9vbGVhbiIgJiYgdHlwZSAhPT0gInN0cmluZyI7Ci0gICAgICAg
IH0pLAotCi0gICAgICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgY2FuIGJl
IHRydXN0ZWQKLSAgICAgICAgYXNzZXJ0VXNhYmxlQ2xhc3NOYW1lID0gYXNzZXJ0KGZ1bmN0aW9u
KCBkaXYgKSB7Ci0gICAgICAgICAgICAgICAgLy8gT3BlcmEgY2FuJ3QgZmluZCBhIHNlY29uZCBj
bGFzc25hbWUgKGluIDkuNikKLSAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYg
Y2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiI7Ci0gICAg
ICAgICAgICAgICAgaWYgKCAhZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgIWRpdi5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IFNhZmFyaSAzLjIgY2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMgYW5kIGRvZXNuJ3QgY2F0Y2ggY2hh
bmdlcwotICAgICAgICAgICAgICAgIGRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOwotICAg
ICAgICAgICAgICAgIHJldHVybiBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0
aCA9PT0gMjsKLSAgICAgICAgfSksCi0KLSAgICAgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5
SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lCi0gICAgICAgIC8vIENoZWNrIGlmIGdldEVsZW1l
bnRzQnlOYW1lIHByaXZpbGVnZXMgZm9ybSBjb250cm9scyBvciByZXR1cm5zIGVsZW1lbnRzIGJ5
IElECi0gICAgICAgIGFzc2VydFVzYWJsZU5hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsK
LSAgICAgICAgICAgICAgICAvLyBJbmplY3QgY29udGVudAotICAgICAgICAgICAgICAgIGRpdi5p
ZCA9IGV4cGFuZG8gKyAwOwotICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGEgbmFt
ZT0nIiArIGV4cGFuZG8gKyAiJz48L2E+PGRpdiBuYW1lPSciICsgZXhwYW5kbyArICInPjwvZGl2
PiI7Ci0gICAgICAgICAgICAgICAgZG9jRWxlbS5pbnNlcnRCZWZvcmUoIGRpdiwgZG9jRWxlbS5m
aXJzdENoaWxkICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUZXN0Ci0gICAgICAgICAgICAgICAg
dmFyIHBhc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSAmJgotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1cm4gZmV3ZXIgdGhhbiB0aGUgY29y
cmVjdCAyCi0gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFt
ZSggZXhwYW5kbyApLmxlbmd0aCA9PT0gMiArCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBi
dWdneSBicm93c2VycyB3aWxsIHJldHVybiBtb3JlIHRoYW4gdGhlIGNvcnJlY3QgMAotICAgICAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKyAw
ICkubGVuZ3RoOwotICAgICAgICAgICAgICAgIGFzc2VydEdldElkTm90TmFtZSA9ICFkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCggZXhwYW5kbyApOwotCi0gICAgICAgICAgICAgICAgLy8gQ2xlYW51
cAotICAgICAgICAgICAgICAgIGRvY0VsZW0ucmVtb3ZlQ2hpbGQoIGRpdiApOwotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHBhc3M7Ci0gICAgICAgIH0pOwotCi0vLyBJZiBzbGljZSBpcyBub3Qg
YXZhaWxhYmxlLCBwcm92aWRlIGEgYmFja3VwCi10cnkgewotICAgICAgICBzbGljZS5jYWxsKCBk
b2NFbGVtLmNoaWxkTm9kZXMsIDAgKVswXS5ub2RlVHlwZTsKLX0gY2F0Y2ggKCBlICkgewotICAg
ICAgICBzbGljZSA9IGZ1bmN0aW9uKCBpICkgewotICAgICAgICAgICAgICAgIHZhciBlbGVtLAot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFtdOwotICAgICAgICAgICAgICAgIGZv
ciAoIDsgKGVsZW0gPSB0aGlzW2ldKTsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHRzOwotICAgICAgICB9OwotfQotCi1mdW5jdGlvbiBTaXp6bGUoIHNlbGVj
dG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkgewotICAgICAgICByZXN1bHRzID0gcmVzdWx0
cyB8fCBbXTsKLSAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0gICAgICAg
IHZhciBtYXRjaCwgZWxlbSwgeG1sLCBtLAotICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gY29u
dGV4dC5ub2RlVHlwZTsKLQotICAgICAgICBpZiAoICFzZWxlY3RvciB8fCB0eXBlb2Ygc2VsZWN0
b3IgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCBub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gW107Ci0gICAgICAgIH0KLQotICAgICAgICB4bWwg
PSBpc1hNTCggY29udGV4dCApOwotCi0gICAgICAgIGlmICggIXhtbCAmJiAhc2VlZCApIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAobSA9IG1hdGNoWzFdKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlVHlwZSA9PT0gOSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZCggbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENo
ZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8g
bG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2MwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ug
d2hlcmUgSUUsIE9wZXJhLCBhbmQgV2Via2l0IHJldHVybiBpdGVtcwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElE
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0uaWQgPT09IG0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENvbnRleHQgaXMgbm90IGEgZG9jdW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQub3duZXJEb2N1bWVudCAmJiAoZWxlbSA9IGNv
bnRleHQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbSApKSAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIGNvbnRleHQsIGVs
ZW0gKSAmJiBlbGVtLmlkID09PSBtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenps
ZSgiVEFHIikKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGNoWzJdICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBz
bGljZS5jYWxsKGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICksIDApICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIuQ0xBU1MiKQotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkgJiYgYXNzZXJ0VXNh
YmxlQ2xhc3NOYW1lICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2Fs
bChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSwgMCkgKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWxsIG90
aGVycwotICAgICAgICByZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQx
IiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKTsKLX0KLQotU2l6emxlLm1hdGNoZXMg
PSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7Ci0gICAgICAgIHJldHVybiBTaXp6bGUoIGV4
cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7Ci19OwotCi1TaXp6bGUubWF0Y2hlc1NlbGVjdG9y
ID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7Ci0gICAgICAgIHJldHVybiBTaXp6bGUoIGV4cHIs
IG51bGwsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsKLX07Ci0KLS8vIFJldHVybnMgYSBm
dW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXMKLWZ1bmN0aW9uIGNyZWF0
ZUlucHV0UHNldWRvKCB0eXBlICkgewotICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09
PSB0eXBlOwotICAgICAgICB9OwotfQotCi0vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGlu
IHBzZXVkb3MgZm9yIGJ1dHRvbnMKLWZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSAp
IHsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHZh
ciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgICAgIHJl
dHVybiAobmFtZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBl
ID09PSB0eXBlOwotICAgICAgICB9OwotfQotCi0vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNl
IGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzCi1mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNl
dWRvKCBmbiApIHsKLSAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1l
bnQgKSB7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSArYXJndW1lbnQ7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNw
ZWNpZmllZCBpbmRleGVzCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5k
ZXhlc1tpXSkgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgfSk7Ci19Ci0KLS8qKgotICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmll
dmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKLSAqIEBwYXJhbSB7
QXJyYXl8RWxlbWVudH0gZWxlbQotICovCi1nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5j
dGlvbiggZWxlbSApIHsKLSAgICAgICAgdmFyIG5vZGUsCi0gICAgICAgICAgICAgICAgcmV0ID0g
IiIsCi0gICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgbm9kZVR5cGUgPSBl
bGVtLm5vZGVUeXBlOwotCi0gICAgICAgIGlmICggbm9kZVR5cGUgKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0g
MTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVs
ZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3Zl
ZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChzZWUgIzExMTUzKQotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gInN0cmluZyIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnRleHRDb250ZW50
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBl
bGVtLm5leHRTaWJsaW5nICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldCArPSBnZXRUZXh0KCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVWYWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgLy8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3Ry
dWN0aW9uIG5vZGVzCi0gICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBu
byBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheQotICAgICAgICAgICAg
ICAgIGZvciAoIDsgKG5vZGUgPSBlbGVtW2ldKTsgaSsrICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldCArPSBnZXRUZXh0KCBub2RlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci19OwotCi1pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1
bmN0aW9uKCBlbGVtICkgewotICAgICAgICAvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQg
Zm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0Ci0gICAgICAgIC8vIChzdWNoIGFz
IGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKQotICAgICAgICB2YXIgZG9jdW1lbnRFbGVt
ZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVu
dDsKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2Rl
TmFtZSAhPT0gIkhUTUwiIDogZmFsc2U7Ci19OwotCi0vLyBFbGVtZW50IGNvbnRhaW5zIGFub3Ro
ZXIKLWNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zID0gZG9jRWxlbS5jb250YWlucyA/Ci0gICAg
ICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAgICAgICAgICAgICAgIHZhciBhZG93biA9IGEubm9k
ZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBidXAgPSBiICYmIGIucGFyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYSA9
PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIGFkb3duLmNvbnRhaW5z
ICYmIGFkb3duLmNvbnRhaW5zKGJ1cCkgKTsKLSAgICAgICAgfSA6Ci0gICAgICAgIGRvY0VsZW0u
Y29tcGFyZURvY3VtZW50UG9zaXRpb24gPwotICAgICAgICBmdW5jdGlvbiggYSwgYiApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gYiAmJiAhISggYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigg
YiApICYgMTYgKTsKLSAgICAgICAgfSA6Ci0gICAgICAgIGZ1bmN0aW9uKCBhLCBiICkgewotICAg
ICAgICAgICAgICAgIHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBiID09PSBhICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OwotCi1TaXp6
bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICB2YXIgdmFsLAotICAg
ICAgICAgICAgICAgIHhtbCA9IGlzWE1MKCBlbGVtICk7Ci0KLSAgICAgICAgaWYgKCAheG1sICkg
ewotICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCAodmFsID0gRXhwci5hdHRySGFuZGxlWyBuYW1lIF0pICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiB2YWwoIGVsZW0gKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIHht
bCB8fCBhc3NlcnRBdHRyaWJ1dGVzICkgewotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdl
dEF0dHJpYnV0ZSggbmFtZSApOwotICAgICAgICB9Ci0gICAgICAgIHZhbCA9IGVsZW0uZ2V0QXR0
cmlidXRlTm9kZSggbmFtZSApOwotICAgICAgICByZXR1cm4gdmFsID8KLSAgICAgICAgICAgICAg
ICB0eXBlb2YgZWxlbVsgbmFtZSBdID09PSAiYm9vbGVhbiIgPwotICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbVsgbmFtZSBdID8gbmFtZSA6IG51bGwgOgotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsLnNwZWNpZmllZCA/IHZhbC52YWx1ZSA6IG51bGwgOgotICAgICAgICAgICAgICAgIG51
bGw7Ci19OwotCi1FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHsKLQotICAgICAgICAvLyBDYW4g
YmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXIKLSAgICAgICAgY2FjaGVMZW5ndGg6IDUwLAotCi0gICAg
ICAgIGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLAotCi0gICAgICAgIG1hdGNoOiBtYXRjaEV4
cHIsCi0KLSAgICAgICAgLy8gSUU2LzcgcmV0dXJuIGEgbW9kaWZpZWQgaHJlZgotICAgICAgICBh
dHRySGFuZGxlOiBhc3NlcnRIcmVmTm90Tm9ybWFsaXplZCA/Ci0gICAgICAgICAgICAgICAge30g
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJocmVmIjogZnVu
Y3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtLmdldEF0dHJpYnV0ZSggImhyZWYiLCAyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
LAotICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ0
eXBlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLQot
ICAgICAgICBmaW5kOiB7Ci0gICAgICAgICAgICAgICAgIklEIjogYXNzZXJ0R2V0SWROb3ROYW1l
ID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0Lmdl
dEVsZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQo
IGlkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sg
cGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25n
ZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21dIDogW107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gOgotICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGlkLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVu
dEJ5SWQgIT09IHN0cnVuZGVmaW5lZCAmJiAheG1sICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtID8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQgPT09IGlk
IHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBtLmdldEF0
dHJpYnV0ZU5vZGUoImlkIikudmFsdWUgPT09IGlkID8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21dIDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAgICAgIlRBRyI6IGFzc2VydFRhZ05hbWVOb0NvbW1lbnRzID8KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUgIT09IHN0cnVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
OgotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBjb250ZXh0LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggdGFnID09PSAiKiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0bXAgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IHJlc3VsdHNbaV0pOyBpKysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRtcC5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRtcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiTkFNRSI6IGFzc2VydFVzYWJsZU5hbWUgJiYgZnVu
Y3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUgIT09IHN0cnVuZGVmaW5lZCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5h
bWUoIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAgICAgIkNMQVNTIjogYXNzZXJ0VXNhYmxlQ2xhc3NOYW1lICYmIGZ1
bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gc3RydW5k
ZWZpbmVkICYmICF4bWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAg
ICByZWxhdGl2ZTogewotICAgICAgICAgICAgICAgICI+IjogeyBkaXI6ICJwYXJlbnROb2RlIiwg
Zmlyc3Q6IHRydWUgfSwKLSAgICAgICAgICAgICAgICAiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIg
fSwKLSAgICAgICAgICAgICAgICAiKyI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiwgZmlyc3Q6
IHRydWUgfSwKLSAgICAgICAgICAgICAgICAifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcHJlRmlsdGVyOiB7Ci0gICAgICAgICAgICAgICAgIkFU
VFIiOiBmdW5jdGlvbiggbWF0Y2ggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsx
XSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVv
dGVkIG9yIHVucXVvdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICggbWF0
Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgIiIgKS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoWzJdID09PSAifj0iICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICIgIiArIG1hdGNoWzNdICsgIiAi
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAg
ICAgICAgICAgIkNISUxEIjogZnVuY3Rpb24oIG1hdGNoICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwclsiQ0hJTEQiXQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxIHR5cGUgKG9ubHl8bnRofC4uLikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMiBhcmd1bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4u
LikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyB4bi1jb21wb25lbnQgb2YgeG4r
eSBhcmd1bWVudCAoWystXT9cZCpufCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NCBzaWduIG9mIHhuLWNvbXBvbmVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1
IHggb2YgeG4tY29tcG9uZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgc2ln
biBvZiB5LWNvbXBvbmVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IHkgb2Yg
eS1jb21wb25lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggbWF0Y2hbMV0gPT09ICJudGgiICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBudGgtY2hpbGQgcmVxdWlyZXMgYXJndW1lbnQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hbMl0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNI
SUxECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFs
c2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hbM10gPSArKCBtYXRjaFszXSA/IG1hdGNoWzRdICsgKG1hdGNoWzVdIHx8
IDEpIDogMiAqICggbWF0Y2hbMl0gPT09ICJldmVuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIgKSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFs0XSA9ICsoICggbWF0Y2hb
Nl0gKyBtYXRjaFs3XSApIHx8IG1hdGNoWzJdID09PSAib2RkIiApOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGNoWzJdICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAg
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBtYXRj
aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bnF1b3RlZCwgZXhjZXNzOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCggbWF0Y2hb
MF0gKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bWF0Y2hbM10gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0g
bWF0Y2hbM107Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAodW5xdW90ZWQg
PSBtYXRjaFs0XSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkg
Y2hlY2sgYXJndW1lbnRzIHRoYXQgY29udGFpbiBhIHBzZXVkbwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIHJwc2V1ZG8udGVzdCh1bnF1b3RlZCkgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUg
KHJlY3Vyc2l2ZWx5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl
eGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFy
ZW50aGVzaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhjZXNz
ID0gdW5xdW90ZWQuaW5kZXhPZiggIikiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVu
cXVvdGVkLmxlbmd0aCkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVucXVvdGVkID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0gbWF0
Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gdW5xdW90ZWQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2Qg
KHR5cGUgYW5kIGFyZ3VtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNo
LnNsaWNlKCAwLCAzICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAg
IGZpbHRlcjogewotICAgICAgICAgICAgICAgICJJRCI6IGFzc2VydEdldElkTm90TmFtZSA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiggaWQgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlkID0gaWQucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSgiaWQiKSA9PT0gaWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKCBpZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBs
YWNlKCByYmFja3NsYXNoLCAiIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBzdHJ1
bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGlk
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJUQUciOiBmdW5jdGlvbiggbm9kZU5hbWUgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGVOYW1lID09PSAiKiIgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHRy
dWU7IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlTmFtZSA9IG5vZGVOYW1lLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICkudG9Mb3dlckNh
c2UoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAm
JiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgIkNM
QVNTIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgZXhwYW5kbyBdWyBjbGFzc05hbWUgKyAiICIgXTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4gfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHBhdHRlcm4gPSBuZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3Bh
Y2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3aGl0ZXNwYWNlICsgInwkKSIgKSkgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5j
dGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcGF0dGVybi50ZXN0KCBlbGVtLmNsYXNzTmFtZSB8fCAodHlwZW9mIGVsZW0uZ2V0QXR0
cmlidXRlICE9PSBzdHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpIHx8
ICIiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRv
ciwgY2hlY2sgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVs
ZW0sIGNvbnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1
bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggcmVzdWx0ID09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09PSAiIT0iOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIW9wZXJhdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIiOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRvciA9PT0gIj0iID8gcmVzdWx0ID09PSBj
aGVjayA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3Ig
PT09ICIhPSIgPyByZXN1bHQgIT09IGNoZWNrIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIl49IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9m
KCBjaGVjayApID09PSAwIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRvciA9PT0gIio9IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4g
LTEgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09
PSAiJD0iID8gY2hlY2sgJiYgcmVzdWx0LnN1YnN0ciggcmVzdWx0Lmxlbmd0aCAtIGNoZWNrLmxl
bmd0aCApID09PSBjaGVjayA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0b3IgPT09ICJ+PSIgPyAoICIgIiArIHJlc3VsdCArICIgIiApLmluZGV4T2YoIGNo
ZWNrICkgPiAtMSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0b3IgPT09ICJ8PSIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zdWJzdHIoIDAsIGNo
ZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyAiLSIgOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAg
ICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgIkNISUxEIjogZnVuY3Rpb24oIHR5
cGUsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0eXBlID09PSAibnRoIiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBub2RlLCBkaWZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCA9PT0gMSAmJiBsYXN0ID09
PSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
IG5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmKys7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBlbGVtID09PSBub2RlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCAob3IgY2Fz
dCB0byBOYU4pLCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYgLT0gbGFzdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUg
Zmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgbm9kZSA9IGVsZW07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoICggdHlwZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICJvbmx5IjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICJmaXJzdCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZp
cnN0IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUgPSBlbGVtOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAibGFzdCI6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5uZXh0U2libGlu
ZykgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJQU0VVRE8i
OiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xh
c3NlcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNp
dGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxl
dHRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVy
cyBpbmhlcml0cyBmcm9tIHBzZXVkb3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IEV4cHIucHNldWRvc1sgcHNl
dWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCAidW5zdXBw
b3J0ZWQgcHNldWRvOiAiICsgcHNldWRvICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmls
dGVyIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGFzIFNpenpsZSBk
b2VzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZuWyBleHBhbmRvIF0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbiggYXJndW1lbnQgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IG1h
aW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGZuLmxlbmd0aCA+IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCAiIiwgYXJndW1lbnQgXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgg
cHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlZC5sZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4
ID0gaW5kZXhPZi5jYWxsKCBzZWVkLCBtYXRjaGVkW2ldICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbIGlkeCBdID0gISggbWF0
Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
fSwKLQotICAgICAgICBwc2V1ZG9zOiB7Ci0gICAgICAgICAgICAgICAgIm5vdCI6IG1hcmtGdW5j
dGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBU
cmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZQotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHNwYWNlcyBhcyBjb21iaW5hdG9ycwotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGlucHV0ID0gW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHMgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlciA9IGNv
bXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICkgKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29u
dGV4dCwgeG1sICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBlbGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNlZWQubGVuZ3RoOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWF0Y2ggZWxlbWVudHMg
dW5tYXRjaGVkIGJ5IGBtYXRjaGVyYAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbaV0gPSAh
KG1hdGNoZXNbaV0gPSBlbGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFswXSA9IGVsZW07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlciggaW5wdXQsIG51bGwsIHht
bCwgcmVzdWx0cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAhcmVzdWx0cy5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgICAgICJoYXMiOiBtYXJrRnVuY3Rp
b24oZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAgImNvbnRh
aW5zIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdl
dFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICAgICB9KSwKLQotICAgICAgICAgICAgICAgICJlbmFibGVk
IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bS5kaXNhYmxlZCA9PT0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
ICAgICJkaXNhYmxlZCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7Ci0gICAgICAgICAgICAgICAgfSwKLQot
ICAgICAgICAgICAgICAgICJjaGVja2VkIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hl
Y2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVj
a2VkCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5vZGVOYW1l
ID09PSAiaW5wdXQiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09ICJvcHRpb24i
ICYmICEhZWxlbS5zZWxlY3RlZCk7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
ICAgICJzZWxlY3RlZCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJs
eQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAg
ICAgICAgICAgICAgInBhcmVudCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICFFeHByLnBzZXVkb3NbImVtcHR5Il0oIGVsZW0gKTsKLSAgICAgICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3Rv
cnMvI2VtcHR5LXBzZXVkbwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gOmVtcHR5IGlzIG9u
bHkgYWZmZWN0ZWQgYnkgZWxlbWVudCBub2RlcyBhbmQgY29udGVudCBub2RlcyhpbmNsdWRpbmcg
dGV4dCgzKSwgY2RhdGEoNCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBub3QgY29t
bWVudCwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIG9yIG90aGVycwotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhhbmtzIHRvIERpZWdvIFBlcmluaSBmb3IgdGhlIG5vZGVOYW1lIHNob3J0
Y3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIEdyZWF0ZXIgdGhhbiAiQCIgbWVhbnMg
YWxwaGEgY2hhcmFjdGVycyAoc3BlY2lmaWNhbGx5IG5vdCBzdGFydGluZyB3aXRoICIjIiBvciAi
PyIpCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZVR5cGU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtID0gZWxlbS5maXJzdENoaWxkOwotICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGVsZW0ubm9kZU5hbWUgPiAiQCIgfHwgKG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZSkgPT09IDMg
fHwgbm9kZVR5cGUgPT09IDQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICJoZWFkZXIiOiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByaGVhZGVy
LnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAg
ICAgICAgInRleHQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0eXBlLCBhdHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUU2IGFuZCA3IHdp
bGwgbWFwIGVsZW0udHlwZSB0byAndGV4dCcgZm9yIG5ldyBIVE1MNSB0eXBlcyAoc2VhcmNoLCBl
dGMpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgZ2V0QXR0cmlidXRlIGluc3RlYWQg
dG8gdGVzdCB0aGlzIGNhc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHR5cGUgPSBlbGVtLnR5cGUpID09PSAidGV4dCIgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0eXBlIikp
ID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSB0eXBlICk7Ci0gICAgICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgICAgIC8vIElucHV0IHR5cGVzCi0gICAgICAgICAgICAgICAg
InJhZGlvIjogY3JlYXRlSW5wdXRQc2V1ZG8oInJhZGlvIiksCi0gICAgICAgICAgICAgICAgImNo
ZWNrYm94IjogY3JlYXRlSW5wdXRQc2V1ZG8oImNoZWNrYm94IiksCi0gICAgICAgICAgICAgICAg
ImZpbGUiOiBjcmVhdGVJbnB1dFBzZXVkbygiZmlsZSIpLAotICAgICAgICAgICAgICAgICJwYXNz
d29yZCI6IGNyZWF0ZUlucHV0UHNldWRvKCJwYXNzd29yZCIpLAotICAgICAgICAgICAgICAgICJp
bWFnZSI6IGNyZWF0ZUlucHV0UHNldWRvKCJpbWFnZSIpLAotCi0gICAgICAgICAgICAgICAgInN1
Ym1pdCI6IGNyZWF0ZUJ1dHRvblBzZXVkbygic3VibWl0IiksCi0gICAgICAgICAgICAgICAgInJl
c2V0IjogY3JlYXRlQnV0dG9uUHNldWRvKCJyZXNldCIpLAotCi0gICAgICAgICAgICAgICAgImJ1
dHRvbiI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5h
bWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8IG5h
bWUgPT09ICJidXR0b24iOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAi
aW5wdXQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTsKLSAgICAgICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAgICAgImZvY3VzIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgZG9jID0gZWxlbS5vd25lckRvY3VtZW50OwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGRvYy5hY3RpdmVFbGVtZW50ICYmICghZG9jLmhhc0Zv
Y3VzIHx8IGRvYy5oYXNGb2N1cygpKSAmJiAhIShlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5l
bGVtLnRhYkluZGV4KTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgImFj
dGl2ZSI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50OwotICAgICAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBQb3NpdGlvbmFsIHR5cGVzCi0gICAgICAgICAg
ICAgICAgImZpcnN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBbIDAgXTsKLSAgICAgICAgICAgICAgICB9KSwKLQot
ICAgICAgICAgICAgICAgICJsYXN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigg
bWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
WyBsZW5ndGggLSAxIF07Ci0gICAgICAgICAgICAgICAgfSksCi0KLSAgICAgICAgICAgICAgICAi
ZXEiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0
aCwgYXJndW1lbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyBhcmd1bWVu
dCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07Ci0gICAgICAgICAgICAgICAg
fSksCi0KLSAgICAgICAgICAgICAgICAiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVu
Y3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwot
ICAgICAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAgIm9kZCI6IGNyZWF0ZVBvc2l0
aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWF0Y2hJbmRleGVzOwotICAgICAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAgImx0
IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgs
IGFyZ3VtZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSBhcmd1
bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OyAtLWkgPj0gMDsgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bWF0Y2hJbmRleGVzOwotICAgICAgICAgICAgICAgIH0pLAotCi0gICAgICAgICAgICAgICAgImd0
IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgs
IGFyZ3VtZW50ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSBhcmd1
bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OyArK2kgPCBsZW5ndGg7ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoSW5kZXhlczsKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICB9Ci19OwotCi1m
dW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIsIHJldCApIHsKLSAgICAgICAgaWYgKCBhID09PSBi
ICkgewotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgY3VyID0gYS5uZXh0U2libGluZzsKLQotICAgICAgICB3aGlsZSAoIGN1ciApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIGN1ciA9PT0gYiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjdXIgPSBjdXIu
bmV4dFNpYmxpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMTsKLX0KLQotc29ydE9y
ZGVyID0gZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/Ci0gICAgICAgIGZ1bmN0aW9u
KCBhLCBiICkgewotICAgICAgICAgICAgICAgIGlmICggYSA9PT0gYiApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
KCAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
biA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0
Ci0gICAgICAgICAgICAgICAgKSA/IC0xIDogMTsKLSAgICAgICAgfSA6Ci0gICAgICAgIGZ1bmN0
aW9uKCBhLCBiICkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgaWRlbnRpY2Fs
LCB3ZSBjYW4gZXhpdCBlYXJseQotICAgICAgICAgICAgICAgIGlmICggYSA9PT0gYiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHVz
aW5nIHNvdXJjZUluZGV4IChpbiBJRSkgaWYgaXQncyBhdmFpbGFibGUgb24gYm90aCBub2Rlcwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGEuc291cmNlSW5kZXggJiYgYi5zb3VyY2VJbmRl
eCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5z
b3VyY2VJbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgYWws
IGJsLAotICAgICAgICAgICAgICAgICAgICAgICAgYXAgPSBbXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJwID0gW10sCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXAgPSBhLnBhcmVudE5v
ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBidXAgPSBiLnBhcmVudE5vZGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXIgPSBhdXA7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
bm9kZXMgYXJlIHNpYmxpbmdzIChvciBpZGVudGljYWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNr
Ci0gICAgICAgICAgICAgICAgaWYgKCBhdXAgPT09IGJ1cCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsKLQotICAgICAgICAgICAgICAgIC8v
IElmIG5vIHBhcmVudHMgd2VyZSBmb3VuZCB0aGVuIHRoZSBub2RlcyBhcmUgZGlzY29ubmVjdGVk
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIWF1cCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFidXAgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSdyZSBzb21ld2hlcmUgZWxzZSBpbiB0
aGUgdHJlZSBzbyB3ZSBuZWVkCi0gICAgICAgICAgICAgICAgLy8gdG8gYnVpbGQgdXAgYSBmdWxs
IGxpc3Qgb2YgdGhlIHBhcmVudE5vZGVzIGZvciBjb21wYXJpc29uCi0gICAgICAgICAgICAgICAg
d2hpbGUgKCBjdXIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcC51bnNoaWZ0KCBjdXIg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGN1ciA9IGJ1cDsKLQotICAgICAgICAgICAg
ICAgIHdoaWxlICggY3VyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnAudW5zaGlmdCgg
Y3VyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhbCA9IGFwLmxlbmd0aDsKLSAgICAg
ICAgICAgICAgICBibCA9IGJwLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHdh
bGtpbmcgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5Ci0gICAgICAgICAg
ICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYWwgJiYgaSA8IGJsOyBpKysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGFwW2ldICE9PSBicFtpXSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gV2UgZW5kZWQgc29tZXBsYWNlIHVwIHRoZSB0cmVlIHNvIGRvIGEgc2libGluZyBj
aGVjawotICAgICAgICAgICAgICAgIHJldHVybiBpID09PSBhbCA/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzaWJsaW5nQ2hlY2soIGEsIGJwW2ldLCAtMSApIDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGIsIDEgKTsKLSAgICAgICAgfTsKLQotLy8gQWx3
YXlzIGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgZHVwbGljYXRlcyBpZiBzb3J0IGRvZXNuJ3QKLS8v
IHBhc3MgdGhlbSB0byBvdXIgY29tcGFyaXNvbiBmdW5jdGlvbiAoYXMgaW4gR29vZ2xlIENocm9t
ZSkuCi1bMCwgMF0uc29ydCggc29ydE9yZGVyICk7Ci1iYXNlSGFzRHVwbGljYXRlID0gIWhhc0R1
cGxpY2F0ZTsKLQotLy8gRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcwot
U2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKLSAgICAgICAgdmFyIGVs
ZW0sCi0gICAgICAgICAgICAgICAgZHVwbGljYXRlcyA9IFtdLAotICAgICAgICAgICAgICAgIGkg
PSAxLAotICAgICAgICAgICAgICAgIGogPSAwOwotCi0gICAgICAgIGhhc0R1cGxpY2F0ZSA9IGJh
c2VIYXNEdXBsaWNhdGU7Ci0gICAgICAgIHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7Ci0KLSAg
ICAgICAgaWYgKCBoYXNEdXBsaWNhdGUgKSB7Ci0gICAgICAgICAgICAgICAgZm9yICggOyAoZWxl
bSA9IHJlc3VsdHNbaV0pOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0gPT09IHJlc3VsdHNbIGkgLSAxIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBqLS0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7
Ci19OwotCi1TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgewotICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoICJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgbXNn
ICk7Ci19OwotCi1mdW5jdGlvbiB0b2tlbml6ZSggc2VsZWN0b3IsIHBhcnNlT25seSApIHsKLSAg
ICAgICAgdmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsCi0gICAgICAgICAgICAgICAg
c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycywKLSAgICAgICAgICAgICAgICBjYWNoZWQgPSB0b2tl
bkNhY2hlWyBleHBhbmRvIF1bIHNlbGVjdG9yICsgIiAiIF07Ci0KLSAgICAgICAgaWYgKCBjYWNo
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xp
Y2UoIDAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNvRmFyID0gc2VsZWN0b3I7Ci0gICAgICAg
IGdyb3VwcyA9IFtdOwotICAgICAgICBwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7Ci0KLSAg
ICAgICAgd2hpbGUgKCBzb0ZhciApIHsKLQotICAgICAgICAgICAgICAgIC8vIENvbW1hIGFuZCBm
aXJzdCBydW4KLSAgICAgICAgICAgICAgICBpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21t
YS5leGVjKCBzb0ZhciApKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2gg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGNvbnN1bWUgdHJh
aWxpbmcgY29tbWFzIGFzIHZhbGlkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
RmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2goIHRv
a2VucyA9IFtdICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWF0Y2hl
ZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgLy8gQ29tYmluYXRvcnMKLSAgICAgICAgICAg
ICAgICBpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKCBtYXRjaGVkID0gbmV3IFRva2VuKCBtYXRj
aC5zaGlmdCgpICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xp
Y2UoIG1hdGNoZWQubGVuZ3RoICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3Qg
ZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlZC50eXBlID0gbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sICIgIiApOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZpbHRlcnMKLSAgICAgICAgICAgICAgICBm
b3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRl
cnNbIHR5cGUgXSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWF0Y2ggPSBw
cmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b2tlbnMucHVzaCggbWF0Y2hlZCA9IG5ldyBUb2tlbiggbWF0Y2guc2hpZnQo
KSApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xp
Y2UoIG1hdGNoZWQubGVuZ3RoICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZWQudHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZWQubWF0Y2hlcyA9IG1hdGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggIW1hdGNoZWQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKLSAgICAgICAg
Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nCi0gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYW4g
ZXJyb3Igb3IgcmV0dXJuIHRva2VucwotICAgICAgICByZXR1cm4gcGFyc2VPbmx5ID8KLSAgICAg
ICAgICAgICAgICBzb0Zhci5sZW5ndGggOgotICAgICAgICAgICAgICAgIHNvRmFyID8KLSAgICAg
ICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgdG9rZW5zCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTsKLX0KLQotZnVuY3Rp
b24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHsKLSAgICAgICAg
dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLAotICAgICAgICAgICAgICAgIGNoZWNrTm9uRWxlbWVu
dHMgPSBiYXNlICYmIGNvbWJpbmF0b3IuZGlyID09PSAicGFyZW50Tm9kZSIsCi0gICAgICAgICAg
ICAgICAgZG9uZU5hbWUgPSBkb25lKys7Ci0KLSAgICAgICAgcmV0dXJuIGNvbWJpbmF0b3IuZmly
c3QgPwotICAgICAgICAgICAgICAgIC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9w
cmVjZWRpbmcgZWxlbWVudAotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0
LCB4bWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsg
ZGlyIF0pICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNoZWNrTm9u
RWxlbWVudHMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMSAgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfSA6Ci0KLSAgICAgICAgICAgICAgICAvLyBDaGVjayBh
Z2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBm
dW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24n
dCBiZW5lZml0IGZyb20gZGlyIGNhY2hpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
IXhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmtleSA9IGRpcnJ1bnMgKyAi
ICIgKyBkb25lTmFtZSArICIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWNoZWRrZXkgPSBkaXJrZXkgKyBjYWNoZWRydW5zOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tOb25FbGVtZW50cyB8fCBl
bGVtLm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAoY2FjaGUgPSBlbGVtWyBleHBhbmRvIF0pID09PSBjYWNoZWRr
ZXkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtLnNpenNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBjYWNoZSA9PT0gInN0cmluZyIg
JiYgY2FjaGUuaW5kZXhPZihkaXJrZXkpID09PSAwICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc2l6c2V0ICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBleHBhbmRvIF0gPSBjYWNoZWRrZXk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpzZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tOb25FbGVtZW50cyB8
fCBlbGVtLm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfTsKLX0KLQotZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJz
ICkgewotICAgICAgICByZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/Ci0gICAgICAgICAgICAg
ICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW1hdGNo
ZXJzW2ldKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0gOgotICAgICAgICAgICAgICAgIG1h
dGNoZXJzWzBdOwotfQotCi1mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRl
ciwgY29udGV4dCwgeG1sICkgewotICAgICAgICB2YXIgZWxlbSwKLSAgICAgICAgICAgICAgICBu
ZXdVbm1hdGNoZWQgPSBbXSwKLSAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAg
ICBsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAotICAgICAgICAgICAgICAgIG1hcHBlZCA9IG1hcCAh
PSBudWxsOwotCi0gICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgICAgICAgICAg
ICAgIGlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbWFwcGVkICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5wdXNoKCBpICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3VW5tYXRjaGVkOwot
fQotCi1mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBw
b3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7Ci0gICAgICAgIGlmICggcG9z
dEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkgewotICAgICAgICAgICAgICAgIHBv
c3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7Ci0gICAgICAgICAg
ICAgICAgcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciAp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQs
IHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAgICB2YXIgdGVtcCwgaSwg
ZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZU1hcCA9IFtdLAotICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zdE1hcCA9IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhp
c3RpbmcgPSByZXN1bHRzLmxlbmd0aCwKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0
IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciB8fCAiKiIs
IGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJl
c2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvbgotICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0
b3IgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRlbnNlKCBlbGVtcywg
cHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbXMsCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQg
PSBtYXRjaGVyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2
ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIg
b3IgcHJlZXhpc3RpbmcgcmVzdWx0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0Rmls
dGVyICkgPwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4u
aW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgW10gOgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoZXJJbjsKLQotICAgICAgICAgICAgICAgIC8vIEZpbmQg
cHJpbWFyeSBtYXRjaGVzCi0gICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0
LCB4bWwgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBcHBseSBw
b3N0RmlsdGVyCi0gICAgICAgICAgICAgICAgaWYgKCBwb3N0RmlsdGVyICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1s
ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVu
dHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGkgPSB0ZW1wLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0t
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdGVtcFtp
XSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91
dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBzZWVkICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZmluYWwgbWF0Y2hl
ck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250
ZXh0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBbXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5s
ZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBp
LS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNl
IGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9
IGVsZW0pICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVy
T3V0ID0gW10pLCB0ZW1wLCB4bWwgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgbWF0Y2hlZCBlbGVt
ZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVtcCA9
IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAt
MSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQWRkIGVs
ZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCi0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBj
b25kZW5zZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dCA9PT0g
cmVzdWx0cyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hl
ck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyT3V0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCByZXN1
bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIG1h
dGNoZXJPdXQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH0pOwotfQotCi1mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkg
ewotICAgICAgICB2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLAotICAgICAgICAgICAgICAg
IGxlbiA9IHRva2Vucy5sZW5ndGgsCi0gICAgICAgICAgICAgICAgbGVhZGluZ1JlbGF0aXZlID0g
RXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSwKLSAgICAgICAgICAgICAgICBpbXBsaWNp
dFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIiAiXSwKLSAgICAg
ICAgICAgICAgICBpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsCi0KLSAgICAgICAgICAgICAg
ICAvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSBy
ZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKQotICAgICAgICAgICAgICAgIG1hdGNo
Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDsKLSAgICAgICAgICAgICAg
ICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCi0gICAgICAgICAgICAgICAgbWF0Y2hBbnlD
b250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0x
OwotICAgICAgICAgICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKLSAgICAgICAg
ICAgICAgICBtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwg
fHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoQ29udGV4dCggZWxlbSwg
Y29udGV4dCwgeG1sICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTsKLSAgICAgICAgICAgICAg
ICB9IF07Ci0KLSAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1l
bnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tl
bnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9u
YWwgbWF0Y2hlcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyWyBleHBhbmRv
IF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIG5leHQg
cmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqID0gKytpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKCA7IGogPCBsZW47IGorKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHNldE1hdGNoZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaSA+IDEgJiYgdG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmpv
aW4oIiIpLnJlcGxhY2UoIHJ0cmltLCAiJDEiICksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkg
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqIDwgbGVuICYmIG1h
dGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiB0b2tlbnMuam9pbigi
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJzLnB1c2goIG1hdGNoZXIg
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZWxlbWVu
dE1hdGNoZXIoIG1hdGNoZXJzICk7Ci19Ci0KLWZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRj
aGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHsKLSAgICAgICAgdmFyIGJ5U2V0
ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCwKLSAgICAgICAgICAgICAgICBieUVsZW1lbnQgPSBl
bGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKLSAgICAgICAgICAgICAgICBzdXBlck1hdGNoZXIg
PSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBleHBhbmRDb250ZXh0ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0sIGosIG1hdGNoZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoZWQgPSBbXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50ID0gMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaSA9ICIwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5t
YXRjaGVkID0gc2VlZCAmJiBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
ZXJtb3N0ID0gZXhwYW5kQ29udGV4dCAhPSBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVt
ZW50cyBvciBjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zID0g
c2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kWyJUQUciXSggIioiLCBleHBhbmRDb250ZXh0
ICYmIGNvbnRleHQucGFyZW50Tm9kZSB8fCBjb250ZXh0ICksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE5lc3RlZCBtYXRjaGVycyBzaG91bGQgdXNlIG5vbi1pbnRlZ2VyIGRp
cnJ1bnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlycnVuc1VuaXF1ZSA9IChk
aXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLkUpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgIT09IGRvY3VtZW50ICYmIGNv
bnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZHJ1bnMgPSBzdXBl
ck1hdGNoZXIuZWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3Rs
eSB0byByZXN1bHRzCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gZWxl
bXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBqID0gMDsgKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbal0pOyBq
KysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIGVsZW0g
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1
bnNVbmlxdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWNoZWRydW5zID0gKytzdXBlck1hdGNoZXIuZWw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1l
bnRzIGZvciBzZXQgZmlsdGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGJ5U2V0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
ZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYg
ZWxlbSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRjaGVkQ291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGhl
biB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWVkICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goIGVsZW0g
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVs
ZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQgKz0gaTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgKG1hdGNoZXIgPSBz
ZXRNYXRjaGVyc1tqXSk7IGorKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBzZWVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhl
IG5lZWQgZm9yIHNvcnRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKHVubWF0Y2hlZFtpXSB8
fCBzZXRNYXRjaGVkW2ldKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJl
c3VsdHMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgaW5kZXggcGxhY2Vo
b2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVk
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBz
dWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQg
JiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVl
U29ydCggcmVzdWx0cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJy
aWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVycwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVubWF0Y2hl
ZDsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgIHN1cGVyTWF0Y2hlci5lbCA9IDA7Ci0g
ICAgICAgIHJldHVybiBieVNldCA/Ci0gICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9uKCBzdXBl
ck1hdGNoZXIgKSA6Ci0gICAgICAgICAgICAgICAgc3VwZXJNYXRjaGVyOwotfQotCi1jb21waWxl
ID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGdyb3VwIC8qIEludGVybmFs
IFVzZSBPbmx5ICovICkgewotICAgICAgICB2YXIgaSwKLSAgICAgICAgICAgICAgICBzZXRNYXRj
aGVycyA9IFtdLAotICAgICAgICAgICAgICAgIGVsZW1lbnRNYXRjaGVycyA9IFtdLAotICAgICAg
ICAgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAi
ICIgXTsKLQotICAgICAgICBpZiAoICFjYWNoZWQgKSB7Ci0gICAgICAgICAgICAgICAgLy8gR2Vu
ZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQg
dG8gY2hlY2sgZWFjaCBlbGVtZW50Ci0gICAgICAgICAgICAgICAgaWYgKCAhZ3JvdXAgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IHRva2VuaXplKCBzZWxlY3RvciApOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpID0gZ3JvdXAubGVuZ3RoOwotICAgICAg
ICAgICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVk
ID0gbWF0Y2hlckZyb21Ub2tlbnMoIGdyb3VwW2ldICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRNYXRjaGVy
cy5wdXNoKCBjYWNoZWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24K
LSAgICAgICAgICAgICAgICBjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hl
ckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gY2FjaGVkOwotfTsKLQotZnVuY3Rpb24gbXVsdGlwbGVD
b250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgewotICAgICAgICB2YXIgaSA9
IDAsCi0gICAgICAgICAgICAgICAgbGVuID0gY29udGV4dHMubGVuZ3RoOwotICAgICAgICBmb3Ig
KCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCBj
b250ZXh0c1tpXSwgcmVzdWx0cyApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHRz
OwotfQotCi1mdW5jdGlvbiBzZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVk
LCB4bWwgKSB7Ci0gICAgICAgIHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLAotICAg
ICAgICAgICAgICAgIG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICksCi0gICAgICAgICAgICAg
ICAgaiA9IG1hdGNoLmxlbmd0aDsKLQotICAgICAgICBpZiAoICFzZWVkICkgewotICAgICAgICAg
ICAgICAgIC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25l
IGdyb3VwCi0gICAgICAgICAgICAgICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250
ZXh0IGlmIHRoZSByb290IHNlbGVjdG9yIGlzIGFuIElECi0gICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSku
dHlwZSA9PT0gIklEIiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgIXhtbCAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IEV4cHIuZmluZFsiSUQi
XSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApLCBjb250ZXh0LCB4
bWwgKVswXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29udGV4dCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgp
Lmxlbmd0aCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gbWF0Y2hFeHByWyJQT1MiXS50ZXN0KCBz
ZWxlY3RvciApID8gLTEgOiB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3IK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyAodHlw
ZSA9IHRva2VuLnR5cGUpIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWFyY2gsIGV4
cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChzZWVkID0gZmluZCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLm1hdGNoZXNb
MF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYg
Y29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4bWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBj
YW4gcmV0dXJuIGVhcmx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbnMuc3BsaWNlKCBpLCAxICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRva2Vucy5q
b2luKCIiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIXNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKCBzZWVk
LCAwICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIENv
bXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24KLSAgICAgICAgLy8gUHJvdmlk
ZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxl
Y3RvciBhYm92ZQotICAgICAgICBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSgKLSAgICAgICAg
ICAgICAgICBzZWVkLAotICAgICAgICAgICAgICAgIGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
eG1sLAotICAgICAgICAgICAgICAgIHJlc3VsdHMsCi0gICAgICAgICAgICAgICAgcnNpYmxpbmcu
dGVzdCggc2VsZWN0b3IgKQotICAgICAgICApOwotICAgICAgICByZXR1cm4gcmVzdWx0czsKLX0K
LQotaWYgKCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgewotICAgICAgICAoZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRpc2Nvbm5lY3RlZE1hdGNoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgb2xkU2VsZWN0ID0gc2VsZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzY2FwZSA9IC8nfFxcL2csCi0gICAgICAgICAgICAgICAgICAgICAgICByYXR0cmlidXRlUXVv
dGVzID0gL1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxdL2csCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hl
biB0cnVlIChDaHJvbWUgMjEpLCBubyBuZWVkIHRvIGFsc28gYWRkIHRvIGJ1Z2d5TWF0Y2hlcyBz
aW5jZSBtYXRjaGVzIGNoZWNrcyBidWdneVFTQQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
QSBzdXBwb3J0IHRlc3Qgd291bGQgcmVxdWlyZSB0b28gbXVjaCBjb2RlICh3b3VsZCBpbmNsdWRl
IGRvY3VtZW50IHJlYWR5KQotICAgICAgICAgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBID0gWyAi
OmZvY3VzIiBdLAotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaGVzU2VsZWN0b3Io
OmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQSBzdXBwb3J0IHRlc3Qgd291bGQgcmVxdWlyZSB0b28gbXVj
aCBjb2RlICh3b3VsZCBpbmNsdWRlIGRvY3VtZW50IHJlYWR5KQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8ganVzdCBza2lwIG1hdGNoZXNTZWxlY3RvciBmb3IgOmFjdGl2ZQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmJ1Z2d5TWF0Y2hlcyA9IFsgIjphY3RpdmUiIF0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2Vs
ZWN0b3IgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jRWxlbS5vTWF0Y2hl
c1NlbGVjdG9yIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW0ubXNN
YXRjaGVzU2VsZWN0b3I7Ci0KLSAgICAgICAgICAgICAgICAvLyBCdWlsZCBRU0EgcmVnZXgKLSAg
ICAgICAgICAgICAgICAvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5p
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQg
b2Ygbm90IGV4cGxpY3RseQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0dGluZyBhIGJv
b2xlYW4gY29udGVudCBhdHRyaWJ1dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5j
ZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0
aW9uPjwvc2VsZWN0PiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFOCAtIFNvbWUg
Ym9vbGVhbiBhdHRyaWJ1dGVzIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVu
Z3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgg
IlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxl
fHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hv
dWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEw
OTI5LyNjaGVja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9y
IGhlcmUgKGRvIG5vdCBwdXQgdGVzdHMgYWZ0ZXIgdGhpcyBvbmUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGggKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCI6Y2hlY2tl
ZCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotCi0g
ICAgICAgICAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE9wZXJhIDEwLTEyL0lFOSAtIF49ICQ9ICo9IGFuZCBlbXB0eSB2YWx1ZXMK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBub3Qgc2VsZWN0IGFueXRoaW5nCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxwIHRlc3Q9Jyc+PC9wPiI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbdGVz
dF49JyddIikubGVuZ3RoICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYnVn
Z3lRU0EucHVzaCggIlsqXiRdPSIgKyB3aGl0ZXNwYWNlICsgIiooPzpcIlwifCcnKSIgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRkYg
My41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVt
ZW50cyBhcmUgc3RpbGwgZW5hYmxlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFOCB0
aHJvd3MgZXJyb3IgaGVyZSAoZG8gbm90IHB1dCB0ZXN0cyBhZnRlciB0aGlzIG9uZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2hpZGRlbicv
PiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgi
OmVuYWJsZWQiKS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJi
dWdneVFTQS5wdXNoKCI6ZW5hYmxlZCIsICI6ZGlzYWJsZWQiKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIC8vIHJidWdn
eVFTQSBhbHdheXMgY29udGFpbnMgOmZvY3VzLCBzbyBubyBuZWVkIGZvciBhIGxlbmd0aCBjaGVj
awotICAgICAgICAgICAgICAgIHJidWdneVFTQSA9IC8qIHJidWdneVFTQS5sZW5ndGggJiYgKi8g
bmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oInwiKSApOwotCi0gICAgICAgICAgICAgICAgc2Vs
ZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVzZSBxdWVyeVNlbGVjdG9yQWxsIHdo
ZW4gbm90IGZpbHRlcmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhpcyBp
cyBub3QgeG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdoZW4gbm8gUVNBIGJ1
Z3MgYXBwbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXNlZWQgJiYgIXhtbCAmJiAh
cmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBncm91cHMsIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2xkID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuaWQgPSBleHBhbmRvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0NvbnRleHQgPSBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld1NlbGVjdG9yID0gY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBzZWxlY3RvcjsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBxU0Egd29ya3Mgc3RyYW5nZWx5
IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgY2FuIHdvcmsgYXJvdW5kIHRoaXMgYnkgc3BlY2lmeWluZyBhbiBleHRyYSBJRCBv
biB0aGUgcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd29ya2lu
ZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhlIHRlY2huaXF1
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSUUgOCBkb2Vzbid0IHdvcmsg
b24gb2JqZWN0IGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
Y29udGV4dC5ub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkg
IT09ICJvYmplY3QiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoImlkIikp
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmlk
ID0gb2xkLnJlcGxhY2UoIHJlc2NhcGUsICJcXCQmIiApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNldEF0dHJpYnV0ZSggImlkIiwgbmlkICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5pZCA9ICJbaWQ9JyIgKyBuaWQgKyAiJ10gIjsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBncm91cHMubGVuZ3Ro
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBz
W2ldID0gbmlkICsgZ3JvdXBzW2ldLmpvaW4oIiIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiBjb250ZXh0LnBhcmVu
dE5vZGUgfHwgY29udGV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5ld1Nl
bGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFw
cGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKCBuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d1NlbGVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApLCAwICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gY2F0Y2gocXNhRXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhb2xkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG9sZFNlbGVjdCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMs
IHNlZWQsIHhtbCApOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IG1hdGNoZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRp
diApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBk
aXYsICJkaXYiICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBz
aG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5jYWxsKCBkaXYsICJbdGVzdCE9JyddOnNpenpsZSIg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYnVnZ3lNYXRjaGVz
LnB1c2goICIhPSIsIHBzZXVkb3MgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoIGUgKSB7fQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHJidWdneU1hdGNoZXMgYWx3YXlzIGNvbnRhaW5zIDphY3RpdmUg
YW5kIDpmb2N1cywgc28gbm8gbmVlZCBmb3IgYSBsZW5ndGggY2hlY2sKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJidWdneU1hdGNoZXMgPSAvKiByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiAqLyBu
ZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oInwiKSApOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJp
YnV0ZSBzZWxlY3RvcnMgYXJlIHF1b3RlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSddIiApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJidWdneU1hdGNoZXMgYWx3YXlzIGNv
bnRhaW5zIDphY3RpdmUsIHNvIG5vIG5lZWQgZm9yIGFuIGV4aXN0ZW5jZSBjaGVjawotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc1hNTCggZWxlbSApICYmICFyYnVnZ3lN
YXRjaGVzLnRlc3QoIGV4cHIgKSAmJiAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IG1hdGNoZXMuY2FsbCgg
ZWxlbSwgZXhwciApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29u
bmVjdGVkIG5vZGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHJldCB8fCBkaXNjb25uZWN0ZWRNYXRjaCB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzIHdlbGws
IGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZnJhZ21lbnQgaW4gSUUgOQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVu
dC5ub2RlVHlwZSAhPT0gMTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBjYXRjaChlKSB7fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpenpsZSggZXhw
ciwgbnVsbCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0pKCk7Ci19Ci0KLS8vIERlcHJl
Y2F0ZWQKLUV4cHIucHNldWRvc1sibnRoIl0gPSBFeHByLnBzZXVkb3NbImVxIl07Ci0KLS8vIEJh
Y2stY29tcGF0Ci1mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge30KLUV4cHIuZmlsdGVycyA9IHNldEZp
bHRlcnMucHJvdG90eXBlID0gRXhwci5wc2V1ZG9zOwotRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNl
dEZpbHRlcnMoKTsKLQotLy8gT3ZlcnJpZGUgc2l6emxlIGF0dHJpYnV0ZSByZXRyaWV2YWwKLVNp
enpsZS5hdHRyID0galF1ZXJ5LmF0dHI7Ci1qUXVlcnkuZmluZCA9IFNpenpsZTsKLWpRdWVyeS5l
eHByID0gU2l6emxlLnNlbGVjdG9yczsKLWpRdWVyeS5leHByWyI6Il0gPSBqUXVlcnkuZXhwci5w
c2V1ZG9zOwotalF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0OwotalF1ZXJ5LnRleHQg
PSBTaXp6bGUuZ2V0VGV4dDsKLWpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDsKLWpRdWVy
eS5jb250YWlucyA9IFNpenpsZS5jb250YWluczsKLQotCi19KSggd2luZG93ICk7Ci12YXIgcnVu
dGlsID0gL1VudGlsJC8sCi0gICAgICAgIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2
KD86VW50aWx8QWxsKSkvLAotICAgICAgICBpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC8sCi0g
ICAgICAgIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsCi0g
ICAgICAgIC8vIG1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVu
IHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0Ci0gICAgICAgIGd1YXJhbnRlZWRVbmlxdWUgPSB7
Ci0gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRydWUsCi0gICAgICAgICAgICAgICAgY29udGVu
dHM6IHRydWUsCi0gICAgICAgICAgICAgICAgbmV4dDogdHJ1ZSwKLSAgICAgICAgICAgICAgICBw
cmV2OiB0cnVlCi0gICAgICAgIH07Ci0KLWpRdWVyeS5mbi5leHRlbmQoewotICAgICAgICBmaW5k
OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGksIGwsIGxlbmd0
aCwgbiwgciwgcmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiA9IHRoaXM7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlcihmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwg
PSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldCA9IHRoaXMucHVzaFN0YWNr
KCAiIiwgImZpbmQiLCBzZWxlY3RvciApOwotCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDAs
IGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxlbmd0aCA9IHJldC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmlu
ZCggc2VsZWN0b3IsIHRoaXNbaV0sIHJldCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGkgPiAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdW5pcXVlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIG4gPSBsZW5ndGg7IG4gPCByZXQubGVuZ3RoOyBuKysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggciA9IDA7IHIgPCBsZW5ndGg7
IHIrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggcmV0W3JdID09PSByZXRbbl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zcGxpY2Uobi0tLCAxKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfSwKLQotICAgICAgICBo
YXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGksCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbiA9IHRhcmdldHMubGVuZ3RoOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbaV0gKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9LAotCi0gICAgICAgIG5vdDogZnVuY3Rpb24o
IHNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lu
bm93KHRoaXMsIHNlbGVjdG9yLCBmYWxzZSksICJub3QiLCBzZWxlY3Rvcik7Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIHRydWUpLCAi
ZmlsdGVyIiwgc2VsZWN0b3IgKTsKLSAgICAgICAgfSwKLQotICAgICAgICBpczogZnVuY3Rpb24o
IHNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmICgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9y
ZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvICQoInA6Zmlyc3QiKS5pcygicDps
YXN0Iikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvICJwIi4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9y
LCB0aGlzLmNvbnRleHQgKS5pbmRleCggdGhpc1swXSApID49IDAgOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCB0aGlzICku
bGVuZ3RoID4gMCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVy
KCBzZWxlY3RvciApLmxlbmd0aCA+IDAgKTsKLSAgICAgICAgfSwKLQotICAgICAgICBjbG9zZXN0
OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkgewotICAgICAgICAgICAgICAgIHZhciBj
dXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGwgPSB0aGlzLmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFtdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3Rv
cnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiA/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4
dCApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDsKLQotICAgICAgICAgICAg
ICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9
IHRoaXNbaV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggY3VyICYmIGN1ci5v
d25lckRvY3VtZW50ICYmIGN1ciAhPT0gY29udGV4dCAmJiBjdXIubm9kZVR5cGUgIT09IDExICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBvcyA/IHBvcy5pbmRleChj
dXIpID4gLTEgOiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3RvcnMpICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBjdXIg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXQgPSByZXQubGVuZ3RoID4gMSA/
IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMucHVzaFN0YWNrKCByZXQsICJjbG9zZXN0Iiwgc2VsZWN0b3JzICk7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbgot
ICAgICAgICAvLyB0aGUgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMKLSAgICAgICAgaW5kZXg6IGZ1
bmN0aW9uKCBlbGVtICkgewotCi0gICAgICAgICAgICAgICAgLy8gTm8gYXJndW1lbnQsIHJldHVy
biBpbmRleCBpbiBwYXJlbnQKLSAgICAgICAgICAgICAgICBpZiAoICFlbGVtICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUg
KSA/IHRoaXMucHJldkFsbCgpLmxlbmd0aCA6IC0xOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIGluZGV4IGluIHNlbGVjdG9yCi0gICAgICAgICAgICAgICAgaWYgKCB0
eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LmluQXJyYXkoIHRoaXNbMF0sIGpRdWVyeSggZWxlbSApICk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUg
ZGVzaXJlZCBlbGVtZW50Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0
LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVt
LmpxdWVyeSA/IGVsZW1bMF0gOiBlbGVtLCB0aGlzICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHNldCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciAmJiBzZWxlY3Rv
ci5ub2RlVHlwZSA/IFsgc2VsZWN0b3IgXSA6IHNlbGVjdG9yICksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBhbGwgPSBqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIHNldCApOwotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBpc0Rpc2Nvbm5lY3RlZCggc2V0WzBdICkg
fHwgaXNEaXNjb25uZWN0ZWQoIGFsbFswXSApID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGFs
bCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkudW5pcXVlKCBhbGwgKSApOwotICAg
ICAgICB9LAotCi0gICAgICAgIGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgPwotICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihz
ZWxlY3RvcikKLSAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci19KTsKLQotalF1ZXJ5LmZu
LmFuZFNlbGYgPSBqUXVlcnkuZm4uYWRkQmFjazsKLQotLy8gQSBwYWluZnVsbHkgc2ltcGxlIGNo
ZWNrIHRvIHNlZSBpZiBhbiBlbGVtZW50IGlzIGRpc2Nvbm5lY3RlZAotLy8gZnJvbSBhIGRvY3Vt
ZW50IChzaG91bGQgYmUgaW1wcm92ZWQsIHdoZXJlIGZlYXNpYmxlKS4KLWZ1bmN0aW9uIGlzRGlz
Y29ubmVjdGVkKCBub2RlICkgewotICAgICAgICByZXR1cm4gIW5vZGUgfHwgIW5vZGUucGFyZW50
Tm9kZSB8fCBub2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IDExOwotfQotCi1mdW5jdGlvbiBz
aWJsaW5nKCBjdXIsIGRpciApIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGN1ciA9
IGN1clsgZGlyIF07Ci0gICAgICAgIH0gd2hpbGUgKCBjdXIgJiYgY3VyLm5vZGVUeXBlICE9PSAx
ICk7Ci0KLSAgICAgICAgcmV0dXJuIGN1cjsKLX0KLQotalF1ZXJ5LmVhY2goewotICAgICAgICBw
YXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBl
bGVtLnBhcmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQu
bm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKLSAgICAgICAgfSwKLSAgICAgICAgcGFy
ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5k
aXIoIGVsZW0sICJwYXJlbnROb2RlIiApOwotICAgICAgICB9LAotICAgICAgICBwYXJlbnRzVW50
aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOwotICAgICAgICB9LAotICAg
ICAgICBuZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2li
bGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOwotICAgICAgICB9LAotICAgICAgICBwcmV2OiBm
dW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZyggZWxlbSwg
InByZXZpb3VzU2libGluZyIgKTsKLSAgICAgICAgfSwKLSAgICAgICAgbmV4dEFsbDogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJu
ZXh0U2libGluZyIgKTsKLSAgICAgICAgfSwKLSAgICAgICAgcHJldkFsbDogZnVuY3Rpb24oIGVs
ZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwcmV2aW91
c1NpYmxpbmciICk7Ci0gICAgICAgIH0sCi0gICAgICAgIG5leHRVbnRpbDogZnVuY3Rpb24oIGVs
ZW0sIGksIHVudGlsICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVt
LCAibmV4dFNpYmxpbmciLCB1bnRpbCApOwotICAgICAgICB9LAotICAgICAgICBwcmV2VW50aWw6
IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIsIHVudGlsICk7Ci0gICAgICAgIH0sCi0g
ICAgICAgIHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LnNpYmxpbmcoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwg
ZWxlbSApOwotICAgICAgICB9LAotICAgICAgICBjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLmZpcnN0Q2hpbGQg
KTsKLSAgICAgICAgfSwKLSAgICAgICAgY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpZnJhbWUiICkgPwot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jb250ZW50RG9jdW1lbnQgfHwgZWxlbS5jb250
ZW50V2luZG93LmRvY3VtZW50IDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJn
ZSggW10sIGVsZW0uY2hpbGROb2RlcyApOwotICAgICAgICB9Ci19LCBmdW5jdGlvbiggbmFtZSwg
Zm4gKSB7Ci0gICAgICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxl
Y3RvciApIHsKLSAgICAgICAgICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhpcywgZm4s
IHVudGlsICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoICFydW50aWwudGVzdCggbmFtZSApICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB1bnRpbDsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3Rv
ciA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnku
ZmlsdGVyKCBzZWxlY3RvciwgcmV0ICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgcmV0ID0gdGhpcy5sZW5ndGggPiAxICYmICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0g
PyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldDsKLQotICAgICAgICAgICAgICAgIGlmICggdGhp
cy5sZW5ndGggPiAxICYmIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSByZXQucmV2ZXJzZSgpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBjb3JlX3Ns
aWNlLmNhbGwoIGFyZ3VtZW50cyApLmpvaW4oIiwiKSApOwotICAgICAgICB9OwotfSk7Ci0KLWpR
dWVyeS5leHRlbmQoewotICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90
ICkgewotICAgICAgICAgICAgICAgIGlmICggbm90ICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwciA9ICI6bm90KCIgKyBleHByICsgIikiOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtcy5sZW5ndGggPT09IDEgPwotICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGVsZW1zWzBdLCBleHByKSA/IFsg
ZWxlbXNbMF0gXSA6IFtdIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kLm1h
dGNoZXMoZXhwciwgZWxlbXMpOwotICAgICAgICB9LAotCi0gICAgICAgIGRpcjogZnVuY3Rpb24o
IGVsZW0sIGRpciwgdW50aWwgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSBbXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGVsZW1bIGRpciBdOwotCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm5vZGVUeXBlICE9PSA5ICYmICh1bnRpbCA9PT0gdW5k
ZWZpbmVkIHx8IGN1ci5ub2RlVHlwZSAhPT0gMSB8fCAhalF1ZXJ5KCBjdXIgKS5pcyggdW50aWwg
KSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBjdXIgKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9
IGN1cltkaXJdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0
Y2hlZDsKLSAgICAgICAgfSwKLQotICAgICAgICBzaWJsaW5nOiBmdW5jdGlvbiggbiwgZWxlbSAp
IHsKLSAgICAgICAgICAgICAgICB2YXIgciA9IFtdOwotCi0gICAgICAgICAgICAgICAgZm9yICgg
OyBuOyBuID0gbi5uZXh0U2libGluZyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
bi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByLnB1c2goIG4gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgfQotfSk7
Ci0KLS8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBh
bmQgbm90Ci1mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIGtlZXAgKSB7Ci0K
LSAgICAgICAgLy8gQ2FuJ3QgcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0byBpbmRleE9mIGluIEZp
cmVmb3ggNAotICAgICAgICAvLyBTZXQgdG8gMCB0byBza2lwIHN0cmluZyBjaGVjawotICAgICAg
ICBxdWFsaWZpZXIgPSBxdWFsaWZpZXIgfHwgMDsKLQotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5Lmdy
ZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHJldFZhbCA9ICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWwgPT09IGtlZXA7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgfSBlbHNlIGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0s
IGkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtID09PSBxdWFsaWZp
ZXIgKSA9PT0ga2VlcDsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICB9IGVsc2UgaWYg
KCB0eXBlb2YgcXVhbGlmaWVyID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICB2YXIg
ZmlsdGVyZWQgPSBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKLSAgICAgICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGlmICggaXNTaW1wbGUudGVzdCggcXVhbGlm
aWVyICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmZpbHRlcihx
dWFsaWZpZXIsIGZpbHRlcmVkLCAha2VlcCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmll
ciwgZmlsdGVyZWQgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiAoIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAw
ICkgPT09IGtlZXA7Ci0gICAgICAgIH0pOwotfQotZnVuY3Rpb24gY3JlYXRlU2FmZUZyYWdtZW50
KCBkb2N1bWVudCApIHsKLSAgICAgICAgdmFyIGxpc3QgPSBub2RlTmFtZXMuc3BsaXQoICJ8IiAp
LAotICAgICAgICBzYWZlRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsK
LQotICAgICAgICBpZiAoIHNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQgKSB7Ci0gICAgICAgICAgICAg
ICAgd2hpbGUgKCBsaXN0Lmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVG
cmFnLmNyZWF0ZUVsZW1lbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qu
cG9wKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBzYWZlRnJhZzsKLX0KLQotdmFyIG5vZGVOYW1lcyA9ICJh
YmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8
ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfCIgKwotICAgICAgICAgICAgICAgICJoZWFkZXJ8aGdy
b3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2
aWRlbyIsCi0gICAgICAgIHJpbmxpbmVqUXVlcnkgPSAvIGpRdWVyeVxkKz0iKD86bnVsbHxcZCsp
Ii9nLAotICAgICAgICBybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCi0gICAgICAgIHJ4aHRt
bFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJh
bSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksCi0gICAgICAgIHJ0YWdOYW1lID0gLzwoW1x3Ol0rKS8s
Ci0gICAgICAgIHJ0Ym9keSA9IC88dGJvZHkvaSwKLSAgICAgICAgcmh0bWwgPSAvPHwmIz9cdys7
LywKLSAgICAgICAgcm5vSW5uZXJodG1sID0gLzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSwKLSAg
ICAgICAgcm5vY2FjaGUgPSAvPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9p
LAotICAgICAgICBybm9zaGltY2FjaGUgPSBuZXcgUmVnRXhwKCI8KD86IiArIG5vZGVOYW1lcyAr
ICIpW1xccy8+XSIsICJpIiksCi0gICAgICAgIHJjaGVja2FibGVUeXBlID0gL14oPzpjaGVja2Jv
eHxyYWRpbykkLywKLSAgICAgICAgLy8gY2hlY2tlZD0iY2hlY2tlZCIgb3IgY2hlY2tlZAotICAg
ICAgICByY2hlY2tlZCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAotICAg
ICAgICByc2NyaXB0VHlwZSA9IC9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksCi0gICAgICAgIHJjbGVh
blNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9PlxzKiQvZywKLSAg
ICAgICAgd3JhcE1hcCA9IHsKLSAgICAgICAgICAgICAgICBvcHRpb246IFsgMSwgIjxzZWxlY3Qg
bXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAotICAgICAgICAgICAgICAgIGxl
Z2VuZDogWyAxLCAiPGZpZWxkc2V0PiIsICI8L2ZpZWxkc2V0PiIgXSwKLSAgICAgICAgICAgICAg
ICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKLSAgICAgICAgICAgICAgICB0
cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiIgXSwKLSAgICAgICAg
ICAgICAgICB0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+IiwgIjwvdHI+PC90Ym9keT48L3Rh
YmxlPiIgXSwKLSAgICAgICAgICAgICAgICBjb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9k
eT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCi0gICAgICAgICAgICAgICAg
YXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAotICAgICAgICAgICAgICAgIF9kZWZhdWx0
OiBbIDAsICIiLCAiIiBdCi0gICAgICAgIH0sCi0gICAgICAgIHNhZmVGcmFnbWVudCA9IGNyZWF0
ZVNhZmVGcmFnbWVudCggZG9jdW1lbnQgKSwKLSAgICAgICAgZnJhZ21lbnREaXYgPSBzYWZlRnJh
Z21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpICk7Ci0KLXdy
YXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjsKLXdyYXBNYXAudGJvZHkgPSB3cmFwTWFw
LnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhl
YWQ7Ci13cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKLQotLy8gSUU2LTggY2FuJ3Qgc2VyaWFsaXpl
IGxpbmssIHNjcmlwdCwgc3R5bGUsIG9yIGFueSBodG1sNSAoTm9TY29wZSkgdGFncywKLS8vIHVu
bGVzcyB3cmFwcGVkIGluIGEgZGl2IHdpdGggbm9uLWJyZWFraW5nIGNoYXJhY3RlcnMgaW4gZnJv
bnQgb2YgaXQuCi1pZiAoICFqUXVlcnkuc3VwcG9ydC5odG1sU2VyaWFsaXplICkgewotICAgICAg
ICB3cmFwTWFwLl9kZWZhdWx0ID0gWyAxLCAiWDxkaXY+IiwgIjwvZGl2PiIgXTsKLX0KLQotalF1
ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgICAgIHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkudGV4dCggdGhpcyApIDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eSgpLmFwcGVuZCggKCB0aGlz
WzBdICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApLmNyZWF0ZVRleHROb2Rl
KCB2YWx1ZSApICk7Ci0gICAgICAgICAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5s
ZW5ndGggKTsKLSAgICAgICAgfSwKLQotICAgICAgICB3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwoIGh0bWwu
Y2FsbCh0aGlzLCBpKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCB0aGlzWzBdICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWzBdLm93
bmVyRG9jdW1lbnQgKS5lcSgwKS5jbG9uZSh0cnVlKTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCB0aGlzWzBdLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWzBdICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAubWFwKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgJiYgZWxl
bS5maXJzdENoaWxkLm5vZGVUeXBlID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFwcGVuZCggdGhpcyApOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
LAotCi0gICAgICAgIHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS53cmFwSW5uZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGVudHMud3JhcEFsbCggaHRtbCApOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFw
cGVuZCggaHRtbCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICB9LAotCi0gICAgICAgIHdyYXA6IGZ1bmN0aW9uKCBodG1sICkgewotICAg
ICAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaXNGdW5jdGlvbiA/IGh0
bWwuY2FsbCh0aGlzLCBpKSA6IGh0bWwgKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
fSwKLQotICAgICAgICB1bndyYXA6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJib2R5IiApICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGls
ZE5vZGVzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSku
ZW5kKCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYXBwZW5kOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09
PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmFwcGVuZENoaWxkKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgcHJlcGVuZDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1l
bnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMu
Zmlyc3RDaGlsZCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICB9LAotCi0gICAgICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0
aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVu
dE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGFyZ3VtZW50
cy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2V0ID0galF1ZXJ5LmNs
ZWFuKCBhcmd1bWVudHMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnB1
c2hTdGFjayggalF1ZXJ5Lm1lcmdlKCBzZXQsIHRoaXMgKSwgImJlZm9yZSIsIHRoaXMuc2VsZWN0
b3IgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYWZ0ZXI6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICggIWlzRGlzY29ubmVjdGVkKCB0aGlzWzBd
ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1
bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2li
bGluZyApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHNldCA9IGpRdWVyeS5jbGVhbiggYXJndW1lbnRzICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tZXJnZSggdGhp
cywgc2V0ICksICJhZnRlciIsIHRoaXMuc2VsZWN0b3IgKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgLy8ga2VlcERhdGEgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5
LS1kbyBub3QgZG9jdW1lbnQKLSAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtl
ZXBEYXRhICkgewotICAgICAgICAgICAgICAgIHZhciBlbGVtLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gdGhpc1tpXSkg
IT0gbnVsbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc2VsZWN0b3Ig
fHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIFsgZWxlbSBdICkubGVuZ3RoICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFrZWVwRGF0YSAmJiBlbGVtLm5vZGVUeXBl
ID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBd
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVs
ZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwotCi0gICAg
ICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50
IG1lbW9yeSBsZWFrcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSAxICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5E
YXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5p
bmcgbm9kZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxk
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKCBl
bGVtLmZpcnN0Q2hpbGQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAg
ICAgICBjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkg
ewotICAgICAgICAgICAgICAgIGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwg
PyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7Ci0gICAgICAgICAgICAgICAgZGVlcERhdGFBbmRFdmVu
dHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRh
QW5kRXZlbnRzOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBk
YXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApOwotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICB9LAotCi0gICAgICAgIGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdIHx8IHt9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbCA9IHRoaXMubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IHZhbHVlID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAiIiAp
IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNl
ZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhcm5v
SW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCBqUXVlcnkuc3VwcG9ydC5odG1sU2VyaWFsaXplIHx8ICFybm9zaGltY2FjaGUudGVzdCgg
dmFsdWUgKSAgKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGpRdWVyeS5z
dXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlIHx8ICFybGVhZGluZ1doaXRlc3BhY2UudGVzdCggdmFs
dWUgKSApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF3cmFwTWFwWyAoIHJ0
YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyIiLCAiIl0gKVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNl
KCByeGh0bWxUYWcsICI8JDE+PC8kMj4iICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFr
cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9
IHRoaXNbaV0gfHwge307Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVs
ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICIqIiApICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVz
ZSB0aGUgZmFsbGJhY2sgbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2goZSkge30KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSApICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVk
IGZyb20gdGhlIERPTSBiZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoaXMgY2FuIGhlbHAgZml4IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxk
IGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBsYWNlV2l0aCggdmFsdWUu
Y2FsbCggdGhpcywgaSwgb2xkICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkoIHZhbHVlICkuZGV0YWNoKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0
ID0gdGhpcy5uZXh0U2libGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBuZXh0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeShuZXh0KS5iZWZvcmUoIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5KHBhcmVudCkuYXBwZW5kKCB2YWx1ZSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPwotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoU3RhY2soIGpRdWVyeShqUXVlcnkuaXNGdW5jdGlv
bih2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpLCAicmVwbGFjZVdpdGgiLCB2YWx1ZSApIDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZGV0YWNo
OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVt
b3ZlKCBzZWxlY3RvciwgdHJ1ZSApOwotICAgICAgICB9LAotCi0gICAgICAgIGRvbU1hbmlwOiBm
dW5jdGlvbiggYXJncywgdGFibGUsIGNhbGxiYWNrICkgewotCi0gICAgICAgICAgICAgICAgLy8g
RmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgICAgICAgICAgICAgIGFyZ3MgPSBbXS5jb25j
YXQuYXBwbHkoIFtdLCBhcmdzICk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cywgZmly
c3QsIGZyYWdtZW50LCBpTm9DbG9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyaXB0cyA9IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHRoaXMu
bGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50
cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0Ci0gICAgICAgICAgICAgICAgaWYgKCAh
alF1ZXJ5LnN1cHBvcnQuY2hlY2tDbG9uZSAmJiBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09ICJz
dHJpbmciICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkodGhpcykuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCB0YWJs
ZSA/IHNlbGYuaHRtbCgpIDogdW5kZWZpbmVkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKCB0aGlzWzBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGpRdWVy
eS5idWlsZEZyYWdtZW50KCBhcmdzLCB0aGlzLCBzY3JpcHRzICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmcmFnbWVudCA9IHJlc3VsdHMuZnJhZ21lbnQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3QgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlID0gdGFibGUgJiYgalF1ZXJ5Lm5vZGVO
YW1lKCBmaXJzdCwgInRyIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0gaW5zdGVhZCBvZiB0
aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25z
ICgjODA3MCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZyYWdtZW50cyBm
cm9tIHRoZSBmcmFnbWVudCBjYWNoZSBtdXN0IGFsd2F5cyBiZSBjbG9uZWQgYW5kIG5ldmVyIHVz
ZWQgaW4gcGxhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGlOb0Ns
b25lID0gcmVzdWx0cy5jYWNoZWFibGUgfHwgbCAtIDE7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlICYmIGpRdWVyeS5u
b2RlTmFtZSggdGhpc1tpXSwgInRhYmxlIiApID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZE9yQXBwZW5kKCB0aGlzW2ldLCAidGJv
ZHkiICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaSA9PT0gaU5vQ2xvbmUgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbG9uZSggZnJhZ21l
bnQsIHRydWUsIHRydWUgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ICMxMTgwOTogQXZvaWQg
bGVha2luZyBtZW1vcnkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3Qg
PSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNjcmlwdHMubGVuZ3RoICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggc2NyaXB0cywg
ZnVuY3Rpb24oIGksIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLnNyYyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmFqYXggKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cmw6IGVsZW0uc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJHRVQiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAi
c2NyaXB0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsOiBmYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGhyb3dzIjogdHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvcigibm8gYWpheCIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggKCBlbGVtLnRl
eHQgfHwgZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVySFRNTCB8fCAiIiApLnJlcGxhY2Uo
IHJjbGVhblNjcmlwdCwgIiIgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZWxlbS5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotfSk7Ci0KLWZ1
bmN0aW9uIGZpbmRPckFwcGVuZCggZWxlbSwgdGFnICkgewotICAgICAgICByZXR1cm4gZWxlbS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIClbMF0gfHwgZWxlbS5hcHBlbmRDaGlsZCggZWxlbS5v
d25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHRhZyApICk7Ci19Ci0KLWZ1bmN0aW9uIGNsb25l
Q29weUV2ZW50KCBzcmMsIGRlc3QgKSB7Ci0KLSAgICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9
PSAxIHx8ICFqUXVlcnkuaGFzRGF0YSggc3JjICkgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHR5cGUsIGksIGwsCi0gICAgICAgICAgICAgICAg
b2xkRGF0YSA9IGpRdWVyeS5fZGF0YSggc3JjICksCi0gICAgICAgICAgICAgICAgY3VyRGF0YSA9
IGpRdWVyeS5fZGF0YSggZGVzdCwgb2xkRGF0YSApLAotICAgICAgICAgICAgICAgIGV2ZW50cyA9
IG9sZERhdGEuZXZlbnRzOwotCi0gICAgICAgIGlmICggZXZlbnRzICkgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBjdXJEYXRhLmhhbmRsZTsKLSAgICAgICAgICAgICAgICBjdXJEYXRhLmV2ZW50
cyA9IHt9OwotCi0gICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIG1ha2UgdGhlIGNsb25lZCBwdWJsaWMgZGF0YSBvYmplY3QgYSBjb3B5IGZyb20gdGhlIG9y
aWdpbmFsCi0gICAgICAgIGlmICggY3VyRGF0YS5kYXRhICkgewotICAgICAgICAgICAgICAgIGN1
ckRhdGEuZGF0YSA9IGpRdWVyeS5leHRlbmQoIHt9LCBjdXJEYXRhLmRhdGEgKTsKLSAgICAgICAg
fQotfQotCi1mdW5jdGlvbiBjbG9uZUZpeEF0dHJpYnV0ZXMoIHNyYywgZGVzdCApIHsKLSAgICAg
ICAgdmFyIG5vZGVOYW1lOwotCi0gICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGRvIGFueXRo
aW5nIGZvciBub24tRWxlbWVudHMKLSAgICAgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkg
ewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNsZWFy
QXR0cmlidXRlcyByZW1vdmVzIHRoZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50LAot
ICAgICAgICAvLyBidXQgYWxzbyByZW1vdmVzIHRoZSBhdHRhY2hFdmVudCBldmVudHMsIHdoaWNo
IHdlICpkbyogd2FudAotICAgICAgICBpZiAoIGRlc3QuY2xlYXJBdHRyaWJ1dGVzICkgewotICAg
ICAgICAgICAgICAgIGRlc3QuY2xlYXJBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBtZXJnZUF0dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1lcmdlcyBiYWNrIG9uIHRo
ZQotICAgICAgICAvLyBvcmlnaW5hbCBhdHRyaWJ1dGVzLCBub3QgdGhlIGV2ZW50cwotICAgICAg
ICBpZiAoIGRlc3QubWVyZ2VBdHRyaWJ1dGVzICkgewotICAgICAgICAgICAgICAgIGRlc3QubWVy
Z2VBdHRyaWJ1dGVzKCBzcmMgKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5vZGVOYW1lID0gZGVz
dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIGlmICggbm9kZU5hbWUgPT09ICJv
YmplY3QiICkgewotICAgICAgICAgICAgICAgIC8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBj
aGlsZHJlbiBvZiBvYmplY3QgZWxlbWVudHMgdXNpbmcgY2xhc3NpZC4KLSAgICAgICAgICAgICAg
ICAvLyBJRTEwIHRocm93cyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciBpZiBwYXJlbnQgaXMg
bnVsbCwgIzEyMTMyLgotICAgICAgICAgICAgICAgIGlmICggZGVzdC5wYXJlbnROb2RlICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5vdXRlckhUTUwgPSBzcmMub3V0ZXJIVE1MOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFRoaXMgcGF0aCBhcHBlYXJz
IHVuYXZvaWRhYmxlIGZvciBJRTkuIFdoZW4gY2xvbmluZyBhbiBvYmplY3QKLSAgICAgICAgICAg
ICAgICAvLyBlbGVtZW50IGluIElFOSwgdGhlIG91dGVySFRNTCBzdHJhdGVneSBhYm92ZSBpcyBu
b3Qgc3VmZmljaWVudC4KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc3JjIGhhcyBpbm5lckhU
TUwgYW5kIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCwKLSAgICAgICAgICAgICAgICAvLyBjb3B5
IHRoZSBzcmMuaW5uZXJIVE1MIGludG8gdGhlIGRlc3QuaW5uZXJIVE1MLiAjMTAzMjQKLSAgICAg
ICAgICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgJiYgKHNyYy5pbm5lckhU
TUwgJiYgIWpRdWVyeS50cmltKGRlc3QuaW5uZXJIVE1MKSkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0LmlubmVySFRNTCA9IHNyYy5pbm5lckhUTUw7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2Fi
bGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7Ci0gICAgICAgICAgICAgICAgLy8gSUU2LTggZmFp
bHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAotICAg
ICAgICAgICAgICAgIC8vIG9yIHJhZGlvIGJ1dHRvbi4gV29yc2UsIElFNi03IGZhaWwgdG8gZ2l2
ZSB0aGUgY2xvbmVkIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAvLyBhIGNoZWNrZWQgYXBwZWFy
YW5jZSBpZiB0aGUgZGVmYXVsdENoZWNrZWQgdmFsdWUgaXNuJ3QgYWxzbyBzZXQKLQotICAgICAg
ICAgICAgICAgIGRlc3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tl
ZDsKLQotICAgICAgICAgICAgICAgIC8vIElFNi03IGdldCBjb25mdXNlZCBhbmQgZW5kIHVwIHNl
dHRpbmcgdGhlIHZhbHVlIG9mIGEgY2xvbmVkCi0gICAgICAgICAgICAgICAgLy8gY2hlY2tib3gv
cmFkaW8gYnV0dG9uIHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICJvbiIKLSAgICAgICAg
ICAgICAgICBpZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3QudmFsdWUgPSBzcmMudmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgIC8vIElFNi04IGZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRo
ZSBkZWZhdWx0IHNlbGVjdGVkCi0gICAgICAgIC8vIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25z
Ci0gICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAib3B0aW9uIiApIHsKLSAgICAgICAg
ICAgICAgICBkZXN0LnNlbGVjdGVkID0gc3JjLmRlZmF1bHRTZWxlY3RlZDsKLQotICAgICAgICAv
LyBJRTYtOCBmYWlscyB0byBzZXQgdGhlIGRlZmF1bHRWYWx1ZSB0byB0aGUgY29ycmVjdCB2YWx1
ZSB3aGVuCi0gICAgICAgIC8vIGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCi0g
ICAgICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiIHx8IG5vZGVOYW1lID09PSAi
dGV4dGFyZWEiICkgewotICAgICAgICAgICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRl
ZmF1bHRWYWx1ZTsKLQotICAgICAgICAvLyBJRSBibGFua3MgY29udGVudHMgd2hlbiBjbG9uaW5n
IHNjcmlwdHMKLSAgICAgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJzY3JpcHQiICYmIGRl
c3QudGV4dCAhPT0gc3JjLnRleHQgKSB7Ci0gICAgICAgICAgICAgICAgZGVzdC50ZXh0ID0gc3Jj
LnRleHQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFdmVudCBkYXRhIGdldHMgcmVmZXJlbmNl
ZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5kbwotICAgICAgICAvLyBnZXRzIGNvcGll
ZCB0b28KLSAgICAgICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7Ci19
Ci0KLWpRdWVyeS5idWlsZEZyYWdtZW50ID0gZnVuY3Rpb24oIGFyZ3MsIGNvbnRleHQsIHNjcmlw
dHMgKSB7Ci0gICAgICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNoZWhpdCwKLSAgICAg
ICAgICAgICAgICBmaXJzdCA9IGFyZ3NbIDAgXTsKLQotICAgICAgICAvLyBTZXQgY29udGV4dCBm
cm9tIHdoYXQgbWF5IGNvbWUgaW4gYXMgdW5kZWZpbmVkIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24g
b3IgYSBub2RlCi0gICAgICAgIC8vIFVwZGF0ZWQgdG8gZml4ICMxMjI2NiB3aGVyZSBhY2Nlc3Np
bmcgY29udGV4dFswXSBjb3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaW4gSUU5LzEwICYKLSAgICAg
ICAgLy8gYWxzbyBkb3VibGVzIGFzIGZpeCBmb3IgIzg5NTAgd2hlcmUgcGxhaW4gb2JqZWN0cyBj
YXVzZWQgY3JlYXRlRG9jdW1lbnRGcmFnbWVudCBleGNlcHRpb24KLSAgICAgICAgY29udGV4dCA9
IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0gICAgICAgIGNvbnRleHQgPSAhY29udGV4dC5ub2RlVHlw
ZSAmJiBjb250ZXh0WzBdIHx8IGNvbnRleHQ7Ci0gICAgICAgIGNvbnRleHQgPSBjb250ZXh0Lm93
bmVyRG9jdW1lbnQgfHwgY29udGV4dDsKLQotICAgICAgICAvLyBPbmx5IGNhY2hlICJzbWFsbCIg
KDEvMiBLQikgSFRNTCBzdHJpbmdzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBk
b2N1bWVudAotICAgICAgICAvLyBDbG9uaW5nIG9wdGlvbnMgbG9zZXMgdGhlIHNlbGVjdGVkIHN0
YXRlLCBzbyBkb24ndCBjYWNoZSB0aGVtCi0gICAgICAgIC8vIElFIDYgZG9lc24ndCBsaWtlIGl0
IHdoZW4geW91IHB1dCA8b2JqZWN0PiBvciA8ZW1iZWQ+IGVsZW1lbnRzIGluIGEgZnJhZ21lbnQK
LSAgICAgICAgLy8gQWxzbywgV2ViS2l0IGRvZXMgbm90IGNsb25lICdjaGVja2VkJyBhdHRyaWJ1
dGVzIG9uIGNsb25lTm9kZSwgc28gZG9uJ3QgY2FjaGUKLSAgICAgICAgLy8gTGFzdGx5LCBJRTYs
Nyw4IHdpbGwgbm90IGNvcnJlY3RseSByZXVzZSBjYWNoZWQgZnJhZ21lbnRzIHRoYXQgd2VyZSBj
cmVhdGVkIGZyb20gdW5rbm93biBlbGVtcyAjMTA1MDEKLSAgICAgICAgaWYgKCBhcmdzLmxlbmd0
aCA9PT0gMSAmJiB0eXBlb2YgZmlyc3QgPT09ICJzdHJpbmciICYmIGZpcnN0Lmxlbmd0aCA8IDUx
MiAmJiBjb250ZXh0ID09PSBkb2N1bWVudCAmJgotICAgICAgICAgICAgICAgIGZpcnN0LmNoYXJB
dCgwKSA9PT0gIjwiICYmICFybm9jYWNoZS50ZXN0KCBmaXJzdCApICYmCi0gICAgICAgICAgICAg
ICAgKGpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGZpcnN0ICkp
ICYmCi0gICAgICAgICAgICAgICAgKGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgIXJub3No
aW1jYWNoZS50ZXN0KCBmaXJzdCApKSApIHsKLQotICAgICAgICAgICAgICAgIC8vIE1hcmsgY2Fj
aGVhYmxlIGFuZCBsb29rIGZvciBhIGhpdAotICAgICAgICAgICAgICAgIGNhY2hlYWJsZSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBqUXVlcnkuZnJhZ21lbnRzWyBmaXJzdCBd
OwotICAgICAgICAgICAgICAgIGNhY2hlaGl0ID0gZnJhZ21lbnQgIT09IHVuZGVmaW5lZDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICggIWZyYWdtZW50ICkgewotICAgICAgICAgICAgICAgIGZy
YWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAgICAgICAg
ICAgalF1ZXJ5LmNsZWFuKCBhcmdzLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApOwotCi0g
ICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjYWNoZSwgYnV0IG9ubHkgc3RvcmUgZmFsc2UK
LSAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhpcyBpcyBhIHNlY29uZCBwYXJzaW5nIG9mIHRo
ZSBzYW1lIGNvbnRlbnQKLSAgICAgICAgICAgICAgICBpZiAoIGNhY2hlYWJsZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5mcmFnbWVudHNbIGZpcnN0IF0gPSBjYWNoZWhpdCAm
JiBmcmFnbWVudDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4geyBmcmFnbWVudDogZnJhZ21lbnQsIGNhY2hlYWJsZTogY2FjaGVhYmxlIH07Ci19OwotCi1q
UXVlcnkuZnJhZ21lbnRzID0ge307Ci0KLWpRdWVyeS5lYWNoKHsKLSAgICAgICAgYXBwZW5kVG86
ICJhcHBlbmQiLAotICAgICAgICBwcmVwZW5kVG86ICJwcmVwZW5kIiwKLSAgICAgICAgaW5zZXJ0
QmVmb3JlOiAiYmVmb3JlIiwKLSAgICAgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCi0gICAgICAg
IHJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIKLX0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCAp
IHsKLSAgICAgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGVsZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBbXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGwgPSBpbnNlcnQubGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gdGhp
cy5sZW5ndGggPT09IDEgJiYgdGhpc1swXS5wYXJlbnROb2RlOwotCi0gICAgICAgICAgICAgICAg
aWYgKCAocGFyZW50ID09IG51bGwgfHwgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMTEg
JiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSAmJiBsID09PSAxICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0WyBvcmlnaW5hbCBdKCB0aGlzWzBdICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtcyA9ICggaSA+IDAgPyB0aGlzLmNsb25lKHRydWUp
IDogdGhpcyApLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnko
IGluc2VydFtpXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KCBlbGVtcyApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2so
IHJldCwgbmFtZSwgaW5zZXJ0LnNlbGVjdG9yICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICB9OwotfSk7Ci0KLWZ1bmN0aW9uIGdldEFsbCggZWxlbSApIHsKLSAgICAgICAgaWYgKCB0eXBl
b2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICIqIiApOwotCi0gICAg
ICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmlu
ZWQiICkgewotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwoICIq
IiApOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtdOwotICAg
ICAgICB9Ci19Ci0KLS8vIFVzZWQgaW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBw
cm9wZXJ0eQotZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7Ci0gICAgICAgIGlm
ICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWxlbS50eXBlICkgKSB7Ci0gICAgICAgICAgICAgICAg
ZWxlbS5kZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKLSAgICAgICAgfQotfQotCi1qUXVl
cnkuZXh0ZW5kKHsKLSAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRz
LCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICB2YXIgc3JjRWxlbWVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmU7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgalF1ZXJ5LmlzWE1MRG9jKGVs
ZW0pIHx8ICFybm9zaGltY2FjaGUudGVzdCggIjwiICsgZWxlbS5ub2RlTmFtZSArICI+IiApICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSAp
OwotCi0gICAgICAgICAgICAgICAgLy8gSUU8PTggZG9lcyBub3QgcHJvcGVybHkgY2xvbmUgZGV0
YWNoZWQsIHVua25vd24gZWxlbWVudCBub2RlcwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudERpdi5pbm5lckhUTUwgPSBlbGVtLm91dGVy
SFRNTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50RGl2LnJlbW92ZUNoaWxkKCBj
bG9uZSA9IGZyYWdtZW50RGl2LmZpcnN0Q2hpbGQgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoICghalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUV2ZW50IHx8ICFqUXVl
cnkuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEpICYmICFq
UXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBj
b3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVzaW5nIGNsb25lTm9kZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxpbmcgZGV0YWNoRXZlbnQgb24gdGhlIGNs
b25lIHdpbGwgYWxzbyByZW1vdmUgdGhlIGV2ZW50cwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZnJvbSB0aGUgb3JpZ2luYWwuIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNl
IHNvbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3ByaWV0YXJ5IG1ldGhvZHMgdG8g
Y2xlYXIgdGhlIGV2ZW50cy4gVGhhbmtzIHRvIE1vb1Rvb2xzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBndXlzIGZvciB0aGlzIGhvdG5lc3MuCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGNsb25lRml4QXR0cmlidXRlcyggZWxlbSwgY2xvbmUgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVXNpbmcgU2l6emxlIGhlcmUgaXMgY3Jhenkgc2xvdywgc28gd2UgdXNlIGdldEVs
ZW1lbnRzQnlUYWdOYW1lIGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VsZW1l
bnRzID0gZ2V0QWxsKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0RWxlbWVu
dHMgPSBnZXRBbGwoIGNsb25lICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlaXJk
IGl0ZXJhdGlvbiBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0aGUgbGVuZ3RoIHByb3BlcnR5Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFyZSBjbG9u
aW5nIHRoZSBib2R5IGFuZCBvbmUgb2YgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBl
bGVtZW50cyBvbiB0aGUgcGFnZSBoYXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCi0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0
aW9uIG5vZGUgaXMgbm90IG51bGw7IEZpeGVzICM5NTg3Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZGVzdEVsZW1lbnRzW2ldICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggc3JjRWxlbWVudHNbaV0sIGRl
c3RFbGVtZW50c1tpXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQotICAg
ICAgICAgICAgICAgIGlmICggZGF0YUFuZEV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZl
bnQoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZGVzdEVsZW1lbnRzID0gbnVs
bDsKLQotICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgY2xvbmVkIHNldAotICAgICAgICAg
ICAgICAgIHJldHVybiBjbG9uZTsKLSAgICAgICAgfSwKLQotICAgICAgICBjbGVhbjogZnVuY3Rp
b24oIGVsZW1zLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApIHsKLSAgICAgICAgICAgICAg
ICB2YXIgaSwgaiwgZWxlbSwgdGFnLCB3cmFwLCBkZXB0aCwgZGl2LCBoYXNCb2R5LCB0Ym9keSwg
bGVuLCBoYW5kbGVTY3JpcHQsIGpzVGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNhZmUg
PSBjb250ZXh0ID09PSBkb2N1bWVudCAmJiBzYWZlRnJhZ21lbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSBbXTsKLQotICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGNvbnRl
eHQgaXMgYSBkb2N1bWVudAotICAgICAgICAgICAgICAgIGlmICggIWNvbnRleHQgfHwgdHlwZW9m
IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9PT0gInVuZGVmaW5lZCIgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gZG9jdW1lbnQ7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgc2FmZSBmcmFn
bWVudCBpZiBjb250ZXh0IHBlcm1pdHMKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgKGVs
ZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCB0eXBlb2YgZWxlbSA9PT0gIm51bWJlciIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0gKz0gIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGh0bWwgc3RyaW5nIGludG8gRE9NIG5vZGVzCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmh0bWwudGVzdCggZWxlbSAp
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjb250
ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RW5zdXJlIGEgc2FmZSBjb250YWluZXIgaW4gd2hpY2ggdG8gcmVuZGVyIHRoZSBodG1sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZSA9IHNhZmUgfHwgY3JlYXRl
U2FmZUZyYWdtZW50KCBjb250ZXh0ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlLmFwcGVuZENoaWxkKCBkaXYgKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeCAiWEhUTUwiLXN0
eWxlIHRhZ3MgaW4gYWxsIGJyb3dzZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbSA9IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvIHRvIGh0bWwgYW5k
IGJhY2ssIHRoZW4gcGVlbCBvZmYgZXh0cmEgd3JhcHBlcnMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIiIs
ICIiXSApWzFdLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB3cmFwWzBdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSB3cmFw
WzFdICsgZWxlbSArIHdyYXBbMl07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBNb3ZlIHRvIHRoZSByaWdodCBkZXB0aAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggZGVwdGgtLSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdiA9IGRpdi5sYXN0Q2hpbGQ7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2luc2VydGVkIDx0Ym9k
eT4gZnJvbSB0YWJsZSBmcmFnbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC50Ym9keSApIHsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nIHdhcyBhIDx0YWJsZT4s
ICptYXkqIGhhdmUgc3B1cmlvdXMgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzQm9keSA9IHJ0Ym9keS50ZXN0KGVsZW0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ym9keSA9
IHRhZyA9PT0gInRhYmxlIiAmJiAhaGFzQm9keSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQgJiYg
ZGl2LmZpcnN0Q2hpbGQuY2hpbGROb2RlcyA6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgd2FzIGEgYmFy
ZSA8dGhlYWQ+IG9yIDx0Zm9vdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIWhh
c0JvZHkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNoaWxkTm9kZXMgOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
W107Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAtLWogKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5v
ZGVOYW1lKCB0Ym9keVsgaiBdLCAidGJvZHkiICkgJiYgIXRib2R5WyBqIF0uY2hpbGROb2Rlcy5s
ZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGJvZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0Ym9k
eVsgaiBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBjb21wbGV0ZWx5IGtpbGxz
IGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIGlubmVySFRNTCBpcyB1c2VkCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1do
aXRlc3BhY2UgJiYgcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIGVsZW0gKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUo
IGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKGVsZW0pWzBd
ICksIGRpdi5maXJzdENoaWxkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSA9
IGRpdi5jaGlsZE5vZGVzOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGFrZSBvdXQgb2YgZnJhZ21lbnQgY29udGFpbmVyICh3ZSBuZWVkIGEgZnJlc2ggZGl2
IGVhY2ggdGltZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZGl2ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXQucHVzaCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0g
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBGaXggIzExMzU2OiBDbGVhciBlbGVtZW50cyBmcm9tIHNhZmVGcmFnbWVu
dAotICAgICAgICAgICAgICAgIGlmICggZGl2ICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbSA9IGRpdiA9IHNhZmUgPSBudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIFJlc2V0IGRlZmF1bHRDaGVja2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVja2Jv
eGVzCi0gICAgICAgICAgICAgICAgLy8gYWJvdXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBp
biBJRSA2LzcgKCM4MDYwKQotICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmFw
cGVuZENoZWNrZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgKGVs
ZW0gPSByZXRbaV0pICE9IG51bGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgZWxl
bS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmdyZXAoIGVsZW0uZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImlucHV0IiksIGZpeERlZmF1bHRDaGVja2VkICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBcHBlbmQgZWxlbWVudHMgdG8gYSBwcm92aWRl
ZCBkb2N1bWVudCBmcmFnbWVudAotICAgICAgICAgICAgICAgIGlmICggZnJhZ21lbnQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIGVhY2ggc2NyaXB0
IGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNjcmlwdCA9IGZ1bmN0aW9u
KCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3
ZSBjb25zaWRlciBpdCBleGVjdXRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWVsZW0udHlwZSB8fCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXRhY2ggdGhlIHNjcmlw
dCBhbmQgc3RvcmUgaXQgaW4gdGhlIHNjcmlwdHMgYXJyYXkgKGlmIHByb3ZpZGVkKSBvciB0aGUg
ZnJhZ21lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1
cm4gdHJ1dGh5IHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIGJlZW4gaGFuZGxlZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHRzID8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHMucHVzaCggZWxl
bS5wYXJlbnROb2RlID8gZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICkgOiBlbGVt
ICkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJh
Z21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaSA9IDA7IChlbGVtID0gcmV0W2ldKSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRvbmUgYWZ0ZXIgaGFu
ZGxpbmcgYW4gZXhlY3V0YWJsZSBzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJzY3JpcHQiICkgJiYgaGFuZGxlU2Ny
aXB0KCBlbGVtICkgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBBcHBlbmQgdG8gZnJhZ21lbnQgYW5kIGhhbmRsZSBlbWJlZGRlZCBzY3JpcHRzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQo
IGVsZW0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5
cGVvZiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZVNjcmlw
dCBhbHRlcnMgdGhlIERPTSwgc28gdXNlIGpRdWVyeS5tZXJnZSB0byBlbnN1cmUgc25hcHNob3Qg
aXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqc1RhZ3MgPSBqUXVlcnkuZ3JlcCggalF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5nZXRFbGVtZW50
c0J5VGFnTmFtZSgic2NyaXB0IikgKSwgaGFuZGxlU2NyaXB0ICk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwbGljZSB0aGUgc2NyaXB0cyBp
bnRvIHJldCBhZnRlciB0aGVpciBmb3JtZXIgYW5jZXN0b3IgYW5kIGFkdmFuY2Ugb3VyIGluZGV4
IGJleW9uZCB0aGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXQuc3BsaWNlLmFwcGx5KCByZXQsIFtpICsgMSwgMF0uY29uY2F0KCBqc1RhZ3MgKSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBq
c1RhZ3MubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgY2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMsIC8qIGludGVy
bmFsICovIGFjY2VwdERhdGEgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRhdGEsIGlkLCBlbGVt
LCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FjaGUgPSBqUXVlcnkuY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGVFeHBhbmRvID0galF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbDsKLQotICAgICAgICAgICAg
ICAgIGZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIGFjY2VwdERhdGEgfHwgalF1ZXJ5LmFjY2VwdERhdGEoIGVs
ZW0gKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGVsZW1bIGlu
dGVybmFsS2V5IF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpZCAm
JiBjYWNoZVsgaWQgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRh
dGEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRh
LmV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGNhY2hlIG9ubHkgaWYgaXQgd2Fz
IG5vdCBhbHJlYWR5IHJlbW92ZWQgYnkgalF1ZXJ5LmV2ZW50LnJlbW92ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FjaGVbIGlkIF0gKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsg
aWQgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgZG9lcyBub3QgYWxsb3cgdXMgdG8gZGVsZXRlIGV4cGFuZG8gcHJvcGVydGllcyBmcm9t
IG5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbm9yIGRvZXMgaXQgaGF2ZSBhIHJlbW92ZUF0dHJpYnV0ZSBmdW5jdGlvbiBvbiBEb2N1bWVu
dCBub2RlczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdlIG11c3QgaGFuZGxlIGFsbCBvZiB0aGVzZSBjYXNlcwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWxldGVFeHBhbmRvICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgZWxlbVsgaW50ZXJuYWxLZXkgXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0ucmVtb3ZlQXR0cmlidXRlKCBpbnRlcm5hbEtleSApOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBpbnRlcm5hbEtleSBd
ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmRlbGV0ZWRJZHMucHVzaCggaWQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLX0pOwotLy8g
TGltaXQgc2NvcGUgcG9sbHV0aW9uIGZyb20gYW55IGRlcHJlY2F0ZWQgQVBJCi0oZnVuY3Rpb24o
KSB7Ci0KLXZhciBtYXRjaGVkLCBicm93c2VyOwotCi0vLyBVc2Ugb2YgalF1ZXJ5LmJyb3dzZXIg
aXMgZnJvd25lZCB1cG9uLgotLy8gTW9yZSBkZXRhaWxzOiBodHRwOi8vYXBpLmpxdWVyeS5jb20v
alF1ZXJ5LmJyb3dzZXIKLS8vIGpRdWVyeS51YU1hdGNoIG1haW50YWluZWQgZm9yIGJhY2stY29t
cGF0Ci1qUXVlcnkudWFNYXRjaCA9IGZ1bmN0aW9uKCB1YSApIHsKLSAgICAgICAgdWEgPSB1YS50
b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgIHZhciBtYXRjaCA9IC8oY2hyb21lKVsgXC9dKFtcdy5d
KykvLmV4ZWMoIHVhICkgfHwKLSAgICAgICAgICAgICAgICAvKHdlYmtpdClbIFwvXShbXHcuXSsp
Ly5leGVjKCB1YSApIHx8Ci0gICAgICAgICAgICAgICAgLyhvcGVyYSkoPzouKnZlcnNpb258KVsg
XC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKLSAgICAgICAgICAgICAgICAvKG1zaWUpIChbXHcu
XSspLy5leGVjKCB1YSApIHx8Ci0gICAgICAgICAgICAgICAgdWEuaW5kZXhPZigiY29tcGF0aWJs
ZSIpIDwgMCAmJiAvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspfCkvLmV4ZWMoIHVhICkgfHwK
LSAgICAgICAgICAgICAgICBbXTsKLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAg
IGJyb3dzZXI6IG1hdGNoWyAxIF0gfHwgIiIsCi0gICAgICAgICAgICAgICAgdmVyc2lvbjogbWF0
Y2hbIDIgXSB8fCAiMCIKLSAgICAgICAgfTsKLX07Ci0KLW1hdGNoZWQgPSBqUXVlcnkudWFNYXRj
aCggbmF2aWdhdG9yLnVzZXJBZ2VudCApOwotYnJvd3NlciA9IHt9OwotCi1pZiAoIG1hdGNoZWQu
YnJvd3NlciApIHsKLSAgICAgICAgYnJvd3NlclsgbWF0Y2hlZC5icm93c2VyIF0gPSB0cnVlOwot
ICAgICAgICBicm93c2VyLnZlcnNpb24gPSBtYXRjaGVkLnZlcnNpb247Ci19Ci0KLS8vIENocm9t
ZSBpcyBXZWJraXQsIGJ1dCBXZWJraXQgaXMgYWxzbyBTYWZhcmkuCi1pZiAoIGJyb3dzZXIuY2hy
b21lICkgewotICAgICAgICBicm93c2VyLndlYmtpdCA9IHRydWU7Ci19IGVsc2UgaWYgKCBicm93
c2VyLndlYmtpdCApIHsKLSAgICAgICAgYnJvd3Nlci5zYWZhcmkgPSB0cnVlOwotfQotCi1qUXVl
cnkuYnJvd3NlciA9IGJyb3dzZXI7Ci0KLWpRdWVyeS5zdWIgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgZnVuY3Rpb24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbmV3IGpRdWVyeVN1Yi5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApOwot
ICAgICAgICB9Ci0gICAgICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIGpRdWVyeVN1YiwgdGhpcyAp
OwotICAgICAgICBqUXVlcnlTdWIuc3VwZXJjbGFzcyA9IHRoaXM7Ci0gICAgICAgIGpRdWVyeVN1
Yi5mbiA9IGpRdWVyeVN1Yi5wcm90b3R5cGUgPSB0aGlzKCk7Ci0gICAgICAgIGpRdWVyeVN1Yi5m
bi5jb25zdHJ1Y3RvciA9IGpRdWVyeVN1YjsKLSAgICAgICAgalF1ZXJ5U3ViLnN1YiA9IHRoaXMu
c3ViOwotICAgICAgICBqUXVlcnlTdWIuZm4uaW5pdCA9IGZ1bmN0aW9uIGluaXQoIHNlbGVjdG9y
LCBjb250ZXh0ICkgewotICAgICAgICAgICAgICAgIGlmICggY29udGV4dCAmJiBjb250ZXh0IGlu
c3RhbmNlb2YgalF1ZXJ5ICYmICEoY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeVN1YikgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0galF1ZXJ5U3ViKCBjb250ZXh0ICk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5mbi5pbml0
LmNhbGwoIHRoaXMsIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5U3ViICk7Ci0gICAgICAg
IH07Ci0gICAgICAgIGpRdWVyeVN1Yi5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeVN1Yi5mbjsK
LSAgICAgICAgdmFyIHJvb3RqUXVlcnlTdWIgPSBqUXVlcnlTdWIoZG9jdW1lbnQpOwotICAgICAg
ICByZXR1cm4galF1ZXJ5U3ViOwotfTsKLQotfSkoKTsKLXZhciBjdXJDU1MsIGlmcmFtZSwgaWZy
YW1lRG9jLAotICAgICAgICByYWxwaGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKLSAgICAgICAgcm9w
YWNpdHkgPSAvb3BhY2l0eT0oW14pXSopLywKLSAgICAgICAgcnBvc2l0aW9uID0gL14odG9wfHJp
Z2h0fGJvdHRvbXxsZWZ0KSQvLAotICAgICAgICAvLyBzd2FwcGFibGUgaWYgZGlzcGxheSBpcyBu
b25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlIGV4Y2VwdCAidGFibGUiLCAidGFibGUtY2VsbCIsIG9y
ICJ0YWJsZS1jYXB0aW9uIgotICAgICAgICAvLyBzZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6
IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKLSAg
ICAgICAgcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLAotICAgICAg
ICBybWFyZ2luID0gL15tYXJnaW4vLAotICAgICAgICBybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCAi
XigiICsgY29yZV9wbnVtICsgIikoLiopJCIsICJpIiApLAotICAgICAgICBybnVtbm9ucHggPSBu
ZXcgUmVnRXhwKCAiXigiICsgY29yZV9wbnVtICsgIikoPyFweClbYS16JV0rJCIsICJpIiApLAot
ICAgICAgICBycmVsTnVtID0gbmV3IFJlZ0V4cCggIl4oWy0rXSk9KCIgKyBjb3JlX3BudW0gKyAi
KSIsICJpIiApLAotICAgICAgICBlbGVtZGlzcGxheSA9IHsgQk9EWTogImJsb2NrIiB9LAotCi0g
ICAgICAgIGNzc1Nob3cgPSB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNpYmlsaXR5OiAiaGlk
ZGVuIiwgZGlzcGxheTogImJsb2NrIiB9LAotICAgICAgICBjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7
Ci0gICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogMCwKLSAgICAgICAgICAgICAgICBmb250
V2VpZ2h0OiA0MDAKLSAgICAgICAgfSwKLQotICAgICAgICBjc3NFeHBhbmQgPSBbICJUb3AiLCAi
UmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiIF0sCi0gICAgICAgIGNzc1ByZWZpeGVzID0gWyAiV2Vi
a2l0IiwgIk8iLCAiTW96IiwgIm1zIiBdLAotCi0gICAgICAgIGV2ZW50c1RvZ2dsZSA9IGpRdWVy
eS5mbi50b2dnbGU7Ci0KLS8vIHJldHVybiBhIGNzcyBwcm9wZXJ0eSBtYXBwZWQgdG8gYSBwb3Rl
bnRpYWxseSB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHkKLWZ1bmN0aW9uIHZlbmRvclByb3BOYW1l
KCBzdHlsZSwgbmFtZSApIHsKLQotICAgICAgICAvLyBzaG9ydGN1dCBmb3IgbmFtZXMgdGhhdCBh
cmUgbm90IHZlbmRvciBwcmVmaXhlZAotICAgICAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVj
ayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzCi0gICAgICAgIHZhciBjYXBOYW1lID0gbmFtZS5j
aGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSksCi0gICAgICAgICAgICAgICAg
b3JpZ05hbWUgPSBuYW1lLAotICAgICAgICAgICAgICAgIGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7
Ci0KLSAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGNzc1By
ZWZpeGVzWyBpIF0gKyBjYXBOYW1lOwotICAgICAgICAgICAgICAgIGlmICggbmFtZSBpbiBzdHls
ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBvcmlnTmFtZTsKLX0KLQotZnVuY3Rp
b24gaXNIaWRkZW4oIGVsZW0sIGVsICkgewotICAgICAgICBlbGVtID0gZWwgfHwgZWxlbTsKLSAg
ICAgICAgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSIgfHwg
IWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7Ci19Ci0KLWZ1bmN0
aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKLSAgICAgICAgdmFyIGVsZW0sIGRpc3Bs
YXksCi0gICAgICAgICAgICAgICAgdmFsdWVzID0gW10sCi0gICAgICAgICAgICAgICAgaW5kZXgg
PSAwLAotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKLQotICAgICAg
ICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgIGVs
ZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKLSAgICAgICAgICAgICAgICBpZiAoICFlbGVtLnN0eWxl
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwg
Im9sZGRpc3BsYXkiICk7Ci0gICAgICAgICAgICAgICAgaWYgKCBzaG93ICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVu
dCB0byBsZWFybiBpZiBpdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgaGlk
ZGVuIGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhdmFsdWVzWyBpbmRleCBdICYmIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9u
ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVy
IHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZvciBzdWNoIGFuIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5z
dHlsZS5kaXNwbGF5ID09PSAiIiAmJiBpc0hpZGRlbiggZWxlbSApICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVsZW0s
ICJvbGRkaXNwbGF5IiwgY3NzX2RlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSAh
PT0gIm5vbmUiICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2Rh
dGEoIGVsZW0sICJvbGRkaXNwbGF5IiwgZGlzcGxheSApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNldCB0aGUg
ZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wCi0gICAgICAg
IC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3cKLSAgICAgICAgZm9yICggaW5kZXggPSAw
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKLSAgICAgICAgICAgICAgICBlbGVtID0gZWxl
bWVudHNbIGluZGV4IF07Ci0gICAgICAgICAgICAgICAgaWYgKCAhZWxlbS5zdHlsZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8
IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUi
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBlbGVtZW50
czsKLX0KLQotalF1ZXJ5LmZuLmV4dGVuZCh7Ci0gICAgICAgIGNzczogZnVuY3Rpb24oIG5hbWUs
IHZhbHVlICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBm
dW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgICAg
ICB9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKLSAgICAgICAgfSwKLSAg
ICAgICAgc2hvdzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3dIaWRl
KCB0aGlzLCB0cnVlICk7Ci0gICAgICAgIH0sCi0gICAgICAgIGhpZGU6IGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgIHJldHVybiBzaG93SGlkZSggdGhpcyApOwotICAgICAgICB9LAotICAg
ICAgICB0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSwgZm4yICkgewotICAgICAgICAgICAgICAgIHZh
ciBib29sID0gdHlwZW9mIHN0YXRlID09PSAiYm9vbGVhbiI7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzdGF0ZSApICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBmbjIg
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudHNUb2dnbGUuYXBwbHko
IHRoaXMsIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGJvb2wgPyBzdGF0ZSA6IGlzSGlkZGVuKCB0aGlzICkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnNob3coKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgg
dGhpcyApLmhpZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfQotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotICAgICAgICAvLyBBZGQg
aW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKLSAgICAg
ICAgLy8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5Ci0g
ICAgICAgIGNzc0hvb2tzOiB7Ci0gICAgICAgICAgICAgICAgb3BhY2l0eTogewotICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1i
ZXIgYmFjayBmcm9tIG9wYWNpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCAib3BhY2l0eSIgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIC8vIEV4Y2x1
ZGUgdGhlIGZvbGxvd2luZyBjc3MgcHJvcGVydGllcyB0byBhZGQgcHgKLSAgICAgICAgY3NzTnVt
YmVyOiB7Ci0gICAgICAgICAgICAgICAgImZpbGxPcGFjaXR5IjogdHJ1ZSwKLSAgICAgICAgICAg
ICAgICAiZm9udFdlaWdodCI6IHRydWUsCi0gICAgICAgICAgICAgICAgImxpbmVIZWlnaHQiOiB0
cnVlLAotICAgICAgICAgICAgICAgICJvcGFjaXR5IjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAi
b3JwaGFucyI6IHRydWUsCi0gICAgICAgICAgICAgICAgIndpZG93cyI6IHRydWUsCi0gICAgICAg
ICAgICAgICAgInpJbmRleCI6IHRydWUsCi0gICAgICAgICAgICAgICAgInpvb20iOiB0cnVlCi0g
ICAgICAgIH0sCi0KLSAgICAgICAgLy8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91
IHdpc2ggdG8gZml4IGJlZm9yZQotICAgICAgICAvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZh
bHVlCi0gICAgICAgIGNzc1Byb3BzOiB7Ci0gICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIGZs
b2F0IGNzcyBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICJmbG9hdCI6IGpRdWVyeS5zdXBwb3J0
LmNzc0Zsb2F0ID8gImNzc0Zsb2F0IiA6ICJzdHlsZUZsb2F0IgotICAgICAgICB9LAotCi0gICAg
ICAgIC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCi0gICAg
ICAgIHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgewotICAgICAg
ICAgICAgICAgIC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlcwot
ICAgICAgICAgICAgICAgIGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVt
Lm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQotICAgICAgICAgICAg
ICAgIHZhciByZXQsIHR5cGUsIGhvb2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ05h
bWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICksCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZSA9IGVsZW0uc3R5bGU7Ci0KLSAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1By
b3BzWyBvcmlnTmFtZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9y
UHJvcE5hbWUoIHN0eWxlLCBvcmlnTmFtZSApICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBnZXRz
IGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgLy8gZm9sbG93
ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgotICAgICAgICAgICAgICAgIGhvb2tzID0galF1
ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwotCi0g
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCi0gICAgICAg
ICAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y29udmVydCByZWxhdGl2ZSBudW1iZXIgc3RyaW5ncyAoKz0gb3IgLT0pIHRvIHJlbGF0aXZlIG51
bWJlcnMuICM3MzQ1Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJp
bmciICYmIChyZXQgPSBycmVsTnVtLmV4ZWMoIHZhbHVlICkpICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9ICggcmV0WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VG
bG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAjOTIzNwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gIm51bWJlciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IE5hTiBhbmQgbnVsbCB2YWx1ZXMg
YXJlbid0IHNldC4gU2VlOiAjNzExNgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSA9PSBudWxsIHx8IHR5cGUgPT09ICJudW1iZXIiICYmIGlzTmFOKCB2YWx1ZSApICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNz
ZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVz
KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAhalF1
ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgKz0gInB4IjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFs
dWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tzKSB8fCAodmFsdWUgPSBo
b29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcmFwcGVkIHRvIHByZXZlbnQgSUUgZnJvbSB0
aHJvd2luZyBlcnJvcnMgd2hlbiAnaW52YWxpZCcgdmFsdWVzIGFyZSBwcm92aWRlZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcgIzU1MDkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gY2F0Y2goZSkge30KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGhv
b2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJl
dCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0
IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3R5bGVbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgbnVtZXJpYywgZXh0cmEgKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHZhbCwgbnVtLCBob29rcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApOwotCi0gICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1l
Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCAo
IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBlbGVtLnN0eWxl
LCBvcmlnTmFtZSApICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBnZXRzIGhvb2sgZm9yIHRoZSBw
cmVmaXhlZCB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJl
Zml4ZWQgdmVyc2lvbgotICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBu
YW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwotCi0gICAgICAgICAgICAgICAg
Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhl
cmUKLSAgICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSAp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYg
YSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0Ci0gICAgICAg
ICAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vY29udmVydCAibm9ybWFsIiB0byBjb21wdXRlZCB2YWx1ZQotICAgICAg
ICAgICAgICAgIGlmICggdmFsID09PSAibm9ybWFsIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5z
Zm9ybSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGNzc05vcm1hbFRyYW5zZm9y
bVsgbmFtZSBdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFJldHVy
biwgY29udmVydGluZyB0byBudW1iZXIgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92
aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWMKLSAgICAgICAgICAgICAgICBpZiAoIG51bWVyaWMg
fHwgZXh0cmEgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9
IHBhcnNlRmxvYXQoIHZhbCApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWVy
aWMgfHwgalF1ZXJ5LmlzTnVtZXJpYyggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKLSAgICAgICAgfSwKLQotICAg
ICAgICAvLyBBIG1ldGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NTIHByb3BlcnRp
ZXMgdG8gZ2V0IGNvcnJlY3QgY2FsY3VsYXRpb25zCi0gICAgICAgIHN3YXA6IGZ1bmN0aW9uKCBl
bGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAgICB2YXIgcmV0LCBuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgb2xkID0ge307Ci0KLSAgICAgICAgICAgICAgICAv
LyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKLSAgICAg
ICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7Ci0K
LSAgICAgICAgICAgICAgICAvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKLSAgICAgICAgICAgICAg
ICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGVt
LnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci19KTsKLQotLy8gTk9URTogVG8gYW55
IGZ1dHVyZSBtYWludGFpbmVyLCB3ZSd2ZSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZQotLy8gYmVj
YXVzZSBqc2RvbSBvbiBub2RlLmpzIHdpbGwgYnJlYWsgd2l0aG91dCBpdC4KLWlmICggd2luZG93
LmdldENvbXB1dGVkU3R5bGUgKSB7Ci0gICAgICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBu
YW1lICkgewotICAgICAgICAgICAgICAgIHZhciByZXQsIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lk
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCA9IHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlKCBlbGVtLCBudWxsICksCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IGVs
ZW0uc3R5bGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAu
Y3NzKCdmaWx0ZXInKSBpbiBJRTksIHNlZSAjMTI1MzcKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFt
ZSBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVy
eS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHRy
aWJ1dGUgdG8gdGhlICJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzIgotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ2hyb21lIDwgMTcgYW5kIFNhZmFyaSA1LjAgdXNlcyAiY29tcHV0ZWQg
dmFsdWUiIGluc3RlYWQgb2YgInVzZWQgdmFsdWUiIGZvciBtYXJnaW4tcmlnaHQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA1LjEuNyAoYXQgbGVhc3QpIHJldHVybnMgcGVyY2Vu
dGFnZSBmb3IgYSBsYXJnZXIgc2V0IG9mIHZhbHVlcywgYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJl
bGlhYmx5IHBpeGVscwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhZ2FpbnN0
IHRoZSBDU1NPTSBkcmFmdCBzcGVjOiBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jcmVz
b2x2ZWQtdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJudW1ub25weC50ZXN0
KCByZXQgKSAmJiBybWFyZ2luLnRlc3QoIG5hbWUgKSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2lkdGggPSBzdHlsZS53aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUu
d2lkdGggPSByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1
dGVkLndpZHRoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLndpZHRo
ID0gd2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm1pbldpZHRo
ID0gbWluV2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm1heFdp
ZHRoID0gbWF4V2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfTsKLX0gZWxzZSBp
ZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7Ci0gICAgICAgIGN1
ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotICAgICAgICAgICAgICAgIHZhciBsZWZ0
LCByc0xlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHls
ZSAmJiBlbGVtLmN1cnJlbnRTdHlsZVsgbmFtZSBdLAotICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGUgPSBlbGVtLnN0eWxlOwotCi0gICAgICAgICAgICAgICAgLy8gQXZvaWQgc2V0dGluZyBy
ZXQgdG8gZW1wdHkgc3RyaW5nIGhlcmUKLSAgICAgICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBk
ZWZhdWx0IHRvIGF1dG8KLSAgICAgICAgICAgICAgICBpZiAoIHJldCA9PSBudWxsICYmIHN0eWxl
ICYmIHN0eWxlWyBuYW1lIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzdHls
ZVsgbmFtZSBdOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEZyb20g
dGhlIGF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMKLSAgICAgICAgICAgICAgICAvLyBodHRw
Oi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAy
MjkxCi0KLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVn
dWxhciBwaXhlbCBudW1iZXIKLSAgICAgICAgICAgICAgICAvLyBidXQgYSBudW1iZXIgdGhhdCBo
YXMgYSB3ZWlyZCBlbmRpbmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKLSAgICAg
ICAgICAgICAgICAvLyBidXQgbm90IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9zZSBh
cmUgcHJvcG9ydGlvbmFsIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCi0gICAgICAgICAg
ICAgICAgLy8gYW5kIHdlIGNhbid0IG1lYXN1cmUgdGhlIHBhcmVudCBpbnN0ZWFkIGJlY2F1c2Ug
aXQgbWlnaHQgdHJpZ2dlciBhICJzdGFja2luZyBkb2xscyIgcHJvYmxlbQotICAgICAgICAgICAg
ICAgIGlmICggcm51bW5vbnB4LnRlc3QoIHJldCApICYmICFycG9zaXRpb24udGVzdCggbmFtZSAp
ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwg
dmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gc3R5bGUubGVmdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJzTGVmdCA9IGVsZW0ucnVudGltZVN0eWxlICYmIGVsZW0ucnVu
dGltZVN0eWxlLmxlZnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dCBpbiB0aGUg
bmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggcnNMZWZ0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gZWxlbS5jdXJyZW50U3R5bGUubGVmdDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBu
YW1lID09PSAiZm9udFNpemUiID8gIjFlbSIgOiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSBzdHlsZS5waXhlbExlZnQgKyAicHgiOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZS5sZWZ0ID0gbGVmdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcnNMZWZ0ICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0
ID0gcnNMZWZ0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09ICIiID8gImF1dG8iIDogcmV0OwotICAg
ICAgICB9OwotfQotCi1mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1
YnRyYWN0ICkgewotICAgICAgICB2YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5leGVjKCB2YWx1ZSAp
OwotICAgICAgICByZXR1cm4gbWF0Y2hlcyA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYXRo
Lm1heCggMCwgbWF0Y2hlc1sgMSBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sg
MiBdIHx8ICJweCIgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTsKLX0KLQotZnVu
Y3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0JvcmRlckJv
eCApIHsKLSAgICAgICAgdmFyIGkgPSBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/ICJib3JkZXIi
IDogImNvbnRlbnQiICkgPwotICAgICAgICAgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0
aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1Z21lbnRhdGlvbgotICAgICAgICAgICAgICAg
IDQgOgotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9u
dGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICBuYW1lID09PSAid2lk
dGgiID8gMSA6IDAsCi0KLSAgICAgICAgICAgICAgICB2YWwgPSAwOwotCi0gICAgICAgIGZvciAo
IDsgaSA8IDQ7IGkgKz0gMiApIHsKLSAgICAgICAgICAgICAgICAvLyBib3RoIGJveCBtb2RlbHMg
ZXhjbHVkZSBtYXJnaW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0Ci0gICAgICAgICAgICAgICAg
aWYgKCBleHRyYSA9PT0gIm1hcmdpbiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3
ZSB1c2UgalF1ZXJ5LmNzcyBpbnN0ZWFkIG9mIGN1ckNTUyBoZXJlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBiZWNhdXNlIG9mIHRoZSByZWxpYWJsZU1hcmdpblJpZ2h0IENTUyBob29rIQot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sIGV4dHJhICsg
Y3NzRXhwYW5kWyBpIF0sIHRydWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBGcm9tIHRoaXMgcG9pbnQgb24gd2UgdXNlIGN1ckNTUyBmb3IgbWF4aW11bSBwZXJm
b3JtYW5jZSAocmVsZXZhbnQgaW4gYW5pbWF0aW9ucykKLSAgICAgICAgICAgICAgICBpZiAoIGlz
Qm9yZGVyQm94ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9yZGVyLWJveCBpbmNs
dWRlcyBwYWRkaW5nLCBzbyByZW1vdmUgaXQgaWYgd2Ugd2FudCBjb250ZW50Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGV4dHJhID09PSAiY29udGVudCIgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRk
aW5nIiArIGNzc0V4cGFuZFsgaSBdICkgKSB8fCAwOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24n
dCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRlcgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBleHRyYSAhPT0gIm1hcmdpbiIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJib3JkZXIiICsgY3Nz
RXhwYW5kWyBpIF0gKyAiV2lkdGgiICkgKSB8fCAwOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBh
dCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBhZGQgcGFkZGluZwotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgInBhZGRp
bmciICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFk
ZCBib3JkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5n
IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQo
IGN1ckNTUyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIgKSApIHx8
IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIHZhbDsKLX0KLQotZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdo
dCggZWxlbSwgbmFtZSwgZXh0cmEgKSB7Ci0KLSAgICAgICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQg
cHJvcGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKLSAg
ICAgICAgdmFyIHZhbCA9IG5hbWUgPT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxl
bS5vZmZzZXRIZWlnaHQsCi0gICAgICAgICAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IHRydWUs
Ci0gICAgICAgICAgICAgICAgaXNCb3JkZXJCb3ggPSBqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmcg
JiYgalF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIgKSA9PT0gImJvcmRlci1ib3giOwotCi0g
ICAgICAgIC8vIHNvbWUgbm9uLWh0bWwgZWxlbWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zm
c2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxsL3VuZGVmaW5lZAotICAgICAgICAvLyBzdmcgLSBo
dHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODUKLSAgICAg
ICAgLy8gTWF0aE1MIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDkxNjY4Ci0gICAgICAgIGlmICggdmFsIDw9IDAgfHwgdmFsID09IG51bGwgKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGNvbXB1dGVkIHRoZW4gdW5jb21wdXRlZCBjc3Mg
aWYgbmVjZXNzYXJ5Ci0gICAgICAgICAgICAgICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lICk7
Ci0gICAgICAgICAgICAgICAgaWYgKCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4g
U3RvcCBoZXJlIGFuZCByZXR1cm4uCi0gICAgICAgICAgICAgICAgaWYgKCBybnVtbm9ucHgudGVz
dCh2YWwpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoZSBjaGVjayBmb3Igc3R5
bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlcwotICAg
ICAgICAgICAgICAgIC8vIGZvciBnZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sg
dG8gdGhlIHJlbGlhYmxlIGVsZW0uc3R5bGUKLSAgICAgICAgICAgICAgICB2YWx1ZUlzQm9yZGVy
Qm94ID0gaXNCb3JkZXJCb3ggJiYgKCBqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSB8
fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApOwotCi0gICAgICAgICAgICAgICAgLy8gTm9y
bWFsaXplICIiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmEKLSAgICAgICAgICAgICAgICB2
YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdXNl
IHRoZSBhY3RpdmUgYm94LXNpemluZyBtb2RlbCB0byBhZGQvc3VidHJhY3QgaXJyZWxldmFudCBz
dHlsZXMKLSAgICAgICAgcmV0dXJuICggdmFsICsKLSAgICAgICAgICAgICAgICBhdWdtZW50V2lk
dGhPckhlaWdodCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgfHwgKCBpc0Jv
cmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICksCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZUlzQm9yZGVyQm94Ci0gICAgICAgICAgICAgICAgKQotICAgICAgICApICsgInB4IjsK
LX0KLQotCi0vLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGRpc3BsYXkgdmFsdWUgb2Yg
YW4gZWxlbWVudAotZnVuY3Rpb24gY3NzX2RlZmF1bHREaXNwbGF5KCBub2RlTmFtZSApIHsKLSAg
ICAgICAgaWYgKCBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSApIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
ZWxlbSA9IGpRdWVyeSggIjwiICsgbm9kZU5hbWUgKyAiPiIgKS5hcHBlbmRUbyggZG9jdW1lbnQu
Ym9keSApLAotICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBlbGVtLmNzcygiZGlzcGxheSIpOwot
ICAgICAgICBlbGVtLnJlbW92ZSgpOwotCi0gICAgICAgIC8vIElmIHRoZSBzaW1wbGUgd2F5IGZh
aWxzLAotICAgICAgICAvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5IGJ5IGF0
dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCi0gICAgICAgIGlmICggZGlzcGxheSA9PT0gIm5v
bmUiIHx8IGRpc3BsYXkgPT09ICIiICkgewotICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYWxy
ZWFkeS1jcmVhdGVkIGlmcmFtZSBpZiBwb3NzaWJsZQotICAgICAgICAgICAgICAgIGlmcmFtZSA9
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoCi0gICAgICAgICAgICAgICAgICAgICAgICBpZnJh
bWUgfHwgalF1ZXJ5LmV4dGVuZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVCb3JkZXI6IDAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQ6IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAg
ICAgICAgICAgKTsKLQotICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNhY2hlYWJsZSBjb3B5
IG9mIHRoZSBpZnJhbWUgZG9jdW1lbnQgb24gZmlyc3QgY2FsbC4KLSAgICAgICAgICAgICAgICAv
LyBJRSBhbmQgT3BlcmEgd2lsbCBhbGxvdyB1cyB0byByZXVzZSB0aGUgaWZyYW1lRG9jIHdpdGhv
dXQgcmUtd3JpdGluZyB0aGUgZmFrZSBIVE1MCi0gICAgICAgICAgICAgICAgLy8gZG9jdW1lbnQg
dG8gaXQ7IFdlYktpdCAmIEZpcmVmb3ggd29uJ3QgYWxsb3cgcmV1c2luZyB0aGUgaWZyYW1lIGRv
Y3VtZW50LgotICAgICAgICAgICAgICAgIGlmICggIWlmcmFtZURvYyB8fCAhaWZyYW1lLmNyZWF0
ZUVsZW1lbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFt
ZS5jb250ZW50V2luZG93IHx8IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZURvYy53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0
bWw+PGJvZHk+Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2MuY2xvc2UoKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbGVtID0gaWZyYW1lRG9jLmJv
ZHkuYXBwZW5kQ2hpbGQoIGlmcmFtZURvYy5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKSApOwotCi0g
ICAgICAgICAgICAgICAgZGlzcGxheSA9IGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICk7Ci0gICAg
ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCggaWZyYW1lICk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKLSAgICAg
ICAgZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gPSBkaXNwbGF5OwotCi0gICAgICAgIHJldHVybiBk
aXNwbGF5OwotfQotCi1qUXVlcnkuZWFjaChbICJoZWlnaHQiLCAid2lkdGgiIF0sIGZ1bmN0aW9u
KCBpLCBuYW1lICkgewotICAgICAgICBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKLSAgICAg
ICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZv
IGlmIHdlIGludmlzaWJseSBzaG93IHRoZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaG93ZXZlciwgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQg
d291bGQgYmVuZWZpdCBmcm9tIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIHJkaXNwbGF5c3dhcC50ZXN0KCBjdXJDU1Mo
IGVsZW0sICJkaXNwbGF5IiApICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBl
eHRyYSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRQb3NpdGl2ZU51bWJl
ciggZWxlbSwgdmFsdWUsIGV4dHJhID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXVnbWVudFdpZHRoT3JIZWlnaHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdXBwb3J0LmJveFNpemlu
ZyAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiApID09PSAiYm9yZGVyLWJveCIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IDAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotfSk7Ci0KLWlmICggIWpRdWVy
eS5zdXBwb3J0Lm9wYWNpdHkgKSB7Ci0gICAgICAgIGpRdWVyeS5jc3NIb29rcy5vcGFjaXR5ID0g
ewotICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSUUgdXNlcyBmaWx0ZXJzIGZvciBvcGFjaXR5Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9wYWNpdHkudGVzdCggKGNvbXB1dGVkICYmIGVs
ZW0uY3VycmVudFN0eWxlID8gZWxlbS5jdXJyZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHlsZS5m
aWx0ZXIpIHx8ICIiICkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIDAuMDEg
KiBwYXJzZUZsb2F0KCBSZWdFeHAuJDEgKSApICsgIiIgOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wdXRlZCA/ICIxIiA6ICIiOwotICAgICAgICAgICAgICAgIH0sCi0KLSAg
ICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBzdHlsZSA9IGVsZW0uc3R5bGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9IGVsZW0uY3VycmVudFN0eWxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUg
KSA/ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIpIiA6ICIiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0
eWxlLmZpbHRlciB8fCBzdHlsZS5maWx0ZXIgfHwgIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElFIGhhcyB0cm91YmxlIHdpdGggb3BhY2l0eSBpZiBpdCBkb2VzIG5vdCBoYXZlIGxh
eW91dAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgaXQgYnkgc2V0dGluZyB0aGUg
em9vbSBsZXZlbAotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuem9vbSA9IDE7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHNldHRpbmcgb3BhY2l0eSB0byAxLCBhbmQgbm8g
b3RoZXIgZmlsdGVycyBleGlzdCAtIGF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBhdHRyaWJ1dGUg
IzY2NTIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPj0gMSAmJiBqUXVlcnku
dHJpbSggZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgIiIgKSApID09PSAiIiAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVs
bCwgIiIgJiAiICIgc3RpbGwgbGVhdmUgImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICJmaWx0ZXI6IiBpcyBwcmVzZW50IGF0IGFs
bCwgY2xlYXJUeXBlIGlzIGRpc2FibGVkLCB3ZSB3YW50IHRvIGF2b2lkIHRoaXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlzIElFIE9u
bHksIGJ1dCBzbyBhcHBhcmVudGx5IGlzIHRoaXMgY29kZSBwYXRoLi4uCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSB0aGVyZSBpcyBubyBm
aWx0ZXIgc3R5bGUgYXBwbGllZCBpbiBhIGNzcyBydWxlLCB3ZSBhcmUgZG9uZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxl
LmZpbHRlciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBzZXQgbmV3
IGZpbHRlciB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmZpbHRlciA9IHJh
bHBoYS50ZXN0KCBmaWx0ZXIgKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bHRlci5yZXBsYWNlKCByYWxwaGEsIG9wYWNpdHkgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbHRlciArICIgIiArIG9wYWNpdHk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICB9OwotfQotCi0vLyBUaGVzZSBob29rcyBjYW5ub3QgYmUgYWRkZWQgdW50aWwgRE9NIHJl
YWR5IGJlY2F1c2UgdGhlIHN1cHBvcnQgdGVzdAotLy8gZm9yIGl0IGlzIG5vdCBydW4gdW50aWwg
YWZ0ZXIgRE9NIHJlYWR5Ci1qUXVlcnkoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICggIWpRdWVy
eS5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5
LmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBm
dW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlYktpdCBCdWcgMTMzNDMgLSBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgd3Jvbmcg
dmFsdWUgZm9yIG1hcmdpbi1yaWdodAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBXb3JrIGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5nIGVsZW1lbnQgZGlzcGxheSB0byBp
bmxpbmUtYmxvY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eS5zd2FwKCBlbGVtLCB7ICJkaXNwbGF5IjogImlubGluZS1ibG9jayIgfSwgZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjdXJDU1MoIGVsZW0sICJtYXJnaW5SaWdodCIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjkwODQKLSAgICAgICAgLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNl
bnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodAotICAgICAgICAvLyBy
YXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVs
ZSwgd2UganVzdCBjaGVjayBmb3IgaXQgaGVyZQotICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9y
dC5waXhlbFBvc2l0aW9uICYmIGpRdWVyeS5mbi5wb3NpdGlvbiApIHsKLSAgICAgICAgICAgICAg
ICBqUXVlcnkuZWFjaCggWyAidG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVk
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0
ZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBm
YWxsYmFjayB0byBvZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBybnVtbm9ucHgudGVzdCggcmV0ICkgPyBqUXVlcnkoIGVsZW0gKS5w
b3NpdGlvbigpWyBwcm9wIF0gKyAicHgiIDogcmV0OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQot
Ci19KTsKLQotaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewotICAg
ICAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiAoIGVsZW0ub2Zmc2V0V2lkdGggPT09IDAgJiYgZWxlbS5vZmZz
ZXRIZWlnaHQgPT09IDAgKSB8fCAoIWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0
cyAmJiAoKGVsZW0uc3R5bGUgJiYgZWxlbS5zdHlsZS5kaXNwbGF5KSB8fCBjdXJDU1MoIGVsZW0s
ICJkaXNwbGF5IiApKSA9PT0gIm5vbmUiKTsKLSAgICAgICAgfTsKLQotICAgICAgICBqUXVlcnku
ZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuKCBlbGVtICk7Ci0gICAgICAgIH07
Ci19Ci0KLS8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3Bl
cnRpZXMKLWpRdWVyeS5lYWNoKHsKLSAgICAgICAgbWFyZ2luOiAiIiwKLSAgICAgICAgcGFkZGlu
ZzogIiIsCi0gICAgICAgIGJvcmRlcjogIldpZHRoIgotfSwgZnVuY3Rpb24oIHByZWZpeCwgc3Vm
Zml4ICkgewotICAgICAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0gewot
ICAgICAgICAgICAgICAgIGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGksCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiA/IHZhbHVl
LnNwbGl0KCIgIikgOiBbIHZhbHVlIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cGFuZGVkID0ge307Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBp
IDwgNDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZFsg
cHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0
c1sgMCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhwYW5kZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7Ci0gICAgICAgICAgICAgICAg
alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJl
cjsKLSAgICAgICAgfQotfSk7Ci12YXIgcjIwID0gLyUyMC9nLAotICAgICAgICByYnJhY2tldCA9
IC9cW1xdJC8sCi0gICAgICAgIHJDUkxGID0gL1xyP1xuL2csCi0gICAgICAgIHJpbnB1dCA9IC9e
KD86Y29sb3J8ZGF0ZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8
bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSwK
LSAgICAgICAgcnNlbGVjdFRleHRhcmVhID0gL14oPzpzZWxlY3R8dGV4dGFyZWEpL2k7Ci0KLWpR
dWVyeS5mbi5leHRlbmQoewotICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOwot
ICAgICAgICB9LAotICAgICAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpcy5lbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIHRoaXMuZWxlbWVu
dHMgKSA6IHRoaXM7Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAuZmlsdGVy
KGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lICYm
ICF0aGlzLmRpc2FibGVkICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggdGhp
cy5jaGVja2VkIHx8IHJzZWxlY3RUZXh0YXJlYS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW5wdXQudGVzdCggdGhpcy50
eXBlICkgKTsKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rp
b24oIGksIGVsZW0gKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBqUXVlcnko
IHRoaXMgKS52YWwoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSBu
dWxsID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbigg
dmFsLCBpICl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJc
clxuIiApIH07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogZWxlbS5uYW1l
LCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OwotICAgICAgICAgICAgICAg
IH0pLmdldCgpOwotICAgICAgICB9Ci19KTsKLQotLy9TZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9y
bSBlbGVtZW50cyBvciBhIHNldCBvZgotLy9rZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcK
LWpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKLSAgICAgICAgdmFy
IHByZWZpeCwKLSAgICAgICAgICAgICAgICBzID0gW10sCi0gICAgICAgICAgICAgICAgYWRkID0g
ZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB2
YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2
YWx1ZSgpIDogKCB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIg
KyBlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAvLyBTZXQgdHJhZGl0aW9uYWwgdG8gdHJ1ZSBmb3IgalF1ZXJ5IDw9IDEuMy4yIGJlaGF2
aW9yLgotICAgICAgICBpZiAoIHRyYWRpdGlvbmFsID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAg
ICAgICAgICAgdHJhZGl0aW9uYWwgPSBqUXVlcnkuYWpheFNldHRpbmdzICYmIGpRdWVyeS5hamF4
U2V0dGluZ3MudHJhZGl0aW9uYWw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBhbiBhcnJh
eSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1l
bnRzLgotICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAh
alF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkgewotICAgICAgICAgICAgICAgIC8vIFNlcmlh
bGl6ZSB0aGUgZm9ybSBlbGVtZW50cwotICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBhLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlz
LnZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3
YXkgMS4zLjIgb3Igb2xkZXIKLSAgICAgICAgICAgICAgICAvLyBkaWQgaXQpLCBvdGhlcndpc2Ug
ZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS4KLSAgICAgICAgICAgICAgICBmb3IgKCBwcmVmaXgg
aW4gYSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFb
IHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvbgotICAg
ICAgICByZXR1cm4gcy5qb2luKCAiJiIgKS5yZXBsYWNlKCByMjAsICIrIiApOwotfTsKLQotZnVu
Y3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgewotICAg
ICAgICB2YXIgbmFtZTsKLQotICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsK
LSAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4KLSAgICAgICAgICAgICAg
ICBqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBh
cyBhIHNjYWxhci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKCBwcmVmaXgs
IHYgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgYXJyYXkgaXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBv
ciBvYmplY3QpLCBlbmNvZGUgaXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vl
cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHJhY2sgKGFz
IG9mIDEuMC4wKSBjYW4ndCBjdXJyZW50bHkgZGVzZXJpYWxpemUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbmVzdGVkIGFycmF5cyBwcm9wZXJseSwgYW5kIGF0dGVtcHRpbmcg
dG8gZG8gc28gbWF5IGNhdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEg
c2VydmVyIGVycm9yLiBQb3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNlcmlhbGl6YXRpb24gYWxnb3JpdGhtIG9y
IHRvIHByb3ZpZGUgYW4gb3B0aW9uIG9yIGZsYWcKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdG8gZm9yY2UgYXJyYXkgc2VyaWFsaXphdGlvbiB0byBiZSBzaGFsbG93LgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsg
KCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWws
IGFkZCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwot
Ci0gICAgICAgIH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiBqUXVlcnkudHlwZSggb2JqICkg
PT09ICJvYmplY3QiICkgewotICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRl
bS4KLSAgICAgICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0iLCBvYmpbIG5h
bWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KLSAgICAg
ICAgICAgICAgICBhZGQoIHByZWZpeCwgb2JqICk7Ci0gICAgICAgIH0KLX0KLXZhcgotICAgICAg
ICAvLyBEb2N1bWVudCBsb2NhdGlvbgotICAgICAgICBhamF4TG9jUGFydHMsCi0gICAgICAgIGFq
YXhMb2NhdGlvbiwKLQotICAgICAgICByaGFzaCA9IC8jLiokLywKLSAgICAgICAgcmhlYWRlcnMg
PSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL21nLCAvLyBJRSBsZWF2ZXMgYW4gXHIgY2hh
cmFjdGVyIGF0IEVPTAotICAgICAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90
b2NvbCBkZXRlY3Rpb24KLSAgICAgICAgcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxh
cHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLAotICAgICAgICBy
bm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKLSAgICAgICAgcnByb3RvY29sID0gL15cL1wv
LywKLSAgICAgICAgcnF1ZXJ5ID0gL1w/LywKLSAgICAgICAgcnNjcmlwdCA9IC88c2NyaXB0XGJb
XjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLAotICAgICAgICBydHMg
PSAvKFs/Jl0pXz1bXiZdKi8sCi0gICAgICAgIHJ1cmwgPSAvXihbXHdcK1wuXC1dKzopKD86XC9c
LyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sCi0KLSAgICAgICAgLy8gS2VlcCBhIGNvcHkgb2Yg
dGhlIG9sZCBsb2FkIG1ldGhvZAotICAgICAgICBfbG9hZCA9IGpRdWVyeS5mbi5sb2FkLAotCi0g
ICAgICAgIC8qIFByZWZpbHRlcnMKLSAgICAgICAgICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGlu
dHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBs
ZSkKLSAgICAgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKLSAgICAgICAgICogICAgLSBCRUZP
UkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydAotICAgICAgICAgKiAgICAtIEFGVEVSIHBhcmFtIHNl
cmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUp
Ci0gICAgICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKLSAgICAgICAgICogNCkgdGhlIGNh
dGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKLSAgICAgICAgICogNSkgZXhlY3V0aW9uIHdp
bGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0
byAiKiIgaWYgbmVlZGVkCi0gICAgICAgICAqLwotICAgICAgICBwcmVmaWx0ZXJzID0ge30sCi0K
LSAgICAgICAgLyogVHJhbnNwb3J0cyBiaW5kaW5ncwotICAgICAgICAgKiAxKSBrZXkgaXMgdGhl
IGRhdGFUeXBlCi0gICAgICAgICAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1
c2VkCi0gICAgICAgICAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRh
dGFUeXBlIGFuZCBUSEVOIGdvIHRvICIqIiBpZiBuZWVkZWQKLSAgICAgICAgICovCi0gICAgICAg
IHRyYW5zcG9ydHMgPSB7fSwKLQotICAgICAgICAvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFy
IHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Np
b24KLSAgICAgICAgYWxsVHlwZXMgPSBbIiovIl0gKyBbIioiXTsKLQotLy8gIzgxMzgsIElFIG1h
eSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKLS8vIGEgZmllbGQgZnJvbSB3aW5k
b3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9tYWluIGhhcyBiZWVuIHNldAotdHJ5IHsKLSAgICAg
ICAgYWpheExvY2F0aW9uID0gbG9jYXRpb24uaHJlZjsKLX0gY2F0Y2goIGUgKSB7Ci0gICAgICAg
IC8vIFVzZSB0aGUgaHJlZiBhdHRyaWJ1dGUgb2YgYW4gQSBlbGVtZW50Ci0gICAgICAgIC8vIHNp
bmNlIElFIHdpbGwgbW9kaWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCi0gICAgICAgIGFq
YXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOwotICAgICAgICBhamF4
TG9jYXRpb24uaHJlZiA9ICIiOwotICAgICAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24u
aHJlZjsKLX0KLQotLy8gU2VnbWVudCBsb2NhdGlvbiBpbnRvIHBhcnRzCi1hamF4TG9jUGFydHMg
PSBydXJsLmV4ZWMoIGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107Ci0KLS8vIEJh
c2UgImNvbnN0cnVjdG9yIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4
VHJhbnNwb3J0Ci1mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVy
ZSApIHsKLQotICAgICAgICAvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRl
ZmF1bHRzIHRvICIqIgotICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lv
biwgZnVuYyApIHsKLQotICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVz
c2lvbiAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jID0gZGF0
YVR5cGVFeHByZXNzaW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVFeHByZXNz
aW9uID0gIioiOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBkYXRh
VHlwZSwgbGlzdCwgcGxhY2VCZWZvcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlw
ZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5zcGxpdCggY29yZV9yc3BhY2Ug
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gZGF0YVR5cGVzLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIGlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZv
ciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSBdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBjb250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBiZWZv
cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW55IGV4aXN0aW5nIGVsZW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VCZWZvcmUgPSAvXlwrLy50
ZXN0KCBkYXRhVHlwZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBs
YWNlQmVmb3JlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFUeXBlID0gZGF0YVR5cGUuc3Vic3RyKCAxICkgfHwgIioiOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBz
dHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2UgYWRkIHRvIHRoZSBzdHJ1Y3R1
cmUgYWNjb3JkaW5nbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFsgcGxh
Y2VCZWZvcmUgPyAidW5zaGlmdCIgOiAicHVzaCIgXSggZnVuYyApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLX0KLQotLy8gQmFzZSBp
bnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzCi1mdW5jdGlv
biBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmln
aW5hbE9wdGlvbnMsIGpxWEhSLAotICAgICAgICAgICAgICAgIGRhdGFUeXBlIC8qIGludGVybmFs
ICovLCBpbnNwZWN0ZWQgLyogaW50ZXJuYWwgKi8gKSB7Ci0KLSAgICAgICAgZGF0YVR5cGUgPSBk
YXRhVHlwZSB8fCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdOwotICAgICAgICBpbnNwZWN0ZWQgPSBp
bnNwZWN0ZWQgfHwge307Ci0KLSAgICAgICAgaW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTsK
LQotICAgICAgICB2YXIgc2VsZWN0aW9uLAotICAgICAgICAgICAgICAgIGxpc3QgPSBzdHJ1Y3R1
cmVbIGRhdGFUeXBlIF0sCi0gICAgICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAg
bGVuZ3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKLSAgICAgICAgICAgICAgICBleGVjdXRl
T25seSA9ICggc3RydWN0dXJlID09PSBwcmVmaWx0ZXJzICk7Ci0KLSAgICAgICAgZm9yICggOyBp
IDwgbGVuZ3RoICYmICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApOyBpKysgKSB7Ci0gICAg
ICAgICAgICAgICAgc2VsZWN0aW9uID0gbGlzdFsgaSBdKCBvcHRpb25zLCBvcmlnaW5hbE9wdGlv
bnMsIGpxWEhSICk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgZ290IHJlZGlyZWN0ZWQgdG8g
YW5vdGhlciBkYXRhVHlwZQotICAgICAgICAgICAgICAgIC8vIHdlIHRyeSB0aGVyZSBpZiBleGVj
dXRpbmcgb25seSBhbmQgbm90IGRvbmUgYWxyZWFkeQotICAgICAgICAgICAgICAgIGlmICggdHlw
ZW9mIHNlbGVjdGlvbiA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFleGVjdXRlT25seSB8fCBpbnNwZWN0ZWRbIHNlbGVjdGlvbiBdICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBzZWxlY3Rpb24gKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsIHNlbGVjdGlvbiwgaW5zcGVjdGVk
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIC8vIElmIHdlJ3JlIG9ubHkgZXhlY3V0aW5nIG9yIG5vdGhpbmcgd2FzIHNl
bGVjdGVkCi0gICAgICAgIC8vIHdlIHRyeSB0aGUgY2F0Y2hhbGwgZGF0YVR5cGUgaWYgbm90IGRv
bmUgYWxyZWFkeQotICAgICAgICBpZiAoICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApICYm
ICFpbnNwZWN0ZWRbICIqIiBdICkgewotICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3Bl
Y3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsICIqIiwgaW5zcGVj
dGVkICk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gdW5uZWNlc3Nhcnkgd2hlbiBvbmx5IGV4ZWN1
dGluZyAocHJlZmlsdGVycykKLSAgICAgICAgLy8gYnV0IGl0J2xsIGJlIGlnbm9yZWQgYnkgdGhl
IGNhbGxlciBpbiB0aGF0IGNhc2UKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjsKLX0KLQotLy8g
QSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCi0vLyB0aGF0IHRha2VzICJmbGF0IiBv
cHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZCkKLS8vIEZpeGVzICM5ODg3Ci1mdW5jdGlv
biBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHsKLSAgICAgICAgdmFyIGtleSwgZGVlcCwKLSAg
ICAgICAgICAgICAgICBmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlv
bnMgfHwge307Ci0gICAgICAgIGZvciAoIGtleSBpbiBzcmMgKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSAp
ICkgKVsga2V5IF0gPSBzcmNbIGtleSBdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoIGRlZXAgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1
ZSwgdGFyZ2V0LCBkZWVwICk7Ci0gICAgICAgIH0KLX0KLQotalF1ZXJ5LmZuLmxvYWQgPSBmdW5j
dGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgewotICAgICAgICBpZiAoIHR5cGVvZiB1cmwg
IT09ICJzdHJpbmciICYmIF9sb2FkICkgewotICAgICAgICAgICAgICAgIHJldHVybiBfbG9hZC5h
cHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEb24ndCBk
byBhIHJlcXVlc3QgaWYgbm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAotICAgICAgICBp
ZiAoICF0aGlzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsCi0gICAgICAgICAg
ICAgICAgc2VsZiA9IHRoaXMsCi0gICAgICAgICAgICAgICAgb2ZmID0gdXJsLmluZGV4T2YoIiAi
KTsKLQotICAgICAgICBpZiAoIG9mZiA+PSAwICkgewotICAgICAgICAgICAgICAgIHNlbGVjdG9y
ID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKLSAgICAgICAgICAgICAgICB1cmwgPSB1
cmwuc2xpY2UoIDAsIG9mZiApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgaXQncyBhIGZ1
bmN0aW9uCi0gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkgewotCi0g
ICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKLSAgICAg
ICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtczsKLSAgICAgICAgICAgICAgICBwYXJhbXMgPSB1
bmRlZmluZWQ7Ci0KLSAgICAgICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZwot
ICAgICAgICB9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gIm9iamVjdCIg
KSB7Ci0gICAgICAgICAgICAgICAgdHlwZSA9ICJQT1NUIjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFJlcXVlc3QgdGhlIHJlbW90ZSBkb2N1bWVudAotICAgICAgICBqUXVlcnkuYWpheCh7Ci0g
ICAgICAgICAgICAgICAgdXJsOiB1cmwsCi0KLSAgICAgICAgICAgICAgICAvLyBpZiAidHlwZSIg
dmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuICJHRVQiIG1ldGhvZCB3aWxsIGJlIHVzZWQKLSAg
ICAgICAgICAgICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAiaHRt
bCIsCi0gICAgICAgICAgICAgICAgZGF0YTogcGFyYW1zLAotICAgICAgICAgICAgICAgIGNvbXBs
ZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggY2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
ZWFjaCggY2FsbGJhY2ssIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMs
IGpxWEhSIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgIH0pLmRvbmUoZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHsKLQotICAgICAgICAg
ICAgICAgIC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFjawotICAg
ICAgICAgICAgICAgIHJlc3BvbnNlID0gYXJndW1lbnRzOwotCi0gICAgICAgICAgICAgICAgLy8g
U2VlIGlmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZAotICAgICAgICAgICAgICAgIHNlbGYuaHRt
bCggc2VsZWN0b3IgPwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBkdW1t
eSBkaXYgdG8gaG9sZCB0aGUgcmVzdWx0cwotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
KCI8ZGl2PiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5qZWN0IHRo
ZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgaW4sIHJlbW92aW5nIHRoZSBzY3JpcHRzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGFueSAnUGVybWlzc2lvbiBE
ZW5pZWQnIGVycm9ycyBpbiBJRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBw
ZW5kKCByZXNwb25zZVRleHQucmVwbGFjZSggcnNjcmlwdCwgIiIgKSApCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoIHNlbGVjdG9yICkgOgotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QsIGp1c3QgaW5qZWN0IHRoZSBmdWxsIHJlc3Vs
dAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0ICk7Ci0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgcmV0dXJuIHRoaXM7Ci19OwotCi0vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5j
dGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cwotalF1ZXJ5LmVhY2goICJhamF4
U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2Vu
ZCIuc3BsaXQoICIgIiApLCBmdW5jdGlvbiggaSwgbyApewotICAgICAgICBqUXVlcnkuZm5bIG8g
XSA9IGZ1bmN0aW9uKCBmICl7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub24oIG8sIGYg
KTsKLSAgICAgICAgfTsKLX0pOwotCi1qUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1
bmN0aW9uKCBpLCBtZXRob2QgKSB7Ci0gICAgICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlv
biggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKLSAgICAgICAgICAgICAgICAvLyBzaGlm
dCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZAotICAgICAgICAgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bGJhY2sgPSBkYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmFqYXgo
ewotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogbWV0aG9kLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdXJsOiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAot
ICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogY2FsbGJhY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhVHlwZTogdHlwZQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9
OwotfSk7Ci0KLWpRdWVyeS5leHRlbmQoewotCi0gICAgICAgIGdldFNjcmlwdDogZnVuY3Rpb24o
IHVybCwgY2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVy
bCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgInNjcmlwdCIgKTsKLSAgICAgICAgfSwKLQotICAgICAg
ICBnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgLy8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBv
YmplY3QgaW50byB0YXJnZXQKLSAgICAgICAgLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQg
c2V0dGluZ3MgZmllbGRzLgotICAgICAgICAvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVz
IGludG8gYWpheFNldHRpbmdzLgotICAgICAgICBhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQs
IHNldHRpbmdzICkgewotICAgICAgICAgICAgICAgIGlmICggc2V0dGluZ3MgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdAotICAgICAgICAg
ICAgICAgICAgICAgICAgYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4
dGVuZGluZyBhamF4U2V0dGluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzID0g
dGFyZ2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0galF1ZXJ5LmFqYXhTZXR0
aW5nczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYWpheEV4dGVuZCggdGFy
Z2V0LCBzZXR0aW5ncyApOwotICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgYWpheFNldHRpbmdzOiB7Ci0gICAgICAgICAgICAgICAgdXJsOiBhamF4
TG9jYXRpb24sCi0gICAgICAgICAgICAgICAgaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCgg
YWpheExvY1BhcnRzWyAxIF0gKSwKLSAgICAgICAgICAgICAgICBnbG9iYWw6IHRydWUsCi0gICAg
ICAgICAgICAgICAgdHlwZTogIkdFVCIsCi0gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICJh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAotICAgICAg
ICAgICAgICAgIHByb2Nlc3NEYXRhOiB0cnVlLAotICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVl
LAotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgdGltZW91dDogMCwKLSAgICAg
ICAgICAgICAgICBkYXRhOiBudWxsLAotICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBudWxsLAot
ICAgICAgICAgICAgICAgIHVzZXJuYW1lOiBudWxsLAotICAgICAgICAgICAgICAgIHBhc3N3b3Jk
OiBudWxsLAotICAgICAgICAgICAgICAgIGNhY2hlOiBudWxsLAotICAgICAgICAgICAgICAgIHRo
cm93czogZmFsc2UsCi0gICAgICAgICAgICAgICAgdHJhZGl0aW9uYWw6IGZhbHNlLAotICAgICAg
ICAgICAgICAgIGhlYWRlcnM6IHt9LAotICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAg
ICAgICBhY2NlcHRzOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4bWw6ICJhcHBsaWNhdGlv
bi94bWwsIHRleHQveG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6ICJ0ZXh0L2h0
bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAotICAgICAg
ICAgICAgICAgICAgICAgICAganNvbjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlw
dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiKiI6IGFsbFR5cGVzCi0gICAgICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB4bWw6IC94bWwvLAotICAgICAgICAgICAgICAgICAgICAgICAgaHRtbDogL2h0bWwvLAot
ICAgICAgICAgICAgICAgICAgICAgICAganNvbjogL2pzb24vCi0gICAgICAgICAgICAgICAgfSwK
LQotICAgICAgICAgICAgICAgIHJlc3BvbnNlRmllbGRzOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB4bWw6ICJyZXNwb25zZVhNTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAi
cmVzcG9uc2VUZXh0IgotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBM
aXN0IG9mIGRhdGEgY29udmVydGVycwotICAgICAgICAgICAgICAgIC8vIDEpIGtleSBmb3JtYXQg
aXMgInNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1iZXR3
ZWVuKQotICAgICAgICAgICAgICAgIC8vIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBi
ZSB1c2VkIGZvciBzb3VyY2VfdHlwZQotICAgICAgICAgICAgICAgIGNvbnZlcnRlcnM6IHsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAiKiB0ZXh0Ijogd2luZG93LlN0cmluZywKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24p
Ci0gICAgICAgICAgICAgICAgICAgICAgICAidGV4dCBodG1sIjogdHJ1ZSwKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgotICAg
ICAgICAgICAgICAgICAgICAgICAgInRleHQganNvbiI6IGpRdWVyeS5wYXJzZUpTT04sCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRleHQgYXMgeG1sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAidGV4dCB4bWwiOiBqUXVlcnkucGFyc2VYTUwKLSAgICAgICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAgICAgLy8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVl
cCBleHRlbmRlZDoKLSAgICAgICAgICAgICAgICAvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0
b20gb3B0aW9ucyBoZXJlIGlmCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdoZW4geW91IGNyZWF0
ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKLSAgICAgICAgICAgICAgICAvLyBkZWVwIGV4dGVuZGVk
IChzZWUgYWpheEV4dGVuZCkKLSAgICAgICAgICAgICAgICBmbGF0T3B0aW9uczogewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVybDogdHJ1ZQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBhamF4
UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKLSAg
ICAgICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3Bv
cnRzICksCi0KLSAgICAgICAgLy8gTWFpbiBtZXRob2QKLSAgICAgICAgYWpheDogZnVuY3Rpb24o
IHVybCwgb3B0aW9ucyApIHsKLQotICAgICAgICAgICAgICAgIC8vIElmIHVybCBpcyBhbiBvYmpl
Y3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlCi0gICAgICAgICAgICAgICAgaWYgKCB0eXBl
b2YgdXJsID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMg
PSB1cmw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1bmRlZmluZWQ7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBv
YmplY3QKLSAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAg
ICAgICAgICAgIHZhciAvLyBpZk1vZGlmaWVkIGtleQotICAgICAgICAgICAgICAgICAgICAgICAg
aWZNb2RpZmllZEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3BvbnNlIGhlYWRl
cnMKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRyYW5zcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdGltZW91dCBoYW5kbGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVvdXRUaW1lciwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyb3NzLWRv
bWFpbiBkZXRlY3Rpb24gdmFycwotICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJl
IGRpc3BhdGNoZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVHbG9iYWxzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTG9vcCB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICAg
ICAgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9u
cyBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBqUXVlcnkuYWpheFNldHVwKCB7
fSwgb3B0aW9ucyApLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJhY2tzIGNvbnRl
eHQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8
fCBzLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50
cwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyB0aGUgY2FsbGJhY2tDb250ZXh0IGlm
IG9uZSB3YXMgcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFuZCBpZiBpdCdzIGEgRE9NIG5vZGUgb3IgYSBqUXVlcnkgY29sbGVjdGlvbgotICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0gY2FsbGJhY2tDb250ZXh0ICE9
PSBzICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggY2FsbGJhY2tDb250ZXh0
Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJh
Y2tDb250ZXh0ICkgOiBqUXVlcnkuZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBE
ZWZlcnJlZHMKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVy
cmVkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5
LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1
c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBI
ZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdEhlYWRlcnMgPSB7fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RI
ZWFkZXJzTmFtZXMgPSB7fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBqcVhIUiBz
dGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWtl
IHhocgotICAgICAgICAgICAgICAgICAgICAgICAganFYSFIgPSB7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZHlTdGF0ZTogMCwKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDYWNoZXMgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG5hbWUgPSBu
YW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RI
ZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmF3
IHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRBbGxSZXNwb25zZUhl
YWRlcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtl
eSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2g7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0g
MiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggIXJlc3BvbnNlSGVhZGVycyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0ge307Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAoIG1h
dGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNwb25zZUhlYWRlcnNbIG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcmVz
cG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2ggPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0ZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMubWlt
ZVR5cGUgPSB0eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDYW5jZWwgdGhlIHJlcXVlc3QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFi
b3J0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHJhbnNw
b3J0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNwb3J0LmFib3J0KCBzdGF0dXNUZXh0ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvbmUoIDAsIHN0YXR1c1RleHQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIENhbGxiYWNr
IGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQotICAgICAgICAgICAgICAgIC8vIEl0IGlzIGRl
ZmluZWQgaGVyZSBiZWNhdXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKLSAg
ICAgICAgICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiAod2hpY2ggd291bGQg
YmUgbW9yZSBsb2dpY2FsIGFuZCByZWFkYWJsZSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbiBk
b25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNw
b25zZSwgbW9kaWZpZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1Rl
eHQgPSBuYXRpdmVTdGF0dXNUZXh0OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxs
ZWQgb25jZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDI7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZv
ciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIChu
byBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSB1bmRlZmluZWQ7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnMKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNldCByZWFkeVN0YXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBq
cVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBHZXQgcmVzcG9uc2UgZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCByZXNwb25zZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
ID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzdWNjZXNz
ZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBz
dGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNCApIHsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNl
IGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0
UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG1vZGlmaWVkICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmll
ZEtleSBdID0gbW9kaWZpZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0g
anFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG1vZGlmaWVkICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSA9
IG1vZGlmaWVkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIG5vdCBtb2RpZmllZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHN0YXR1cyA9PT0gMzA0ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdWNjZXNzID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGRhdGEKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzU3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBpc1N1Y2Nl
c3Muc3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IGlzU3VjY2Vzcy5kYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yID0gaXNTdWNjZXNzLmVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzU3VjY2VzcyA9ICFlcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBub3JtYWxpemUgc3RhdHVz
VGV4dCBhbmQgc3RhdHVzIGZvciBub24tYWJvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yID0gc3RhdHVzVGV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhc3RhdHVzVGV4dCB8fCBzdGF0dXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJlcnJvciI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgPCAwICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGpxWEhSLnN0YXR1cyA9IHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCAp
ICsgIiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3MvRXJyb3IKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggaXNTdWNjZXNzICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1
Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdp
dGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGF0
dXMtZGVwZW5kZW50IGNhbGxiYWNrcwotICAgICAgICAgICAgICAgICAgICAgICAganFYSFIuc3Rh
dHVzQ29kZSggc3RhdHVzQ29kZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29k
ZSA9IHVuZGVmaW5lZDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFs
cyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0
LnRyaWdnZXIoICJhamF4IiArICggaXNTdWNjZXNzID8gIlN1Y2Nlc3MiIDogIkVycm9yIiApLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyBqcVhIUiwg
cywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGxldGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwg
WyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
ZmlyZUdsb2JhbHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEV2
ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwgcyBdICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291
bnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIC0talF1ZXJ5LmFj
dGl2ZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5ldmVudC50cmlnZ2VyKCAiYWpheFN0b3AiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBBdHRhY2ggZGVmZXJyZWRzCi0gICAgICAgICAgICAgICAgZGVm
ZXJyZWQucHJvbWlzZSgganFYSFIgKTsKLSAgICAgICAgICAgICAgICBqcVhIUi5zdWNjZXNzID0g
anFYSFIuZG9uZTsKLSAgICAgICAgICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7Ci0g
ICAgICAgICAgICAgICAganFYSFIuY29tcGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmFkZDsKLQot
ICAgICAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCi0gICAgICAgICAg
ICAgICAganFYSFIuc3RhdHVzQ29kZSA9IGZ1bmN0aW9uKCBtYXAgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG1hcCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHRtcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdG1wIGlu
IG1hcCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXR1c0NvZGVbIHRtcCBdID0gWyBzdGF0dXNDb2RlW3RtcF0sIG1hcFt0bXBdIF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRtcCA9IG1hcFsganFYSFIuc3RhdHVzIF07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAganFYSFIuYWx3YXlzKCB0bXAgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgICAgIC8vIFJlbW92ZSBoYXNoIGNoYXJhY3RlciAoIzc1MzE6IGFuZCBzdHJpbmcgcHJvbW90
aW9uKQotICAgICAgICAgICAgICAgIC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKCM1
ODY2OiBJRTcgaXNzdWUgd2l0aCBwcm90b2NvbC1sZXNzIHVybHMpCi0gICAgICAgICAgICAgICAg
Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCi0gICAgICAgICAg
ICAgICAgcy51cmwgPSAoICggdXJsIHx8IHMudXJsICkgKyAiIiApLnJlcGxhY2UoIHJoYXNoLCAi
IiApLnJlcGxhY2UoIHJwcm90b2NvbCwgYWpheExvY1BhcnRzWyAxIF0gKyAiLy8iICk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0Ci0gICAgICAgICAgICAgICAg
cy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2Fz
ZSgpLnNwbGl0KCBjb3JlX3JzcGFjZSApOwotCi0gICAgICAgICAgICAgICAgLy8gQSBjcm9zcy1k
b21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHdlIGhhdmUgYSBwcm90b2NvbDpob3N0OnBv
cnQgbWlzbWF0Y2gKLSAgICAgICAgICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xv
d2VyQ2FzZSgpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gISEo
IHBhcnRzICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggcGFydHNbIDEgXSAh
PT0gYWpheExvY1BhcnRzWyAxIF0gfHwgcGFydHNbIDIgXSAhPT0gYWpheExvY1BhcnRzWyAyIF0g
fHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAzIF0g
fHwgKCBwYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGFqYXhMb2NQYXJ0c1sgMyBd
IHx8ICggYWpheExvY1BhcnRzWyAxIF0gPT09ICJodHRwOiIgPyA4MCA6IDQ0MyApICkgKQotICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcKLSAgICAgICAgICAg
ICAgICBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJz
dHJpbmciICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFt
KCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBBcHBseSBwcmVmaWx0ZXJzCi0gICAgICAgICAgICAgICAgaW5zcGVjdFByZWZp
bHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRl
ciwgc3RvcCB0aGVyZQotICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYg
YXNrZWQgdG8KLSAgICAgICAgICAgICAgICBmaXJlR2xvYmFscyA9IHMuZ2xvYmFsOwotCi0gICAg
ICAgICAgICAgICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCi0gICAgICAgICAgICAgICAgcy50eXBl
ID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUg
aWYgcmVxdWVzdCBoYXMgY29udGVudAotICAgICAgICAgICAgICAgIHMuaGFzQ29udGVudCA9ICFy
bm9Db250ZW50LnRlc3QoIHMudHlwZSApOwotCi0gICAgICAgICAgICAgICAgLy8gV2F0Y2ggZm9y
IGEgbmV3IHNldCBvZiByZXF1ZXN0cwotICAgICAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMg
JiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRo
IG5vIGNvbnRlbnQKLSAgICAgICAgICAgICAgICBpZiAoICFzLmhhc0NvbnRlbnQgKSB7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0
YSB0byB1cmwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy5kYXRhICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCAp
ID8gIiYiIDogIj8iICkgKyBzLmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1
YWwgcmV0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMuZGF0YTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
R2V0IGlmTW9kaWZpZWRLZXkgYmVmb3JlIGFkZGluZyB0aGUgYW50aS1jYWNoZSBwYXJhbWV0ZXIK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmTW9kaWZpZWRLZXkgPSBzLnVybDsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHMgPSBqUXVlcnkubm93KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHJlcGxhY2luZyBfPSBpZiBp
dCBpcyB0aGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9
IHMudXJsLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsgdHMgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiBub3RoaW5nIHdhcyByZXBsYWNlZCwgYWRkIHRpbWVzdGFtcCB0
byB0aGUgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMudXJsID0gcmV0ICsg
KCAoIHJldCA9PT0gcy51cmwgKSA/ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIg
KSArICJfPSIgKyB0cyA6ICIiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwg
aWYgZGF0YSBpcyBiZWluZyBzZW50Ci0gICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5o
YXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5
cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAi
Q29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUt
TWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCi0gICAgICAgICAgICAgICAgaWYg
KCBzLmlmTW9kaWZpZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZk1vZGlmaWVkS2V5
ID0gaWZNb2RpZmllZEtleSB8fCBzLnVybDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2lu
Y2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmV0YWdb
IGlmTW9kaWZpZWRLZXkgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganFY
SFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sgaWZNb2Rp
ZmllZEtleSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNl
cnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQotICAgICAgICAgICAgICAgIGpxWEhSLnNl
dFJlcXVlc3RIZWFkZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXB0IiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFU
eXBlc1swXSBdID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hY2NlcHRzWyBz
LmRhdGFUeXBlc1swXSBdICsgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSAiKiIgPyAiLCAiICsgYWxs
VHlwZXMgKyAiOyBxPTAuMDEiIDogIiIgKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHMuYWNjZXB0c1sgIioiIF0KLSAgICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uCi0gICAgICAgICAgICAgICAgZm9yICggaSBp
biBzLmhlYWRlcnMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0
SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJv
cnQKLSAgICAgICAgICAgICAgICBpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5j
YWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAy
ICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIG5vdCBk
b25lIGFscmVhZHkgYW5kIHJldHVybgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4ganFYSFIuYWJvcnQoKTsKLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vIGFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvbgotICAgICAgICAgICAg
ICAgIHN0ckFib3J0ID0gImFib3J0IjsKLQotICAgICAgICAgICAgICAgIC8vIEluc3RhbGwgY2Fs
bGJhY2tzIG9uIGRlZmVycmVkcwotICAgICAgICAgICAgICAgIGZvciAoIGkgaW4geyBzdWNjZXNz
OiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGpxWEhSWyBpIF0oIHNbIGkgXSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vIEdldCB0cmFuc3BvcnQKLSAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBpbnNwZWN0
UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsK
LQotICAgICAgICAgICAgICAgIC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAotICAg
ICAgICAgICAgICAgIGlmICggIXRyYW5zcG9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0IiApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNlbmQgZ2xvYmFsIGV2ZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGZpcmVHbG9iYWxzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaW1l
b3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4g
MCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyID0gc2V0
VGltZW91dCggZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqcVhIUi5hYm9ydCggInRpbWVvdXQiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sIHMudGltZW91dCApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5z
ZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBj
YXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUg
ZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggc3RhdGUgPCAyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbmUoIC0xLCBlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNpbXBseSByZXRocm93IG90aGVyd2lzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93IGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
anFYSFI7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUg
bnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCi0gICAgICAgIGFjdGl2ZTogMCwKLQotICAgICAgICAv
LyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0Ci0gICAgICAgIGxh
c3RNb2RpZmllZDoge30sCi0gICAgICAgIGV0YWc6IHt9Ci0KLX0pOwotCi0vKiBIYW5kbGVzIHJl
c3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6Ci0gKiAtIHNldHMgYWxsIHJlc3BvbnNlWFhYIGZp
ZWxkcyBhY2NvcmRpbmdseQotICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVz
IGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSkKLSAqIC0gcmV0dXJu
cyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQotICovCi1mdW5jdGlvbiBhamF4SGFuZGxlUmVz
cG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgewotCi0gICAgICAgIHZhciBjdCwgdHlwZSwg
ZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKLSAgICAgICAgICAgICAgICBjb250ZW50cyA9
IHMuY29udGVudHMsCi0gICAgICAgICAgICAgICAgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMsCi0g
ICAgICAgICAgICAgICAgcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzOwotCi0gICAg
ICAgIC8vIEZpbGwgcmVzcG9uc2VYWFggZmllbGRzCi0gICAgICAgIGZvciAoIHR5cGUgaW4gcmVz
cG9uc2VGaWVsZHMgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB0eXBlIGluIHJlc3BvbnNlcyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSWyByZXNwb25zZUZpZWxkc1t0eXBlXSBd
ID0gcmVzcG9uc2VzWyB0eXBlIF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhl
IHByb2Nlc3MKLSAgICAgICAgd2hpbGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7Ci0gICAg
ICAgICAgICAgICAgZGF0YVR5cGVzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCBjdCA9
PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3QgPSBzLm1pbWVUeXBl
IHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiY29udGVudC10eXBlIiApOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcg
d2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZQotICAgICAgICBpZiAoIGN0ICkgewotICAgICAgICAg
ICAgICAgIGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggdHlw
ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0
YVR5cGUKLSAgICAgICAgaWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7Ci0gICAg
ICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKLSAgICAg
ICAgICAgICAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArICIgIiAr
IGRhdGFUeXBlc1swXSBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5h
bERhdGFUeXBlID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ICFmaXJzdERhdGFUeXBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dERhdGFUeXBlID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCi0gICAgICAg
ICAgICAgICAgZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKLSAgICAgICAg
Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWQKLSAgICAgICAgLy8g
YW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQotICAgICAgICBpZiAoIGZpbmFs
RGF0YVR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRh
VHlwZXNbIDAgXSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51bnNoaWZ0
KCBmaW5hbERhdGFUeXBlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKLSAgICAgICAgfQotfQotCi0vLyBDaGFp
biBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNl
Ci1mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UgKSB7Ci0KLSAgICAgICAgdmFyIGNv
bnYsIGNvbnYyLCBjdXJyZW50LCB0bXAsCi0gICAgICAgICAgICAgICAgLy8gV29yayB3aXRoIGEg
Y29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVy
c2lvbgotICAgICAgICAgICAgICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCksCi0g
ICAgICAgICAgICAgICAgcHJldiA9IGRhdGFUeXBlc1sgMCBdLAotICAgICAgICAgICAgICAgIGNv
bnZlcnRlcnMgPSB7fSwKLSAgICAgICAgICAgICAgICBpID0gMDsKLQotICAgICAgICAvLyBBcHBs
eSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAotICAgICAgICBpZiAoIHMuZGF0YUZpbHRlciAp
IHsKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMu
ZGF0YVR5cGUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1h
cCB3aXRoIGxvd2VyY2FzZWQga2V5cwotICAgICAgICBpZiAoIGRhdGFUeXBlc1sgMSBdICkgewot
ICAgICAgICAgICAgICAgIGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZl
cnRlcnNbIGNvbnYgXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZSwgdG9sZXJhdGluZyBsaXN0IG1v
ZGlmaWNhdGlvbgotICAgICAgICBmb3IgKCA7IChjdXJyZW50ID0gZGF0YVR5cGVzWysraV0pOyAp
IHsKLQotICAgICAgICAgICAgICAgIC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJl
bnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KLSAgICAgICAgICAgICAgICBpZiAoIGN1cnJlbnQgIT09
ICIqIiApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCByZXNwb25zZSBp
ZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBwcmV2ICE9PSAiKiIgJiYgcHJldiAhPT0gY3VycmVu
dCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWVrIGEgZGlyZWN0
IGNvbnZlcnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udmVy
dGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVu
dCBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgZm91bmQs
IHNlZWsgYSBwYWlyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNvbnYg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggY29udjIg
aW4gY29udmVydGVycyApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb252Mi5zcGxpdCgiICIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBb
IDEgXSA9PT0gY3VycmVudCApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNj
ZXB0ZWQgaW5wdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyAiICIgKyB0bXBbIDAgXSBdIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udmVydGVyc1sgIiogIiArIHRtcFsgMCBdIF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udiApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252
ID09PSB0cnVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnQgPSB0bXBbIDAgXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBl
cy5zcGxpY2UoIGktLSwgMCwgY3VycmVudCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBw
bHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnVi
YmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGNvbnYgJiYgc1sidGhyb3dzIl0gKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNl
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlID0gY29udiggcmVzcG9uc2UgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0ZTogInBhcnNlcmVy
cm9yIiwgZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIg
dG8gIiArIGN1cnJlbnQgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHByZXYgZm9yIG5leHQgaXRl
cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gY3VycmVudDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3Mi
LCBkYXRhOiByZXNwb25zZSB9OwotfQotdmFyIG9sZENhbGxiYWNrcyA9IFtdLAotICAgICAgICBy
cXVlc3Rpb24gPSAvXD8vLAotICAgICAgICByanNvbnAgPSAvKD0pXD8oPz0mfCQpfFw/XD8vLAot
ICAgICAgICBub25jZSA9IGpRdWVyeS5ub3coKTsKLQotLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5n
cwotalF1ZXJ5LmFqYXhTZXR1cCh7Ci0gICAgICAgIGpzb25wOiAiY2FsbGJhY2siLAotICAgICAg
ICBqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgY2FsbGJh
Y2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArICJfIiArICggbm9u
Y2UrKyApICk7Ci0gICAgICAgICAgICAgICAgdGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrOwotICAgICAgICB9Ci19KTsKLQotLy8gRGV0ZWN0
LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVl
c3RzCi1qUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3Jp
Z2luYWxTZXR0aW5ncywganFYSFIgKSB7Ci0KLSAgICAgICAgdmFyIGNhbGxiYWNrTmFtZSwgb3Zl
cndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAotICAgICAgICAgICAgICAgIGRhdGEgPSBzLmRh
dGEsCi0gICAgICAgICAgICAgICAgdXJsID0gcy51cmwsCi0gICAgICAgICAgICAgICAgaGFzQ2Fs
bGJhY2sgPSBzLmpzb25wICE9PSBmYWxzZSwKLSAgICAgICAgICAgICAgICByZXBsYWNlSW5Vcmwg
PSBoYXNDYWxsYmFjayAmJiByanNvbnAudGVzdCggdXJsICksCi0gICAgICAgICAgICAgICAgcmVw
bGFjZUluRGF0YSA9IGhhc0NhbGxiYWNrICYmICFyZXBsYWNlSW5VcmwgJiYgdHlwZW9mIGRhdGEg
PT09ICJzdHJpbmciICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAhKCBzLmNvbnRlbnRUeXBl
IHx8ICIiICkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikgJiYK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJqc29ucC50ZXN0KCBkYXRhICk7Ci0KLSAgICAgICAg
Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2
ZSBhIHBhcmFtZXRlciB0byBzZXQKLSAgICAgICAgaWYgKCBzLmRhdGFUeXBlc1sgMCBdID09PSAi
anNvbnAiIHx8IHJlcGxhY2VJblVybCB8fCByZXBsYWNlSW5EYXRhICkgewotCi0gICAgICAgICAg
ICAgICAgLy8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVl
IGFzc29jaWF0ZWQgd2l0aCBpdAotICAgICAgICAgICAgICAgIGNhbGxiYWNrTmFtZSA9IHMuanNv
bnBDYWxsYmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzLmpzb25wQ2FsbGJhY2soKSA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzLmpzb25wQ2FsbGJhY2s7Ci0gICAgICAgICAgICAgICAgb3ZlcndyaXR0ZW4gPSB3
aW5kb3dbIGNhbGxiYWNrTmFtZSBdOwotCi0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGNhbGxi
YWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YQotICAgICAgICAgICAgICAgIGlmICggcmVwbGFjZUlu
VXJsICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcy51cmwgPSB1cmwucmVwbGFjZSggcmpz
b25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg
cmVwbGFjZUluRGF0YSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YSA9IGRhdGEu
cmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggaGFzQ2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzLnVy
bCArPSAoIHJxdWVzdGlvbi50ZXN0KCB1cmwgKSA/ICImIiA6ICI/IiApICsgcy5qc29ucCArICI9
IiArIGNhbGxiYWNrTmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0
aW9uCi0gICAgICAgICAgICAgICAgcy5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5lciAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBjYWxsYmFj
a05hbWUgKyAiIHdhcyBub3QgY2FsbGVkIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07Ci0g
ICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIC8vIGZvcmNlIGpzb24gZGF0YVR5
cGUKLSAgICAgICAgICAgICAgICBzLmRhdGFUeXBlc1sgMCBdID0gImpzb24iOwotCi0gICAgICAg
ICAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFjawotICAgICAgICAgICAgICAgIHdpbmRvd1sgY2Fs
bGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlQ29udGFpbmVyID0gYXJndW1lbnRzOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgICAgICAvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycykKLSAg
ICAgICAgICAgICAgICBqcVhIUi5hbHdheXMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBSZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNhdmUgYmFjayBhcyBmcmVlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBtYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3
IHRoaW5ncyBhcm91bmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5qc29ucENh
bGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2FsbGJhY2tzLnB1c2goIGNh
bGxiYWNrTmFtZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVz
cG9uc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VDb250YWluZXIgJiYg
alF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNl
Q29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKLSAgICAgICAgICAgICAg
ICByZXR1cm4gInNjcmlwdCI7Ci0gICAgICAgIH0KLX0pOwotLy8gSW5zdGFsbCBzY3JpcHQgZGF0
YVR5cGUKLWpRdWVyeS5hamF4U2V0dXAoewotICAgICAgICBhY2NlcHRzOiB7Ci0gICAgICAgICAg
ICAgICAgc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBh
cHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQiCi0gICAgICAg
IH0sCi0gICAgICAgIGNvbnRlbnRzOiB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0OiAvamF2YXNj
cmlwdHxlY21hc2NyaXB0LwotICAgICAgICB9LAotICAgICAgICBjb252ZXJ0ZXJzOiB7Ci0gICAg
ICAgICAgICAgICAgInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRleHQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci19KTsK
LQotLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKLWpRdWVyeS5hamF4
UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7Ci0gICAgICAgIGlmICggcy5jYWNo
ZSA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgIHMuY2FjaGUgPSBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0gICAgICAgICAgICAgICAg
cy50eXBlID0gIkdFVCI7Ci0gICAgICAgICAgICAgICAgcy5nbG9iYWwgPSBmYWxzZTsKLSAgICAg
ICAgfQotfSk7Ci0KLS8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydAotalF1ZXJ5LmFq
YXhUcmFuc3BvcnQoICJzY3JpcHQiLCBmdW5jdGlvbihzKSB7Ci0KLSAgICAgICAgLy8gVGhpcyB0
cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0cwotICAgICAgICBp
ZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0KLSAgICAgICAgICAgICAgICB2YXIgc2NyaXB0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoICJoZWFkIiApWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dDsKLQotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHNlbmQ6IGZ1bmN0aW9uKCBfLCBjYWxsYmFjayApIHsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9ICJhc3luYyI7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzLnNjcmlwdENoYXJzZXQg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmNoYXJz
ZXQgPSBzLnNjcmlwdENoYXJzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuc3JjID0gcy51cmw7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXR0YWNoIGhhbmRsZXJzIGZvciBh
bGwgYnJvd3NlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9h
ZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCB8
fCAhc2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJl
YWR5U3RhdGUgKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVh
ZHlzdGF0ZWNoYW5nZSA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2NyaXB0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVudE5v
ZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlYWQucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXJlZmVyZW5jZSB0aGUgc2NyaXB0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB1bmRlZmlu
ZWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENhbGxiYWNrIGlmIG5vdCBhYm9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhaXNBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soIDIwMCwgInN1Y2Nlc3Mi
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBV
c2UgaW5zZXJ0QmVmb3JlIGluc3RlYWQgb2YgYXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4g
SUU2IGJ1Zy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhcmlzZXMg
d2hlbiBhIGJhc2Ugbm9kZSBpcyB1c2VkICgjMjcwOSBhbmQgIzQzNzgpLgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZSggc2NyaXB0LCBoZWFkLmZpcnN0
Q2hpbGQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBzY3JpcHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyaXB0Lm9ubG9hZCggMCwgMSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgfQotfSk7Ci12YXIgeGhyQ2FsbGJhY2tzLAotICAgICAgICAvLyAjNTI4MDogSW50ZXJuZXQg
RXhwbG9yZXIgd2lsbCBrZWVwIGNvbm5lY3Rpb25zIGFsaXZlIGlmIHdlIGRvbid0IGFib3J0IG9u
IHVubG9hZAotICAgICAgICB4aHJPblVubG9hZEFib3J0ID0gd2luZG93LkFjdGl2ZVhPYmplY3Qg
PyBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyBBYm9ydCBhbGwgcGVuZGluZyByZXF1
ZXN0cwotICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgeGhyQ2FsbGJhY2tzWyBrZXkgXSggMCwgMSApOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSA6IGZhbHNlLAotICAgICAgICB4aHJJZCA9IDA7Ci0K
LS8vIEZ1bmN0aW9ucyB0byBjcmVhdGUgeGhycwotZnVuY3Rpb24gY3JlYXRlU3RhbmRhcmRYSFIo
KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1M
SHR0cFJlcXVlc3QoKTsKLSAgICAgICAgfSBjYXRjaCggZSApIHt9Ci19Ci0KLWZ1bmN0aW9uIGNy
ZWF0ZUFjdGl2ZVhIUigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCAiTWljcm9zb2Z0LlhNTEhUVFAiICk7Ci0gICAgICAg
IH0gY2F0Y2goIGUgKSB7fQotfQotCi0vLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0Ci0vLyAo
VGhpcyBpcyBzdGlsbCBhdHRhY2hlZCB0byBhamF4U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBh
dGliaWxpdHkpCi1qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0
ID8KLSAgICAgICAgLyogTWljcm9zb2Z0IGZhaWxlZCB0byBwcm9wZXJseQotICAgICAgICAgKiBp
bXBsZW1lbnQgdGhlIFhNTEh0dHBSZXF1ZXN0IGluIElFNyAoY2FuJ3QgcmVxdWVzdCBsb2NhbCBm
aWxlcyksCi0gICAgICAgICAqIHNvIHdlIHVzZSB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlz
IGF2YWlsYWJsZQotICAgICAgICAgKiBBZGRpdGlvbmFsbHkgWE1MSHR0cFJlcXVlc3QgY2FuIGJl
IGRpc2FibGVkIGluIElFNy9JRTggc28KLSAgICAgICAgICogd2UgbmVlZCBhIGZhbGxiYWNrLgot
ICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICF0aGlzLmlzTG9jYWwgJiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVhdGVBY3RpdmVYSFIo
KTsKLSAgICAgICAgfSA6Ci0gICAgICAgIC8vIEZvciBhbGwgb3RoZXIgYnJvd3NlcnMsIHVzZSB0
aGUgc3RhbmRhcmQgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0Ci0gICAgICAgIGNyZWF0ZVN0YW5kYXJk
WEhSOwotCi0vLyBEZXRlcm1pbmUgc3VwcG9ydCBwcm9wZXJ0aWVzCi0oZnVuY3Rpb24oIHhociAp
IHsKLSAgICAgICAgalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnN1cHBvcnQsIHsKLSAgICAgICAgICAg
ICAgICBhamF4OiAhIXhociwKLSAgICAgICAgICAgICAgICBjb3JzOiAhIXhociAmJiAoICJ3aXRo
Q3JlZGVudGlhbHMiIGluIHhociApCi0gICAgICAgIH0pOwotfSkoIGpRdWVyeS5hamF4U2V0dGlu
Z3MueGhyKCkgKTsKLQotLy8gQ3JlYXRlIHRyYW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJv
dmlkZSBhbiB4aHIKLWlmICggalF1ZXJ5LnN1cHBvcnQuYWpheCApIHsKLQotICAgICAgICBqUXVl
cnkuYWpheFRyYW5zcG9ydChmdW5jdGlvbiggcyApIHsKLSAgICAgICAgICAgICAgICAvLyBDcm9z
cyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0
Ci0gICAgICAgICAgICAgICAgaWYgKCAhcy5jcm9zc0RvbWFpbiB8fCBqUXVlcnkuc3VwcG9ydC5j
b3JzICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2s7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIG5ldyB4aHIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlLCBpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyID0gcy54aHIoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHNvY2tldAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhc3NpbmcgbnVsbCB1
c2VybmFtZSwgZ2VuZXJhdGVzIGEgbG9naW4gcG9wdXAgb24gT3BlcmEgKCMyODY1KQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcy51c2VybmFtZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBz
LnR5cGUsIHMudXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBzLnBhc3N3b3JkICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5cGUsIHMudXJs
LCBzLmFzeW5jICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgY3VzdG9t
IGZpZWxkcyBpZiBwcm92aWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggcy54aHJGaWVsZHMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCBpIGluIHMueGhyRmllbGRzICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJbIGkgXSA9IHMu
eGhyRmllbGRzWyBpIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWltZSB0
eXBlIGlmIG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggcy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCBz
Lm1pbWVUeXBlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWC1SZXF1ZXN0ZWQt
V2l0aCBoZWFkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
b3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVm
bGlnaHQgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWtp
biB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoaXQgY2FuIGFsd2F5
cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Igc2FtZS1kb21h
aW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWlu
ICYmICFoZWFkZXJzWyJYLVJlcXVlc3RlZC1XaXRoIl0gKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIg
XSA9ICJYTUxIdHRwUmVxdWVzdCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmVl
ZCBhbiBleHRyYSB0cnkvY2F0Y2ggZm9yIGNyb3NzIGRvbWFpbiByZXF1ZXN0cyBpbiBGaXJlZm94
IDMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBoZWFk
ZXJzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggXyApIHt9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBzZW5kIHRoZSByZXF1ZXN0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtYXkgcmFpc2UgYW4g
ZXhjZXB0aW9uIHdoaWNoIGlzIGFjdHVhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaGFuZGxlZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhl
cmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQoICgg
cy5oYXNDb250ZW50ICYmIHMuZGF0YSApIHx8IG51bGwgKTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIExpc3RlbmVyCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzVGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbDsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZveCB0aHJv
d3MgZXhjZXB0aW9ucyB3aGVuIGFjY2Vzc2luZyBwcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiBhbiB4aHIgd2hlbiBhIG5ldHdv
cmsgZXJyb3Igb2NjdXJyZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGh0dHA6Ly9oZWxwZnVsLmtub2JzLWRpYWxzLmNvbS9pbmRleC5waHAvQ29t
cG9uZW50X3JldHVybmVkX2ZhaWx1cmVfY29kZTpfMHg4MDA0MDExMV8oTlNfRVJST1JfTk9UX0FW
QUlMQUJMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyeSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2FzIG5ldmVyIGNhbGxlZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8fCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApICkgewot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gT25seSBjYWxsZWQgb25jZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVk
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRG8gbm90IGtlZXAgYXMgYWN0aXZlIGFueW1vcmUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IGhhbmRsZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBqUXVl
cnkubm9vcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIHhockNhbGxiYWNrc1sgaGFuZGxlIF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhbiBhYm9ydAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggaXNBYm9ydCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFib3J0IGl0IG1hbnVhbGx5IGlm
IG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZXMgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbCA9IHhoci5y
ZXNwb25zZVhNTDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggeG1sICYmIHhtbC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5NTgg
Ki8gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcy54bWwgPSB4bWw7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gcmVxdWVzdGluZyBiaW5hcnkg
ZGF0YSwgSUU2LTkgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9u
IGFueSBhdHRlbXB0IHRvIGFjY2VzcyByZXNwb25zZVRleHQgKCMxMTQyNikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcy50ZXh0ID0geGhyLnJl
c3BvbnNlVGV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVu
IGFjY2Vzc2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdHVzVGV4dCBmb3IgZmF1bHR5IGNyb3Nz
LWRvbWFpbiByZXF1ZXN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aCggZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugbm9ybWFsaXplIHdpdGggV2Vi
a2l0IGdpdmluZyBhbiBlbXB0eSBzdGF0dXNUZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXR1c1RleHQgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmls
dGVyIHN0YXR1cyBmb3Igbm9uIHN0YW5kYXJkIGJlaGF2aW9ycwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgcmVxdWVzdCBpcyBsb2NhbCBhbmQgd2UgaGF2ZSBkYXRhOiBhc3N1bWUgYSBzdWNj
ZXNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAoc3VjY2VzcyB3aXRoIG5vIGRhdGEgd29uJ3QgZ2V0IG5v
dGlmaWVkLCB0aGF0J3MgdGhlIGJlc3Qgd2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBkbyBnaXZl
biBjdXJyZW50IGltcGxlbWVudGF0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXR1cyAm
JiBzLmlzTG9jYWwgJiYgIXMuY3Jvc3NEb21haW4gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXR1cyA9IHJlc3BvbnNlcy50ZXh0ID8gMjAwIDogNDA0OwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDQK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMTIyMyApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdHVzID0gMjA0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aCggZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNBYm9ydCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21wbGV0ZSggLTEsIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIGNvbXBsZXRlIGlmIG5lZWRlZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXNw
b25zZXMgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBsZXRlKCBzdGF0dXMsIHN0YXR1c1RleHQsIHJlc3BvbnNlcywgcmVzcG9u
c2VIZWFkZXJzICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXMuYXN5bmMgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSdy
ZSBpbiBzeW5jIG1vZGUgd2UgZmlyZSB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAo
SUU2ICYgSUU3KSBpZiBpdCdzIGluIGNhY2hlIGFuZCBoYXMgYmVlbgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmVkIGRpcmVjdGx5IHdl
IG5lZWQgdG8gZmlyZSB0aGUgY2FsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGNhbGxiYWNrLCAwICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9ICsreGhySWQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2Fk
QWJvcnQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2FsbGJhY2tzIGxpc3QgaWYgbmVl
ZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFuZCBhdHRhY2ggdGhlIHVubG9hZCBoYW5kbGVyCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXhockNhbGxiYWNrcyAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4aHJDYWxsYmFja3MgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnVu
bG9hZCggeGhyT25VbmxvYWRBYm9ydCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0byBsaXN0IG9mIGFjdGl2ZSB4aHJz
IGNhbGxiYWNrcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4aHJDYWxsYmFja3NbIGhhbmRsZSBdID0gY2FsbGJhY2s7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
Y2FsbGJhY2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soMCwxKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICB9KTsKLX0KLXZhciBmeE5vdywgdGltZXJJZCwKLSAgICAgICAgcmZ4dHlwZXMgPSAvXig/OnRv
Z2dsZXxzaG93fGhpZGUpJC8sCi0gICAgICAgIHJmeG51bSA9IG5ldyBSZWdFeHAoICJeKD86KFst
K10pPXwpKCIgKyBjb3JlX3BudW0gKyAiKShbYS16JV0qKSQiLCAiaSIgKSwKLSAgICAgICAgcnJ1
biA9IC9xdWV1ZUhvb2tzJC8sCi0gICAgICAgIGFuaW1hdGlvblByZWZpbHRlcnMgPSBbIGRlZmF1
bHRQcmVmaWx0ZXIgXSwKLSAgICAgICAgdHdlZW5lcnMgPSB7Ci0gICAgICAgICAgICAgICAgIioi
OiBbZnVuY3Rpb24oIHByb3AsIHZhbHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGVuZCwgdW5pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW4gPSB0aGlz
LmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJ0cyA9IHJmeG51bS5leGVjKCB2YWx1ZSApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXQgPSB0d2Vlbi5jdXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnQgPSArdGFyZ2V0IHx8IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjYWxlID0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SXRl
cmF0aW9ucyA9IDIwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcnRzICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSArcGFydHNbMl07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5jc3NO
dW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gY29tcHV0ZSBzdGFydGluZyB2YWx1ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHVuaXQgIT09ICJweCIgJiYgc3RhcnQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0aXZlbHkgYXBwcm94
aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgdGhlIGN1cnJlbnQgcHJvcGVydHksIGJlY2F1
c2UgdGhpcyBwcm9jZXNzIHdpbGwgYmUgdHJpdmlhbCBpZiBpdCB1c2VzIHRoZSBzYW1lIHVuaXRz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8g
ZW5kIG9yIGEgc2ltcGxlIGNvbnN0YW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhcnQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCBwcm9wLCB0cnVlICkgfHwg
ZW5kIHx8IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBw
cmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRo
aW5nKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VXNlIGEgc3RyaW5nIGZvciBkb3VibGluZyBmYWN0b3Igc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5
IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVsb3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgfHwgIi41IjsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBs
eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQg
PSBzdGFydCAvIHNjYWxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCBwcm9wLCBzdGFydCArIHVuaXQgKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBzY2Fs
ZSwgdG9sZXJhdGluZyB6ZXJvIG9yIE5hTiBmcm9tIHR3ZWVuLmN1cigpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIGJyZWFraW5nIHRoZSBsb29wIGlmIHNj
YWxlIGlzIHVuY2hhbmdlZCBvciBwZXJmZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2gK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICggc2NhbGUg
IT09IChzY2FsZSA9IHR3ZWVuLmN1cigpIC8gdGFyZ2V0KSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1h
eEl0ZXJhdGlvbnMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuLnVuaXQgPSB1bml0OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0d2Vlbi5zdGFydCA9IHN0YXJ0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBhICs9Ly09IHRva2VuIHdhcyBwcm92aWRlZCwgd2Un
cmUgZG9pbmcgYSByZWxhdGl2ZSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHdlZW4uZW5kID0gcGFydHNbMV0gPyBzdGFydCArICggcGFydHNbMV0gKyAxICkgKiBl
bmQgOiBlbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHdlZW47Ci0gICAgICAgICAgICAgICAgfV0KLSAgICAgICAgfTsKLQotLy8g
QW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQot
ZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgZnhOb3cgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0sIDAgKTsKLSAg
ICAgICAgcmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKLX0KLQotZnVuY3Rpb24gY3Jl
YXRlVHdlZW5zKCBhbmltYXRpb24sIHByb3BzICkgewotICAgICAgICBqUXVlcnkuZWFjaCggcHJv
cHMsIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICB2YXIgY29sbGVj
dGlvbiA9ICggdHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggdHdlZW5lcnNbICIqIiBd
ICksCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBmb3Ig
KCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSAp
IHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBkb25lIHdpdGgg
dGhpcyBwcm9wZXJ0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9KTsK
LX0KLQotZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkgewot
ICAgICAgICB2YXIgcmVzdWx0LAotICAgICAgICAgICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAg
ICAgICAgICB0d2VlbmVySW5kZXggPSAwLAotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1h
dGlvblByZWZpbHRlcnMubGVuZ3RoLAotICAgICAgICAgICAgICAgIGRlZmVycmVkID0galF1ZXJ5
LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGRvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvcgotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIHRpY2suZWxlbTsKLSAgICAgICAgICAgICAgICB9KSwKLSAg
ICAgICAgICAgICAgICB0aWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0
YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVz
IHRvIHVzZSAxIC0gKCAwLjUgfHwgMCApICgjMTI0OTcpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudCA9IDEgLSB0ZW1wLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5y
dW4oIHBlcmNlbnQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNl
bnQsIHJlbWFpbmluZyBdKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwZXJjZW50
IDwgMSAmJiBsZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZW1haW5pbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmlt
YXRpb24gXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgICAgICBhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsZW06IGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogalF1ZXJ5
LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM6
IGpRdWVyeS5leHRlbmQoIHRydWUsIHsgc3BlY2lhbEVhc2luZzoge30gfSwgb3B0aW9ucyApLAot
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLAotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0d2VlbnM6IFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQsIGVhc2luZyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRp
b24ub3B0cywgcHJvcCwgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1h
dGlvbi5vcHRzLmVhc2luZyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmlt
YXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0d2VlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0
byBydW4gYWxsIHRoZSB0d2VlbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5s
ZW5ndGggOiAwOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaW5k
ZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyByZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgcmVqZWN0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggZ290b0VuZCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24s
IGdvdG9FbmQgXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdp
dGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSwKLSAgICAg
ICAgICAgICAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKLQotICAgICAgICBwcm9wRmlsdGVy
KCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApOwotCi0gICAgICAgIGZvciAo
IDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGFuaW1hdGlvblByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9w
cywgYW5pbWF0aW9uLm9wdHMgKTsKLSAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgY3JlYXRlVHdlZW5zKCBhbmltYXRpb24sIHByb3BzICk7Ci0K
LSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSAp
IHsKLSAgICAgICAgICAgICAgICBhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmlt
YXRpb24gKTsKLSAgICAgICAgfQotCi0gICAgICAgIGpRdWVyeS5meC50aW1lcigKLSAgICAgICAg
ICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
bmltOiBhbmltYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZTogYW5pbWF0aW9u
Lm9wdHMucXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtOiBlbGVtCi0gICAgICAg
ICAgICAgICAgfSkKLSAgICAgICAgKTsKLQotICAgICAgICAvLyBhdHRhY2ggY2FsbGJhY2tzIGZy
b20gb3B0aW9ucwotICAgICAgICByZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24u
b3B0cy5wcm9ncmVzcyApCi0gICAgICAgICAgICAgICAgLmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRv
bmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlICkKLSAgICAgICAgICAgICAgICAuZmFpbCggYW5p
bWF0aW9uLm9wdHMuZmFpbCApCi0gICAgICAgICAgICAgICAgLmFsd2F5cyggYW5pbWF0aW9uLm9w
dHMuYWx3YXlzICk7Ci19Ci0KLWZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFz
aW5nICkgewotICAgICAgICB2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzOwot
Ci0gICAgICAgIC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sg
cGFzcwotICAgICAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKLSAgICAgICAgICAgICAgICBu
YW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggaW5kZXggKTsKLSAgICAgICAgICAgICAgICBlYXNpbmcg
PSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wc1sg
aW5kZXggXTsKLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nID0gdmFsdWVbIDEgXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggaW5kZXggIT09IG5hbWUgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wc1sgbmFtZSBdID0gdmFsdWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHNbIGluZGV4IF07Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKLSAg
ICAgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJleHBhbmQiIGluIGhvb2tzICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHNbIG5hbWUgXTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gbm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbnQgb3ZlcndyaXRlIGtleXMg
YWxyZWFkeSBwcmVzZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyAtIHJldXNp
bmcgJ2luZGV4JyBmcm9tIGFib3ZlIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCAibmFtZSIK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGluZGV4IGluIHZhbHVlICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHNbIGluZGV4IF0gPSB2
YWx1ZVsgaW5kZXggXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
cGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVh
c2luZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLX0KLQotalF1ZXJ5LkFuaW1hdGlv
biA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwgewotCi0gICAgICAgIHR3ZWVuZXI6IGZ1bmN0
aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggcHJvcHMgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0g
cHJvcHM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyA9IFsgIioiIF07Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzID0gcHJvcHMu
c3BsaXQoIiAiKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgcHJv
cCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIGZvciAoIDsg
aW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cCA9IHByb3BzWyBpbmRleCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW5lcnNbIHBy
b3AgXSA9IHR3ZWVuZXJzWyBwcm9wIF0gfHwgW107Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICB9LAotCi0gICAgICAgIHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVw
ZW5kICkgewotICAgICAgICAgICAgICAgIGlmICggcHJlcGVuZCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFuaW1hdGlvblByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUHJl
ZmlsdGVycy5wdXNoKCBjYWxsYmFjayApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQot
fSk7Ci0KLWZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkgewot
ICAgICAgICB2YXIgaW5kZXgsIHByb3AsIHZhbHVlLCBsZW5ndGgsIGRhdGFTaG93LCB0b2dnbGUs
IHR3ZWVuLCBob29rcywgb2xkZmlyZSwKLSAgICAgICAgICAgICAgICBhbmltID0gdGhpcywKLSAg
ICAgICAgICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGUsCi0gICAgICAgICAgICAgICAgb3JpZyA9
IHt9LAotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSBbXSwKLSAgICAgICAgICAgICAgICBoaWRk
ZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICk7Ci0KLSAgICAgICAgLy8gaGFu
ZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNlcwotICAgICAgICBpZiAoICFvcHRzLnF1ZXVlICkgewot
ICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCAiZngiICk7
Ci0gICAgICAgICAgICAgICAgaWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaG9va3MudW5xdWV1ZWQgPSAwOwotICAgICAgICAgICAgICAgICAg
ICAgICAgb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIWhvb2tzLnVucXVldWVkICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9sZGZpcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaG9va3MudW5xdWV1ZWQrKzsKLQotICAgICAgICAgICAgICAgIGFuaW0u
YWx3YXlzKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9pbmcgdGhp
cyBtYWtlcyBzdXJlIHRoYXQgdGhlIGNvbXBsZXRlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGlzIGNvbXBsZXRlcwotICAgICAgICAg
ICAgICAgICAgICAgICAgYW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhvb2tzLnVucXVldWVkLS07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaGVp
Z2h0L3dpZHRoIG92ZXJmbG93IHBhc3MKLSAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAx
ICYmICggImhlaWdodCIgaW4gcHJvcHMgfHwgIndpZHRoIiBpbiBwcm9wcyApICkgewotICAgICAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAotICAgICAgICAg
ICAgICAgIC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9l
cyBub3QKLSAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIG92ZXJmbG93IGF0dHJpYnV0ZSB3
aGVuIG92ZXJmbG93WCBhbmQKLSAgICAgICAgICAgICAgICAvLyBvdmVyZmxvd1kgYXJlIHNldCB0
byB0aGUgc2FtZSB2YWx1ZQotICAgICAgICAgICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxl
Lm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdOwotCi0gICAgICAg
ICAgICAgICAgLy8gU2V0IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2NrIGZvciBoZWln
aHQvd2lkdGgKLSAgICAgICAgICAgICAgICAvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50
cyB0aGF0IGFyZSBoYXZpbmcgd2lkdGgvaGVpZ2h0IGFuaW1hdGVkCi0gICAgICAgICAgICAgICAg
aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gImlubGluZSIgJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgImZsb2F0IiApID09
PSAibm9uZSIgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlubGluZS1sZXZlbCBl
bGVtZW50cyBhY2NlcHQgaW5saW5lLWJsb2NrOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YmxvY2stbGV2ZWwgZWxlbWVudHMgbmVlZCB0byBiZSBpbmxpbmUgd2l0aCBsYXlvdXQKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNM
YXlvdXQgfHwgY3NzX2RlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgPT09ICJpbmxpbmUi
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gImlu
bGluZS1ibG9jayI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnpvb20gPSAxOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgg
b3B0cy5vdmVyZmxvdyApIHsKLSAgICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRk
ZW4iOwotICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9j
a3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmltLmRvbmUoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVy
Zmxvd1sgMCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxv
d1ggPSBvcHRzLm92ZXJmbG93WyAxIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0KLSAgICAgICAgLy8g
c2hvdy9oaWRlIHBhc3MKLSAgICAgICAgZm9yICggaW5kZXggaW4gcHJvcHMgKSB7Ci0gICAgICAg
ICAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKLSAgICAgICAgICAgICAgICBpZiAoIHJm
eHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUg
cHJvcHNbIGluZGV4IF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGUgPSB0b2dnbGUg
fHwgdmFsdWUgPT09ICJ0b2dnbGUiOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1
ZSA9PT0gKCBoaWRkZW4gPyAiaGlkZSIgOiAic2hvdyIgKSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVkLnB1c2goIGluZGV4ICk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbGVuZ3RoID0gaGFuZGxlZC5sZW5ndGg7Ci0gICAg
ICAgIGlmICggbGVuZ3RoICkgewotICAgICAgICAgICAgICAgIGRhdGFTaG93ID0galF1ZXJ5Ll9k
YXRhKCBlbGVtLCAiZnhzaG93IiApIHx8IGpRdWVyeS5fZGF0YSggZWxlbSwgImZ4c2hvdyIsIHt9
ICk7Ci0gICAgICAgICAgICAgICAgaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBzdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0g
ZW5hYmxlcyAuc3RvcCgpLnRvZ2dsZSgpIHRvICJyZXZlcnNlIgotICAgICAgICAgICAgICAgIGlm
ICggdG9nZ2xlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNob3cuaGlkZGVuID0g
IWhpZGRlbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBoaWRkZW4g
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5zaG93KCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW0uZG9uZShm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBlbGVt
ICkuaGlkZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGFuaW0uZG9uZShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBwcm9wOwotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92
ZURhdGEoIGVsZW0sICJmeHNob3ciLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBwcm9wIGluIG9yaWcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgZm9yICggaW5k
ZXggPSAwIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcCA9IGhhbmRsZWRbIGluZGV4IF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
d2VlbiA9IGFuaW0uY3JlYXRlVHdlZW4oIHByb3AsIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0g
OiAwICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnWyBwcm9wIF0gPSBkYXRhU2hvd1sg
cHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVNob3dbIHByb3AgXSA9IHR3ZWVuLnN0YXJ0OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhpZGRlbiApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0d2Vlbi5lbmQgPSB0d2Vlbi5zdGFydDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d2Vlbi5zdGFydCA9IHByb3AgPT09ICJ3
aWR0aCIgfHwgcHJvcCA9PT0gImhlaWdodCIgPyAxIDogMDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgfQotfQotCi1mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwg
ZW5kLCBlYXNpbmcgKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQo
IGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Ci19Ci1qUXVlcnkuVHdlZW4gPSBU
d2VlbjsKLQotVHdlZW4ucHJvdG90eXBlID0gewotICAgICAgICBjb25zdHJ1Y3RvcjogVHdlZW4s
Ci0gICAgICAgIGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2lu
ZywgdW5pdCApIHsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW0gPSBlbGVtOwotICAgICAgICAg
ICAgICAgIHRoaXMucHJvcCA9IHByb3A7Ci0gICAgICAgICAgICAgICAgdGhpcy5lYXNpbmcgPSBl
YXNpbmcgfHwgInN3aW5nIjsKLSAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25z
OwotICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBlbmQ7Ci0gICAgICAgICAgICAgICAgdGhpcy51bml0
ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/ICIiIDogInB4IiApOwotICAg
ICAgICB9LAotICAgICAgICBjdXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIHZhciBo
b29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGhvb2tz
LmdldCggdGhpcyApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFR3ZWVuLnByb3BIb29rcy5f
ZGVmYXVsdC5nZXQoIHRoaXMgKTsKLSAgICAgICAgfSwKLSAgICAgICAgcnVuOiBmdW5jdGlvbigg
cGVyY2VudCApIHsKLSAgICAgICAgICAgICAgICB2YXIgZWFzZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVy
YXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50OwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBl
YXNlZCArIHRoaXMuc3RhcnQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5z
dGVwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCgg
dGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaG9va3Muc2V0KCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
IH0KLX07Ci0KLVR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlw
ZTsKLQotVHdlZW4ucHJvcEhvb2tzID0gewotICAgICAgICBfZGVmYXVsdDogewotICAgICAgICAg
ICAgICAgIGdldDogZnVuY3Rpb24oIHR3ZWVuICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0d2Vlbi5lbGVtWyB0
d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
IXR3ZWVuLmVsZW0uc3R5bGUgfHwgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51
bGwpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW4uZWxl
bVsgdHdlZW4ucHJvcCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBwYXNzaW5nIGFueSB2YWx1ZSBhcyBhIDR0aCBwYXJhbWV0ZXIgdG8g
LmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dGVt
cHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFp
bHMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvLCBzaW1wbGUgdmFsdWVzIHN1Y2ggYXMg
IjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBj
b21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcyBpcy4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0s
IHR3ZWVuLnByb3AsIGZhbHNlLCAiIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1w
dHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAw
LgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSAi
YXV0byIgPyAwIDogcmVzdWx0OwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Ug
c3RlcCBob29rIGZvciBiYWNrIGNvbXBhdCAtIHVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZSAtIHVz
ZSAuc3R5bGUgaWYgaXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhdmFpbGFibGUgYW5k
IHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiAp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHdlZW4uZWxlbS5zdHlsZSAm
JiAoIHR3ZWVuLmVsZW0uc3R5bGVbIGpRdWVyeS5jc3NQcm9wc1sgdHdlZW4ucHJvcCBdIF0gIT0g
bnVsbCB8fCBqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSApICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3As
IHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnBy
b3AgXSA9IHR3ZWVuLm5vdzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLX07Ci0KLS8vIFJlbW92ZSBpbiAyLjAgLSB0aGlzIHN1cHBvcnRz
IElFOCdzIHBhbmljIGJhc2VkIGFwcHJvYWNoCi0vLyB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNj
b25uZWN0ZWQgbm9kZXMKLQotVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BI
b29rcy5zY3JvbGxMZWZ0ID0gewotICAgICAgICBzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJl
bnROb2RlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJv
cCBdID0gdHdlZW4ubm93OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotfTsKLQotalF1
ZXJ5LmVhY2goWyAidG9nZ2xlIiwgInNob3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUg
KSB7Ci0gICAgICAgIHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdOwotICAgICAgICBqUXVl
cnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJi
b29sZWFuIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjaGVjayBmb3Ig
LnRvZ2dsZSggaGFuZGxlciwgaGFuZGxlciwgLi4uICkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICggIWkgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYgalF1ZXJ5LmlzRnVuY3Rpb24o
IGVhc2luZyApICkgPwotICAgICAgICAgICAgICAgICAgICAgICAgY3NzRm4uYXBwbHkoIHRoaXMs
IGFyZ3VtZW50cyApIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0ZSggZ2Vu
RngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICAgICAgfTsK
LX0pOwotCi1qUXVlcnkuZm4uZXh0ZW5kKHsKLSAgICAgICAgZmFkZVRvOiBmdW5jdGlvbiggc3Bl
ZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgewotCi0gICAgICAgICAgICAgICAgLy8gc2hvdyBh
bnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbiApLmNzcyggIm9wYWNpdHkiLCAwICku
c2hvdygpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGUgdG8gdGhlIHZhbHVl
IHNwZWNpZmllZAotICAgICAgICAgICAgICAgICAgICAgICAgLmVuZCgpLmFuaW1hdGUoeyBvcGFj
aXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwotICAgICAgICB9LAotICAgICAg
ICBhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVh
c2luZywgY2FsbGJhY2sgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvQW5pbWF0aW9uID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUg
b24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlz
LCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBFbXB0eSBhbmltYXRpb25zIHJlc29sdmUgaW1tZWRpYXRlbHkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbXB0eSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltLnN0b3AoIHRydWUgKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfTsK
LQotICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNl
ID8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0
aW9uICk7Ci0gICAgICAgIH0sCi0gICAgICAgIHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1
ZXVlLCBnb3RvRW5kICkgewotICAgICAgICAgICAgICAgIHZhciBzdG9wUXVldWUgPSBmdW5jdGlv
biggaG9va3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0
b3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3AoIGdvdG9FbmQgKTsKLSAgICAgICAgICAgICAgICB9OwotCi0g
ICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvRW5kID0gY2xlYXJRdWV1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNsZWFyUXVldWUgPSB0eXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9
IHVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBjbGVh
clF1ZXVlICYmIHR5cGUgIT09IGZhbHNlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgZGVxdWV1ZSA9IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyAicXVldWVIb29rcyIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbmRleCApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRh
dGFbIGluZGV4IF0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICggaW5kZXggaW4gZGF0YSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJy
dW4udGVzdCggaW5kZXggKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYm
ICh0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlKSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcnNbIGluZGV4IF0uYW5p
bS5zdG9wKCBnb3RvRW5kICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVxdWV1ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fz
bid0IGZvcmNlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZXJzIGN1cnJlbnRseSB3
aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaCB3aWxsIGRlcXVldWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0KLX0pOwotCi0vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFu
aW1hdGlvbgotZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHsKLSAgICAgICAg
dmFyIHdoaWNoLAotICAgICAgICAgICAgICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfSwKLSAg
ICAgICAgICAgICAgICBpID0gMDsKLQotICAgICAgICAvLyBpZiB3ZSBpbmNsdWRlIHdpZHRoLCBz
dGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsCi0gICAgICAgIC8vIGlm
IHdlIGRvbid0IGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVm
dCBhbmQgUmlnaHQKLSAgICAgICAgaW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoPyAxIDogMDsK
LSAgICAgICAgZm9yKCA7IGkgPCA0IDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkgewotICAgICAg
ICAgICAgICAgIHdoaWNoID0gY3NzRXhwYW5kWyBpIF07Ci0gICAgICAgICAgICAgICAgYXR0cnNb
ICJtYXJnaW4iICsgd2hpY2ggXSA9IGF0dHJzWyAicGFkZGluZyIgKyB3aGljaCBdID0gdHlwZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICggaW5jbHVkZVdpZHRoICkgewotICAgICAgICAgICAg
ICAgIGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gYXR0cnM7Ci19Ci0KLS8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9t
IGFuaW1hdGlvbnMKLWpRdWVyeS5lYWNoKHsKLSAgICAgICAgc2xpZGVEb3duOiBnZW5GeCgic2hv
dyIpLAotICAgICAgICBzbGlkZVVwOiBnZW5GeCgiaGlkZSIpLAotICAgICAgICBzbGlkZVRvZ2ds
ZTogZ2VuRngoInRvZ2dsZSIpLAotICAgICAgICBmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0s
Ci0gICAgICAgIGZhZGVPdXQ6IHsgb3BhY2l0eTogImhpZGUiIH0sCi0gICAgICAgIGZhZGVUb2dn
bGU6IHsgb3BhY2l0eTogInRvZ2dsZSIgfQotfSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkgewot
ICAgICAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxs
YmFjayApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3Bl
ZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKLSAgICAgICAgfTsKLX0pOwotCi1qUXVlcnkuc3BlZWQg
PSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7Ci0gICAgICAgIHZhciBvcHQgPSBzcGVl
ZCAmJiB0eXBlb2Ygc3BlZWQgPT09ICJvYmplY3QiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVk
ICkgOiB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNw
ZWVkLAotICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBzcGVlZCwKLSAgICAgICAgICAgICAgICBl
YXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNp
bmcgKSAmJiBlYXNpbmcKLSAgICAgICAgfTsKLQotICAgICAgICBvcHQuZHVyYXRpb24gPSBqUXVl
cnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0LmR1
cmF0aW9uIDoKLSAgICAgICAgICAgICAgICBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVk
cyA/IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdIDogalF1ZXJ5LmZ4LnNwZWVkcy5f
ZGVmYXVsdDsKLQotICAgICAgICAvLyBub3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmlu
ZWQvbnVsbCAtPiAiZngiCi0gICAgICAgIGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1
ZXVlID09PSB0cnVlICkgewotICAgICAgICAgICAgICAgIG9wdC5xdWV1ZSA9ICJmeCI7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBRdWV1ZWluZwotICAgICAgICBvcHQub2xkID0gb3B0LmNvbXBs
ZXRlOwotCi0gICAgICAgIG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmICggb3B0LnF1ZXVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgfTsKLQotICAgICAgICByZXR1cm4gb3B0OwotfTsKLQotalF1ZXJ5LmVhc2luZyA9IHsK
LSAgICAgICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cDsKLSAgICAgICAgfSwKLSAgICAgICAgc3dpbmc6IGZ1bmN0aW9uKCBwICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCpNYXRoLlBJICkgLyAyOwotICAgICAgICB9
Ci19OwotCi1qUXVlcnkudGltZXJzID0gW107Ci1qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUu
aW5pdDsKLWpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciB0aW1lciwK
LSAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAotICAgICAgICAgICAgICAg
IGkgPSAwOwotCi0gICAgICAgIGZ4Tm93ID0galF1ZXJ5Lm5vdygpOwotCi0gICAgICAgIGZvciAo
IDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHsKLSAgICAgICAgICAgICAgICB0aW1lciA9IHRp
bWVyc1sgaSBdOwotICAgICAgICAgICAgICAgIC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBh
bHJlYWR5IGJlZW4gcmVtb3ZlZAotICAgICAgICAgICAgICAgIGlmICggIXRpbWVyKCkgJiYgdGlt
ZXJzWyBpIF0gPT09IHRpbWVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNw
bGljZSggaS0tLCAxICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCAhdGltZXJzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuZnguc3RvcCgp
OwotICAgICAgICB9Ci0gICAgICAgIGZ4Tm93ID0gdW5kZWZpbmVkOwotfTsKLQotalF1ZXJ5LmZ4
LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkgewotICAgICAgICBpZiAoIHRpbWVyKCkgJiYgalF1
ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApICYmICF0aW1lcklkICkgewotICAgICAgICAgICAgICAg
IHRpbWVySWQgPSBzZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZh
bCApOwotICAgICAgICB9Ci19OwotCi1qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMzsKLQotalF1ZXJ5
LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgY2xlYXJJbnRlcnZhbCggdGltZXJJZCAp
OwotICAgICAgICB0aW1lcklkID0gbnVsbDsKLX07Ci0KLWpRdWVyeS5meC5zcGVlZHMgPSB7Ci0g
ICAgICAgIHNsb3c6IDYwMCwKLSAgICAgICAgZmFzdDogMjAwLAotICAgICAgICAvLyBEZWZhdWx0
IHNwZWVkCi0gICAgICAgIF9kZWZhdWx0OiA0MDAKLX07Ci0KLS8vIEJhY2sgQ29tcGF0IDwxLjgg
ZXh0ZW5zaW9uIHBvaW50Ci1qUXVlcnkuZnguc3RlcCA9IHt9OwotCi1pZiAoIGpRdWVyeS5leHBy
ICYmIGpRdWVyeS5leHByLmZpbHRlcnMgKSB7Ci0gICAgICAgIGpRdWVyeS5leHByLmZpbHRlcnMu
YW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4galF1
ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGZuLmVsZW07Ci0gICAgICAgICAgICAgICAgfSkubGVu
Z3RoOwotICAgICAgICB9OwotfQotdmFyIHJyb290ID0gL14oPzpib2R5fGh0bWwpJC9pOwotCi1q
UXVlcnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7Ci0gICAgICAgIGlmICggYXJn
dW1lbnRzLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gdW5k
ZWZpbmVkID8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgOgotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZG9j
RWxlbSwgYm9keSwgd2luLCBjbGllbnRUb3AsIGNsaWVudExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xs
TGVmdCwKLSAgICAgICAgICAgICAgICBib3ggPSB7IHRvcDogMCwgbGVmdDogMCB9LAotICAgICAg
ICAgICAgICAgIGVsZW0gPSB0aGlzWyAwIF0sCi0gICAgICAgICAgICAgICAgZG9jID0gZWxlbSAm
JiBlbGVtLm93bmVyRG9jdW1lbnQ7Ci0KLSAgICAgICAgaWYgKCAhZG9jICkgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggKGJvZHkgPSBkb2MuYm9k
eSkgPT09IGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9k
eU9mZnNldCggZWxlbSApOwotICAgICAgICB9Ci0KLSAgICAgICAgZG9jRWxlbSA9IGRvYy5kb2N1
bWVudEVsZW1lbnQ7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIGl0J3Mgbm90IGEgZGlzY29ubmVj
dGVkIERPTSBub2RlCi0gICAgICAgIGlmICggIWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxl
bSApICkgewotICAgICAgICAgICAgICAgIHJldHVybiBib3g7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIGdCQ1IsIGp1c3QgdXNlIDAsMCByYXRoZXIgdGhhbiBlcnJv
cgotICAgICAgICAvLyBCbGFja0JlcnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpCi0gICAg
ICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAidW5kZWZpbmVk
IiApIHsKLSAgICAgICAgICAgICAgICBib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OwotICAgICAgICB9Ci0gICAgICAgIHdpbiA9IGdldFdpbmRvdyggZG9jICk7Ci0gICAgICAgIGNs
aWVudFRvcCAgPSBkb2NFbGVtLmNsaWVudFRvcCAgfHwgYm9keS5jbGllbnRUb3AgIHx8IDA7Ci0g
ICAgICAgIGNsaWVudExlZnQgPSBkb2NFbGVtLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0
IHx8IDA7Ci0gICAgICAgIHNjcm9sbFRvcCAgPSB3aW4ucGFnZVlPZmZzZXQgfHwgZG9jRWxlbS5z
Y3JvbGxUb3A7Ci0gICAgICAgIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQgfHwgZG9jRWxl
bS5zY3JvbGxMZWZ0OwotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHRvcDogYm94
LnRvcCAgKyBzY3JvbGxUb3AgIC0gY2xpZW50VG9wLAotICAgICAgICAgICAgICAgIGxlZnQ6IGJv
eC5sZWZ0ICsgc2Nyb2xsTGVmdCAtIGNsaWVudExlZnQKLSAgICAgICAgfTsKLX07Ci0KLWpRdWVy
eS5vZmZzZXQgPSB7Ci0KLSAgICAgICAgYm9keU9mZnNldDogZnVuY3Rpb24oIGJvZHkgKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHRvcCA9IGJvZHkub2Zmc2V0VG9wLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdCA9IGJvZHkub2Zmc2V0TGVmdDsKLQotICAgICAgICAgICAgICAgIGlmICgg
alF1ZXJ5LnN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwg
Im1hcmdpblRvcCIpICkgfHwgMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gcGFy
c2VGbG9hdCggalF1ZXJ5LmNzcyhib2R5LCAibWFyZ2luTGVmdCIpICkgfHwgMDsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVm
dCB9OwotICAgICAgICB9LAotCi0gICAgICAgIHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9w
dGlvbnMsIGkgKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0galF1ZXJ5LmNzcygg
ZWxlbSwgInBvc2l0aW9uIiApOwotCi0gICAgICAgICAgICAgICAgLy8gc2V0IHBvc2l0aW9uIGZp
cnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQotICAgICAg
ICAgICAgICAgIGlmICggcG9zaXRpb24gPT09ICJzdGF0aWMiICkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiAp
LAotICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0s
ICJsZWZ0IiApLAotICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAo
IHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYgalF1
ZXJ5LmluQXJyYXkoImF1dG8iLCBbY3VyQ1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BzID0ge30sIGN1clBvc2l0aW9uID0ge30sIGN1clRvcCwg
Y3VyTGVmdDsKLQotICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxh
dGUgcG9zaXRpb24gaWYgZWl0aGVyIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlz
IGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZAotICAgICAgICAgICAgICAgIGlmICggY2FsY3VsYXRl
UG9zaXRpb24gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJQb3NpdGlvbiA9IGN1ckVs
ZW0ucG9zaXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1clRvcCA9IGN1clBvc2l0
aW9uLnRvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5s
ZWZ0OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
dXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlv
bnMgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNhbGwo
IGVsZW0sIGksIGN1ck9mZnNldCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51
bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxl
ZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3Bz
ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci19OwotCi0KLWpRdWVyeS5mbi5leHRl
bmQoewotCi0gICAgICAgIHBvc2l0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoICF0aGlzWzBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXSwKLQotICAg
ICAgICAgICAgICAgIC8vIEdldCAqcmVhbCogb2Zmc2V0UGFyZW50Ci0gICAgICAgICAgICAgICAg
b2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKSwKLQotICAgICAgICAgICAgICAgIC8v
IEdldCBjb3JyZWN0IG9mZnNldHMKLSAgICAgICAgICAgICAgICBvZmZzZXQgICAgICAgPSB0aGlz
Lm9mZnNldCgpLAotICAgICAgICAgICAgICAgIHBhcmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zm
c2V0UGFyZW50WzBdLm5vZGVOYW1lKSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJl
bnQub2Zmc2V0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBlbGVtZW50IG1hcmdp
bnMKLSAgICAgICAgICAgICAgICAvLyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdpbjog
YXV0byB0aGUgb2Zmc2V0TGVmdCBhbmQgbWFyZ2luTGVmdAotICAgICAgICAgICAgICAgIC8vIGFy
ZSB0aGUgc2FtZSBpbiBTYWZhcmkgY2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNvcnJlY3RseSBi
ZSAwCi0gICAgICAgICAgICAgICAgb2Zmc2V0LnRvcCAgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNz
cyhlbGVtLCAibWFyZ2luVG9wIikgKSB8fCAwOwotICAgICAgICAgICAgICAgIG9mZnNldC5sZWZ0
IC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7Ci0K
LSAgICAgICAgICAgICAgICAvLyBBZGQgb2Zmc2V0UGFyZW50IGJvcmRlcnMKLSAgICAgICAgICAg
ICAgICBwYXJlbnRPZmZzZXQudG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKG9mZnNldFBh
cmVudFswXSwgImJvcmRlclRvcFdpZHRoIikgKSB8fCAwOwotICAgICAgICAgICAgICAgIHBhcmVu
dE9mZnNldC5sZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAi
Ym9yZGVyTGVmdFdpZHRoIikgKSB8fCAwOwotCi0gICAgICAgICAgICAgICAgLy8gU3VidHJhY3Qg
dGhlIHR3byBvZmZzZXRzCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRvcDogIG9mZnNldC50b3AgIC0gcGFyZW50T2Zmc2V0LnRvcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQKLSAg
ICAgICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAgICAgIG9mZnNldFBhcmVudDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFy
ZW50IHx8IGRvY3VtZW50LmJvZHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG9m
ZnNldFBhcmVudCAmJiAoIXJyb290LnRlc3Qob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAmJiBqUXVl
cnkuY3NzKG9mZnNldFBhcmVudCwgInBvc2l0aW9uIikgPT09ICJzdGF0aWMiKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9m
ZnNldFBhcmVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgfQotfSk7Ci0KLQotLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNj
cm9sbFRvcCBtZXRob2RzCi1qUXVlcnkuZWFjaCgge3Njcm9sbExlZnQ6ICJwYWdlWE9mZnNldCIs
IHNjcm9sbFRvcDogInBhZ2VZT2Zmc2V0In0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7Ci0g
ICAgICAgIHZhciB0b3AgPSAvWS8udGVzdCggcHJvcCApOwotCi0gICAgICAgIGpRdWVyeS5mblsg
bWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkgewotICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW4gPyAocHJvcCBpbiB3aW4pID8gd2luWyBwcm9w
IF0gOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbi5kb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3aW4gKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAhdG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxMZWZ0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCA/IHZhbCA6IGpRdWVy
eSggd2luICkuc2Nyb2xsVG9wKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbVsgbWV0aG9kIF0gPSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGgsIG51
bGwgKTsKLSAgICAgICAgfTsKLX0pOwotCi1mdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7Ci0g
ICAgICAgIHJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSA/Ci0gICAgICAgICAgICAgICAg
ZWxlbSA6Ci0gICAgICAgICAgICAgICAgZWxlbS5ub2RlVHlwZSA9PT0gOSA/Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLmRlZmF1bHRWaWV3IHx8IGVsZW0ucGFyZW50V2luZG93IDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOwotfQotLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBp
bm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRo
b2RzCi1qUXVlcnkuZWFjaCggeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBm
dW5jdGlvbiggbmFtZSwgdHlwZSApIHsKLSAgICAgICAgalF1ZXJ5LmVhY2goIHsgcGFkZGluZzog
ImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIiOiAib3V0ZXIiICsgbmFtZSB9LCBmdW5j
dGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsKLSAgICAgICAgICAgICAgICAvLyBtYXJn
aW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGgKLSAgICAgICAgICAgICAgICBq
UXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICgg
ZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09ICJib29sZWFuIiApLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9
PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/ICJtYXJnaW4iIDogImJvcmRlciIgKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9u
KCBlbGVtLCB0eXBlLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGRvYzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5p
c1dpbmRvdyggZWxlbSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBm
b3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaXNuJ3QgYSB3aG9sZSBsb3Qgd2UgY2FuIGRvLiBTZWUgcHVsbCByZXF1
ZXN0IGF0IHRoaXMgVVJMIGZvciBkaXNjdXNzaW9uOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwv
NzY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0u
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50OwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHNjcm9sbFtXaWR0
aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRd
LCB3aGljaGV2ZXIgaXMgZ3JlYXRlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5LCB0aGlzIGNhdXNlcyBidWcgIzM4MzggaW4gSUU2Lzgg
b25seSwgYnV0IHRoZXJlIGlzIGN1cnJlbnRseSBubyBnb29kLCBzbWFsbCB3YXkgdG8gZml4IGl0
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1h
eCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0u
Ym9keVsgInNjcm9sbCIgKyBuYW1lIF0sIGRvY1sgInNjcm9sbCIgKyBuYW1lIF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJvZmZz
ZXQiICsgbmFtZSBdLCBkb2NbICJvZmZzZXQiICsgbmFtZSBdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jWyAiY2xpZW50IiArIG5hbWUgXQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGlu
ZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApIDoKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB3aWR0aCBvciBo
ZWlnaHQgb24gdGhlIGVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBj
aGFpbmFibGUsIG51bGwgKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICB9KTsKLX0pOwot
Ly8gRXhwb3NlIGpRdWVyeSB0byB0aGUgZ2xvYmFsIG9iamVjdAotd2luZG93LmpRdWVyeSA9IHdp
bmRvdy4kID0galF1ZXJ5OwotCi0vLyBFeHBvc2UgalF1ZXJ5IGFzIGFuIEFNRCBtb2R1bGUsIGJ1
dCBvbmx5IGZvciBBTUQgbG9hZGVycyB0aGF0Ci0vLyB1bmRlcnN0YW5kIHRoZSBpc3N1ZXMgd2l0
aCBsb2FkaW5nIG11bHRpcGxlIHZlcnNpb25zIG9mIGpRdWVyeQotLy8gaW4gYSBwYWdlIHRoYXQg
YWxsIG1pZ2h0IGNhbGwgZGVmaW5lKCkuIFRoZSBsb2FkZXIgd2lsbCBpbmRpY2F0ZQotLy8gdGhl
eSBoYXZlIHNwZWNpYWwgYWxsb3dhbmNlcyBmb3IgbXVsdGlwbGUgalF1ZXJ5IHZlcnNpb25zIGJ5
Ci0vLyBzcGVjaWZ5aW5nIGRlZmluZS5hbWQualF1ZXJ5ID0gdHJ1ZS4gUmVnaXN0ZXIgYXMgYSBu
YW1lZCBtb2R1bGUsCi0vLyBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90
aGVyIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsCi0vLyBidXQgbm90IHVzZSBhIHByb3BlciBj
b25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0IHVuZGVyc3RhbmRzIGFub255bW91cwotLy8gQU1EIG1v
ZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Qgd2F5IHRvIHJlZ2lz
dGVyLgotLy8gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1l
cyBhcmUgZGVyaXZlZCBmcm9tCi0vLyBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5
IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZSBmaWxlIG5hbWUuCi0vLyBEbyB0aGlzIGFmdGVyIGNy
ZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzIHRvIGNhbGwK
LS8vIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdv
cmsuCi1pZiAoIHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCAmJiBk
ZWZpbmUuYW1kLmpRdWVyeSApIHsKLSAgICAgICAgZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0
aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOwotfQotCi19KSggd2luZG93ICk7CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzLXRleHQvdGV4
dC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9yZXF1aXJlanMtdGV4dC90
ZXh0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTRmYzk2NjEzNTM3NDJmNzYw
NzdmNjY0MWE3OGJmYWZlOGVlNDk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy9yZXF1aXJlanMt
dGV4dC90ZXh0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzg2ICswLDAgQEAKLS8qKgotICogQGxp
Y2Vuc2UgUmVxdWlyZUpTIHRleHQgMi4wLjEwIENvcHlyaWdodCAoYykgMjAxMC0yMDEyLCBUaGUg
RG9qbyBGb3VuZGF0aW9uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBBdmFpbGFibGUgdmlhIHRo
ZSBNSVQgb3IgbmV3IEJTRCBsaWNlbnNlLgotICogc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9yZXF1
aXJlanMvdGV4dCBmb3IgZGV0YWlscwotICovCi0vKmpzbGludCByZWdleHA6IHRydWUgKi8KLS8q
Z2xvYmFsIHJlcXVpcmUsIFhNTEh0dHBSZXF1ZXN0LCBBY3RpdmVYT2JqZWN0LAotICBkZWZpbmUs
IHdpbmRvdywgcHJvY2VzcywgUGFja2FnZXMsCi0gIGphdmEsIGxvY2F0aW9uLCBDb21wb25lbnRz
LCBGaWxlVXRpbHMgKi8KLQotZGVmaW5lKFsnbW9kdWxlJ10sIGZ1bmN0aW9uIChtb2R1bGUpIHsK
LSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICB2YXIgdGV4dCwgZnMsIENjLCBDaSwgeHBjSXNXaW5k
b3dzLAotICAgICAgICBwcm9nSWRzID0gWydNc3htbDIuWE1MSFRUUCcsICdNaWNyb3NvZnQuWE1M
SFRUUCcsICdNc3htbDIuWE1MSFRUUC40LjAnXSwKLSAgICAgICAgeG1sUmVnRXhwID0gL15ccyo8
XD94bWwoXHMpK3ZlcnNpb249W1wnXCJdKFxkKSouKFxkKSpbXCdcIl0oXHMpKlw/Pi9pbSwKLSAg
ICAgICAgYm9keVJlZ0V4cCA9IC88Ym9keVtePl0qPlxzKihbXHNcU10rKVxzKjxcL2JvZHk+L2lt
LAotICAgICAgICBoYXNMb2NhdGlvbiA9IHR5cGVvZiBsb2NhdGlvbiAhPT0gJ3VuZGVmaW5lZCcg
JiYgbG9jYXRpb24uaHJlZiwKLSAgICAgICAgZGVmYXVsdFByb3RvY29sID0gaGFzTG9jYXRpb24g
JiYgbG9jYXRpb24ucHJvdG9jb2wgJiYgbG9jYXRpb24ucHJvdG9jb2wucmVwbGFjZSgvXDovLCAn
JyksCi0gICAgICAgIGRlZmF1bHRIb3N0TmFtZSA9IGhhc0xvY2F0aW9uICYmIGxvY2F0aW9uLmhv
c3RuYW1lLAotICAgICAgICBkZWZhdWx0UG9ydCA9IGhhc0xvY2F0aW9uICYmIChsb2NhdGlvbi5w
b3J0IHx8IHVuZGVmaW5lZCksCi0gICAgICAgIGJ1aWxkTWFwID0ge30sCi0gICAgICAgIG1hc3Rl
ckNvbmZpZyA9IChtb2R1bGUuY29uZmlnICYmIG1vZHVsZS5jb25maWcoKSkgfHwge307Ci0KLSAg
ICB0ZXh0ID0gewotICAgICAgICB2ZXJzaW9uOiAnMi4wLjEwJywKLQotICAgICAgICBzdHJpcDog
ZnVuY3Rpb24gKGNvbnRlbnQpIHsKLSAgICAgICAgICAgIC8vU3RyaXBzIDw/eG1sIC4uLj8+IGRl
Y2xhcmF0aW9ucyBzbyB0aGF0IGV4dGVybmFsIFNWRyBhbmQgWE1MCi0gICAgICAgICAgICAvL2Rv
Y3VtZW50cyBjYW4gYmUgYWRkZWQgdG8gYSBkb2N1bWVudCB3aXRob3V0IHdvcnJ5LiBBbHNvLCBp
ZiB0aGUgc3RyaW5nCi0gICAgICAgICAgICAvL2lzIGFuIEhUTUwgZG9jdW1lbnQsIG9ubHkgdGhl
IHBhcnQgaW5zaWRlIHRoZSBib2R5IHRhZyBpcyByZXR1cm5lZC4KLSAgICAgICAgICAgIGlmIChj
b250ZW50KSB7Ci0gICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSh4bWxS
ZWdFeHAsICIiKTsKLSAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2go
Ym9keVJlZ0V4cCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGVudCA9IG1hdGNoZXNbMV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZW50ID0gIiI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gY29udGVudDsKLSAgICAgICAgfSwKLQotICAgICAgICBq
c0VzY2FwZTogZnVuY3Rpb24gKGNvbnRlbnQpIHsKLSAgICAgICAgICAgIHJldHVybiBjb250ZW50
LnJlcGxhY2UoLyhbJ1xcXSkvZywgJ1xcJDEnKQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b
XGZdL2csICJcXGYiKQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXGJdL2csICJcXGIiKQot
ICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXG5dL2csICJcXG4iKQotICAgICAgICAgICAgICAg
IC5yZXBsYWNlKC9bXHRdL2csICJcXHQiKQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXHJd
L2csICJcXHIiKQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXHUyMDI4XS9nLCAiXFx1MjAy
OCIpCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcdTIwMjldL2csICJcXHUyMDI5Iik7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgY3JlYXRlWGhyOiBtYXN0ZXJDb25maWcuY3JlYXRlWGhyIHx8
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIC8vV291bGQgbG92ZSB0byBkdW1wIHRoZSBBY3Rp
dmVYIGNyYXAgaW4gaGVyZS4gTmVlZCBJRSA2IHRvIGRpZSBmaXJzdC4KLSAgICAgICAgICAgIHZh
ciB4aHIsIGksIHByb2dJZDsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3Qg
IT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVx
dWVzdCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgQWN0aXZlWE9iamVjdCAhPT0g
InVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2dJZCA9IHByb2dJZHNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZl
WE9iamVjdChwcm9nSWQpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQotCi0g
ICAgICAgICAgICAgICAgICAgIGlmICh4aHIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBy
b2dJZHMgPSBbcHJvZ0lkXTsgIC8vIHNvIGZhc3RlciBuZXh0IHRpbWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4geGhyOwotICAgICAgICB9LAot
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBQYXJzZXMgYSByZXNvdXJjZSBuYW1lIGludG8gaXRz
IGNvbXBvbmVudCBwYXJ0cy4gUmVzb3VyY2UgbmFtZXMKLSAgICAgICAgICogbG9vayBsaWtlOiBt
b2R1bGUvbmFtZS5leHQhc3RyaXAsIHdoZXJlIHRoZSAhc3RyaXAgcGFydCBpcwotICAgICAgICAg
KiBvcHRpb25hbC4KLSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlc291cmNl
IG5hbWUKLSAgICAgICAgICogQHJldHVybnMge09iamVjdH0gd2l0aCBwcm9wZXJ0aWVzICJtb2R1
bGVOYW1lIiwgImV4dCIgYW5kICJzdHJpcCIKLSAgICAgICAgICogd2hlcmUgc3RyaXAgaXMgYSBi
b29sZWFuLgotICAgICAgICAgKi8KLSAgICAgICAgcGFyc2VOYW1lOiBmdW5jdGlvbiAobmFtZSkg
ewotICAgICAgICAgICAgdmFyIG1vZE5hbWUsIGV4dCwgdGVtcCwKLSAgICAgICAgICAgICAgICBz
dHJpcCA9IGZhbHNlLAotICAgICAgICAgICAgICAgIGluZGV4ID0gbmFtZS5pbmRleE9mKCIuIiks
Ci0gICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSA9IG5hbWUuaW5kZXhPZignLi8nKSA9PT0gMCB8
fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLmluZGV4T2YoJy4uLycpID09PSAw
OwotCi0gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRl
eCA+IDEpKSB7Ci0gICAgICAgICAgICAgICAgbW9kTmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIGlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBleHQgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5h
bWUubGVuZ3RoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbW9kTmFt
ZSA9IG5hbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRlbXAgPSBleHQgfHwgbW9k
TmFtZTsKLSAgICAgICAgICAgIGluZGV4ID0gdGVtcC5pbmRleE9mKCIhIik7Ci0gICAgICAgICAg
ICBpZiAoaW5kZXggIT09IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgc3Ry
aXAgYXJnLgotICAgICAgICAgICAgICAgIHN0cmlwID0gdGVtcC5zdWJzdHJpbmcoaW5kZXggKyAx
KSA9PT0gInN0cmlwIjsKLSAgICAgICAgICAgICAgICB0ZW1wID0gdGVtcC5zdWJzdHJpbmcoMCwg
aW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChleHQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZXh0ID0gdGVtcDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBtb2ROYW1lID0gdGVtcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogbW9kTmFtZSwK
LSAgICAgICAgICAgICAgICBleHQ6IGV4dCwKLSAgICAgICAgICAgICAgICBzdHJpcDogc3RyaXAK
LSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgeGRSZWdFeHA6IC9eKChcdysp
XDopP1wvXC8oW15cL1xcXSspLywKLQotICAgICAgICAvKioKLSAgICAgICAgICogSXMgYW4gVVJM
IG9uIGFub3RoZXIgZG9tYWluLiBPbmx5IHdvcmtzIGZvciBicm93c2VyIHVzZSwgcmV0dXJucwot
ICAgICAgICAgKiBmYWxzZSBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudHMuIE9ubHkgdXNlZCB0
byBrbm93IGlmIGFuCi0gICAgICAgICAqIG9wdGltaXplZCAuanMgdmVyc2lvbiBvZiBhIHRleHQg
cmVzb3VyY2Ugc2hvdWxkIGJlIGxvYWRlZAotICAgICAgICAgKiBpbnN0ZWFkLgotICAgICAgICAg
KiBAcGFyYW0ge1N0cmluZ30gdXJsCi0gICAgICAgICAqIEByZXR1cm5zIEJvb2xlYW4KLSAgICAg
ICAgICovCi0gICAgICAgIHVzZVhocjogZnVuY3Rpb24gKHVybCwgcHJvdG9jb2wsIGhvc3RuYW1l
LCBwb3J0KSB7Ci0gICAgICAgICAgICB2YXIgdVByb3RvY29sLCB1SG9zdE5hbWUsIHVQb3J0LAot
ICAgICAgICAgICAgICAgIG1hdGNoID0gdGV4dC54ZFJlZ0V4cC5leGVjKHVybCk7Ci0gICAgICAg
ICAgICBpZiAoIW1hdGNoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB1UHJvdG9jb2wgPSBtYXRjaFsyXTsKLSAgICAgICAgICAgIHVI
b3N0TmFtZSA9IG1hdGNoWzNdOwotCi0gICAgICAgICAgICB1SG9zdE5hbWUgPSB1SG9zdE5hbWUu
c3BsaXQoJzonKTsKLSAgICAgICAgICAgIHVQb3J0ID0gdUhvc3ROYW1lWzFdOwotICAgICAgICAg
ICAgdUhvc3ROYW1lID0gdUhvc3ROYW1lWzBdOwotCi0gICAgICAgICAgICByZXR1cm4gKCF1UHJv
dG9jb2wgfHwgdVByb3RvY29sID09PSBwcm90b2NvbCkgJiYKLSAgICAgICAgICAgICAgICAgICAo
IXVIb3N0TmFtZSB8fCB1SG9zdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gaG9zdG5hbWUudG9Mb3dl
ckNhc2UoKSkgJiYKLSAgICAgICAgICAgICAgICAgICAoKCF1UG9ydCAmJiAhdUhvc3ROYW1lKSB8
fCB1UG9ydCA9PT0gcG9ydCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoTG9hZDogZnVu
Y3Rpb24gKG5hbWUsIHN0cmlwLCBjb250ZW50LCBvbkxvYWQpIHsKLSAgICAgICAgICAgIGNvbnRl
bnQgPSBzdHJpcCA/IHRleHQuc3RyaXAoY29udGVudCkgOiBjb250ZW50OwotICAgICAgICAgICAg
aWYgKG1hc3RlckNvbmZpZy5pc0J1aWxkKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRNYXBbbmFt
ZV0gPSBjb250ZW50OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb25Mb2FkKGNvbnRlbnQp
OwotICAgICAgICB9LAotCi0gICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChuYW1lLCByZXEsIG9uTG9h
ZCwgY29uZmlnKSB7Ci0gICAgICAgICAgICAvL05hbWUgaGFzIGZvcm1hdDogc29tZS5tb2R1bGUu
ZmlsZXh0IXN0cmlwCi0gICAgICAgICAgICAvL1RoZSBzdHJpcCBwYXJ0IGlzIG9wdGlvbmFsLgot
ICAgICAgICAgICAgLy9pZiBzdHJpcCBpcyBwcmVzZW50LCB0aGVuIHRoYXQgbWVhbnMgb25seSBn
ZXQgdGhlIHN0cmluZyBjb250ZW50cwotICAgICAgICAgICAgLy9pbnNpZGUgYSBib2R5IHRhZyBp
biBhbiBIVE1MIHN0cmluZy4gRm9yIFhNTC9TVkcgY29udGVudCBpdCBtZWFucwotICAgICAgICAg
ICAgLy9yZW1vdmluZyB0aGUgPD94bWwgLi4uPz4gZGVjbGFyYXRpb25zIHNvIHRoZSBjb250ZW50
IGNhbiBiZSBpbnNlcnRlZAotICAgICAgICAgICAgLy9pbnRvIHRoZSBjdXJyZW50IGRvYyB3aXRo
b3V0IHByb2JsZW1zLgotCi0gICAgICAgICAgICAvLyBEbyBub3QgYm90aGVyIHdpdGggdGhlIHdv
cmsgaWYgYSBidWlsZCBhbmQgdGV4dCB3aWxsCi0gICAgICAgICAgICAvLyBub3QgYmUgaW5saW5l
ZC4KLSAgICAgICAgICAgIGlmIChjb25maWcuaXNCdWlsZCAmJiAhY29uZmlnLmlubGluZVRleHQp
IHsKLSAgICAgICAgICAgICAgICBvbkxvYWQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1hc3RlckNvbmZpZy5pc0J1aWxkID0gY29uZmln
LmlzQnVpbGQ7Ci0KLSAgICAgICAgICAgIHZhciBwYXJzZWQgPSB0ZXh0LnBhcnNlTmFtZShuYW1l
KSwKLSAgICAgICAgICAgICAgICBub25TdHJpcE5hbWUgPSBwYXJzZWQubW9kdWxlTmFtZSArCi0g
ICAgICAgICAgICAgICAgICAgIChwYXJzZWQuZXh0ID8gJy4nICsgcGFyc2VkLmV4dCA6ICcnKSwK
LSAgICAgICAgICAgICAgICB1cmwgPSByZXEudG9Vcmwobm9uU3RyaXBOYW1lKSwKLSAgICAgICAg
ICAgICAgICB1c2VYaHIgPSAobWFzdGVyQ29uZmlnLnVzZVhocikgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0LnVzZVhocjsKLQotICAgICAgICAgICAgLy8gRG8gbm90IGxvYWQgaWYg
aXQgaXMgYW4gZW1wdHk6IHVybAotICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCdlbXB0eTon
KSA9PT0gMCkgewotICAgICAgICAgICAgICAgIG9uTG9hZCgpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9Mb2FkIHRoZSB0ZXh0LiBVc2Ug
WEhSIGlmIHBvc3NpYmxlIGFuZCBpbiBhIGJyb3dzZXIuCi0gICAgICAgICAgICBpZiAoIWhhc0xv
Y2F0aW9uIHx8IHVzZVhocih1cmwsIGRlZmF1bHRQcm90b2NvbCwgZGVmYXVsdEhvc3ROYW1lLCBk
ZWZhdWx0UG9ydCkpIHsKLSAgICAgICAgICAgICAgICB0ZXh0LmdldCh1cmwsIGZ1bmN0aW9uIChj
b250ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHQuZmluaXNoTG9hZChuYW1lLCBwYXJz
ZWQuc3RyaXAsIGNvbnRlbnQsIG9uTG9hZCk7Ci0gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24g
KGVycikgewotICAgICAgICAgICAgICAgICAgICBpZiAob25Mb2FkLmVycm9yKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvbkxvYWQuZXJyb3IoZXJyKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvL05lZWQgdG8gZmV0Y2ggdGhlIHJlc291cmNlIGFjcm9zcyBkb21haW5zLiBBc3N1bWUK
LSAgICAgICAgICAgICAgICAvL3RoZSByZXNvdXJjZSBoYXMgYmVlbiBvcHRpbWl6ZWQgaW50byBh
IEpTIG1vZHVsZS4gRmV0Y2gKLSAgICAgICAgICAgICAgICAvL2J5IHRoZSBtb2R1bGUgbmFtZSAr
IGV4dGVuc2lvbiwgYnV0IGRvIG5vdCBpbmNsdWRlIHRoZQotICAgICAgICAgICAgICAgIC8vIXN0
cmlwIHBhcnQgdG8gYXZvaWQgZmlsZSBzeXN0ZW0gaXNzdWVzLgotICAgICAgICAgICAgICAgIHJl
cShbbm9uU3RyaXBOYW1lXSwgZnVuY3Rpb24gKGNvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGV4dC5maW5pc2hMb2FkKHBhcnNlZC5tb2R1bGVOYW1lICsgJy4nICsgcGFyc2VkLmV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5zdHJpcCwgY29udGVu
dCwgb25Mb2FkKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSwKLQotICAgICAgICB3cml0ZTogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIG1vZHVsZU5hbWUsIHdy
aXRlLCBjb25maWcpIHsKLSAgICAgICAgICAgIGlmIChidWlsZE1hcC5oYXNPd25Qcm9wZXJ0eSht
b2R1bGVOYW1lKSkgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGV4dC5qc0VzY2Fw
ZShidWlsZE1hcFttb2R1bGVOYW1lXSk7Ci0gICAgICAgICAgICAgICAgd3JpdGUuYXNNb2R1bGUo
cGx1Z2luTmFtZSArICIhIiArIG1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImRlZmluZShmdW5jdGlvbiAoKSB7IHJldHVybiAnIiArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICInO30pO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgd3Jp
dGVGaWxlOiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgbW9kdWxlTmFtZSwgcmVxLCB3cml0ZSwgY29u
ZmlnKSB7Ci0gICAgICAgICAgICB2YXIgcGFyc2VkID0gdGV4dC5wYXJzZU5hbWUobW9kdWxlTmFt
ZSksCi0gICAgICAgICAgICAgICAgZXh0UGFydCA9IHBhcnNlZC5leHQgPyAnLicgKyBwYXJzZWQu
ZXh0IDogJycsCi0gICAgICAgICAgICAgICAgbm9uU3RyaXBOYW1lID0gcGFyc2VkLm1vZHVsZU5h
bWUgKyBleHRQYXJ0LAotICAgICAgICAgICAgICAgIC8vVXNlIGEgJy5qcycgZmlsZSBuYW1lIHNv
IHRoYXQgaXQgaW5kaWNhdGVzIGl0IGlzIGEKLSAgICAgICAgICAgICAgICAvL3NjcmlwdCB0aGF0
IGNhbiBiZSBsb2FkZWQgYWNyb3NzIGRvbWFpbnMuCi0gICAgICAgICAgICAgICAgZmlsZU5hbWUg
PSByZXEudG9VcmwocGFyc2VkLm1vZHVsZU5hbWUgKyBleHRQYXJ0KSArICcuanMnOwotCi0gICAg
ICAgICAgICAvL0xldmVyYWdlIG93biBsb2FkKCkgbWV0aG9kIHRvIGxvYWQgcGx1Z2luIHZhbHVl
LCBidXQgb25seQotICAgICAgICAgICAgLy93cml0ZSBvdXQgdmFsdWVzIHRoYXQgZG8gbm90IGhh
dmUgdGhlIHN0cmlwIGFyZ3VtZW50LAotICAgICAgICAgICAgLy90byBhdm9pZCBhbnkgcG90ZW50
aWFsIGlzc3VlcyB3aXRoICEgaW4gZmlsZSBuYW1lcy4KLSAgICAgICAgICAgIHRleHQubG9hZChu
b25TdHJpcE5hbWUsIHJlcSwgZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy9V
c2Ugb3duIHdyaXRlKCkgbWV0aG9kIHRvIGNvbnN0cnVjdCBmdWxsIG1vZHVsZSB2YWx1ZS4KLSAg
ICAgICAgICAgICAgICAvL0J1dCBuZWVkIHRvIGNyZWF0ZSBzaGVsbCB0aGF0IHRyYW5zbGF0ZXMg
d3JpdGVGaWxlJ3MKLSAgICAgICAgICAgICAgICAvL3dyaXRlKCkgdG8gdGhlIHJpZ2h0IGludGVy
ZmFjZS4KLSAgICAgICAgICAgICAgICB2YXIgdGV4dFdyaXRlID0gZnVuY3Rpb24gKGNvbnRlbnRz
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB3cml0ZShmaWxlTmFtZSwgY29udGVudHMp
OwotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgdGV4dFdyaXRlLmFzTW9kdWxl
ID0gZnVuY3Rpb24gKG1vZHVsZU5hbWUsIGNvbnRlbnRzKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB3cml0ZS5hc01vZHVsZShtb2R1bGVOYW1lLCBmaWxlTmFtZSwgY29udGVudHMpOwot
ICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICB0ZXh0LndyaXRlKHBsdWdpbk5h
bWUsIG5vblN0cmlwTmFtZSwgdGV4dFdyaXRlLCBjb25maWcpOwotICAgICAgICAgICAgfSwgY29u
ZmlnKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAobWFzdGVyQ29uZmlnLmVudiA9PT0g
J25vZGUnIHx8ICghbWFzdGVyQ29uZmlnLmVudiAmJgotICAgICAgICAgICAgdHlwZW9mIHByb2Nl
c3MgIT09ICJ1bmRlZmluZWQiICYmCi0gICAgICAgICAgICBwcm9jZXNzLnZlcnNpb25zICYmCi0g
ICAgICAgICAgICAhIXByb2Nlc3MudmVyc2lvbnMubm9kZSAmJgotICAgICAgICAgICAgIXByb2Nl
c3MudmVyc2lvbnNbJ25vZGUtd2Via2l0J10pKSB7Ci0gICAgICAgIC8vVXNpbmcgc3BlY2lhbCBy
ZXF1aXJlLm5vZGVSZXF1aXJlLCBzb21ldGhpbmcgYWRkZWQgYnkgci5qcy4KLSAgICAgICAgZnMg
PSByZXF1aXJlLm5vZGVSZXF1aXJlKCdmcycpOwotCi0gICAgICAgIHRleHQuZ2V0ID0gZnVuY3Rp
b24gKHVybCwgY2FsbGJhY2ssIGVycmJhY2spIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICAgICAgdmFyIGZpbGUgPSBmcy5yZWFkRmlsZVN5bmModXJsLCAndXRmOCcpOwotICAgICAg
ICAgICAgICAgIC8vUmVtb3ZlIEJPTSAoQnl0ZSBNYXJrIE9yZGVyKSBmcm9tIHV0ZjggZmlsZXMg
aWYgaXQgaXMgdGhlcmUuCi0gICAgICAgICAgICAgICAgaWYgKGZpbGUuaW5kZXhPZignXHVGRUZG
JykgPT09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyaW5nKDEp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYWxsYmFjayhmaWxlKTsKLSAg
ICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICBlcnJiYWNrKGUpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0gZWxzZSBpZiAobWFzdGVyQ29uZmlnLmVudiA9
PT0gJ3hocicgfHwgKCFtYXN0ZXJDb25maWcuZW52ICYmCi0gICAgICAgICAgICB0ZXh0LmNyZWF0
ZVhocigpKSkgewotICAgICAgICB0ZXh0LmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrLCBl
cnJiYWNrLCBoZWFkZXJzKSB7Ci0gICAgICAgICAgICB2YXIgeGhyID0gdGV4dC5jcmVhdGVYaHIo
KSwgaGVhZGVyOwotICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7Ci0KLSAg
ICAgICAgICAgIC8vQWxsb3cgcGx1Z2lucyBkaXJlY3QgYWNjZXNzIHRvIHhociBoZWFkZXJzCi0g
ICAgICAgICAgICBpZiAoaGVhZGVycykgewotICAgICAgICAgICAgICAgIGZvciAoaGVhZGVyIGlu
IGhlYWRlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVy
dHkoaGVhZGVyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFk
ZXIoaGVhZGVyLnRvTG93ZXJDYXNlKCksIGhlYWRlcnNbaGVhZGVyXSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vQWxsb3cgb3ZlcnJpZGVzIHNwZWNpZmllZCBpbiBjb25maWcKLSAgICAgICAgICAgIGlmICht
YXN0ZXJDb25maWcub25YaHIpIHsKLSAgICAgICAgICAgICAgICBtYXN0ZXJDb25maWcub25YaHIo
eGhyLCB1cmwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB4aHIub25yZWFkeXN0YXRl
Y2hhbmdlID0gZnVuY3Rpb24gKGV2dCkgewotICAgICAgICAgICAgICAgIHZhciBzdGF0dXMsIGVy
cjsKLSAgICAgICAgICAgICAgICAvL0RvIG5vdCBleHBsaWNpdGx5IGhhbmRsZSBlcnJvcnMsIHRo
b3NlIHNob3VsZCBiZQotICAgICAgICAgICAgICAgIC8vdmlzaWJsZSB2aWEgY29uc29sZSBvdXRw
dXQgaW4gdGhlIGJyb3dzZXIuCi0gICAgICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09
PSA0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0dXM7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXMgPiAzOTkgJiYgc3RhdHVzIDwgNjAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvL0FuIGh0dHAgNHh4IG9yIDV4eCBlcnJvci4gU2lnbmFsIGFuIGVy
cm9yLgotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gbmV3IEVycm9yKHVybCArICcgSFRU
UCBzdGF0dXM6ICcgKyBzdGF0dXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnhociA9
IHhocjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycmJhY2soZXJyKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhoci5y
ZXNwb25zZVRleHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hc3RlckNvbmZpZy5vblhockNvbXBsZXRlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtYXN0ZXJDb25maWcub25YaHJDb21wbGV0ZSh4aHIsIHVybCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAg
eGhyLnNlbmQobnVsbCk7Ci0gICAgICAgIH07Ci0gICAgfSBlbHNlIGlmIChtYXN0ZXJDb25maWcu
ZW52ID09PSAncmhpbm8nIHx8ICghbWFzdGVyQ29uZmlnLmVudiAmJgotICAgICAgICAgICAgdHlw
ZW9mIFBhY2thZ2VzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgamF2YSAhPT0gJ3VuZGVmaW5l
ZCcpKSB7Ci0gICAgICAgIC8vV2h5IEphdmEsIHdoeSBpcyB0aGlzIHNvIGF3a3dhcmQ/Ci0gICAg
ICAgIHRleHQuZ2V0ID0gZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHsKLSAgICAgICAgICAgIHZh
ciBzdHJpbmdCdWZmZXIsIGxpbmUsCi0gICAgICAgICAgICAgICAgZW5jb2RpbmcgPSAidXRmLTgi
LAotICAgICAgICAgICAgICAgIGZpbGUgPSBuZXcgamF2YS5pby5GaWxlKHVybCksCi0gICAgICAg
ICAgICAgICAgbGluZVNlcGFyYXRvciA9IGphdmEubGFuZy5TeXN0ZW0uZ2V0UHJvcGVydHkoImxp
bmUuc2VwYXJhdG9yIiksCi0gICAgICAgICAgICAgICAgaW5wdXQgPSBuZXcgamF2YS5pby5CdWZm
ZXJlZFJlYWRlcihuZXcgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcihuZXcgamF2YS5pby5GaWxl
SW5wdXRTdHJlYW0oZmlsZSksIGVuY29kaW5nKSksCi0gICAgICAgICAgICAgICAgY29udGVudCA9
ICcnOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWZmZXIgPSBu
ZXcgamF2YS5sYW5nLlN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIGxpbmUgPSBpbnB1
dC5yZWFkTGluZSgpOwotCi0gICAgICAgICAgICAgICAgLy8gQnl0ZSBPcmRlciBNYXJrIChCT00p
IC0gVGhlIFVuaWNvZGUgU3RhbmRhcmQsIHZlcnNpb24gMy4wLCBwYWdlIDMyNAotICAgICAgICAg
ICAgICAgIC8vIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbAotCi0gICAg
ICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdoZW4gd2UgdXNlIHV0Zi04LCB0aGUgQk9NIHNob3Vs
ZCBhcHBlYXIgYXMgIkVGIEJCIEJGIiwgYnV0IGl0IGRvZXNuJ3QgZHVlIHRvIHRoaXMgYnVnIGlu
IHRoZSBKREs6Ci0gICAgICAgICAgICAgICAgLy8gaHR0cDovL2J1Z3Muc3VuLmNvbS9idWdkYXRh
YmFzZS92aWV3X2J1Zy5kbz9idWdfaWQ9NDUwODA1OAotICAgICAgICAgICAgICAgIGlmIChsaW5l
ICYmIGxpbmUubGVuZ3RoKCkgJiYgbGluZS5jaGFyQXQoMCkgPT09IDB4ZmVmZikgewotICAgICAg
ICAgICAgICAgICAgICAvLyBFYXQgdGhlIEJPTSwgc2luY2Ugd2UndmUgYWxyZWFkeSBmb3VuZCB0
aGUgZW5jb2Rpbmcgb24gdGhpcyBmaWxlLAotICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2Ug
cGxhbiB0byBjb25jYXRlbmF0aW5nIHRoaXMgYnVmZmVyIHdpdGggb3RoZXJzOyB0aGUgQk9NIHNo
b3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGFwcGVhciBhdCB0aGUgdG9wIG9mIGEg
ZmlsZS4KLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKDEpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChsaW5lICE9PSBudWxsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1ZmZlci5hcHBlbmQobGluZSk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gaW5wdXQucmVhZExpbmUo
KSkgIT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVmZmVyLmFwcGVuZChs
aW5lU2VwYXJhdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVmZmVyLmFwcGVuZChs
aW5lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgd2Ug
cmV0dXJuIGEgSmF2YVNjcmlwdCBzdHJpbmcgYW5kIG5vdCBhIEphdmEgc3RyaW5nLgotICAgICAg
ICAgICAgICAgIGNvbnRlbnQgPSBTdHJpbmcoc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOyAvL1N0
cmluZwotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBpbnB1dC5jbG9z
ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FsbGJhY2soY29udGVudCk7Ci0gICAg
ICAgIH07Ci0gICAgfSBlbHNlIGlmIChtYXN0ZXJDb25maWcuZW52ID09PSAneHBjb25uZWN0JyB8
fCAoIW1hc3RlckNvbmZpZy5lbnYgJiYKLSAgICAgICAgICAgIHR5cGVvZiBDb21wb25lbnRzICE9
PSAndW5kZWZpbmVkJyAmJiBDb21wb25lbnRzLmNsYXNzZXMgJiYKLSAgICAgICAgICAgIENvbXBv
bmVudHMuaW50ZXJmYWNlcykpIHsKLSAgICAgICAgLy9BdmVydCB5b3VyIGdhemUhCi0gICAgICAg
IENjID0gQ29tcG9uZW50cy5jbGFzc2VzLAotICAgICAgICBDaSA9IENvbXBvbmVudHMuaW50ZXJm
YWNlczsKLSAgICAgICAgQ29tcG9uZW50cy51dGlsc1snaW1wb3J0J10oJ3Jlc291cmNlOi8vZ3Jl
L21vZHVsZXMvRmlsZVV0aWxzLmpzbScpOwotICAgICAgICB4cGNJc1dpbmRvd3MgPSAoJ0Btb3pp
bGxhLm9yZy93aW5kb3dzLXJlZ2lzdHJ5LWtleTsxJyBpbiBDYyk7Ci0KLSAgICAgICAgdGV4dC5n
ZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykgewotICAgICAgICAgICAgdmFyIGluU3RyZWFt
LCBjb252ZXJ0U3RyZWFtLCBmaWxlT2JqLAotICAgICAgICAgICAgICAgIHJlYWREYXRhID0ge307
Ci0KLSAgICAgICAgICAgIGlmICh4cGNJc1dpbmRvd3MpIHsKLSAgICAgICAgICAgICAgICB1cmwg
PSB1cmwucmVwbGFjZSgvXC8vZywgJ1xcJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZpbGVPYmogPSBuZXcgRmlsZVV0aWxzLkZpbGUodXJsKTsKLQotICAgICAgICAgICAgLy9YUENP
TSwgeW91IHNvIGNyYXp5Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGluU3Ry
ZWFtID0gQ2NbJ0Btb3ppbGxhLm9yZy9uZXR3b3JrL2ZpbGUtaW5wdXQtc3RyZWFtOzEnXQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZUluc3RhbmNlKENpLm5zSUZpbGVJbnB1dFN0
cmVhbSk7Ci0gICAgICAgICAgICAgICAgaW5TdHJlYW0uaW5pdChmaWxlT2JqLCAxLCAwLCBmYWxz
ZSk7Ci0KLSAgICAgICAgICAgICAgICBjb252ZXJ0U3RyZWFtID0gQ2NbJ0Btb3ppbGxhLm9yZy9p
bnRsL2NvbnZlcnRlci1pbnB1dC1zdHJlYW07MSddCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5jcmVhdGVJbnN0YW5jZShDaS5uc0lDb252ZXJ0ZXJJbnB1dFN0cmVhbSk7Ci0gICAg
ICAgICAgICAgICAgY29udmVydFN0cmVhbS5pbml0KGluU3RyZWFtLCAidXRmLTgiLCBpblN0cmVh
bS5hdmFpbGFibGUoKSwKLSAgICAgICAgICAgICAgICBDaS5uc0lDb252ZXJ0ZXJJbnB1dFN0cmVh
bS5ERUZBVUxUX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUik7Ci0KLSAgICAgICAgICAgICAgICBjb252
ZXJ0U3RyZWFtLnJlYWRTdHJpbmcoaW5TdHJlYW0uYXZhaWxhYmxlKCksIHJlYWREYXRhKTsKLSAg
ICAgICAgICAgICAgICBjb252ZXJ0U3RyZWFtLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgaW5T
dHJlYW0uY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhyZWFkRGF0YS52YWx1ZSk7
Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKChmaWxlT2JqICYmIGZpbGVPYmoucGF0aCB8fCAnJykgKyAnOiAnICsgZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotICAgIHJldHVybiB0ZXh0OwotfSk7CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUu
anMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZTA5YjVlM2IyMzExZDcxZTY4MGU4
NjI2M2M2NmI0OWI4ZWFiNTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9ib3dlcl9jb21wb25lbnRzL3JlcXVpcmVqcy9yZXF1
aXJlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjA1NCArMCwwIEBACi0vKiogdmltOiBldDp0cz00
OnN3PTQ6c3RzPTQKLSAqIEBsaWNlbnNlIFJlcXVpcmVKUyAyLjEuOSBDb3B5cmlnaHQgKGMpIDIw
MTAtMjAxMiwgVGhlIERvam8gRm91bmRhdGlvbiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQXZh
aWxhYmxlIHZpYSB0aGUgTUlUIG9yIG5ldyBCU0QgbGljZW5zZS4KLSAqIHNlZTogaHR0cDovL2dp
dGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMgZm9yIGRldGFpbHMKLSAqLwotLy9Ob3QgdXNpbmcg
c3RyaWN0OiB1bmV2ZW4gc3RyaWN0IHN1cHBvcnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVz
ZXMKLS8vcHJvYmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0
aGF0IG1heSBub3QgYmUgc3RyaWN0LgotLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1
ZSwgc2xvcHB5OiB0cnVlICovCi0vKmdsb2JhbCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQs
IGltcG9ydFNjcmlwdHMsIHNldFRpbWVvdXQsIG9wZXJhICovCi0KLXZhciByZXF1aXJlanMsIHJl
cXVpcmUsIGRlZmluZTsKLShmdW5jdGlvbiAoZ2xvYmFsKSB7Ci0gICAgdmFyIHJlcSwgcywgaGVh
ZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCi0gICAgICAgIGludGVyYWN0aXZlU2NyaXB0
LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCi0gICAgICAgIHZl
cnNpb24gPSAnMi4xLjknLAotICAgICAgICBjb21tZW50UmVnRXhwID0gLyhcL1wqKFtcc1xTXSo/
KVwqXC98KFteOl18XilcL1wvKC4qKSQpL21nLAotICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0g
L1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAotICAgICAg
ICBqc1N1ZmZpeFJlZ0V4cCA9IC9cLmpzJC8sCi0gICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwu
XC8vLAotICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCi0gICAgICAgIG9zdHJpbmcgPSBv
cC50b1N0cmluZywKLSAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCi0gICAgICAg
IGFwID0gQXJyYXkucHJvdG90eXBlLAotICAgICAgICBhcHNwID0gYXAuc3BsaWNlLAotICAgICAg
ICBpc0Jyb3dzZXIgPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Yg
bmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQpLAotICAgICAgICBp
c1dlYldvcmtlciA9ICFpc0Jyb3dzZXIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRl
ZmluZWQnLAotICAgICAgICAvL1BTMyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0
IG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGUKLSAgICAgICAgLy9zcGVjaWZpY2FsbHkuIFNlcXVl
bmNlIGlzICdsb2FkaW5nJywgJ2xvYWRlZCcsIGV4ZWN1dGlvbiwKLSAgICAgICAgLy8gdGhlbiAn
Y29tcGxldGUnLiBUaGUgVUEgY2hlY2sgaXMgdW5mb3J0dW5hdGUsIGJ1dCBub3Qgc3VyZSBob3cK
LSAgICAgICAgLy90byBmZWF0dXJlIHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCi0gICAg
ICAgIHJlYWR5UmVnRXhwID0gaXNCcm93c2VyICYmIG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ1BM
QVlTVEFUSU9OIDMnID8KLSAgICAgICAgICAgICAgICAgICAgICAvXmNvbXBsZXRlJC8gOiAvXihj
b21wbGV0ZXxsb2FkZWQpJC8sCi0gICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAotICAgICAg
ICAvL09oIHRoZSB0cmFnZWR5LCBkZXRlY3Rpbmcgb3BlcmEuIFNlZSB0aGUgdXNhZ2Ugb2YgaXNP
cGVyYSBmb3IgcmVhc29uLgotICAgICAgICBpc09wZXJhID0gdHlwZW9mIG9wZXJhICE9PSAndW5k
ZWZpbmVkJyAmJiBvcGVyYS50b1N0cmluZygpID09PSAnW29iamVjdCBPcGVyYV0nLAotICAgICAg
ICBjb250ZXh0cyA9IHt9LAotICAgICAgICBjZmcgPSB7fSwKLSAgICAgICAgZ2xvYmFsRGVmUXVl
dWUgPSBbXSwKLSAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKLQotICAgIGZ1bmN0aW9u
IGlzRnVuY3Rpb24oaXQpIHsKLSAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdb
b2JqZWN0IEZ1bmN0aW9uXSc7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNBcnJheShpdCkgewot
ICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVy
IGFuIGFycmF5LiBJZiB0aGUgZnVuYyByZXR1cm5zCi0gICAgICogYSB0cnVlIHZhbHVlLCBpdCB3
aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBlYWNoKGFy
eSwgZnVuYykgewotICAgICAgICBpZiAoYXJ5KSB7Ci0gICAgICAgICAgICB2YXIgaTsKLSAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpICs9IDEpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5n
IG92ZXIgYW4gYXJyYXkgYmFja3dhcmRzLiBJZiB0aGUgZnVuYwotICAgICAqIHJldHVybnMgYSB0
cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KLSAgICAgKi8KLSAgICBm
dW5jdGlvbiBlYWNoUmV2ZXJzZShhcnksIGZ1bmMpIHsKLSAgICAgICAgaWYgKGFyeSkgewotICAg
ICAgICAgICAgdmFyIGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSBhcnkubGVuZ3RoIC0gMTsgaSA+
IC0xOyBpIC09IDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ld
LCBpLCBhcnkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGhhc1By
b3Aob2JqLCBwcm9wKSB7Ci0gICAgICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIHByb3ApOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIGdldE93bihvYmosIHByb3ApIHsKLSAgICAgICAgcmV0dXJu
IGhhc1Byb3Aob2JqLCBwcm9wKSAmJiBvYmpbcHJvcF07Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogQ3ljbGVzIG92ZXIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rp
b24gZm9yIGVhY2gKLSAgICAgKiBwcm9wZXJ0eSB2YWx1ZS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVy
bnMgYSB0cnV0aHkgdmFsdWUsIHRoZW4gdGhlCi0gICAgICogaXRlcmF0aW9uIGlzIHN0b3BwZWQu
Ci0gICAgICovCi0gICAgZnVuY3Rpb24gZWFjaFByb3Aob2JqLCBmdW5jKSB7Ci0gICAgICAgIHZh
ciBwcm9wOwotICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7Ci0gICAgICAgICAgICBpZiAoaGFz
UHJvcChvYmosIHByb3ApKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZ1bmMob2JqW3Byb3BdLCBw
cm9wKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGUg
ZnVuY3Rpb24gdG8gbWl4IGluIHByb3BlcnRpZXMgZnJvbSBzb3VyY2UgaW50byB0YXJnZXQsCi0g
ICAgICogYnV0IG9ubHkgaWYgdGFyZ2V0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHByb3BlcnR5
IG9mIHRoZSBzYW1lIG5hbWUuCi0gICAgICovCi0gICAgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBz
b3VyY2UsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pIHsKLSAgICAgICAgaWYgKHNvdXJjZSkgewot
ICAgICAgICAgICAgZWFjaFByb3Aoc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZm9yY2UgfHwgIWhhc1Byb3AodGFyZ2V0LCBwcm9wKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoZGVlcFN0cmluZ01peGluICYmIHR5cGVvZiB2YWx1ZSAhPT0g
J3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0ge307Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRb
cHJvcF0sIHZhbHVlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVl
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRhcmdldDsKLSAgICB9Ci0KLSAgICAvL1Np
bWlsYXIgdG8gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGJ1dCB0aGUgJ3RoaXMnIG9iamVjdCBp
cyBzcGVjaWZpZWQKLSAgICAvL2ZpcnN0LCBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gcmVhZC9maWd1
cmUgb3V0IHdoYXQgJ3RoaXMnIHdpbGwgYmUuCi0gICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7
Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZm4uYXBw
bHkob2JqLCBhcmd1bWVudHMpOwotICAgICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNj
cmlwdHMoKSB7Ci0gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
c2NyaXB0Jyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZGVmYXVsdE9uRXJyb3IoZXJyKSB7Ci0g
ICAgICAgIHRocm93IGVycjsKLSAgICB9Ci0KLSAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwg
dGhhdCBleHByZXNzZWQgaW4KLSAgICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgotICAg
IGZ1bmN0aW9uIGdldEdsb2JhbCh2YWx1ZSkgewotICAgICAgICBpZiAoIXZhbHVlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGcgPSBnbG9iYWw7
Ci0gICAgICAgIGVhY2godmFsdWUuc3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKLSAgICAg
ICAgICAgIGcgPSBnW3BhcnRdOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIGc7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBlcnJvciB3aXRoIGEgcG9pbnRlciB0
byBhbiBVUkwgd2l0aCBtb3JlIGluZm9ybWF0aW9uLgotICAgICAqIEBwYXJhbSB7U3RyaW5nfSBp
ZCB0aGUgZXJyb3IgSUQgdGhhdCBtYXBzIHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCi0gICAgICog
QHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCi0gICAgICogQHBh
cmFtIHtFcnJvcn0gW2Vycl0gdGhlIG9yaWdpbmFsIGVycm9yLCBpZiB0aGVyZSBpcyBvbmUuCi0g
ICAgICoKLSAgICAgKiBAcmV0dXJucyB7RXJyb3J9Ci0gICAgICovCi0gICAgZnVuY3Rpb24gbWFr
ZUVycm9yKGlkLCBtc2csIGVyciwgcmVxdWlyZU1vZHVsZXMpIHsKLSAgICAgICAgdmFyIGUgPSBu
ZXcgRXJyb3IobXNnICsgJ1xuaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMn
ICsgaWQpOwotICAgICAgICBlLnJlcXVpcmVUeXBlID0gaWQ7Ci0gICAgICAgIGUucmVxdWlyZU1v
ZHVsZXMgPSByZXF1aXJlTW9kdWxlczsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAg
ZS5vcmlnaW5hbEVycm9yID0gZXJyOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlOwotICAg
IH0KLQotICAgIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAv
L0lmIGEgZGVmaW5lIGlzIGFscmVhZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAot
ICAgICAgICAvL2RvIG5vdCBvdmVyd3JpdGUuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAodHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgaWYgKGlz
RnVuY3Rpb24ocmVxdWlyZWpzKSkgewotICAgICAgICAgICAgLy9EbyBub3Qgb3ZlcndyaXRlIGFu
ZCBleGlzdGluZyByZXF1aXJlanMgaW5zdGFuY2UuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgY2ZnID0gcmVxdWlyZWpzOwotICAgICAgICByZXF1aXJlanMgPSB1bmRl
ZmluZWQ7Ci0gICAgfQotCi0gICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QK
LSAgICBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmICFpc0Z1bmN0aW9uKHJl
cXVpcmUpKSB7Ci0gICAgICAgIC8vYXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KLSAgICAg
ICAgY2ZnID0gcmVxdWlyZTsKLSAgICAgICAgcmVxdWlyZSA9IHVuZGVmaW5lZDsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBuZXdDb250ZXh0KGNvbnRleHROYW1lKSB7Ci0gICAgICAgIHZhciBpbkNo
ZWNrTG9hZGVkLCBNb2R1bGUsIGNvbnRleHQsIGhhbmRsZXJzLAotICAgICAgICAgICAgY2hlY2tM
b2FkZWRUaW1lb3V0SWQsCi0gICAgICAgICAgICBjb25maWcgPSB7Ci0gICAgICAgICAgICAgICAg
Ly9EZWZhdWx0cy4gRG8gbm90IHNldCBhIGRlZmF1bHQgZm9yIG1hcAotICAgICAgICAgICAgICAg
IC8vY29uZmlnIHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAotICAgICAgICAgICAgICAg
IC8vd2lsbCBydW4gZmFzdGVyIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCi0gICAgICAgICAgICAg
ICAgd2FpdFNlY29uZHM6IDcsCi0gICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKLSAgICAg
ICAgICAgICAgICBwYXRoczoge30sCi0gICAgICAgICAgICAgICAgcGtnczoge30sCi0gICAgICAg
ICAgICAgICAgc2hpbToge30sCi0gICAgICAgICAgICAgICAgY29uZmlnOiB7fQotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30sCi0gICAgICAgICAgICAvL3JlZ2lzdHJ5
IG9mIGp1c3QgZW5hYmxlZCBtb2R1bGVzLCB0byBzcGVlZAotICAgICAgICAgICAgLy9jeWNsZSBi
cmVha2luZyBjb2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCi0gICAgICAgICAgICAvL2FyZSByZWdp
c3RlcmVkLCBidXQgbm90IGFjdGl2YXRlZC4KLSAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeSA9
IHt9LAotICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKLSAgICAgICAgICAgIGRlZlF1ZXVl
ID0gW10sCi0gICAgICAgICAgICBkZWZpbmVkID0ge30sCi0gICAgICAgICAgICB1cmxGZXRjaGVk
ID0ge30sCi0gICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCi0gICAgICAgICAgICB1bm5v
cm1hbGl6ZWRDb3VudGVyID0gMTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogVHJpbXMgdGhl
IC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KLSAgICAgICAgICogSXQg
d2lsbCBrZWVwIGEgbGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQotICAg
ICAgICAgKiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUg
bG9va3VwcywKLSAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVt
YXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCwKLSAgICAgICAgICogYWxsIHBhdGhzIHRoYXQgdXNl
IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGxvb2sgbm9ybWFsaXplZC4KLSAgICAgICAgICogTk9URTog
dGhpcyBtZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgotICAgICAgICAgKiBAcGFyYW0g
e0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCi0gICAgICAgICAqLwotICAg
ICAgICBmdW5jdGlvbiB0cmltRG90cyhhcnkpIHsKLSAgICAgICAgICAgIHZhciBpLCBwYXJ0Owot
ICAgICAgICAgICAgZm9yIChpID0gMDsgYXJ5W2ldOyBpICs9IDEpIHsKLSAgICAgICAgICAgICAg
ICBwYXJ0ID0gYXJ5W2ldOwotICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAg
aSAtPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiAoYXJ5WzJdID09PSAnLi4nIHx8IGFyeVsw
XSA9PT0gJy4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vRW5kIG9mIHRoZSBsaW5l
LiBLZWVwIGF0IGxlYXN0IG9uZSBub24tZG90Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3Bh
dGggc2VnbWVudCBhdCB0aGUgZnJvbnQgc28gaXQgY2FuIGJlIG1hcHBlZAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy9jb3JyZWN0bHkgdG8gZGlzay4gT3RoZXJ3aXNlLCB0aGVyZSBpcyBsaWtl
bHkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vbm8gcGF0aCBtYXBwaW5nIGZvciBhIHBhdGgg
c3RhcnRpbmcgd2l0aCAnLi4nLgotICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGlzIGNhbiBz
dGlsbCBmYWlsLCBidXQgY2F0Y2hlcyB0aGUgbW9zdCByZWFzb25hYmxlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvL3VzZXMgb2YgLi4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhcnkuc3BsaWNlKGkgLSAxLCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGkg
LT0gMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHaXZlbiBhIHJlbGF0
aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KLSAgICAg
ICAgICogYSByZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4KLSAgICAgICAg
ICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKLSAgICAgICAgICogQHBh
cmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJl
bGF0aXZlCi0gICAgICAgICAqIHRvLgotICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5
TWFwIGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCi0gICAgICAgICAq
IG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJ
RC4KLSAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCi0gICAgICAg
ICAqLwotICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFw
KSB7Ci0gICAgICAgICAgICB2YXIgcGtnTmFtZSwgcGtnQ29uZmlnLCBtYXBWYWx1ZSwgbmFtZVBh
cnRzLCBpLCBqLCBuYW1lU2VnbWVudCwKLSAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJ
LCBmb3VuZFN0YXJNYXAsIHN0YXJJLAotICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IGJhc2VO
YW1lICYmIGJhc2VOYW1lLnNwbGl0KCcvJyksCi0gICAgICAgICAgICAgICAgbm9ybWFsaXplZEJh
c2VQYXJ0cyA9IGJhc2VQYXJ0cywKLSAgICAgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAot
ICAgICAgICAgICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107Ci0KLSAgICAgICAgICAg
IC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy4KLSAgICAgICAgICAgIGlmIChuYW1lICYmIG5h
bWUuY2hhckF0KDApID09PSAnLicpIHsKLSAgICAgICAgICAgICAgICAvL0lmIGhhdmUgYSBiYXNl
IG5hbWUsIHRyeSB0byBub3JtYWxpemUgYWdhaW5zdCBpdCwKLSAgICAgICAgICAgICAgICAvL290
aGVyd2lzZSwgYXNzdW1lIGl0IGlzIGEgdG9wLWxldmVsIHJlcXVpcmUgdGhhdCB3aWxsCi0gICAg
ICAgICAgICAgICAgLy9iZSByZWxhdGl2ZSB0byBiYXNlVXJsIGluIHRoZSBlbmQuCi0gICAgICAg
ICAgICAgICAgaWYgKGJhc2VOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24o
Y29uZmlnLnBrZ3MsIGJhc2VOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0
aGUgYmFzZU5hbWUgaXMgYSBwYWNrYWdlIG5hbWUsIHRoZW4ganVzdCB0cmVhdCBpdCBhcyBvbmUK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vbmFtZSB0byBjb25jYXQgdGhlIG5hbWUgd2l0aC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMg
PSBbYmFzZU5hbWVdOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9wIG9mZiB0aGUg
bGFzdCBwYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0
aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwotICAgICAgICAg
ICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90
d28vdGhyZWUnLCBtYXBzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdvL3Ro
cmVlLmpzJywgYnV0IHdlIHdhbnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgotICAgICAg
ICAgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCi0gICAgICAgICAgICAgICAg
ICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0
cy5sZW5ndGggLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIG5hbWUgPSBub3JtYWxpemVkQmFzZVBhcnRzLmNvbmNhdChuYW1lLnNwbGl0KCcvJykpOwot
ICAgICAgICAgICAgICAgICAgICB0cmltRG90cyhuYW1lKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvL1NvbWUgdXNlIG9mIHBhY2thZ2VzIG1heSB1c2UgYSAuIHBhdGggdG8gcmVmZXJlbmNlIHRo
ZQotICAgICAgICAgICAgICAgICAgICAvLydtYWluJyBtb2R1bGUgbmFtZSwgc28gbm9ybWFsaXpl
IGZvciB0aGF0LgotICAgICAgICAgICAgICAgICAgICBwa2dDb25maWcgPSBnZXRPd24oY29uZmln
LnBrZ3MsIChwa2dOYW1lID0gbmFtZVswXSkpOwotICAgICAgICAgICAgICAgICAgICBuYW1lID0g
bmFtZS5qb2luKCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwa2dDb25maWcgJiYgbmFt
ZSA9PT0gcGtnTmFtZSArICcvJyArIHBrZ0NvbmZpZy5tYWluKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lID0gcGtnTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAobmFtZS5pbmRleE9mKCcuLycpID09PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIE5vIGJhc2VOYW1lLCBzbyB0aGlzIGlzIElEIGlzIHJlc29sdmVkIHJlbGF0
aXZlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGJhc2VVcmwsIHB1bGwgb2ZmIHRoZSBsZWFk
aW5nIGRvdC4KLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDIpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9BcHBseSBt
YXAgY29uZmlnIGlmIGF2YWlsYWJsZS4KLSAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAg
JiYgKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSkgewotICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9
IG5hbWUuc3BsaXQoJy8nKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaSA9IG5hbWVQYXJ0cy5s
ZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQg
PSBuYW1lUGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChiYXNlUGFydHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9u
Z2VzdCBiYXNlTmFtZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5n
dGhzIG9mIGJhc2VQYXJ0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQ
YXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXBWYWx1ZSA9IGdldE93bihtYXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJykp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBj
b25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvL3RoaXMgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFw
VmFsdWUsIG5hbWVTZWdtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1hcFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNo
LCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kSSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBo
b2xkIG9uIHRvIGl0LAotICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRl
ciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKLSAgICAgICAgICAgICAgICAgICAg
Ly9jb25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1l
U2VnbWVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93
bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFySSA9
IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgewotICAgICAgICAgICAgICAg
ICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRJ
ID0gc3Rhckk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGZvdW5k
TWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBm
b3VuZE1hcCk7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IG5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkg
ewotICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgewotICAgICAgICAgICAgICAgIGVhY2goc2Ny
aXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0Tm9kZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
c2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2Rh
dGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdE5v
ZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgewotICAgICAgICAgICAgdmFy
IHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7Ci0gICAgICAgICAgICBpZiAo
cGF0aENvbmZpZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcubGVuZ3RoID4g
MSkgewotICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNp
bmNlIGl0IGZhaWxlZCwgYW5kCi0gICAgICAgICAgICAgICAgLy9yZXRyeQotICAgICAgICAgICAg
ICAgIHBhdGhDb25maWcuc2hpZnQoKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUu
dW5kZWYoaWQpOwotICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShbaWRdKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCi0gICAg
ICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQotICAgICAg
ICAvL2RpZCBub3QgaGF2ZSBhIHBsdWdpbiBwcmVmaXguCi0gICAgICAgIGZ1bmN0aW9uIHNwbGl0
UHJlZml4KG5hbWUpIHsKLSAgICAgICAgICAgIHZhciBwcmVmaXgsCi0gICAgICAgICAgICAgICAg
aW5kZXggPSBuYW1lID8gbmFtZS5pbmRleE9mKCchJykgOiAtMTsKLSAgICAgICAgICAgIGlmIChp
bmRleCA+IC0xKSB7Ci0gICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwg
aW5kZXgpOwotICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEs
IG5hbWUubGVuZ3RoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBbcHJlZml4
LCBuYW1lXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDcmVhdGVzIGEg
bW9kdWxlIG1hcHBpbmcgdGhhdCBpbmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUKLSAgICAg
ICAgICogbmFtZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3
aWxsCi0gICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1h
bGl6ZSgpCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBt
b2R1bGUgbmFtZQotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0g
cGFyZW50IG1vZHVsZSBtYXAKLSAgICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwgdXNlZCB0
byByZXNvbHZlIHJlbGF0aXZlIG5hbWVzLgotICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlz
Tm9ybWFsaXplZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KLSAgICAgICAgICogVGhp
cyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4K
LSAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1hcCBjb25m
aWcgdG8gdGhlIElELgotICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFw
IGlzIGZvciBhIGRlcGVuZGVuY3kuCi0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm5zIHtP
YmplY3R9Ci0gICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUs
IHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgewotICAgICAgICAgICAg
dmFyIHVybCwgcGx1Z2luTW9kdWxlLCBzdWZmaXgsIG5hbWVQYXJ0cywKLSAgICAgICAgICAgICAg
ICBwcmVmaXggPSBudWxsLAotICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1
bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCi0gICAgICAgICAgICAgICAgb3Jp
Z2luYWxOYW1lID0gbmFtZSwKLSAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCi0gICAg
ICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKLQotICAgICAgICAgICAgLy9JZiBubyBu
YW1lLCB0aGVuIGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgotICAg
ICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgotICAgICAgICAgICAgaWYgKCFuYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgaXNEZWZpbmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBuYW1lID0gJ19A
cicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOwotICAgICAgICAgICAgcHJlZml4ID0gbmFt
ZVBhcnRzWzBdOwotICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKLQotICAgICAgICAg
ICAgaWYgKHByZWZpeCkgewotICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVm
aXgsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKLSAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUg
PSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KLSAg
ICAgICAgICAgIGlmIChuYW1lKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxp
emUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0
cyBub3JtYWxpemUgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5h
bWUgPSBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1l
LCBhcHBseU1hcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0g
bm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vQSBy
ZWd1bGFyIG1vZHVsZS4KLSAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3Jt
YWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vTm9ybWFsaXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZwot
ICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBj
b25maWcgdmFsdWVzIG11c3QKLSAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJlIG5vcm1h
bGl6ZWQsIHNvIGRvIG5vdCBuZWVkIHRvIHJlZG8gdGhhdCBwYXJ0LgotICAgICAgICAgICAgICAg
ICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKLSAgICAgICAgICAgICAgICAgICAgbm9y
bWFsaXplZE5hbWUgPSBuYW1lUGFydHNbMV07Ci0gICAgICAgICAgICAgICAgICAgIGlzTm9ybWFs
aXplZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5uYW1lVG9V
cmwobm9ybWFsaXplZE5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0
ZXJtaW5lZCBpZiBpdCBuZWVkcwotICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBp
dCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQotICAgICAgICAgICAg
Ly9pZHMgdGhhdCBtYXkgY29uZmxpY3QgY2FuIGJlIHNlcGFyYXRlLgotICAgICAgICAgICAgc3Vm
Zml4ID0gcHJlZml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/Ci0gICAgICAg
ICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAx
KSA6Ci0gICAgICAgICAgICAgICAgICAgICAnJzsKLQotICAgICAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCwKLSAgICAgICAgICAgICAgICBuYW1lOiBub3Jt
YWxpemVkTmFtZSwKLSAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwK
LSAgICAgICAgICAgICAgICB1bm5vcm1hbGl6ZWQ6ICEhc3VmZml4LAotICAgICAgICAgICAgICAg
IHVybDogdXJsLAotICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAot
ICAgICAgICAgICAgICAgIGlzRGVmaW5lOiBpc0RlZmluZSwKLSAgICAgICAgICAgICAgICBpZDog
KHByZWZpeCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxp
emVkTmFtZSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkgKyBzdWZm
aXgKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBnZXRNb2R1
bGUoZGVwTWFwKSB7Ci0gICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCi0gICAgICAgICAg
ICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7Ci0KLSAgICAgICAgICAgIGlmICghbW9k
KSB7Ci0gICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRleHQuTW9k
dWxlKGRlcE1hcCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtb2Q7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7Ci0gICAg
ICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCi0gICAgICAgICAgICAgICAgbW9kID0gZ2V0T3du
KHJlZ2lzdHJ5LCBpZCk7Ci0KLSAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAm
JgotICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkg
ewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmaW5lZCcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZm4oZGVmaW5lZFtpZF0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGZuKG1vZC5lcnJvcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwg
ZXJyYmFjaykgewotICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKLSAg
ICAgICAgICAgICAgICBub3RpZmllZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoZXJyYmFj
aykgewotICAgICAgICAgICAgICAgIGVycmJhY2soZXJyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtb2QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1v
ZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBjaGVja3MuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtb2QuZXJyb3IgPSBlcnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50
cy5lcnJvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlcS5vbkVycm9yKGVycik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEludGVybmFsIG1ldGhv
ZCB0byB0cmFuc2ZlciBnbG9iYWxRdWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncwotICAgICAg
ICAgKiBkZWZRdWV1ZS4KLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxR
dWV1ZSgpIHsKLSAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1z
IGludG8gdGhlIGNvbnRleHQncyBkZWZRdWV1ZQotICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1
ZXVlLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIC8vQXJyYXkgc3BsaWNlIGluIHRoZSB2YWx1
ZXMgc2luY2UgdGhlIGNvbnRleHQgY29kZSBoYXMgYQotICAgICAgICAgICAgICAgIC8vbG9jYWwg
dmFyIHJlZiB0byBkZWZRdWV1ZSwgc28gY2Fubm90IGp1c3QgcmVhc3NpZ24gdGhlIG9uZQotICAg
ICAgICAgICAgICAgIC8vb24gY29udGV4dC4KLSAgICAgICAgICAgICAgICBhcHNwLmFwcGx5KGRl
ZlF1ZXVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZlF1ZXVlLmxlbmd0aCAtIDEs
IDBdLmNvbmNhdChnbG9iYWxEZWZRdWV1ZSkpOwotICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1
ZXVlID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBoYW5kbGVycyA9
IHsKLSAgICAgICAgICAgICdyZXF1aXJlJzogZnVuY3Rpb24gKG1vZCkgewotICAgICAgICAgICAg
ICAgIGlmIChtb2QucmVxdWlyZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJl
cXVpcmU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChtb2QucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0
aW9uIChtb2QpIHsKLSAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pc0RlZmluZSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobW9kLmV4cG9ydHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2Qu
ZXhwb3J0czsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1vZC5tb2R1bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICht
b2QubW9kdWxlID0gewotICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uZmlnOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IGdldE93bihj
b25maWcucGtncywgbW9kLm1hcC5pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Rm9yIHBhY2thZ2VzLCBvbmx5IHN1cHBvcnQgY29uZmlnIHRhcmdldGVkCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYXQgdGhlIG1haW4gbW9kdWxlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGMgPSBwa2cgPyBnZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCArICcv
JyArIHBrZy5tYWluKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
dE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIGMgfHwge307Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwb3J0czogZGVmaW5lZFttb2QubWFwLmlkXQotICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgewotICAgICAgICAgICAg
Ly9DbGVhbiB1cCBtYWNoaW5lcnkgdXNlZCBmb3Igd2FpdGluZyBtb2R1bGVzLgotICAgICAgICAg
ICAgZGVsZXRlIHJlZ2lzdHJ5W2lkXTsKLSAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0
cnlbaWRdOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRy
YWNlZCwgcHJvY2Vzc2VkKSB7Ci0gICAgICAgICAgICB2YXIgaWQgPSBtb2QubWFwLmlkOwotCi0g
ICAgICAgICAgICBpZiAobW9kLmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vy
cm9yJywgbW9kLmVycm9yKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
dHJhY2VkW2lkXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWFjaChtb2QuZGVwTWFwcywgZnVu
Y3Rpb24gKGRlcE1hcCwgaSkgewotICAgICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBN
YXAuaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRl
cElkKTsKLQotICAgICAgICAgICAgICAgICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2
ZSBub3QgY29tcGxldGVkCi0gICAgICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28g
c3RpbGwgaW4gdGhlIHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAvL2FuZCBvbmx5IGlm
IGl0IGhhcyBub3QgYmVlbiBtYXRjaGVkIHVwCi0gICAgICAgICAgICAgICAgICAgIC8vaW4gdGhl
IG1vZHVsZSBhbHJlYWR5LgotICAgICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVw
TWF0Y2hlZFtpXSAmJiAhcHJvY2Vzc2VkW2RlcElkXSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGdldE93bih0cmFjZWQsIGRlcElkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1vZC5kZWZpbmVEZXAoaSwgZGVmaW5lZFtkZXBJZF0pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1vZC5jaGVjaygpOyAvL3Bhc3MgZmFsc2U/Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVw
LCB0cmFjZWQsIHByb2Nlc3NlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBwcm9j
ZXNzZWRbaWRdID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGNoZWNrTG9hZGVkKCkgewotICAgICAgICAgICAgdmFyIG1hcCwgbW9kSWQsIGVyciwg
dXNpbmdQYXRoRmFsbGJhY2ssCi0gICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmln
LndhaXRTZWNvbmRzICogMTAwMCwKLSAgICAgICAgICAgICAgICAvL0l0IGlzIHBvc3NpYmxlIHRv
IGRpc2FibGUgdGhlIHdhaXQgaW50ZXJ2YWwgYnkgdXNpbmcgd2FpdFNlY29uZHMgb2YgMC4KLSAg
ICAgICAgICAgICAgICBleHBpcmVkID0gd2FpdEludGVydmFsICYmIChjb250ZXh0LnN0YXJ0VGlt
ZSArIHdhaXRJbnRlcnZhbCkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKLSAgICAgICAgICAgICAg
ICBub0xvYWRzID0gW10sCi0gICAgICAgICAgICAgICAgcmVxQ2FsbHMgPSBbXSwKLSAgICAgICAg
ICAgICAgICBzdGlsbExvYWRpbmcgPSBmYWxzZSwKLSAgICAgICAgICAgICAgICBuZWVkQ3ljbGVD
aGVjayA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vRG8gbm90IGJvdGhlciBpZiB0aGlzIGNhbGwg
d2FzIGEgcmVzdWx0IG9mIGEgY3ljbGUgYnJlYWsuCi0gICAgICAgICAgICBpZiAoaW5DaGVja0xv
YWRlZCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW5DaGVja0xvYWRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vRmlndXJlIG91dCB0
aGUgc3RhdGUgb2YgYWxsIHRoZSBtb2R1bGVzLgotICAgICAgICAgICAgZWFjaFByb3AoZW5hYmxl
ZFJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7Ci0gICAgICAgICAgICAgICAgbWFwID0gbW9kLm1h
cDsKLSAgICAgICAgICAgICAgICBtb2RJZCA9IG1hcC5pZDsKLQotICAgICAgICAgICAgICAgIC8v
U2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCi0gICAg
ICAgICAgICAgICAgaWYgKCFtb2QuZW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZp
bmUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vSWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMg
bm90Ci0gICAgICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJl
bWVtYmVyIGl0LgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJl
ZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9Mb2Fkcy5wdXNoKG1vZElkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVT
Y3JpcHQobW9kSWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmlu
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbWFwLnByZWZpeCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2Fk
aW5nIGlzIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0
aG91Z2gsIGtlZXAgZ29pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNl
IGl0IG1heSBiZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKG5lZWRDeWNsZUNoZWNrID0gZmFsc2UpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMu
bGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cg
ZXJyb3Igb2YgdW5sb2FkZWQgbW9kdWxlcy4KLSAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJy
b3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVs
bCwgbm9Mb2Fkcyk7Ci0gICAgICAgICAgICAgICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5j
b250ZXh0TmFtZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4K
LSAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgewotICAgICAgICAgICAgICAgIGVhY2go
cmVxQ2FsbHMsIGZ1bmN0aW9uIChtb2QpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNs
ZShtb2QsIHt9LCB7fSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxv
YWQgaXMgc29tZXRoaW5nCi0gICAgICAgICAgICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3Vy
Y2UsIG9yIHRoZXJlIGFyZSBzdGlsbCBvdXRzdGFuZGluZwotICAgICAgICAgICAgLy9zY3JpcHRz
LCB0aGVuIGp1c3QgdHJ5IGJhY2sgbGF0ZXIuCi0gICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8
IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKLSAgICAgICAgICAgICAgICAv
L1NvbWV0aGluZyBpcyBzdGlsbCB3YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25s
eQotICAgICAgICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVj
dC4KLSAgICAgICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNo
ZWNrTG9hZGVkVGltZW91dElkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGlt
ZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a0xvYWRlZCgpOwotICAgICAgICAgICAgICAgICAgICB9LCA1MCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7Ci0gICAgICAgICAg
ICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKLSAgICAg
ICAgICAgIHRoaXMubWFwID0gbWFwOwotICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNv
bmZpZy5zaGltLCBtYXAuaWQpOwotICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107Ci0g
ICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXTsKLSAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hl
ZCA9IFtdOwotICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307Ci0gICAgICAgICAgICB0
aGlzLmRlcENvdW50ID0gMDsKLQotICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFj
dG9yeQotICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW10sCi0gICAgICAgICAgICAgICB0
aGlzLmVuYWJsZWQsIHRoaXMuZmV0Y2hlZAotICAgICAgICAgICAgKi8KLSAgICAgICAgfTsKLQot
ICAgICAgICBNb2R1bGUucHJvdG90eXBlID0gewotICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24g
KGRlcE1hcHMsIGZhY3RvcnksIGVycmJhY2ssIG9wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBv
cHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1v
cmUgaW5pdHMgaWYgYWxyZWFkeSBkb25lLiBDYW4gaGFwcGVuIGlmIHRoZXJlCi0gICAgICAgICAg
ICAgICAgLy9hcmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRo
YXQgaXMgbm90Ci0gICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBp
dCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgotICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRl
ZCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKLQotICAgICAgICAgICAgICAg
IGlmIChlcnJiYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9y
cyBvbiB0aGlzIG1vZHVsZS4KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBl
cnJiYWNrKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUg
YXJlIGVycm9yIGxpc3RlbmVycwotICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxl
LCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgotICAgICAgICAgICAgICAg
ICAgICBlcnJiYWNrID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKLSAgICAgICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2Yg
dGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRoYXQKLSAgICAgICAgICAgICAgICAvL3NvdXJjZSBp
bnB1dHMgYXJlIG5vdCBtb2RpZmllZC4gRm9yIGV4YW1wbGUKLSAgICAgICAgICAgICAgICAvLyJz
aGltIiBkZXBzIGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCi0gICAgICAgICAgICAg
ICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKLSAg
ICAgICAgICAgICAgICAvL3dvdWxkIGFmZmVjdCB0aGF0IGNvbmZpZy4KLSAgICAgICAgICAgICAg
ICB0aGlzLmRlcE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7Ci0KLSAgICAgICAg
ICAgICAgICB0aGlzLmVycmJhY2sgPSBlcnJiYWNrOwotCi0gICAgICAgICAgICAgICAgLy9JbmRp
Y2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKLSAgICAgICAgICAgICAgICB0aGlz
LmluaXRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMu
aWdub3JlOwotCi0gICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRo
aXMgbW9kdWxlIGluIGVuYWJsZWQgbW9kZSwKLSAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhh
dmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAotICAgICAgICAg
ICAgICAgIC8vdGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2Fs
bGVkLiBTbwotICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJp
Z2dlciBkZXBlbmRlbmNpZXMgYXMgZW5hYmxlZC4KLSAgICAgICAgICAgICAgICBpZiAob3B0aW9u
cy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkgewotICAgICAgICAgICAgICAgICAgICAvL0VuYWJs
ZSB0aGlzIG1vZHVsZSBhbmQgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgICAgICAgICAvL1dp
bGwgY2FsbCB0aGlzLmNoZWNrKCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNr
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgZGVm
aW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgewotICAgICAgICAgICAgICAgIC8vQmVj
YXVzZSBvZiBjeWNsZXMsIGRlZmluZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4KLSAgICAgICAgICAg
ICAgICAvL2V4cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgotICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ldKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
ZGVwTWF0Y2hlZFtpXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQg
LT0gMTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0
czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBmZXRj
aDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB0aGlzLmZldGNoZWQgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgY29udGV4dC5zdGFy
dFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwotCi0gICAgICAgICAgICAgICAgdmFyIG1h
cCA9IHRoaXMubWFwOwotCi0gICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3Ig
YSBwbHVnaW4gbWFuYWdlZCByZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1
Z2luIHRvIGxvYWQgaXQgbm93LgotICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQotICAgICAgICAgICAg
ICAgICAgICB9KSh0aGlzLnNoaW0uZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBs
dWdpbigpIDogdGhpcy5sb2FkKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5j
eS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVn
aW4oKSA6IHRoaXMubG9hZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0K
LSAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIgdXJs
ID0gdGhpcy5tYXAudXJsOwotCi0gICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3ku
Ci0gICAgICAgICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5sb2FkKHRoaXMubWFwLmlkLCB1cmwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1
bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAotICAgICAgICAgICAgICog
ZGVmaW5lIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjaGVjazogZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHZhciBlcnIsIGNqc01vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgaWQg
PSB0aGlzLm1hcC5pZCwKLSAgICAgICAgICAgICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVw
RXhwb3J0cywKLSAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKLSAg
ICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKLQotICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5pbml0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lcnJvcikgewotICAgICAgICAgICAg
ICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmICghdGhpcy5kZWZpbmluZykgewotICAgICAgICAgICAgICAgICAgICAvL1RoZSBm
YWN0b3J5IGNvdWxkIHRyaWdnZXIgYW5vdGhlciByZXF1aXJlIGNhbGwKLSAgICAgICAgICAgICAg
ICAgICAgLy90aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bwotICAg
ICAgICAgICAgICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhl
IHByb2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMg
d29yay4KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwg
ZmF2b3IgcGFzc2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0
ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLiBIb3dldmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vb25seSBkbyBpdCBmb3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQg
Zm9yIGZhaWx1cmVzIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVpciBjYWxs
YmFja3MgKCM2OTkpLiBIb3dldmVyIGlmIGEgZ2xvYmFsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy9vbkVycm9yIGlzIHNldCwgdXNlIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IgIT09IGRlZmF1bHRPbkVy
cm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZh
Y3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnIgPSBlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRz
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy9JZiBzZXR0aW5nIGV4cG9ydHMgdmlhICdtb2R1bGUnIGlzIGluIHBsYXksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmF2b3IgdGhhdCBvdmVyIHJldHVybiB2
YWx1ZSBhbmQgZXhwb3J0cy4gQWZ0ZXIgdGhhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy9mYXZvciBhIG5vbi11bmRlZmluZWQgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cyB1
c2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZSA9IHRoaXMubW9k
dWxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlLmV4cG9ydHMg
IT09IHVuZGVmaW5lZCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vTWFrZSBzdXJlIGl0IGlzIG5vdCBhbHJlYWR5IHRoZSBleHBvcnRzIHZhbHVlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlLmV4cG9ydHMgIT09IHRo
aXMuZXhwb3J0cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0
cyA9IGNqc01vZHVsZS5leHBvcnRzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGV4cG9ydHMgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnVzaW5nRXhwb3J0cykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9leHBvcnRzIGFscmVhZHkgc2V0
IHRoZSBkZWZpbmVkIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwb3J0cyA9IHRoaXMuZXhwb3J0czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJl
cXVpcmVNYXAgPSB0aGlzLm1hcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
LnJlcXVpcmVNb2R1bGVzID0gdGhpcy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVs
bDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhp
cy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoKHRoaXMuZXJyb3IgPSBlcnIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMg
PSBleHBvcnRzOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZp
bmUgJiYgIXRoaXMuaWdub3JlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5l
ZFtpZF0gPSBleHBvcnRzOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5v
blJlc291cmNlTG9hZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25S
ZXNvdXJjZUxvYWQoY29udGV4dCwgdGhpcy5tYXAsIHRoaXMuZGVwTWFwcyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvL0NsZWFuIHVwCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGVh
blJlZ2lzdHJ5KGlkKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vRmlu
aXNoZWQgdGhlIGRlZmluZSBzdGFnZS4gQWxsb3cgY2FsbGluZyBjaGVjayBhZ2FpbgotICAgICAg
ICAgICAgICAgICAgICAvL3RvIGFsbG93IGRlZmluZSBub3RpZmljYXRpb25zIGJlbG93IGluIHRo
ZSBjYXNlIG9mIGEKLSAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kZWZpbmluZyA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLmRlZmluZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kZWZpbmVFbWl0dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMuZW1pdCgnZGVmaW5lZCcsIHRoaXMuZXhwb3J0cyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGNh
bGxQbHVnaW46IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5t
YXAsCi0gICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkLAotICAgICAgICAgICAgICAgICAg
ICAvL01hcCBhbHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KLSAgICAgICAgICAgICAgICAg
ICAgcGx1Z2luTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4KTsKLQotICAgICAgICAgICAg
ICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0Ci0g
ICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCi0gICAgICAgICAgICAg
ICAgdGhpcy5kZXBNYXBzLnB1c2gocGx1Z2luTWFwKTsKLQotICAgICAgICAgICAgICAgIG9uKHBs
dWdpbk1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyIGxvYWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6ZWRNb2QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5tYXAubmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudE5hbWUgPSB0aGlzLm1hcC5wYXJlbnRNYXAgPyB0aGlzLm1hcC5w
YXJlbnRNYXAubmFtZSA6IG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVp
cmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRNYXAsIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgICAgICAvL0lmIGN1cnJlbnQgbWFwIGlzIG5v
dCBub3JtYWxpemVkLCB3YWl0IGZvciB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vbm9ybWFs
aXplZCBuYW1lIHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51aW5nLgotICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvL05vcm1hbGl6ZSB0aGUgSUQgaWYgdGhlIHBsdWdpbiBhbGxvd3MgaXQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwg
cGFyZW50TmFtZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
cHJlZml4IGFuZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0
aGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1hcCA9IG1ha2VNb2R1bGVN
YXAobWFwLnByZWZpeCArICchJyArIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wYXJlbnRNYXApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgb24obm9ybWFsaXplZE1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4g
dmFsdWU7IH0sIG51bGwsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
YWJsZWQ6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6
IHRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVk
TW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFw
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJv
cicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5lbmFibGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywg
ZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10s
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3Ig
PSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuaW5pdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBl
cnI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBtb2R1
bGVzIGZvciB0aGlzIG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhl
eSB3aWxsIG5ldmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFsaXpl
ZCcpID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0
cnkobW9kLm1hcC5pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJy
KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9BbGxv
dyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQot
ICAgICAgICAgICAgICAgICAgICAvL2NvbnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhlIGxv
YWQuCi0gICAgICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0
aW9uICh0ZXh0LCB0ZXh0QWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBl
dmlsOiB0cnVlICovCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IG1h
cC5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1
bGVNYXAobW9kdWxlTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJh
Y3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBv
ZiAyLjEuMCwgc3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBl
ciByZXNvdXJjZS4gU3RpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBvbGQg
c3R5bGUgb2YgcGFzc2luZyBtb2R1bGVOYW1lIGJ1dCBkaXNjYXJkCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvL3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0ID0gdGV4dEFsdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQgbWF0
Y2hpbmcgZm9yIElFIGZvciBhbnkgZGVmaW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAvL2Nh
bGxzIGluIHRoZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5IGNy
ZWF0aW5nIGEgbW9kdWxlIGluc3RhbmNlIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgLy9p
dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBt
b2R1bGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmln
LCBpZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21vZHVs
ZU5hbWVdID0gY29uZmlnLmNvbmZpZ1tpZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxLmV4ZWModGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdm
cm9tdGV4dGV2YWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2Zyb21UZXh0IGV2YWwgZm9yICcgKyBpZCArCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbaWRdKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBl
bmRlbmN5IGZvciB0aGUgcGx1Z2luCi0gICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1vZHVs
ZSB0byB0aGUgdmFsdWUgZm9yIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3Vy
Y2UgSUQuCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVd
LCBsb2FkKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxp
YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmluZyB3
aXRoIG5vIHBhdGggdGhhdCBhY3R1YWxseSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAv
L3JlZmVyZW5jZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCi0gICAgICAgICAgICAgICAgICAgIHBs
dWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7Ci0gICAgICAg
ICAgICAgICAgfSkpOwotCi0gICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFw
LCB0aGlzKTsKLSAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlkXSA9
IHBsdWdpbk1hcDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0gPSB0
aGlzOwotICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7Ci0KLSAgICAgICAgICAg
ICAgICAvL1NldCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAot
ICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQg
Y2FsbGJhY2tzCi0gICAgICAgICAgICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0cmln
Z2VyIGluYWR2ZXJ0ZW50IGxvYWQKLSAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50
IHN0aWxsIGJlaW5nIHplcm8uCi0gICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7
Ci0KLSAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKLSAgICAgICAgICAg
ICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbW9kLCBoYW5kbGVyOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy9EZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRlcE1h
cAotICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWFw
LmlzRGVmaW5lID8gdGhpcy5tYXAgOiB0aGlzLm1hcC5wYXJlbnRNYXApLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHNbaV0gPSBkZXBNYXA7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgKz0gMTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRl
cEV4cG9ydHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChp
LCBkZXBFeHBvcnRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLmVycmJhY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBN
YXAsICdlcnJvcicsIGJpbmQodGhpcywgdGhpcy5lcnJiYWNrKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZCA9IGRlcE1hcC5pZDsKLSAgICAgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vU2tpcCBzcGVjaWFsIG1vZHVsZXMgbGlrZSAncmVxdWly
ZScsICdleHBvcnRzJywgJ21vZHVsZScKLSAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24n
dCBjYWxsIGVuYWJsZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQsCi0gICAgICAgICAgICAgICAg
ICAgIC8vaW1wb3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCi0gICAgICAgICAg
ICAgICAgICAgIGlmICghaGFzUHJvcChoYW5kbGVycywgaWQpICYmIG1vZCAmJiAhbW9kLmVuYWJs
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhp
cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSk7Ci0KLSAgICAg
ICAgICAgICAgICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KLSAgICAgICAg
ICAgICAgICAvL2EgZGVwZW5kZW5jeQotICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1
Z2luTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luTWFwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtb2QgJiYgIW1vZC5lbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfSkpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5lbmFi
bGluZyA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYikgewotICAgICAgICAg
ICAgICAgIHZhciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKLSAgICAgICAgICAgICAgICBpZiAo
IWNicykgewotICAgICAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtd
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYnMucHVzaChjYik7Ci0gICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICBlbWl0OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7Ci0g
ICAgICAgICAgICAgICAgZWFjaCh0aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNiKGV2dCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5hbWUgPT09ICdlcnJvcicpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9O
b3cgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKLSAgICAgICAg
ICAgICAgICAgICAgLy90aGUgbGlzdGVuZXJzLCBzaW5jZSB0aGlzIGJyb2tlbiBNb2R1bGUgaW5z
dGFuY2UKLSAgICAgICAgICAgICAgICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUg
aW4gdGhlIHJlZ2lzdHJ5LgotICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNb
bmFtZV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0g
ICAgICAgIGZ1bmN0aW9uIGNhbGxHZXRNb2R1bGUoYXJncykgewotICAgICAgICAgICAgLy9Ta2lw
IG1vZHVsZXMgYWxyZWFkeSBkZWZpbmVkLgotICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmlu
ZWQsIGFyZ3NbMF0pKSB7Ci0gICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAo
YXJnc1swXSwgbnVsbCwgdHJ1ZSkpLmluaXQoYXJnc1sxXSwgYXJnc1syXSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBm
dW5jLCBuYW1lLCBpZU5hbWUpIHsKLSAgICAgICAgICAgIC8vRmF2b3IgZGV0YWNoRXZlbnQgYmVj
YXVzZSBvZiBJRTkKLSAgICAgICAgICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVu
dExpc3RlbmVyIGNvbW1lbnQgZWxzZXdoZXJlCi0gICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4K
LSAgICAgICAgICAgIGlmIChub2RlLmRldGFjaEV2ZW50ICYmICFpc09wZXJhKSB7Ci0gICAgICAg
ICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdo
aWNoIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgotICAgICAgICAg
ICAgICAgIGlmIChpZU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVu
dChpZU5hbWUsIGZ1bmMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZh
bHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAg
KiBHaXZlbiBhbiBldmVudCBmcm9tIGEgc2NyaXB0IG5vZGUsIGdldCB0aGUgcmVxdWlyZWpzIGlu
Zm8gZnJvbSBpdCwKLSAgICAgICAgICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVu
ZXJzIG9uIHRoZSBub2RlLgotICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKLSAgICAgICAg
ICogQHJldHVybnMge09iamVjdH0KLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGdldFNj
cmlwdERhdGEoZXZ0KSB7Ci0gICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVh
ZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90Ci0gICAgICAgICAgICAvL2Fs
bCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBl
bm91Z2gKLSAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCi0g
ICAgICAgICAgICB2YXIgbm9kZSA9IGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50
OwotCi0gICAgICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KLSAgICAg
ICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRMb2FkLCAnbG9hZCcs
ICdvbnJlYWR5c3RhdGVjaGFuZ2UnKTsKLSAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUs
IGNvbnRleHQub25TY3JpcHRFcnJvciwgJ2Vycm9yJyk7Ci0KLSAgICAgICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICAgICAgbm9kZTogbm9kZSwKLSAgICAgICAgICAgICAgICBpZDogbm9kZSAm
JiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKLSAgICAgICAgICAgIH07
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbnRha2VEZWZpbmVzKCkgewotICAgICAg
ICAgICAgdmFyIGFyZ3M7Ci0KLSAgICAgICAgICAgIC8vQW55IGRlZmluZWQgbW9kdWxlcyBpbiB0
aGUgZ2xvYmFsIHF1ZXVlLCBpbnRha2UgdGhlbSBub3cuCi0gICAgICAgICAgICB0YWtlR2xvYmFs
UXVldWUoKTsKLQotICAgICAgICAgICAgLy9NYWtlIHN1cmUgYW55IHJlbWFpbmluZyBkZWZRdWV1
ZSBpdGVtcyBnZXQgcHJvcGVybHkgcHJvY2Vzc2VkLgotICAgICAgICAgICAgd2hpbGUgKGRlZlF1
ZXVlLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwot
ICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9u
eW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAnICsgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwg
ZGVwcywgZmFjdG9yeS4gU2hvdWxkIGJlIG5vcm1hbGl6ZWQgYnkgdGhlCi0gICAgICAgICAgICAg
ICAgICAgIC8vZGVmaW5lKCkgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGNhbGxHZXRN
b2R1bGUoYXJncyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgY29udGV4dCA9IHsKLSAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLAotICAg
ICAgICAgICAgY29udGV4dE5hbWU6IGNvbnRleHROYW1lLAotICAgICAgICAgICAgcmVnaXN0cnk6
IHJlZ2lzdHJ5LAotICAgICAgICAgICAgZGVmaW5lZDogZGVmaW5lZCwKLSAgICAgICAgICAgIHVy
bEZldGNoZWQ6IHVybEZldGNoZWQsCi0gICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCi0g
ICAgICAgICAgICBNb2R1bGU6IE1vZHVsZSwKLSAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1h
a2VNb2R1bGVNYXAsCi0gICAgICAgICAgICBuZXh0VGljazogcmVxLm5leHRUaWNrLAotICAgICAg
ICAgICAgb25FcnJvcjogb25FcnJvciwKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAg
KiBTZXQgYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4KLSAgICAgICAgICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCi0gICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgewotICAgICAgICAg
ICAgICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KLSAgICAgICAg
ICAgICAgICBpZiAoY2ZnLmJhc2VVcmwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5i
YXNlVXJsLmNoYXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvL1NhdmUgb2ZmIHRoZSBw
YXRocyBhbmQgcGFja2FnZXMgc2luY2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywK
LSAgICAgICAgICAgICAgICAvL3RoZXkgYXJlIGFkZGl0aXZlLgotICAgICAgICAgICAgICAgIHZh
ciBwa2dzID0gY29uZmlnLnBrZ3MsCi0gICAgICAgICAgICAgICAgICAgIHNoaW0gPSBjb25maWcu
c2hpbSwKLSAgICAgICAgICAgICAgICAgICAgb2JqcyA9IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhdGhzOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiB0cnVlCi0gICAgICAgICAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3AgPT09ICdtYXAnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25maWcubWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmZpZy5tYXAgPSB7fTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uZmlnW3Byb3BdID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQotICAgICAg
ICAgICAgICAgIGlmIChjZmcuc2hpbSkgewotICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChj
Zmcuc2hpbSwgZnVuY3Rpb24gKHZhbHVlLCBpZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly9Ob3JtYWxpemUgdGhlIHN0cnVjdHVyZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
QXJyYXkodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IHZhbHVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUu
ZXhwb3J0c0ZuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwb3J0c0Zu
ID0gY29udGV4dC5tYWtlU2hpbUV4cG9ydHModmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaGltID0gc2hpbTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvL0FkanVzdCBwYWNrYWdlcyBp
ZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgewotICAgICAg
ICAgICAgICAgICAgICBlYWNoKGNmZy5wYWNrYWdlcywgZnVuY3Rpb24gKHBrZ09iaikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwa2dPYmogPSB0eXBlb2YgcGtnT2JqID09PSAnc3RyaW5nJyA/IHsgbmFtZTogcGtnT2Jq
IH0gOiBwa2dPYmo7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBrZ09iai5s
b2NhdGlvbjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy9DcmVhdGUgYSBicmFuZCBuZXcg
b2JqZWN0IG9uIHBrZ3MsIHNpbmNlIGN1cnJlbnRQYWNrYWdlcyBjYW4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vYmUgcGFzc2VkIGluIGFnYWluLCBhbmQgY29uZmlnLnBrZ3MgaXMgdGhlIGlu
dGVybmFsIHRyYW5zZm9ybWVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvL3N0YXRlIGZvciBh
bGwgcGFja2FnZSBjb25maWdzLgotICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dPYmou
bmFtZV0gPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGtnT2JqLm5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uIHx8IHBrZ09i
ai5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90
IGluIG1haW4sIHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy9hbmQgcmVtb3ZlIGFueSB0cmFpbGluZyAuanMsIHNpbmNlIGRpZmZlcmVu
dCBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVy
ZW50IGNvbnZlbnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vc29tZSB1c2UgYSBmaWxlIG5hbWUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWFpbjogKHBrZ09iai5tYWluIHx8ICdtYWluJykKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAucmVwbGFjZShjdXJyRGlyUmVnRXhwLCAnJykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgICAgICAgICAvL0RvbmUgd2l0aCBtb2RpZmljYXRpb25zLCBhc3NpbmcgcGFja2FnZXMg
YmFjayB0byBjb250ZXh0IGNvbmZpZwotICAgICAgICAgICAgICAgICAgICBjb25maWcucGtncyA9
IHBrZ3M7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBh
cmUgYW55ICJ3YWl0aW5nIHRvIGV4ZWN1dGUiIG1vZHVsZXMgaW4gdGhlIHJlZ2lzdHJ5LAotICAg
ICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZv
LCBsaWtlIFVSTHMgdG8gbG9hZCwKLSAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQu
Ci0gICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QsIGlkKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVk
LCBzaW5jZSBpdCBpcyB0b28KLSAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0
aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCi0gICAgICAgICAgICAgICAgICAgIC8v
c2luY2UgdGhleSBhcmUgdHJhbnNpZW50LgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5p
bml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIC8vSWYgYSBkZXBzIGFycmF5IG9y
IGEgY29uZmlnIGNhbGxiYWNrIGlzIHNwZWNpZmllZCwgdGhlbiBjYWxsCi0gICAgICAgICAgICAg
ICAgLy9yZXF1aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJl
IGlzIGRlZmluZWQgYXMgYQotICAgICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUg
cmVxdWlyZS5qcyBpcyBsb2FkZWQuCi0gICAgICAgICAgICAgICAgaWYgKGNmZy5kZXBzIHx8IGNm
Zy5jYWxsYmFjaykgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRl
cHMgfHwgW10sIGNmZy5jYWxsYmFjayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKLSAg
ICAgICAgICAgICAgICBmdW5jdGlvbiBmbigpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJl
dDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IHZhbHVlLmluaXQuYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZh
bHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZuOwotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKLSAgICAgICAg
ICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjaykgewotICAgICAgICAgICAg
ICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAob3B0aW9ucy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24o
Y2FsbGJhY2spKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVK
c0J1aWxkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vSW52YWxpZCBjYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9u
RXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBl
cnJiYWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFsdWUgZm9yIHRoZW0gZnJvbSB0aGUgc3BlY2lh
bCBoYW5kbGVycy4gQ2F2ZWF0OgotICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkg
d29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2RlcHNdKHJlZ2lzdHJ5W3JlbE1hcC5p
ZF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvL1N5bmNocm9ub3VzIGFjY2VzcyB0byBvbmUgbW9kdWxlLiBJZiByZXF1aXJlLmdldCBpcwot
ICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0
ZXIpLCBwcmVmZXIgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcS5nZXQoY29udGV4dCwgZGVw
cywgcmVsTWFwLCBsb2NhbFJlcXVpcmUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29u
dGFpbnMgLiBvciAuLgotICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1h
cChkZXBzLCByZWxNYXAsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlk
ID0gbWFwLmlkOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5l
ZCwgaWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFr
ZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnIiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVz
ZSByZXF1aXJlKFtdKScpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtpZF07Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9i
YWwgcXVldWUuCi0gICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKLQotICAgICAg
ICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBi
ZSBsb2FkZWQuCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBi
ZWVuIGFkZGVkIHNpbmNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNh
bGwsIGNvbGxlY3QgdGhlbS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMo
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtl
TW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL1N0
b3JlIGlmIG1hcCBjb25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVpcmVNb2Quc2tpcE1hcCA9IG9wdGlvbnMuc2tpcE1hcDsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJi
YWNrLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQotICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9h
ZGVkKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBsb2NhbFJlcXVpcmU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
bWl4aW4obG9jYWxSZXF1aXJlLCB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNC
cm93c2VyLAotCi0gICAgICAgICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICAgICAgICAg
KiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgot
ICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFt
ZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZwotICAgICAgICAgICAgICAgICAgICAgKiBwbGFp
biBVUkxzIGxpa2UgbmFtZVRvVXJsLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0Lmxhc3RJbmRleE9mKCcuJyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSA9IHNlZ21lbnQgPT09ICcu
JyB8fCBzZWdtZW50ID09PSAnLi4nOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUg
YSBmaWxlIGV4dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vZG90cyBmcm9tIGEgcmVsYXRpdmUgcGF0aC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJz
dHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbW9kdWxlTmFtZVBsdXNFeHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJp
bmcoMCwgaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplKG1vZHVsZU5hbWVQ
bHVzRXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVsTWFwICYmIHJlbE1hcC5pZCwgdHJ1ZSksIGV4dCwgIHRydWUpOwotICAgICAgICAgICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVs
ZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOwotICAgICAgICAgICAgICAgICAgICB9
LAotCi0gICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2Us
IHRydWUpLmlkOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5l
ZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVm
IG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCi0gICAgICAgICAgICAgICAgaWYgKCFyZWxNYXAp
IHsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlk
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkg
Y2FsbHMgdG8gdGhpcyBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgLy9maXggZm9y
ICM0MDgKLSAgICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCB0
cnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnks
IGlkKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlZmluZWRbaWRdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobW9kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3Rl
bmVycyBpbiBjYXNlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlIHdp
bGwgYmUgYXR0ZW1wdGVkIHRvIGJlIHJlbG9hZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy91c2luZyBhIGRpZmZlcmVudCBjb25maWcuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bmRlZkV2ZW50c1tpZF0gPSBtb2QuZXZlbnRzOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9OwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7Ci0g
ICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIENhbGxlZCB0
byBlbmFibGUgYSBtb2R1bGUgaWYgaXQgaXMgc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5Ci0gICAgICAg
ICAgICAgKiBhd2FpdGluZyBlbmFibGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBh
cmVudCBtb2R1bGUsCi0gICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdo
ZW4gdGhpcyBtZXRob2QgaXMgb3ZlcnJpZGVuIGJ5Ci0gICAgICAgICAgICAgKiB0aGUgb3B0aW1p
emVyLiBOb3Qgc2hvd24gaGVyZSB0byBrZWVwIGNvZGUgY29tcGFjdC4KLSAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoZGVwTWFwKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKLSAgICAgICAgICAgICAg
ICBpZiAobW9kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShkZXBNYXApLmVuYWJs
ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8q
KgotICAgICAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgZW52aXJvbm1lbnQgYWRh
cHRlcnMgdG8gY29tcGxldGUgYSBsb2FkIGV2ZW50LgotICAgICAgICAgICAgICogQSBsb2FkIGV2
ZW50IGNvdWxkIGJlIGEgc2NyaXB0IGxvYWQgb3IganVzdCBhIGxvYWQgcGFzcyBmcm9tIGEgc3lu
Y2hyb25vdXMKLSAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KLSAgICAgICAgICAgICAqIEBwYXJh
bSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gcG90ZW50aWFs
bHkgY29tcGxldGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNvbXBsZXRlTG9hZDog
ZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKLSAgICAgICAgICAgICAgICB2YXIgZm91bmQsIGFyZ3Ms
IG1vZCwKLSAgICAgICAgICAgICAgICAgICAgc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbW9k
dWxlTmFtZSkgfHwge30sCi0gICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhw
b3J0czsKLQotICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwotCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBhcmdz
ID0gZGVmUXVldWUuc2hpZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09
IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBtb2R1bGVOYW1lOwot
ICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFuIGFub255bW91cyBt
b2R1bGUgYW5kIGJvdW5kIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFt
ZSwgdGhlbiB0aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vd2FpdGluZyBmb3IgaXRzIGNvbXBsZXRlTG9hZCB0byBmaXJlLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9
PT0gbW9kdWxlTmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3VuZCBtYXRjaGlu
ZyBkZWZpbmUgY2FsbCBmb3IgdGhpcyBzY3JpcHQhCi0gICAgICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNlIHRo
ZSByZXN1bHQKLSAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hh
bmdlcyB0aGUgcmVnaXN0cnkuCi0gICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5
LCBtb2R1bGVOYW1lKTsKLQotICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3Ao
ZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChjb25maWcuZW5mb3JjZURlZmluZSAmJiAoIXNoRXhwb3J0cyB8fCAhZ2V0
R2xvYmFsKHNoRXhwb3J0cykpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0
aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3Ig
JyArIG1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
W21vZHVsZU5hbWVdKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRoYXQg
ZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxs
R2V0TW9kdWxlKFttb2R1bGVOYW1lLCAoc2hpbS5kZXBzIHx8IFtdKSwgc2hpbS5leHBvcnRzRm5d
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGNoZWNrTG9hZGVkKCk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvKioK
LSAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1
cHBvcnRzIGNhc2VzIHdoZXJlCi0gICAgICAgICAgICAgKiBtb2R1bGVOYW1lIG1heSBhY3R1YWxs
eSBiZSBqdXN0IGFuIFVSTC4KLSAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90
KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgKiBpdCBp
cyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KLSAg
ICAgICAgICAgICAqIGludGVybmFsIEFQSSwgbm90IGEgcHVibGljIG9uZS4gVXNlIHRvVXJsIGZv
ciB0aGUgcHVibGljIEFQSS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbmFtZVRvVXJs
OiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHBhdGhzLCBwa2dzLCBwa2csIHBrZ1BhdGgsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJs
LAotICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOwotCi0gICAgICAgICAgICAgICAgLy9J
ZiBhIGNvbG9uIGlzIGluIHRoZSBVUkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQg
YW5kIGl0IGlzIGp1c3QKLSAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlm
IGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCi0g
ICAgICAgICAgICAgICAgLy9vciBlbmRzIHdpdGggLmpzLCB0aGVuIGFzc3VtZSB0aGUgdXNlciBt
ZWFudCB0byB1c2UgYW4gdXJsIGFuZCBub3QgYSBtb2R1bGUgaWQuCi0gICAgICAgICAgICAgICAg
Ly9UaGUgc2xhc2ggaXMgaW1wb3J0YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBh
cyBmdWxsIHBhdGhzLgotICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdCht
b2R1bGVOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBwbGFpbiBwYXRoLCBu
b3QgbW9kdWxlIG5hbWUgbG9va3VwLCBzbyBqdXN0IHJldHVybiBpdC4KLSAgICAgICAgICAgICAg
ICAgICAgLy9BZGQgZXh0ZW5zaW9uIGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdv
bmt5LCBvbmx5IG5vbi0uanMgdGhpbmdzIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgLy9hbiBl
eHRlbnNpb24sIHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgotICAg
ICAgICAgICAgICAgICAgICB1cmwgPSBtb2R1bGVOYW1lICsgKGV4dCB8fCAnJyk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5l
ZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBhdGguCi0gICAgICAgICAgICAgICAgICAgIHBhdGhz
ID0gY29uZmlnLnBhdGhzOwotICAgICAgICAgICAgICAgICAgICBwa2dzID0gY29uZmlnLnBrZ3M7
Ci0KLSAgICAgICAgICAgICAgICAgICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsKLSAg
ICAgICAgICAgICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYg
dGhlcmUgaXMgYSBwYXRoCi0gICAgICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJlZCBmb3IgaXQu
IFN0YXJ0IHdpdGggbW9zdCBzcGVjaWZpYyBuYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vYW5k
IHdvcmsgdXAgZnJvbSBpdC4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5n
dGg7IGkgPiAwOyBpIC09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZHVs
ZSA9IHN5bXMuc2xpY2UoMCwgaSkuam9pbignLycpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cGtnID0gZ2V0T3duKHBrZ3MsIHBhcmVudE1vZHVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRQYXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvL0lmIGFuIGFycmF5LCBpdCBtZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmVudFBhdGgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRoWzBd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzeW1zLnNwbGljZSgwLCBpLCBwYXJlbnRQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGtnKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBtb2R1bGUgbmFtZSBpcyBqdXN0IHRo
ZSBwYWNrYWdlIG5hbWUsIHRoZW4gbG9va2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vZm9yIHRoZSBtYWluIG1vZHVsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bW9kdWxlTmFtZSA9PT0gcGtnLm5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGtnUGF0aCA9IHBrZy5sb2NhdGlvbiArICcvJyArIHBrZy5tYWluOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBrZ1BhdGggPSBwa2cubG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBrZ1BhdGgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy9Kb2lu
IHRoZSBwYXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBu
ZWVkZWQuCi0gICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOwotICAgICAg
ICAgICAgICAgICAgICB1cmwgKz0gKGV4dCB8fCAoL15kYXRhXDp8XD8vLnRlc3QodXJsKSB8fCBz
a2lwRXh0ID8gJycgOiAnLmpzJykpOwotICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNo
YXJBdCgwKSA9PT0gJy8nIHx8IHVybC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25m
aWcuYmFzZVVybCkgKyB1cmw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNvbmZpZy51cmxBcmdzID8gdXJsICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy51cmxBcmdzKSA6
IHVybDsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vRGVsZWdhdGVzIHRvIHJlcS5s
b2FkLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8KLSAgICAgICAgICAgIC8v
YWxsb3cgb3ZlcnJpZGluZyBpbiB0aGUgb3B0aW1pemVyLgotICAgICAgICAgICAgbG9hZDogZnVu
Y3Rpb24gKGlkLCB1cmwpIHsKLSAgICAgICAgICAgICAgICByZXEubG9hZChjb250ZXh0LCBpZCwg
dXJsKTsKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICog
RXhlY3V0ZXMgYSBtb2R1bGUgY2FsbGJhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBzZXBh
cmF0ZSBmdW5jdGlvbgotICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBz
eXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAotICAgICAgICAgICAgICog
bGF5ZXIgaW4gdGhlIHJpZ2h0IHNlcXVlbmNlLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAg
ICAqIEBwcml2YXRlCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGV4ZWNDYjogZnVuY3Rp
b24gKG5hbWUsIGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOwotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBjYWxsYmFjayBmb3Igc2NyaXB0IGxvYWRzLCB1
c2VkIHRvIGNoZWNrIHN0YXR1cyBvZiBsb2FkaW5nLgotICAgICAgICAgICAgICoKLSAgICAgICAg
ICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3Ig
dGhlIHNjcmlwdAotICAgICAgICAgICAgICogdGhhdCB3YXMgbG9hZGVkLgotICAgICAgICAgICAg
ICovCi0gICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKLSAgICAgICAg
ICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVm
b3ggMi4wJ3Mgc2FrZS4gTm90Ci0gICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdp
bGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCi0gICAgICAgICAg
ICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KLSAgICAgICAgICAgICAg
ICBpZiAoZXZ0LnR5cGUgPT09ICdsb2FkJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKHJl
YWR5UmVnRXhwLnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5yZWFk
eVN0YXRlKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3Jp
cHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgotICAgICAgICAgICAgICAg
ICAgICAvL3RvIGxvbmcuCi0gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0ID0g
bnVsbDsKLQotICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb3V0IHRoZSBuYW1lIG9mIHRoZSBt
b2R1bGUgYW5kIHRoZSBjb250ZXh0LgotICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdl
dFNjcmlwdERhdGEoZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxv
YWQoZGF0YS5pZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgLyoqCi0gICAgICAgICAgICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4KLSAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgb25TY3JpcHRFcnJvcjogZnVuY3Rpb24gKGV2dCkg
ewotICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwotICAgICAg
ICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignc2NyaXB0ZXJyb3InLCAnU2NyaXB0IGVy
cm9yIGZvcjogJyArIGRhdGEuaWQsIGV2dCwgW2RhdGEuaWRdKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGNvbnRleHQucmVxdWlyZSA9
IGNvbnRleHQubWFrZVJlcXVpcmUoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQ7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogTWFpbiBlbnRyeSBwb2ludC4KLSAgICAgKgotICAgICAqIElmIHRo
ZSBvbmx5IGFyZ3VtZW50IHRvIHJlcXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0
aGF0Ci0gICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3Ig
dGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCi0gICAgICoKLSAgICAgKiBJZiB0aGUgZmlyc3QgYXJn
dW1lbnQgaXMgYW4gYXJyYXksIHRoZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5Ci0g
ICAgICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1
bmN0aW9uIGNhbGxiYWNrIGNhbgotICAgICAqIGJlIHNwZWNpZmllZCB0byBleGVjdXRlIHdoZW4g
YWxsIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlLgotICAgICAqCi0gICAgICog
TWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNz
dW1lcyB0aGluZ3MKLSAgICAgKiBvbiBhIHJlcXVpcmUgdGhhdCBhcmUgbm90IHN0YW5kYXJkaXpl
ZCksIGFuZCB0byBnaXZlIGEgc2hvcnQKLSAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9j
YWwgc2NvcGUgdXNlLgotICAgICAqLwotICAgIHJlcSA9IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChk
ZXBzLCBjYWxsYmFjaywgZXJyYmFjaywgb3B0aW9uYWwpIHsKLQotICAgICAgICAvL0ZpbmQgdGhl
IHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0Ci0gICAgICAgIHZhciBjb250ZXh0LCBjb25maWcs
Ci0gICAgICAgICAgICBjb250ZXh0TmFtZSA9IGRlZkNvbnRleHROYW1lOwotCi0gICAgICAgIC8v
IERldGVybWluZSBpZiBoYXZlIGNvbmZpZyBvYmplY3QgaW4gdGhlIGNhbGwuCi0gICAgICAgIGlm
ICghaXNBcnJheShkZXBzKSAmJiB0eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKLSAgICAgICAg
ICAgIC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0Ci0gICAgICAgICAgICBjb25maWcgPSBkZXBz
OwotICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FsbGJhY2spKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcwotICAgICAgICAgICAgICAg
IGRlcHMgPSBjYWxsYmFjazsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7Ci0g
ICAgICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBkZXBzID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7Ci0gICAgICAgICAgICBjb250
ZXh0TmFtZSA9IGNvbmZpZy5jb250ZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgY29udGV4dCA9
IGdldE93bihjb250ZXh0cywgY29udGV4dE5hbWUpOwotICAgICAgICBpZiAoIWNvbnRleHQpIHsK
LSAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdD
b250ZXh0KGNvbnRleHROYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb25maWcpIHsK
LSAgICAgICAgICAgIGNvbnRleHQuY29uZmlndXJlKGNvbmZpZyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gY29udGV4dC5yZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKTsKLSAg
ICB9OwotCi0gICAgLyoqCi0gICAgICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2Ug
aXQgZWFzaWVyIHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVyCi0gICAgICogQU1EIGxvYWRlcnMgb24g
Z2xvYmFsbHkgYWdyZWVkIG5hbWVzLgotICAgICAqLwotICAgIHJlcS5jb25maWcgPSBmdW5jdGlv
biAoY29uZmlnKSB7Ci0gICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKLSAgICB9OwotCi0gICAg
LyoqCi0gICAgICogRXhlY3V0ZSBzb21ldGhpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgdGljawotICAg
ICAqIG9mIHRoZSBldmVudCBsb29wLiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cwotICAgICAqIHRo
YXQgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCi0gICAgICogQHBhcmFt
ICB7RnVuY3Rpb259IGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgbGF0ZXIuCi0gICAgICovCi0gICAg
cmVxLm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rp
b24gKGZuKSB7Ci0gICAgICAgIHNldFRpbWVvdXQoZm4sIDQpOwotICAgIH0gOiBmdW5jdGlvbiAo
Zm4pIHsgZm4oKTsgfTsKLQotICAgIC8qKgotICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xv
YmFsLCBidXQgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgotICAgICAqLwotICAg
IGlmICghcmVxdWlyZSkgewotICAgICAgICByZXF1aXJlID0gcmVxOwotICAgIH0KLQotICAgIHJl
cS52ZXJzaW9uID0gdmVyc2lvbjsKLQotICAgIC8vVXNlZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVu
Y2llcyB0aGF0IGFyZSBhbHJlYWR5IHBhdGhzLgotICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98
OnxcP3xcLmpzJC87Ci0gICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKLSAgICBzID0gcmVx
LnMgPSB7Ci0gICAgICAgIGNvbnRleHRzOiBjb250ZXh0cywKLSAgICAgICAgbmV3Q29udGV4dDog
bmV3Q29udGV4dAotICAgIH07Ci0KLSAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCi0gICAg
cmVxKHt9KTsKLQotICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMg
b24gZ2xvYmFsIHJlcXVpcmUuCi0gICAgZWFjaChbCi0gICAgICAgICd0b1VybCcsCi0gICAgICAg
ICd1bmRlZicsCi0gICAgICAgICdkZWZpbmVkJywKLSAgICAgICAgJ3NwZWNpZmllZCcKLSAgICBd
LCBmdW5jdGlvbiAocHJvcCkgewotICAgICAgICAvL1JlZmVyZW5jZSBmcm9tIGNvbnRleHRzIGlu
c3RlYWQgb2YgZWFybHkgYmluZGluZyB0byBkZWZhdWx0IGNvbnRleHQsCi0gICAgICAgIC8vc28g
dGhhdCBkdXJpbmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNv
bnRleHQKLSAgICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgotICAgICAgICByZXFb
cHJvcF0gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVm
Q29udGV4dE5hbWVdOwotICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5
KGN0eCwgYXJndW1lbnRzKTsKLSAgICAgICAgfTsKLSAgICB9KTsKLQotICAgIGlmIChpc0Jyb3dz
ZXIpIHsKLSAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdoZWFkJylbMF07Ci0gICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcg
YXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCi0gICAgICAgIC8vV2hlbiB0aGF0IGJy
b3dzZXIgZGllcywgdGhpcyBjYW4gYmUgcmVtb3ZlZC4gRGV0YWlscyBpbiB0aGlzIGpRdWVyeSBi
dWc6Ci0gICAgICAgIC8vaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5Ci0gICAgICAg
IGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsK
LSAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7Ci0gICAgICAgICAgICBoZWFkID0gcy5oZWFkID0g
YmFzZUVsZW1lbnQucGFyZW50Tm9kZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIEFueSBlcnJvcnMgdGhhdCByZXF1aXJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUg
cGFzc2VkIHRvIHRoaXMKLSAgICAgKiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlm
IHlvdSB3YW50IGN1c3RvbSBlcnJvciBoYW5kbGluZy4KLSAgICAgKiBAcGFyYW0ge0Vycm9yfSBl
cnIgdGhlIGVycm9yIG9iamVjdC4KLSAgICAgKi8KLSAgICByZXEub25FcnJvciA9IGRlZmF1bHRP
bkVycm9yOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQg
Y29tbWFuZC4gT25seSB1c2VkIGluIGJyb3dzZXIgZW52cy4KLSAgICAgKi8KLSAgICByZXEuY3Jl
YXRlTm9kZSA9IGZ1bmN0aW9uIChjb25maWcsIG1vZHVsZU5hbWUsIHVybCkgewotICAgICAgICB2
YXIgbm9kZSA9IGNvbmZpZy54aHRtbCA/Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRl
RWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0Jykg
OgotICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwotICAg
ICAgICBub2RlLnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsK
LSAgICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKLSAgICAgICAgbm9kZS5hc3luYyA9IHRy
dWU7Ci0gICAgICAgIHJldHVybiBub2RlOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBEb2Vz
IHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCi0gICAg
ICogTWFrZSB0aGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1l
bnRzCi0gICAgICogdG8gb3ZlcnJpZGUgaXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ge09iamVj
dH0gY29udGV4dCB0aGUgcmVxdWlyZSBjb250ZXh0IHRvIGZpbmQgc3RhdGUuCi0gICAgICogQHBh
cmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KLSAgICAgKiBA
cGFyYW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KLSAgICAgKi8KLSAgICBy
ZXEubG9hZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKLSAgICAgICAg
dmFyIGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKLSAgICAgICAg
ICAgIG5vZGU7Ci0gICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKLSAgICAgICAgICAgIC8vSW4gdGhl
IGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZwotICAgICAgICAgICAgbm9kZSA9IHJlcS5jcmVh
dGVOb2RlKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKLQotICAgICAgICAgICAgbm9kZS5zZXRB
dHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKLSAg
ICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVO
YW1lKTsKLQotICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hF
dmVudCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKLSAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUg
aW4gaXRzIGFkZEV2ZW50TGlzdGVuZXIgYW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncwotICAgICAg
ICAgICAgLy90aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dz
ZXJzIHdpdGgKLSAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBm
aXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKLSAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFm
dGVyIHRoZSBzY3JpcHQgZXhlY3V0aW9uLiBTZWU6Ci0gICAgICAgICAgICAvL2h0dHBzOi8vY29u
bmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxv
YWQtZXZlbnQtaXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24K
LSAgICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50
IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAotICAgICAgICAgICAgLy9zY3JpcHQgZXhl
Y3V0aW9uIG1vZGUuCi0gICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgotICAgICAg
ICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5
IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKLSAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVs
eSBzdXBwb3J0ZWQgYnkgYnJvd3NlcgotICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6
Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL2lzc3Vlcy8xODcKLSAgICAgICAgICAgICAg
ICAgICAgLy9pZiB3ZSBjYW4gTk9UIGZpbmQgW25hdGl2ZSBjb2RlXSB0aGVuIGl0IG11c3QgTk9U
IG5hdGl2ZWx5IHN1cHBvcnRlZC4KLSAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUu
YXR0YWNoRXZlbnQgZG9lcyBub3QgaGF2ZSB0b1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAg
IC8vTm90ZSB0aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNl
LCBzZWU6Ci0gICAgICAgICAgICAgICAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2Uv
cmVxdWlyZWpzL2lzc3Vlcy8yNzMKLSAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2
ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0
aXZlIGNvZGUnKSA8IDApICYmCi0gICAgICAgICAgICAgICAgICAgICFpc09wZXJhKSB7Ci0gICAg
ICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUK
LSAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRo
ZSBzY3JpcHQsIHNvCi0gICAgICAgICAgICAgICAgLy93ZSBjYW5ub3QgdGllIHRoZSBhbm9ueW1v
dXMgZGVmaW5lIGNhbGwgdG8gYSBuYW1lLgotICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUg
cmVwb3J0cyB0aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFjdGl2ZScKLSAgICAgICAgICAg
ICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgotICAgICAg
ICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIG5vZGUu
YXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsK
LSAgICAgICAgICAgICAgICAvL0l0IHdvdWxkIGJlIGdyZWF0IHRvIGFkZCBhbiBlcnJvciBoYW5k
bGVyIGhlcmUgdG8gY2F0Y2gKLSAgICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZl
ciwgb25yZWFkeXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUKLSAgICAgICAgICAgICAgICAv
L3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlz
dGVuZXIKLSAgICAgICAgICAgICAgICAvL2lzIHVzZWQsIHRoZW4gSUUgd2lsbCBmaXJlIGVycm9y
IGJlZm9yZSBsb2FkLCBidXQgd2UgY2Fubm90Ci0gICAgICAgICAgICAgICAgLy91c2UgdGhhdCBw
YXRod2F5IGdpdmVuIHRoZSBjb25uZWN0Lm1pY3Jvc29mdC5jb20gaXNzdWUKLSAgICAgICAgICAg
ICAgICAvL21lbnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0
ZSwKLSAgICAgICAgICAgICAgICAvL3RoZW4gZmlyZSB0aGUgc2NyaXB0IGxvYWQgZXZlbnQgbGlz
dGVuZXIgYmVmb3JlIGV4ZWN1dGUKLSAgICAgICAgICAgICAgICAvL25leHQgc2NyaXB0JyB0aGF0
IG90aGVyIGJyb3dzZXJzIGRvLgotICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZp
eGVzIHRoZSBpc3N1ZXMsCi0gICAgICAgICAgICAgICAgLy9hbmQgdGhlbiBkZXN0cm95cyBhbGwg
aW5zdGFsbHMgb2YgSUUgNi05LgotICAgICAgICAgICAgICAgIC8vbm9kZS5hdHRhY2hFdmVudCgn
b25lcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvcik7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNvbnRleHQub25T
Y3JpcHRMb2FkLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVy
KCdlcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvciwgZmFsc2UpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbm9kZS5zcmMgPSB1cmw7Ci0KLSAgICAgICAgICAgIC8vRm9yIHNvbWUgY2Fj
aGUgY2FzZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCi0g
ICAgICAgICAgICAvL29mIHRoZSBhcHBlbmRDaGlsZCBleGVjdXRpb24sIHNvIHRvIHRpZSBhbiBh
bm9ueW1vdXMgZGVmaW5lCi0gICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3
aGljaCBpcyBzdG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCi0gICAgICAgICAgICAvL3RvIGEg
cmVmZXJlbmNlIHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9u
LgotICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbm9kZTsKLSAgICAgICAgICAg
IGlmIChiYXNlRWxlbWVudCkgewotICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5v
ZGUsIGJhc2VFbGVtZW50KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aGVhZC5hcHBlbmRDaGlsZChub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJl
bnRseUFkZGluZ1NjcmlwdCA9IG51bGw7Ci0KLSAgICAgICAgICAgIHJldHVybiBub2RlOwotICAg
ICAgICB9IGVsc2UgaWYgKGlzV2ViV29ya2VyKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgIC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBu
b3QgYSB2ZXJ5Ci0gICAgICAgICAgICAgICAgLy9lZmZpY2llbnQgdXNlIG9mIGltcG9ydFNjcmlw
dHMsIGltcG9ydFNjcmlwdHMgd2lsbCBibG9jayB1bnRpbAotICAgICAgICAgICAgICAgIC8vaXRz
IHNjcmlwdCBpcyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3Jr
ZXJzCi0gICAgICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIHRoYXQg
YSBidWlsZCBoYXMgYmVlbiBkb25lIHNvIHRoYXQKLSAgICAgICAgICAgICAgICAvL29ubHkgb25l
IHNjcmlwdCBuZWVkcyB0byBiZSBsb2FkZWQgYW55d2F5LiBUaGlzIG1heSBuZWVkIHRvIGJlCi0g
ICAgICAgICAgICAgICAgLy9yZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNv
bW1vbi4KLSAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7Ci0KLSAgICAgICAgICAg
ICAgICAvL0FjY291bnQgZm9yIGFub255bW91cyBtb2R1bGVzCi0gICAgICAgICAgICAgICAgY29u
dGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2NyaXB0
cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxl
ZCBmb3IgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1l
ICsgJyBhdCAnICsgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlw
dCgpIHsKLSAgICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0
LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKLSAgICAgICAgICAgIHJldHVybiBpbnRl
cmFjdGl2ZVNjcmlwdDsKLSAgICAgICAgfQotCi0gICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMo
KSwgZnVuY3Rpb24gKHNjcmlwdCkgewotICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRl
ID09PSAnaW50ZXJhY3RpdmUnKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2
ZVNjcmlwdCA9IHNjcmlwdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBy
ZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7Ci0gICAgfQotCi0gICAgLy9Mb29rIGZvciBhIGRhdGEt
bWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVy
bC4KLSAgICBpZiAoaXNCcm93c2VyICYmICFjZmcuc2tpcERhdGFNYWluKSB7Ci0gICAgICAgIC8v
RmlndXJlIG91dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVp
cmUuanMgaW4gaXQuCi0gICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNj
cmlwdCkgewotICAgICAgICAgICAgLy9TZXQgdGhlICdoZWFkJyB3aGVyZSB3ZSBjYW4gYXBwZW5k
IGNoaWxkcmVuIGJ5Ci0gICAgICAgICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQuCi0g
ICAgICAgICAgICBpZiAoIWhlYWQpIHsKLSAgICAgICAgICAgICAgICBoZWFkID0gc2NyaXB0LnBh
cmVudE5vZGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vTG9vayBmb3IgYSBkYXRh
LW1haW4gYXR0cmlidXRlIHRvIHNldCBtYWluIHNjcmlwdCBmb3IgdGhlIHBhZ2UKLSAgICAgICAg
ICAgIC8vdG8gbG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNv
bWVzIHRoZQotICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQu
Ci0gICAgICAgICAgICBkYXRhTWFpbiA9IHNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFpbicp
OwotICAgICAgICAgICAgaWYgKGRhdGFNYWluKSB7Ci0gICAgICAgICAgICAgICAgLy9QcmVzZXJ2
ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCi0gICAg
ICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwotCi0gICAgICAgICAgICAgICAgLy9T
ZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUu
Ci0gICAgICAgICAgICAgICAgaWYgKCFjZmcuYmFzZVVybCkgewotICAgICAgICAgICAgICAgICAg
ICAvL1B1bGwgb2ZmIHRoZSBkaXJlY3Rvcnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhlCi0g
ICAgICAgICAgICAgICAgICAgIC8vYmFzZVVybC4KLSAgICAgICAgICAgICAgICAgICAgc3JjID0g
bWFpblNjcmlwdC5zcGxpdCgnLycpOwotICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0g
c3JjLnBvcCgpOwotICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNy
Yy5qb2luKCcvJykgICsgJy8nIDogJy4vJzsKLQotICAgICAgICAgICAgICAgICAgICBjZmcuYmFz
ZVVybCA9IHN1YlBhdGg7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy9T
dHJpcCBvZmYgYW55IHRyYWlsaW5nIC5qcyBzaW5jZSBtYWluU2NyaXB0IGlzIG5vdwotICAgICAg
ICAgICAgICAgIC8vbGlrZSBhIG1vZHVsZSBuYW1lLgotICAgICAgICAgICAgICAgIG1haW5TY3Jp
cHQgPSBtYWluU2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKLQotICAgICAgICAg
ICAgICAgICAvL0lmIG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0
YU1haW4KLSAgICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobWFpblNjcmlw
dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vUHV0IHRoZSBkYXRhLW1haW4gc2NyaXB0
IGluIHRoZSBmaWxlcyB0byBsb2FkLgotICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRl
cHMgPyBjZmcuZGVwcy5jb25jYXQobWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
fQotCi0gICAgLyoqCi0gICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9u
cyBvZiBtb2R1bGVzLiBEaWZmZXJzIGZyb20KLSAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0
cmluZyBmb3IgdGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAotICAgICAq
IGFuZCB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBkZXBlbmRlbmNpZXMgYXJlIGxvYWRl
ZCBzaG91bGQKLSAgICAgKiByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3Jy
ZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBhcmd1bWVudCdzCi0gICAgICogbmFtZS4KLSAgICAgKi8K
LSAgICBkZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKLSAgICAgICAg
dmFyIG5vZGUsIGNvbnRleHQ7Ci0KLSAgICAgICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVs
ZXMKLSAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgewotICAgICAgICAgICAg
Ly9BZGp1c3QgYXJncyBhcHByb3ByaWF0ZWx5Ci0gICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7
Ci0gICAgICAgICAgICBkZXBzID0gbmFtZTsKLSAgICAgICAgICAgIG5hbWUgPSBudWxsOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy9UaGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVz
Ci0gICAgICAgIGlmICghaXNBcnJheShkZXBzKSkgewotICAgICAgICAgICAgY2FsbGJhY2sgPSBk
ZXBzOwotICAgICAgICAgICAgZGVwcyA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvL0lm
IG5vIG5hbWUsIGFuZCBjYWxsYmFjayBpcyBhIGZ1bmN0aW9uLCB0aGVuIGZpZ3VyZSBvdXQgaWYg
aXQgYQotICAgICAgICAvL0NvbW1vbkpTIHRoaW5nIHdpdGggZGVwZW5kZW5jaWVzLgotICAgICAg
ICBpZiAoIWRlcHMgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKLSAgICAgICAgICAgIGRlcHMg
PSBbXTsKLSAgICAgICAgICAgIC8vUmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGNhbGxiYWNrIHN0
cmluZywKLSAgICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhl
bSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMsCi0gICAgICAgICAgICAvL2J1dCBvbmx5IGlmIHRoZXJl
IGFyZSBmdW5jdGlvbiBhcmdzLgotICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCkgewot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrCi0gICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygp
Ci0gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRSZWdFeHAsICcnKQotICAgICAg
ICAgICAgICAgICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gs
IGRlcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgLy9NYXkgYmUgYSBDb21tb25KUyB0
aGluZyBldmVuIHdpdGhvdXQgcmVxdWlyZSBjYWxscywgYnV0IHN0aWxsCi0gICAgICAgICAgICAg
ICAgLy9jb3VsZCB1c2UgZXhwb3J0cywgYW5kIG1vZHVsZS4gQXZvaWQgZG9pbmcgZXhwb3J0cyBh
bmQgbW9kdWxlCi0gICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRz
IHJlcXVpcmUuCi0gICAgICAgICAgICAgICAgLy9SRVFVSVJFUyB0aGUgZnVuY3Rpb24gdG8gZXhw
ZWN0IHRoZSBDb21tb25KUyB2YXJpYWJsZXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgLy9vcmRl
ciBsaXN0ZWQgYmVsb3cuCi0gICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGgg
PT09IDEgPyBbJ3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5j
b25jYXQoZGVwcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvL0lmIGlu
IElFIDYtOCBhbmQgaGl0IGFuIGFub255bW91cyBkZWZpbmUoKSBjYWxsLCBkbyB0aGUgaW50ZXJh
Y3RpdmUKLSAgICAgICAgLy93b3JrLgotICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKLSAg
ICAgICAgICAgIG5vZGUgPSBjdXJyZW50bHlBZGRpbmdTY3JpcHQgfHwgZ2V0SW50ZXJhY3RpdmVT
Y3JpcHQoKTsKLSAgICAgICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFu
YW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0
YS1yZXF1aXJlbW9kdWxlJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNv
bnRleHQgPSBjb250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcp
XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vQWx3YXlzIHNhdmUgb2Zm
IGV2YWx1YXRpbmcgdGhlIGRlZiBjYWxsIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGhhbmRsZXIu
Ci0gICAgICAgIC8vVGhpcyBhbGxvd3MgbXVsdGlwbGUgbW9kdWxlcyB0byBiZSBpbiBhIGZpbGUg
d2l0aG91dCBwcmVtYXR1cmVseQotICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQg
YWxsb3dzIGZvciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCi0gICAgICAgIC8vd2hlcmUgdGhl
IG1vZHVsZSBuYW1lIGlzIG5vdCBrbm93biB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBldmVudAot
ICAgICAgICAvL29jY3Vycy4gSWYgbm8gY29udGV4dCwgdXNlIHRoZSBnbG9iYWwgcXVldWUsIGFu
ZCBnZXQgaXQgcHJvY2Vzc2VkCi0gICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJh
Y2suCi0gICAgICAgIChjb250ZXh0ID8gY29udGV4dC5kZWZRdWV1ZSA6IGdsb2JhbERlZlF1ZXVl
KS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwotICAgIH07Ci0KLSAgICBkZWZpbmUuYW1k
ID0gewotICAgICAgICBqUXVlcnk6IHRydWUKLSAgICB9OwotCi0KLSAgICAvKioKLSAgICAgKiBF
eGVjdXRlcyB0aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9k
aWZpZWQKLSAgICAgKiB0byB1c2UgYSBiZXR0ZXIsIGVudmlyb25tZW50LXNwZWNpZmljIGNhbGwu
IE9ubHkgdXNlZCBmb3IgdHJhbnNwaWxpbmcKLSAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZv
ciBwbGFpbiBKUyBtb2R1bGVzLgotICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0
IHRvIGV4ZWN1dGUvZXZhbHVhdGUuCi0gICAgICovCi0gICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAo
dGV4dCkgewotICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCi0gICAgICAgIHJldHVybiBl
dmFsKHRleHQpOwotICAgIH07Ci0KLSAgICAvL1NldCB1cCB3aXRoIGNvbmZpZyBpbmZvLgotICAg
IHJlcShjZmcpOwotfSh0aGlzKSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2Vy
X2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jv
d2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM0NWJlZjgzMTg5YzkxNWVlNzhlY2E4NDdmOTA4YzZkMDJkNThhNDAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9ib3dlcl9jb21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCisrKyAvZGV2L251
bGwKQEAgLTEsNTU1ICswLDAgQEAKLWh0bWwsCi1ib2R5IHsKLSAgICBtYXJnaW46IDA7Ci0gICAg
cGFkZGluZzogMDsKLX0KLQotYnV0dG9uIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzog
MDsKLSAgICBib3JkZXI6IDA7Ci0gICAgYmFja2dyb3VuZDogbm9uZTsKLSAgICBmb250LXNpemU6
IDEwMCU7Ci0gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwotICAgIGZvbnQtZmFtaWx5OiBp
bmhlcml0OwotICAgIGNvbG9yOiBpbmhlcml0OwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9u
ZTsKLSAgICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKLSAgICAtby1hcHBlYXJhbmNlOiBub25lOwot
ICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci19Ci0KLWJvZHkgewotICAgIGZvbnQ6IDE0cHggJ0hlbHZl
dGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKLSAgICBsaW5lLWhlaWdo
dDogMS40ZW07Ci0gICAgYmFja2dyb3VuZDogI2VhZWFlYSB1cmwoJ2JnLnBuZycpOwotICAgIGNv
bG9yOiAjNGQ0ZDRkOwotICAgIHdpZHRoOiA1NTBweDsKLSAgICBtYXJnaW46IDAgYXV0bzsKLSAg
ICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQtc21v
b3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbXMtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk
OwotICAgIC1vLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNtb290aGlu
ZzogYW50aWFsaWFzZWQ7Ci19Ci0KLWJ1dHRvbiwKLWlucHV0W3R5cGU9ImNoZWNrYm94Il0gewot
ICBvdXRsaW5lOiBub25lOwotfQotCi0jdG9kb2FwcCB7Ci0gICAgYmFja2dyb3VuZDogI2ZmZjsK
LSAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Ci0gICAgbWFyZ2luOiAx
MzBweCAwIDQwcHggMDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwotICAgIHBvc2l0aW9u
OiByZWxhdGl2ZTsKLSAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7Ci0gICAgYm9yZGVy
LXRvcC1yaWdodC1yYWRpdXM6IDJweDsKLSAgICBib3gtc2hhZG93OiAwIDJweCA2cHggMCByZ2Jh
KDAsIDAsIDAsIDAuMiksCi0gICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAs
IDAsIDAuMTUpOwotfQotCi0jdG9kb2FwcDpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICcnOwotICAg
IGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2Y1ZDZkNjsKLSAgICBib3JkZXItcmlnaHQ6IDFweCBz
b2xpZCAjZjVkNmQ2OwotICAgIHdpZHRoOiAycHg7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIHRvcDogMDsKLSAgICBsZWZ0OiA0MHB4OwotICAgIGhlaWdodDogMTAwJTsKLX0KLQotI3Rv
ZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgewotICAgIGZvbnQtc3R5bGU6
IGl0YWxpYzsKLX0KLQotI3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewotICAgIGZv
bnQtc3R5bGU6IGl0YWxpYzsKLSAgICBjb2xvcjogI2E5YTlhOTsKLX0KLQotI3RvZG9hcHAgaDEg
ewotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IC0xMjBweDsKLSAgICB3aWR0aDog
MTAwJTsKLSAgICBmb250LXNpemU6IDcwcHg7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAg
dGV4dC1hbGlnbjogY2VudGVyOwotICAgIGNvbG9yOiAjYjNiM2IzOwotICAgIGNvbG9yOiByZ2Jh
KDI1NSwgMjU1LCAyNTUsIDAuMyk7Ci0gICAgdGV4dC1zaGFkb3c6IC0xcHggLTFweCByZ2JhKDAs
IDAsIDAsIDAuMik7Ci0gICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmls
aXR5OwotICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKLSAgICAt
bXMtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKLSAgICAtby10ZXh0LXJlbmRl
cmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxl
Z2liaWxpdHk7Ci19Ci0KLSNoZWFkZXIgewotICAgIHBhZGRpbmctdG9wOiAxNXB4OwotICAgIGJv
cmRlci1yYWRpdXM6IGluaGVyaXQ7Ci19Ci0KLSNoZWFkZXI6YmVmb3JlIHsKLSAgICBjb250ZW50
OiAnJzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIHJpZ2h0OiAw
OwotICAgIGxlZnQ6IDA7Ci0gICAgaGVpZ2h0OiAxNXB4OwotICAgIHotaW5kZXg6IDI7Ci0gICAg
Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2YzYxNWM7Ci0gICAgYmFja2dyb3VuZDogIzhkN2Q3
NzsKLSAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxl
ZnQgYm90dG9tLCBmcm9tKHJnYmEoMTMyLCAxMTAsIDEwMCwgMC44KSksdG8ocmdiYSgxMDEsIDg0
LCA3NiwgMC44KSkpOwotICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRv
cCwgcmdiYSgxMzIsIDExMCwgMTAwLCAwLjgpLCByZ2JhKDEwMSwgODQsIDc2LCAwLjgpKTsKLSAg
ICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKDEzMiwgMTEwLCAxMDAsIDAu
OCksIHJnYmEoMTAxLCA4NCwgNzYsIDAuOCkpOwotICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6
IDFweDsKLSAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMXB4OwotfQotCi0jbmV3LXRvZG8s
Ci0uZWRpdCB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIG1hcmdpbjogMDsKLSAgICB3
aWR0aDogMTAwJTsKLSAgICBmb250LXNpemU6IDI0cHg7Ci0gICAgZm9udC1mYW1pbHk6IGluaGVy
aXQ7Ci0gICAgbGluZS1oZWlnaHQ6IDEuNGVtOwotICAgIGJvcmRlcjogMDsKLSAgICBvdXRsaW5l
OiBub25lOwotICAgIGNvbG9yOiBpbmhlcml0OwotICAgIHBhZGRpbmc6IDZweDsKLSAgICBib3Jk
ZXI6IDFweCBzb2xpZCAjOTk5OwotICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCBy
Z2JhKDAsIDAsIDAsIDAuMik7Ci0gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAg
IC1tcy1ib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIC1vLWJveC1zaXppbmc6IGJvcmRlci1i
b3g7Ci0gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICAtd2Via2l0LWZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
LSAgICAtbXMtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIC1vLWZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0K
LSNuZXctdG9kbyB7Ci0gICAgcGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKLSAgICBib3Jk
ZXI6IG5vbmU7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTsKLSAgICB6LWlu
ZGV4OiAyOwotICAgIGJveC1zaGFkb3c6IG5vbmU7Ci19Ci0KLSNtYWluIHsKLSAgICBwb3NpdGlv
bjogcmVsYXRpdmU7Ci0gICAgei1pbmRleDogMjsKLSAgICBib3JkZXItdG9wOiAxcHggZG90dGVk
ICNhZGFkYWQ7Ci19Ci0KLWxhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddIHsKLSAgICBkaXNwbGF5OiBu
b25lOwotfQotCi0jdG9nZ2xlLWFsbCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRv
cDogLTQycHg7Ci0gICAgbGVmdDogLTRweDsKLSAgICB3aWR0aDogNDBweDsKLSAgICB0ZXh0LWFs
aWduOiBjZW50ZXI7Ci0gICAgLyogTW9iaWxlIFNhZmFyaSAqLwotICAgIGJvcmRlcjogbm9uZTsK
LX0KLQotI3RvZ2dsZS1hbGw6YmVmb3JlIHsKLSAgICBjb250ZW50OiAnwrsnOwotICAgIGZvbnQt
c2l6ZTogMjhweDsKLSAgICBjb2xvcjogI2Q5ZDlkOTsKLSAgICBwYWRkaW5nOiAwIDI1cHggN3B4
OwotfQotCi0jdG9nZ2xlLWFsbDpjaGVja2VkOmJlZm9yZSB7Ci0gICAgY29sb3I6ICM3MzczNzM7
Ci19Ci0KLSN0b2RvLWxpc3QgewotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwOwotICAg
IGxpc3Qtc3R5bGU6IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkgewotICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKLSAgICBmb250LXNpemU6IDI0cHg7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRv
dHRlZCAjY2NjOwotfQotCi0jdG9kby1saXN0IGxpOmxhc3QtY2hpbGQgewotICAgIGJvcmRlci1i
b3R0b206IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGluZyB7Ci0gICAgYm9yZGVyLWJv
dHRvbTogbm9uZTsKLSAgICBwYWRkaW5nOiAwOwotfQotCi0jdG9kby1saXN0IGxpLmVkaXRpbmcg
LmVkaXQgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdpZHRoOiA1MDZweDsKLSAgICBwYWRk
aW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OwotICAgIG1hcmdpbjogMCAwIDAgNDNweDsKLX0KLQot
I3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi0j
dG9kby1saXN0IGxpIC50b2dnbGUgewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICB3aWR0
aDogNDBweDsKLSAgICAvKiBhdXRvLCBzaW5jZSBub24tV2ViS2l0IGJyb3dzZXJzIGRvZXNuJ3Qg
c3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCi0gICAgaGVpZ2h0OiBhdXRvOwotICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgYm90dG9tOiAwOwotICAgIG1hcmdpbjogYXV0
byAwOwotICAgIC8qIE1vYmlsZSBTYWZhcmkgKi8KLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBub25lOwotICAgIC1tcy1hcHBlYXJhbmNlOiBub25lOwotICAgIC1v
LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgYXBwZWFyYW5jZTogbm9uZTsKLX0KLQotI3RvZG8tbGlz
dCBsaSAudG9nZ2xlOmFmdGVyIHsKLSAgICBjb250ZW50OiAn4pyUJzsKLSAgICAvKiA0MCArIGEg
Y291cGxlIG9mIHBpeGVscyB2aXN1YWwgYWRqdXN0bWVudCAqLwotICAgIGxpbmUtaGVpZ2h0OiA0
M3B4OwotICAgIGZvbnQtc2l6ZTogMjBweDsKLSAgICBjb2xvcjogI2Q5ZDlkOTsKLSAgICB0ZXh0
LXNoYWRvdzogMCAtMXB4IDAgI2JmYmZiZjsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmNo
ZWNrZWQ6YWZ0ZXIgewotICAgIGNvbG9yOiAjODVhZGE3OwotICAgIHRleHQtc2hhZG93OiAwIDFw
eCAwICM2Njk5OTE7Ci0gICAgYm90dG9tOiAxcHg7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwot
fQotCi0jdG9kby1saXN0IGxpIGxhYmVsIHsKLSAgICB3aGl0ZS1zcGFjZTogcHJlOwotICAgIHdv
cmQtYnJlYWs6IGJyZWFrLXdvcmQ7Ci0gICAgcGFkZGluZzogMTVweCA2MHB4IDE1cHggMTVweDsK
LSAgICBtYXJnaW4tbGVmdDogNDVweDsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBsaW5lLWhl
aWdodDogMS4yOwotICAgIC13ZWJraXQtdHJhbnNpdGlvbjogY29sb3IgMC40czsKLSAgICB0cmFu
c2l0aW9uOiBjb2xvciAwLjRzOwotfQotCi0jdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7
Ci0gICAgY29sb3I6ICNhOWE5YTk7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7
Ci19Ci0KLSN0b2RvLWxpc3QgbGkgLmRlc3Ryb3kgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogMDsKLSAgICByaWdodDogMTBweDsKLSAgICBi
b3R0b206IDA7Ci0gICAgd2lkdGg6IDQwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIG1hcmdp
bjogYXV0byAwOwotICAgIGZvbnQtc2l6ZTogMjJweDsKLSAgICBjb2xvcjogI2E4OGE4YTsKLSAg
ICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzOwotICAgIHRyYW5zaXRpb246IGFsbCAwLjJz
OwotfQotCi0jdG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyIHsKLSAgICB0ZXh0LXNoYWRvdzog
MCAwIDFweCAjMDAwLAotICAgICAgICAgICAgICAgICAwIDAgMTBweCByZ2JhKDE5OSwgMTA3LCAx
MDcsIDAuOCk7Ci0gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci0gICAgLW1zLXRy
YW5zZm9ybTogc2NhbGUoMS4zKTsKLSAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7Ci19Ci0KLSN0
b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICfinJYnOwotfQotCi0j
dG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQot
I3RvZG8tbGlzdCBsaSAuZWRpdCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotI3RvZG8tbGlz
dCBsaS5lZGl0aW5nOmxhc3QtY2hpbGQgewotICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Ci19Ci0K
LSNmb290ZXIgewotICAgIGNvbG9yOiAjNzc3OwotICAgIHBhZGRpbmc6IDAgMTVweDsKLSAgICBw
b3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90dG9tOiAtMzFweDsKLSAg
ICBsZWZ0OiAwOwotICAgIGhlaWdodDogMjBweDsKLSAgICB6LWluZGV4OiAxOwotICAgIHRleHQt
YWxpZ246IGNlbnRlcjsKLX0KLQotI2Zvb3RlcjpiZWZvcmUgewotICAgIGNvbnRlbnQ6ICcnOwot
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDMxcHg7
Ci0gICAgbGVmdDogMDsKLSAgICBoZWlnaHQ6IDUwcHg7Ci0gICAgei1pbmRleDogLTE7Ci0gICAg
Ym94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwKLSAgICAgICAgICAgICAg
ICAwIDZweCAwIC0zcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpLAotICAgICAgICAgICAgICAg
IDAgN3B4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKSwKLSAgICAgICAgICAgICAgICAwIDQz
cHggMCAtNnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSwKLSAgICAgICAgICAgICAgICAwIDQ0
cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOwotfQotCi0jdG9kby1jb3VudCB7Ci0gICAg
ZmxvYXQ6IGxlZnQ7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLQotI2ZpbHRlcnMgewotICAg
IG1hcmdpbjogMDsKLSAgICBwYWRkaW5nOiAwOwotICAgIGxpc3Qtc3R5bGU6IG5vbmU7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAgIGxlZnQ6IDA7Ci19Ci0KLSNm
aWx0ZXJzIGxpIHsKLSAgICBkaXNwbGF5OiBpbmxpbmU7Ci19Ci0KLSNmaWx0ZXJzIGxpIGEgewot
ICAgIGNvbG9yOiAjODM3NTZmOwotICAgIG1hcmdpbjogMnB4OwotICAgIHRleHQtZGVjb3JhdGlv
bjogbm9uZTsKLX0KLQotI2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7Ci0gICAgZm9udC13ZWlnaHQ6
IGJvbGQ7Ci19Ci0KLSNjbGVhci1jb21wbGV0ZWQgewotICAgIGZsb2F0OiByaWdodDsKLSAgICBw
b3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgbGluZS1oZWlnaHQ6IDIwcHg7Ci0gICAgdGV4dC1kZWNv
cmF0aW9uOiBub25lOwotICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xKTsKLSAgICBm
b250LXNpemU6IDExcHg7Ci0gICAgcGFkZGluZzogMCAxMHB4OwotICAgIGJvcmRlci1yYWRpdXM6
IDNweDsKLSAgICBib3gtc2hhZG93OiAwIC0xcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4yKTsKLX0K
LQotI2NsZWFyLWNvbXBsZXRlZDpob3ZlciB7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAw
LCAwLjE1KTsKLSAgICBib3gtc2hhZG93OiAwIC0xcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4zKTsK
LX0KLQotI2luZm8gewotICAgIG1hcmdpbjogNjVweCBhdXRvIDA7Ci0gICAgY29sb3I6ICNhNmE2
YTY7Ci0gICAgZm9udC1zaXplOiAxMnB4OwotICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEo
MjU1LCAyNTUsIDI1NSwgMC43KTsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNpbmZv
IGEgewotICAgIGNvbG9yOiBpbmhlcml0OwotfQotCi0vKgotICAgIEhhY2sgdG8gcmVtb3ZlIGJh
Y2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgotICAgIENhbid0IHVzZSBpdCBnbG9iYWxseSBz
aW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3ggYW5kIE9wZXJhCi0qLwotCi1A
bWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKLSAg
ICAjdG9nZ2xlLWFsbCwKLSAgICAjdG9kby1saXN0IGxpIC50b2dnbGUgewotICAgICAgICBiYWNr
Z3JvdW5kOiBub25lOwotICAgIH0KLQotICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAg
ICAgIGhlaWdodDogNDBweDsKLSAgICB9Ci0KLSAgICAjdG9nZ2xlLWFsbCB7Ci0gICAgICAgIHRv
cDogLTU2cHg7Ci0gICAgICAgIGxlZnQ6IC0xNXB4OwotICAgICAgICB3aWR0aDogNjVweDsKLSAg
ICAgICAgaGVpZ2h0OiA0MXB4OwotICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkw
ZGVnKTsKLSAgICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKLSAgICAgICAgdHJh
bnNmb3JtOiByb3RhdGUoOTBkZWcpOwotICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7
Ci0gICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgfQotfQotCi0uaGlkZGVuIHsKLSAgICBk
aXNwbGF5OiBub25lOwotfQotCi1ociB7Ci0gICAgbWFyZ2luOiAyMHB4IDA7Ci0gICAgYm9yZGVy
OiAwOwotICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgI0M1QzVDNTsKLSAgICBib3JkZXItYm90
dG9tOiAxcHggZGFzaGVkICNGN0Y3Rjc7Ci19Ci0KLS5sZWFybiBhIHsKLSAgICBmb250LXdlaWdo
dDogbm9ybWFsOwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBjb2xvcjogI2I4M2Y0
NTsKLX0KLQotLmxlYXJuIGE6aG92ZXIgewotICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5l
OwotICAgIGNvbG9yOiAjNzg3ZTdlOwotfQotCi0ubGVhcm4gaDMsCi0ubGVhcm4gaDQsCi0ubGVh
cm4gaDUgewotICAgIG1hcmdpbjogMTBweCAwOwotICAgIGZvbnQtd2VpZ2h0OiA1MDA7Ci0gICAg
bGluZS1oZWlnaHQ6IDEuMjsKLSAgICBjb2xvcjogIzAwMDsKLX0KLQotLmxlYXJuIGgzIHsKLSAg
ICBmb250LXNpemU6IDI0cHg7Ci19Ci0KLS5sZWFybiBoNCB7Ci0gICAgZm9udC1zaXplOiAxOHB4
OwotfQotCi0ubGVhcm4gaDUgewotICAgIG1hcmdpbi1ib3R0b206IDA7Ci0gICAgZm9udC1zaXpl
OiAxNHB4OwotfQotCi0ubGVhcm4gdWwgewotICAgIHBhZGRpbmc6IDA7Ci0gICAgbWFyZ2luOiAw
IDAgMzBweCAyNXB4OwotfQotCi0ubGVhcm4gbGkgewotICAgIGxpbmUtaGVpZ2h0OiAyMHB4Owot
fQotCi0ubGVhcm4gcCB7Ci0gICAgZm9udC1zaXplOiAxNXB4OwotICAgIGZvbnQtd2VpZ2h0OiAz
MDA7Ci0gICAgbGluZS1oZWlnaHQ6IDEuMzsKLSAgICBtYXJnaW4tdG9wOiAwOwotICAgIG1hcmdp
bi1ib3R0b206IDA7Ci19Ci0KLS5xdW90ZSB7Ci0gICAgYm9yZGVyOiBub25lOwotICAgIG1hcmdp
bjogMjBweCAwIDYwcHggMDsKLX0KLQotLnF1b3RlIHAgewotICAgIGZvbnQtc3R5bGU6IGl0YWxp
YzsKLX0KLQotLnF1b3RlIHA6YmVmb3JlIHsKLSAgICBjb250ZW50OiAn4oCcJzsKLSAgICBmb250
LXNpemU6IDUwcHg7Ci0gICAgb3BhY2l0eTogLjE1OwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICB0b3A6IC0yMHB4OwotICAgIGxlZnQ6IDNweDsKLX0KLQotLnF1b3RlIHA6YWZ0ZXIgewot
ICAgIGNvbnRlbnQ6ICfigJ0nOwotICAgIGZvbnQtc2l6ZTogNTBweDsKLSAgICBvcGFjaXR5OiAu
MTU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGJvdHRvbTogLTQycHg7Ci0gICAgcmln
aHQ6IDNweDsKLX0KLQotLnF1b3RlIGZvb3RlciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIGJvdHRvbTogLTQwcHg7Ci0gICAgcmlnaHQ6IDA7Ci19Ci0KLS5xdW90ZSBmb290ZXIgaW1n
IHsKLSAgICBib3JkZXItcmFkaXVzOiAzcHg7Ci19Ci0KLS5xdW90ZSBmb290ZXIgYSB7Ci0gICAg
bWFyZ2luLWxlZnQ6IDVweDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotfQotCi0uc3Bl
ZWNoLWJ1YmJsZSB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHBhZGRpbmc6IDEwcHg7
Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMDQpOwotICAgIGJvcmRlci1yYWRpdXM6
IDVweDsKLX0KLQotLnNwZWVjaC1idWJibGU6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICcnOwotICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDEwMCU7Ci0gICAgcmlnaHQ6IDMwcHg7Ci0g
ICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50OwotICAgIGJvcmRlci10b3AtY29sb3I6
IHJnYmEoMCwgMCwgMCwgLjA0KTsKLX0KLQotLmxlYXJuLWJhciA+IC5sZWFybiB7Ci0gICAgcG9z
aXRpb246IGFic29sdXRlOwotICAgIHdpZHRoOiAyNzJweDsKLSAgICB0b3A6IDhweDsKLSAgICBs
ZWZ0OiAtMzAwcHg7Ci0gICAgcGFkZGluZzogMTBweDsKLSAgICBib3JkZXItcmFkaXVzOiA1cHg7
Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7Ci0gICAgLXdl
YmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0OwotICAgIHRyYW5zaXRpb24tcHJvcGVydHk6
IGxlZnQ7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKLSAgICB0cmFu
c2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKLX0KLQotQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7
Ci0gICAgLmxlYXJuLWJhciB7Ci0gICAgICAgIHdpZHRoOiBhdXRvOwotICAgICAgICBtYXJnaW46
IDAgMCAwIDMwMHB4OwotICAgIH0KLQotICAgIC5sZWFybi1iYXIgPiAubGVhcm4gewotICAgICAg
ICBsZWZ0OiA4cHg7Ci0gICAgfQotCi0gICAgLmxlYXJuLWJhciAjdG9kb2FwcCB7Ci0gICAgICAg
IHdpZHRoOiA1NTBweDsKLSAgICAgICAgbWFyZ2luOiAxMzBweCBhdXRvIDQwcHggYXV0bzsKLSAg
ICB9Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9k
b212Yy1jb21tb24vYmFzZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90
b2RvbXZjLWNvbW1vbi9iYXNlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjhl
NWVhMDNhNjFhZDM2Njc5YzE1ZWEwYWY2NDg5MTM3MWRiOWVhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9u
ZW50cy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAg
QEAKLShmdW5jdGlvbiAoKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgLy8gVW5kZXJzY29y
ZSdzIFRlbXBsYXRlIE1vZHVsZQotICAgIC8vIENvdXJ0ZXN5IG9mIHVuZGVyc2NvcmVqcy5vcmcK
LSAgICB2YXIgXyA9IChmdW5jdGlvbiAoXykgewotICAgICAgICBfLmRlZmF1bHRzID0gZnVuY3Rp
b24gKG9iamVjdCkgewotICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gb2JqZWN0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh2YXIgYXJn
c0luZGV4ID0gMSwgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGFyZ3NJbmRleCA8IGFy
Z3NMZW5ndGg7IGFyZ3NJbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGl0ZXJhYmxlID0g
YXJndW1lbnRzW2FyZ3NJbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBpdGVyYWJsZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG9iamVjdFtrZXldID09IG51bGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGl0ZXJhYmxlW2tleV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBk
ZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCi0gICAgICAgIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0
aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KLSAgICAgICAgXy50ZW1wbGF0ZVNl
dHRpbmdzID0gewotICAgICAgICAgICAgZXZhbHVhdGUgICAgOiAvPCUoW1xzXFNdKz8pJT4vZywK
LSAgICAgICAgICAgIGludGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9nLAotICAgICAgICAg
ICAgZXNjYXBlICAgICAgOiAvPCUtKFtcc1xTXSs/KSU+L2cKLSAgICAgICAgfTsKLQotICAgICAg
ICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdh
bnQgdG8gZGVmaW5lIGFuCi0gICAgICAgIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3Ig
ZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMKLSAgICAgICAgLy8gZ3VhcmFudGVl
ZCBub3QgdG8gbWF0Y2guCi0gICAgICAgIHZhciBub01hdGNoID0gLyguKV4vOwotCi0gICAgICAg
IC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRvIGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNh
biBiZSBwdXQgaW50byBhCi0gICAgICAgIC8vIHN0cmluZyBsaXRlcmFsLgotICAgICAgICB2YXIg
ZXNjYXBlcyA9IHsKLSAgICAgICAgICAgICInIjogICAgICAiJyIsCi0gICAgICAgICAgICAnXFwn
OiAgICAgJ1xcJywKLSAgICAgICAgICAgICdccic6ICAgICAncicsCi0gICAgICAgICAgICAnXG4n
OiAgICAgJ24nLAotICAgICAgICAgICAgJ1x0JzogICAgICd0JywKLSAgICAgICAgICAgICdcdTIw
MjgnOiAndTIwMjgnLAotICAgICAgICAgICAgJ1x1MjAyOSc6ICd1MjAyOScKLSAgICAgICAgfTsK
LQotICAgICAgICB2YXIgZXNjYXBlciA9IC9cXHwnfFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsK
LQotICAgICAgICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9o
biBSZXNpZydzIGltcGxlbWVudGF0aW9uLgotICAgICAgICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRp
bmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCi0g
ICAgICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRl
ZCBjb2RlLgotICAgICAgICBfLnRlbXBsYXRlID0gZnVuY3Rpb24odGV4dCwgZGF0YSwgc2V0dGlu
Z3MpIHsKLSAgICAgICAgICAgIHZhciByZW5kZXI7Ci0gICAgICAgICAgICBzZXR0aW5ncyA9IF8u
ZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBsYXRlU2V0dGluZ3MpOwotCi0gICAgICAgICAg
ICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBh
bHRlcm5hdGlvbi4KLSAgICAgICAgICAgIHZhciBtYXRjaGVyID0gbmV3IFJlZ0V4cChbCi0gICAg
ICAgICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNoKS5zb3VyY2UsCi0gICAgICAg
ICAgICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKLSAgICAg
ICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCi0gICAgICAg
ICAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7Ci0KLSAgICAgICAgICAgIC8vIENvbXBpbGUg
dGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcgc3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRl
bHkuCi0gICAgICAgICAgICB2YXIgaW5kZXggPSAwOwotICAgICAgICAgICAgdmFyIHNvdXJjZSA9
ICJfX3ArPSciOwotICAgICAgICAgICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1h
dGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7Ci0gICAgICAgICAg
ICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkKLSAgICAgICAgICAgICAg
ICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBl
c2NhcGVzW21hdGNoXTsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZXNjYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190PSgiICsgZXNjYXBlICsgIikpPT1u
dWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChpbnRlcnBvbGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0g
IicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4nIjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiIgKyBldmFsdWF0ZSArICJcbl9fcCs9JyI7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gu
bGVuZ3RoOwotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgc291cmNlICs9ICInO1xuIjsKLQotICAgICAgICAgICAgLy8gSWYgYSB2YXJp
YWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4K
LSAgICAgICAgICAgIGlmICghc2V0dGluZ3MudmFyaWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8
e30pe1xuJyArIHNvdXJjZSArICd9XG4nOwotCi0gICAgICAgICAgICBzb3VyY2UgPSAidmFyIF9f
dCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKwotICAgICAgICAgICAgICAgICJw
cmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKTt9O1xuIiArCi0gICAg
ICAgICAgICAgICAgc291cmNlICsgInJldHVybiBfX3A7XG4iOwotCi0gICAgICAgICAgICB0cnkg
ewotICAgICAgICAgICAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJs
ZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAg
ICAgICAgICAgICAgIGUuc291cmNlID0gc291cmNlOwotICAgICAgICAgICAgICAgIHRocm93IGU7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRh
dGEsIF8pOwotICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfKTsKLSAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNv
dXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVjb21waWxhdGlvbi4KLSAgICAgICAgICAgIHRl
bXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgKHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmon
KSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKLQotICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRl
OwotICAgICAgICB9OwotCi0gICAgICAgIHJldHVybiBfOwotICAgIH0pKHt9KTsKLQotICAgIGlm
IChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3RvZG9tdmMuY29tJykgewotICAgICAgICB3aW5kb3cu
X2dhcSA9IFtbJ19zZXRBY2NvdW50JywnVUEtMzEwODEwNjItMSddLFsnX3RyYWNrUGFnZXZpZXcn
XV07KGZ1bmN0aW9uKGQsdCl7dmFyIGc9ZC5jcmVhdGVFbGVtZW50KHQpLHM9ZC5nZXRFbGVtZW50
c0J5VGFnTmFtZSh0KVswXTtnLnNyYz0nLy93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vZ2EuanMn
O3MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKX0oZG9jdW1lbnQsJ3NjcmlwdCcpKTsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiByZWRpcmVjdCgpIHsKLSAgICAgICAgaWYgKGxvY2F0aW9uLmhv
c3RuYW1lID09PSAndGFzdGVqcy5naXRodWIuaW8nKSB7Ci0gICAgICAgICAgICBsb2NhdGlvbi5o
cmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKCd0YXN0ZWpzLmdpdGh1Yi5pby90b2RvbXZjJywg
J3RvZG9tdmMuY29tJyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBmaW5kUm9v
dCgpIHsKLSAgICAgICAgdmFyIGJhc2U7Ci0KLSAgICAgICAgWy9sYWJzLywgL1x3Ki1leGFtcGxl
cy9dLmZvckVhY2goZnVuY3Rpb24gKGhyZWYpIHsKLSAgICAgICAgICAgIHZhciBtYXRjaCA9IGxv
Y2F0aW9uLmhyZWYubWF0Y2goaHJlZik7Ci0KLSAgICAgICAgICAgIGlmICghYmFzZSAmJiBtYXRj
aCkgewotICAgICAgICAgICAgICAgIGJhc2UgPSBsb2NhdGlvbi5ocmVmLmluZGV4T2YobWF0Y2gp
OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gbG9jYXRpb24u
aHJlZi5zdWJzdHIoMCwgYmFzZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0RmlsZShmaWxl
LCBjYWxsYmFjaykgewotICAgICAgICBpZiAoIWxvY2F0aW9uLmhvc3QpIHsKLSAgICAgICAgICAg
IHJldHVybiBjb25zb2xlLmluZm8oJ01pc3MgdGhlIGluZm8gYmFyPyBSdW4gVG9kb01WQyBmcm9t
IGEgc2VydmVyIHRvIGF2b2lkIGEgY3Jvc3Mtb3JpZ2luIGVycm9yLicpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotCi0gICAgICAgIHhoci5v
cGVuKCdHRVQnLCBmaW5kUm9vdCgpICsgZmlsZSwgdHJ1ZSk7Ci0gICAgICAgIHhoci5zZW5kKCk7
Ci0KLSAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGlmICh4
aHIuc3RhdHVzID09PSAyMDAgJiYgY2FsbGJhY2spIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFj
ayh4aHIucmVzcG9uc2VUZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBMZWFybihsZWFybkpTT04sIGNvbmZpZykgewotICAgICAgICBpZiAoISh0
aGlzIGluc3RhbmNlb2YgTGVhcm4pKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IExlYXJuKGxl
YXJuSlNPTiwgY29uZmlnKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0ZW1wbGF0ZSwgZnJh
bWV3b3JrOwotCi0gICAgICAgIGlmICh0eXBlb2YgbGVhcm5KU09OICE9PSAnb2JqZWN0Jykgewot
ICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBsZWFybkpTT04gPSBKU09OLnBhcnNl
KGxlYXJuSlNPTik7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbmZpZykg
ewotICAgICAgICAgICAgdGVtcGxhdGUgPSBjb25maWcudGVtcGxhdGU7Ci0gICAgICAgICAgICBm
cmFtZXdvcmsgPSBjb25maWcuZnJhbWV3b3JrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF0
ZW1wbGF0ZSAmJiBsZWFybkpTT04udGVtcGxhdGVzKSB7Ci0gICAgICAgICAgICB0ZW1wbGF0ZSA9
IGxlYXJuSlNPTi50ZW1wbGF0ZXMudG9kb212YzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
ZnJhbWV3b3JrICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKSkg
ewotICAgICAgICAgICAgZnJhbWV3b3JrID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEt
ZnJhbWV3b3JrXScpLmdldEF0dHJpYnV0ZSgnZGF0YS1mcmFtZXdvcmsnKTsKLSAgICAgICAgfQot
Ci0KLSAgICAgICAgaWYgKHRlbXBsYXRlICYmIGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7Ci0gICAg
ICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT05bZnJhbWV3b3JrXTsKLSAgICAg
ICAgICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKLQotICAgICAgICAgICAgdGhpcy5hcHBl
bmQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIExlYXJuLnByb3RvdHlwZS5hcHBlbmQgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2FzaWRlJyk7Ci0gICAgICAgIGFzaWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1w
bGF0ZSwgdGhpcy5mcmFtZXdvcmtKU09OKTsKLSAgICAgICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xl
YXJuJzsKLQotICAgICAgICAvLyBMb2NhbGl6ZSBkZW1vIGxpbmtzCi0gICAgICAgIHZhciBkZW1v
TGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5rJyk7Ci0gICAgICAgIEFy
cmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZGVtb0xpbmtzLCBmdW5jdGlvbiAoZGVtb0xpbmsp
IHsKLSAgICAgICAgICAgIGRlbW9MaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkg
KyBkZW1vTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gKGRvY3VtZW50LmJvZHkuY2xhc3NOYW1lICsgJyBs
ZWFybi1iYXInKS50cmltKCk7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRI
VE1MKCdhZnRlckJlZ2luJywgYXNpZGUub3V0ZXJIVE1MKTsKLSAgICB9OwotCi0gICAgcmVkaXJl
Y3QoKTsKLSAgICBnZXRGaWxlKCdsZWFybi5qc29uJywgTGVhcm4pOwotfSkoKTsKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvYm93ZXJfY29tcG9uZW50cy90b2RvbXZjLWNvbW1vbi9iZy5w
bmcgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Jvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmcu
cG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmE3NjAwODI1ZWUxMWYyMTg0OWVk
NDc1NDk5YzdkMWVjYmNjODcwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDIxMjYK
emNtVi1VMihrQnhQKTxoOzNLfExrMDAwZTFOSkxUcTAwM2tGMDAza0gwe3tSMzRVQiFxMDAwMENQ
KXQtcz8oWGpFCno+Kzl5YD1ISzdudD1+M3QwMDBPNU5rbDxaY3dUanUoUTR2fjdLV0VXI1ltP2xL
X3Y7VG18IUZjKUBOd0VubXRzaAp6eCFPfno4MUpUM3BGc20+bT0wNGhWYV9sWGxfYm09K007PWVJ
PCUkck8ydGFgc3VoKlNyI1BPdyo/YWRxIU8hQ1YKeiowJmIpcmtDQ0VWKTFuSXVpTEJudFVILU1K
STsmcVlnenxkQE5obm5fYWJpMmdgcHU0TkFNVmlkM2hTJT9xdXp+CnpqbEpmKHg4Y2o8UEdjam4q
SitheyZINXAqbjUkNWUzPzxLQ2M/bzA2bUFzTlNiZ1BXTz9QeiNDem48IT17PntWUwp6VVZFUDFt
c2c5YF5PRlVoU081cnRYSGhSbHlVMmk+NiRCVD1nbEdge0psY3RHSHJ3UkltKTZCdXU2NWpMUW5e
SDgKenZsOWxacVVCQSslcXZNNVhDK3lZQG1mQShZQn5YUD1lfDY8eyUkXmVVOG5ySz92MmNjYkBK
b201Q0c+cktBTDdKCnpwbEhFSWF2VnB8MHAxJm0hR2BUaT88N2laO31ARzcjWil9S20lMiFGSG5R
MComP1BMUilHIUhBYUhnVSNjfCRkegp6cGojMEhtZWFkSWU+YCMpPUpqa2J7Qj1GS25VM3BjLSZZ
QGpfajYoaDRZfitVcTxQVTM2Qzs1Yj1NXkZgPXAxZEkKems8Q1FPUE5hNz4hXko9TEh1bngxeGk0
UVhLLVl7Jk1vVDhreTZWYjljfFdobk93Rn5jPTN6T3k4YWdrdGxpUzYjCnpgIzhGYDlIKUQ9Ym1r
OUI1TW5XJl9yIylmJGMrOyRMU3ItQF5BbjhkaGN+SXF1dXY+ak9LN3B3N0xKOyZYMGkxQwp6R01z
SGRQMU9zQG55JCRqIT5YQWlpJTdicDVrPmBweU5BIX5lcGIpKClwOXpSNFlsNno9VX17Q0lkaDF6
KEZwQW8KelFJVyE7MHpwQ3lDNCo3WUxrWkNPQGN1bDBSXyZ6Z2hzQThFayl6JTwhcC1idnNzcGxZ
WTJ9UDshdjRDWWo5a21GCnpiMGJOX200VipmXllaTW9iMihqM3BLan43diNadGtzPUlvK3tzdSVX
aXVrZEpIJGI/ZlpraUE9UFlfM09oREJrbwp6KExUUUhZJkZeXjJoRy1ZYCpaOTN2Yn5jPyooSmNo
RGpUZkNzP3pSbSpgKk4qVi0kPT9RcXRoblNyKj9PUzNzaksKem88X1VeZnt+YWc2MHVsPmpOcEth
OTJ7QE5IK1NzdFglQH14QipKayFsfVBaMWNDbEluc359NV4hUm5jVWsqcm1BCnolU0lWZ3Q1OEVR
eExKK09pRnE8eXU0ZU9EfDlMdDNkTnNlZnhPdXEpRCYkXyVqMERncUN5MWd6Y3x0VEQzKm1lZQp6
ez0lfDxgYH1fSHlwaE91ezspeGtSZytRbkhDQzNUZitrc3BxVjYqfFFLLVJjcUR9ND5La0J1d3F1
eVpMVXB8Z3IKelBVYlViRmJCclBkMXhPYF5DKnItaTNwOSpGIyhPQmghNFd5QGFDJiohfE98R1hj
akRBJlloRns7Y0Q3Km8oR1NeCnpAcFFTRTcpeF84MT1ReWplNipMUSNUWHUtNyhvO1M4dTN0cERB
PFNnY0tjS09wbUE7PUhCWlNAT0ZUQF9YT3Z4cQp6Kk58M0tMeXRnekg2R1UmJlVvYzRaems0bHVt
M1B7OT9mcEk0K1FHUEordjZgMWxmUnEzTGNTKihNKldLK3xiJU8KemUkej4wX2RkaiVobUNzcGVY
ZGhZUn0taTlBPUNgRW9DaFVZdUh+XnghOSt8JihQZ2IqPkNrPD05anwpKkB4eWZUCnpwUCMrS3Q8
fTM5YnwzV2w0ZnhUKCtHP2FIPmdHXmRATUVhVU9KUmZ5NTVUdEZJN15ZKVZ1TVU9N1BwMHk1NWpT
fgp6K1RKKWlnTXlycWtYO3dVOGo2OGlJRHRxSlloU19EM19PZW0tQGc2bWVfUmZpUX11VF9LLUEt
OXFHJX1nazNFOWMKeiE4YEtnc01OWG0pYmVsb1BmTXFsKnwmJE0+MXFgaSFjWSlSRlluak5ZdSpn
U3ZAOFhlYlY3JX14WUw+NilHSlBKCnpKcEE3SzMxbGNKdUlGS1N3LXt4NEZYMEsyQXopflhnPGBz
T3UkNHxePE1DN0AreGJ3eHNHZ1R2SklBTGpQezY4TAp6OEFZdVNHUzBHVWdrNldgdjRXO1J5KnVv
RVRudWxQaXw1NzMlbHYqWnh3I3Y2eVVRXk1PZmNwVCNWOFJJRFYjI04KekQxYCtBZW1zT2gpd2JX
REV4VmNmcEt6KWp5Vj08fiZaWFBnNmN8WkRFN1U0Yms8RF4+LSheWEpYNFl6b2lOUnZMCnp5dVk3
fjI2dy1QXlp3JTZGfXNoQndWMiQwMmM4UnNTVXk2ZE05MmRpQ0F4aVgzSVVxc3E1aWc2PlVfIVZ5
KnE1JAp6am19MTZ0SnIrUVomVD9Ia2twZUl3VlgtcjFFST1AJVpsdDs2PHR3SDg2SUQ+ZyptaiZF
IUEpKSVnWEo9eDZ1I2wKemNLRVA+Yng0cnFWKmtgQkJyWiRNcWp0e1RzSGN4VUg+OylpQUt9QihL
aWxhJlZEJWI/Nm0mXjBXSzReJkVaTkFJCno4QU1Zc18lJEQlfE0rQCtjUXFMLWhpNHlHPmgqandk
aWkhVzF7fXA+Wmh3Rll0XzRTdTFralk5PGJBWmp6fjllawp6X0RpYXIrQWZKRlBfOUB5bVVvJEtX
PjwtNWAhJFZOT0kxeShFRFNINFdwQ2lqRV8+YWwhTnQ9XmVWRVIjdUoxPWIKejtCV0YySWd5RjVM
ZXhWK3llYyRLaW47QWlAbXlvO0c+ekomanJkVyNlY1hoSVpwaDVPWXF3X1BFZmNGNTY8TzE5CnpM
KThyIUtNKClpZjBgQD9XNChKZGMpN1dvUEdeJj0kPHpVc00rSENXYWtDXjN0WnhrK1BqUUd9Qj5a
NTxaNlZ4dwp6QkBIclYkJmx+QFRhajcwcGNle2lTdVJMc1VjekRZXzVUbkRxOFB5X1Ezd2hgRDgh
NGpLO3ZGZFJQK1EwPXpKeSoKenp1V2QlIWFpQER7fCpKPEk7T0QmaSVse0pwLTgqUHUzVkdMV2l5
azZ2I1htUXF3YC0rJWUkfENKdypAYDV6YjM8CnpFfXojO2tSaEwmcTVQREc2QG1tKiQ+WnVfWlpF
I3EzTWMrTiYxT143aG9oOVFSN2ArTCRjQlA1cHFHPWZxQTB1aAp6VUJ1a2F4VEZtSCk8fFhidnAy
Yz1IU2JOa3BYdzczYTVsdjdWJGpiOTIjeVoxNDFAJFg/Rn1KdDhnSVU3V202bTkKej9lXzs7enNu
bTZgTFplUD5UPSQpS3I+Wj9rcipVbUZxUjd6eDBDNl5ibWNzY0AxQUd0d19yTkg+LVhtJGQqfFE8
CnpuJjFMbjB1Nz1sJklMcz4lQ2tKcGBEaUc5RjE4eDROZStsZzwjaT9lN2pMJXg7NFpuUmtOXk14
MDcqcW9NNk48JApFZig+ME4hMmtkTgoKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L2FwcC9qcy9kYXRhL3N0YXRzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pz
L2RhdGEvc3RhdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzg5MzNmZDJkMDc0MjA2NWI2ZDlkM2RlNmM0N2U3
NjI4YjU5MDgzMAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2Fw
cC9qcy9kYXRhL3N0YXRzLmpzCkBAIC0wLDAgKzEsMzkgQEAKKy8qZ2xvYmFsIGRlZmluZSAqLwor
J3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCisg
ICAgJ2FwcC9zdG9yZScKK10sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQsIGRhdGFTdG9yZSkg
eworICAgIGZ1bmN0aW9uIHN0YXRzKCkgeworICAgICAgICB0aGlzLmF0dHJpYnV0ZXMoeworICAg
ICAgICAgICAgZGF0YVN0b3JlOiBkYXRhU3RvcmUKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhp
cy5yZWNvdW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIHRvZG9zID0gdGhpcy5h
dHRyLmRhdGFTdG9yZS5hbGwoKTsKKyAgICAgICAgICAgIHZhciBhbGwgPSB0b2Rvcy5sZW5ndGg7
CisgICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gdG9kb3MucmVkdWNlKGZ1bmN0aW9uIChtZW1v
LCBlYWNoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1lbW8gKz0gZWFjaC5jb21wbGV0ZWQg
PyAwIDogMTsKKyAgICAgICAgICAgIH0sIDApOworCisgICAgICAgICAgICB0aGlzLnRyaWdnZXIo
J2RhdGFTdGF0c0NvdW50ZWQnLCB7CisgICAgICAgICAgICAgICAgYWxsOiBhbGwsCisgICAgICAg
ICAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcsCisgICAgICAgICAgICAgICAgY29tcGxldGVk
OiBhbGwgLSByZW1haW5pbmcsCisgICAgICAgICAgICAgICAgZmlsdGVyOiAnJworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb3NMb2Fk
ZWQnLCB0aGlzLnJlY291bnQpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFU
b2RvQWRkZWQnLCB0aGlzLnJlY291bnQpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwg
J2RhdGFUb2RvUmVtb3ZlZCcsIHRoaXMucmVjb3VudCk7CisgICAgICAgICAgICB0aGlzLm9uKGRv
Y3VtZW50LCAnZGF0YVRvZG9Ub2dnbGVkJywgdGhpcy5yZWNvdW50KTsKKyAgICAgICAgICAgIHRo
aXMub24oZG9jdW1lbnQsICdkYXRhQ2xlYXJlZENvbXBsZXRlZCcsIHRoaXMucmVjb3VudCk7Cisg
ICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9Ub2dnbGVkQWxsJywgdGhpcy5y
ZWNvdW50KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVu
dChzdGF0cyk7Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9q
cy9kYXRhL3RvZG9zLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL2RhdGEvdG9k
b3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjU5ZjFjMzViMGNiMjhhNGYxNDJkYTAxNWI5OTE2ODQ4NjRhYWZm
MAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9kYXRh
L3RvZG9zLmpzCkBAIC0wLDAgKzEsMTAzIEBACisvKmdsb2JhbCBkZWZpbmUgKi8KKyd1c2Ugc3Ry
aWN0JzsKKworZGVmaW5lKFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAorICAgICdhcHAv
c3RvcmUnCitdLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50LCBkYXRhU3RvcmUpIHsKKyAgICBm
dW5jdGlvbiB0b2RvcygpIHsKKyAgICAgICAgdmFyIGZpbHRlcjsKKyAgICAgICAgdGhpcy5hdHRy
aWJ1dGVzKHsKKyAgICAgICAgICAgIGRhdGFTdG9yZTogZGF0YVN0b3JlCisgICAgICAgIH0pOwor
CisgICAgICAgIHRoaXMuYWRkID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZh
ciB0b2RvID0gdGhpcy5hdHRyLmRhdGFTdG9yZS5zYXZlKHsKKyAgICAgICAgICAgICAgICB0aXRs
ZTogZGF0YS50aXRsZSwKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlCisgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhVG9kb0FkZGVkJywgeyB0
b2RvOiB0b2RvLCBmaWx0ZXI6IGZpbHRlciB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlz
LnJlbW92ZSA9IGZ1bmN0aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgdG9kbyA9IHRo
aXMuYXR0ci5kYXRhU3RvcmUuZGVzdHJveShkYXRhLmlkKTsKKworICAgICAgICAgICAgdGhpcy50
cmlnZ2VyKCdkYXRhVG9kb1JlbW92ZWQnLCB0b2RvKTsKKyAgICAgICAgfTsKKworICAgICAgICB0
aGlzLmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgdG9kb3M7CisKKyAgICAg
ICAgICAgIC8vIGZpbHRlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmaWx0ZXInKTsKKyAgICAg
ICAgICAgIGZpbHRlciA9ICcnOworICAgICAgICAgICAgdG9kb3MgPSB0aGlzLmZpbmQoKTsKKyAg
ICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YVRvZG9zTG9hZGVkJywgeyB0b2RvczogdG9kb3Mg
fSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbiAoZSwgZGF0
YSkgeworICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5zYXZlKGRhdGEpOworICAgICAg
ICB9OworCisgICAgICAgIHRoaXMudG9nZ2xlQ29tcGxldGVkID0gZnVuY3Rpb24gKGUsIGRhdGEp
IHsKKyAgICAgICAgICAgIHZhciBldmVudFR5cGU7CisgICAgICAgICAgICB2YXIgdG9kbyA9IHRo
aXMuYXR0ci5kYXRhU3RvcmUuZ2V0KGRhdGEuaWQpOworCisgICAgICAgICAgICB0b2RvLmNvbXBs
ZXRlZCA9ICF0b2RvLmNvbXBsZXRlZDsKKyAgICAgICAgICAgIHRoaXMuYXR0ci5kYXRhU3RvcmUu
c2F2ZSh0b2RvKTsKKworICAgICAgICAgICAgZXZlbnRUeXBlID0gZmlsdGVyID8gJ2RhdGFUb2Rv
UmVtb3ZlZCcgOiAnZGF0YVRvZG9Ub2dnbGVkJzsKKworICAgICAgICAgICAgdGhpcy50cmlnZ2Vy
KGV2ZW50VHlwZSwgdG9kbyk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy50b2dnbGVBbGxD
b21wbGV0ZWQgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdGhpcy5hdHRyLmRh
dGFTdG9yZS51cGRhdGVBbGwoeyBjb21wbGV0ZWQ6IGRhdGEuY29tcGxldGVkIH0pOworICAgICAg
ICAgICAgdGhpcy50cmlnZ2VyKCdkYXRhVG9kb1RvZ2dsZWRBbGwnLCB7IHRvZG9zOiB0aGlzLmZp
bmQoZmlsdGVyKSB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmZpbHRlciA9IGZ1bmN0
aW9uIChlLCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgdG9kb3M7CisKKyAgICAgICAgICAgIC8v
IGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdmaWx0ZXInLCBkYXRhLmZpbHRlcik7CisgICAgICAgICAg
ICBmaWx0ZXIgPSBkYXRhLmZpbHRlcjsKKyAgICAgICAgICAgIHRvZG9zID0gdGhpcy5maW5kKCk7
CisKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YVRvZG9zRmlsdGVyZWQnLCB7IHRvZG9z
OiB0b2RvcyB9KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmZpbmQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICB2YXIgdG9kb3M7CisKKyAgICAgICAgICAgIGlmIChmaWx0ZXIpIHsK
KyAgICAgICAgICAgICAgICB0b2RvcyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuZmluZChmdW5jdGlv
biAoZWFjaCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBlYWNoW2ZpbHRl
cl0gIT09ICd1bmRlZmluZWQnKSA/IGVhY2guY29tcGxldGVkIDogIWVhY2guY29tcGxldGVkOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB0b2RvcyA9IHRoaXMuYXR0ci5kYXRhU3RvcmUuYWxsKCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB0b2RvczsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmNsZWFy
Q29tcGxldGVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9y
ZS5kZXN0cm95QWxsKHsgY29tcGxldGVkOiB0cnVlIH0pOworCisgICAgICAgICAgICB0aGlzLnRy
aWdnZXIoJ3VpRmlsdGVyUmVxdWVzdGVkJywgeyBmaWx0ZXI6IGZpbHRlciB9KTsKKyAgICAgICAg
ICAgIHRoaXMudHJpZ2dlcignZGF0YUNsZWFyZWRDb21wbGV0ZWQnKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpQWRkUmVxdWVzdGVkJywgdGhpcy5hZGQpOworICAgICAg
ICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpVXBkYXRlUmVxdWVzdGVkJywgdGhpcy51cGRhdGUp
OworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpUmVtb3ZlUmVxdWVzdGVkJywgdGhp
cy5yZW1vdmUpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpTG9hZFJlcXVlc3Rl
ZCcsIHRoaXMubG9hZCk7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlUb2dnbGVS
ZXF1ZXN0ZWQnLCB0aGlzLnRvZ2dsZUNvbXBsZXRlZCk7CisgICAgICAgICAgICB0aGlzLm9uKGRv
Y3VtZW50LCAndWlUb2dnbGVBbGxSZXF1ZXN0ZWQnLCB0aGlzLnRvZ2dsZUFsbENvbXBsZXRlZCk7
CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlDbGVhclJlcXVlc3RlZCcsIHRoaXMu
Y2xlYXJDb21wbGV0ZWQpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpRmlsdGVy
UmVxdWVzdGVkJywgdGhpcy5maWx0ZXIpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1
cm4gZGVmaW5lQ29tcG9uZW50KHRvZG9zKTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvYXBwL2pzL21haW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAv
anMvbWFpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjQ3NzNmMThkMWFhMGExMDkzYzBlZGIyYWRkYjQ4ZTM1
ZWNhNWRlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pz
L21haW4uanMKQEAgLTAsMCArMSwzMSBAQAorLypnbG9iYWwgREVCVUcgKi8KKyd1c2Ugc3RyaWN0
JzsKKworcmVxdWlyZS5jb25maWcoeworICAgIGJhc2VVcmw6ICcuLycsCisgICAgcGF0aHM6IHsK
KyAgICAgICAganF1ZXJ5OiAnbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeScsCisgICAg
ICAgIGVzNXNoaW06ICdub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoaW0nLAorICAgICAgICBl
czVzaGFtOiAnbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGFtJywKKyAgICAgICAgdGV4dDog
J25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC90ZXh0JywKKyAgICAgICAgZmxpZ2h0OiAnbm9k
ZV9tb2R1bGVzL2ZsaWdodCcsCisgICAgICAgIGRlcG90OiAnbm9kZV9tb2R1bGVzL2RlcG90L2Rl
cG90JywKKyAgICAgICAgbWVtb3J5c3RvcmFnZTogJ25vZGVfbW9kdWxlcy9tZW1vcnlzdG9yYWdl
L21lbW9yeXN0b3JhZ2UnLAorICAgICAgICBhcHA6ICdhcHAvanMnLAorICAgICAgICB0ZW1wbGF0
ZXM6ICdhcHAvdGVtcGxhdGVzJywKKyAgICAgICAgdWk6ICdhcHAvanMvdWknLAorICAgICAgICBk
YXRhOiAnYXBwL2pzL2RhdGEnLAorICAgIH0sCisgICAgc2hpbTogeworICAgICAgICAnYXBwL3Bh
Z2UvYXBwJzogeworICAgICAgICAgICAgZGVwczogWydqcXVlcnknLCAnZXM1c2hpbScsICdlczVz
aGFtJ10KKyAgICAgICAgfQorICAgIH0KK30pOworCityZXF1aXJlKFtdLCBmdW5jdGlvbiAoKSB7
CisgICAgcmVxdWlyZShbJ2FwcC9wYWdlL2FwcCddLGZ1bmN0aW9uKEFwcCl7CisgICAgICAgIEFw
cC5pbml0aWFsaXplKCk7CisgICAgICAgIGNvbnNvbGUubG9nKEFwcCk7CisgICAgfSk7Cit9KTsK
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9wYWdlL2FwcC5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9wYWdlL2FwcC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
MTczM2EzZDgzMDA3YzdmMDZkNjFjMjA3MDk1Mzc4ZWQ3YTE0MDU4Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3BhZ2UvYXBwLmpzCkBAIC0wLDAgKzEs
MjYgQEAKKy8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAg
ICdkYXRhL3RvZG9zJywKKyAgICAnZGF0YS9zdGF0cycsCisgICAgJ3VpL25ld19pdGVtJywKKyAg
ICAndWkvdG9kb19saXN0JywKKyAgICAndWkvc3RhdHMnLAorICAgICd1aS9tYWluX3NlbGVjdG9y
JywKKyAgICAndWkvdG9nZ2xlX2FsbCcKK10sIGZ1bmN0aW9uIChUb2Rvc0RhdGEsIFN0YXRzRGF0
YSwgTmV3SXRlbVVJLCBUb2RvTGlzdFVJLCBTdGF0c1VJLCBNYWluU2VsZWN0b3JVSSwgVG9nZ2xl
QWxsVUkpIHsKKyAgICB2YXIgaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgU3Rh
dHNEYXRhLmF0dGFjaFRvKGRvY3VtZW50KTsKKyAgICAgICAgVG9kb3NEYXRhLmF0dGFjaFRvKGRv
Y3VtZW50KTsKKyAgICAgICAgTmV3SXRlbVVJLmF0dGFjaFRvKCcjbmV3LXRvZG8nKTsKKyAgICAg
ICAgTWFpblNlbGVjdG9yVUkuYXR0YWNoVG8oJyNtYWluJyk7CisgICAgICAgIFN0YXRzVUkuYXR0
YWNoVG8oJyNmb290ZXInKTsKKyAgICAgICAgVG9nZ2xlQWxsVUkuYXR0YWNoVG8oJyN0b2dnbGUt
YWxsJyk7CisgICAgICAgIFRvZG9MaXN0VUkuYXR0YWNoVG8oJyN0b2RvLWxpc3QnKTsKKyAgICB9
OworCisgICAgcmV0dXJuIHsKKyAgICAgICAgaW5pdGlhbGl6ZTogaW5pdGlhbGl6ZQorICAgIH07
Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9zdG9yZS5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy9zdG9yZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
NWE3ZjkwYWNhOTQxMWI1OTdlMTg5MTg5ZDMyZTc1ZDZiOTdkNGE3Ci0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3N0b3JlLmpzCkBAIC0wLDAgKzEsMTEg
QEAKKy8qZ2xvYmFsIGRlZmluZSAqLworCisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAg
J2RlcG90JywKKyAgICAnbWVtb3J5c3RvcmFnZScKK10sIGZ1bmN0aW9uIChkZXBvdCwgTWVtb3J5
U3RvcmFnZSkgeworICAgIHZhciBtZW1TdG9yZSA9IG5ldyBNZW1vcnlTdG9yYWdlKCd0b2Rvcycp
OworICAgIHJldHVybiBkZXBvdCgndG9kb3MnLCB7IGlkQXR0cmlidXRlOiAnaWQnLCBzdG9yYWdl
QWRhcHRvcjogbWVtU3RvcmUgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L2FwcC9qcy91aS9tYWluX3NlbGVjdG9yLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvYXBwL2pzL3VpL21haW5fc2VsZWN0b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg4YzJkNGNlMGE5MmRl
MmU0ZTEyMjg3ZmI2ZTE4ODlhZjdlN2QzMwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L2FwcC9qcy91aS9tYWluX3NlbGVjdG9yLmpzCkBAIC0wLDAgKzEsMjAgQEAK
Ky8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdmbGln
aHQvbGliL2NvbXBvbmVudCcKK10sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQpIHsKKyAgICBm
dW5jdGlvbiBtYWluU2VsZWN0b3IoKSB7CisgICAgICAgIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24g
KGUsIGRhdGEpIHsKKyAgICAgICAgICAgIHZhciB0b2dnbGUgPSBkYXRhLmFsbCA+IDA7CisgICAg
ICAgICAgICB0aGlzLiRub2RlLnRvZ2dsZSh0b2dnbGUpOworICAgICAgICB9OworCisgICAgICAg
IHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlz
LiRub2RlLmhpZGUoKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhU3RhdHND
b3VudGVkJywgdGhpcy50b2dnbGUpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZGVmaW5lQ29tcG9uZW50KG1haW5TZWxlY3Rvcik7Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS9uZXdfaXRlbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L2FwcC9qcy91aS9uZXdfaXRlbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWQ2ZDg3ZTM0M2I1NTgx
YThhNTdhOGZhMzM5NGI2ZDNiYTQyNTBiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvYXBwL2pzL3VpL25ld19pdGVtLmpzCkBAIC0wLDAgKzEsMjkgQEAKKy8qZ2xv
YmFsIGRlZmluZSAqLworJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoWworICAgICdmbGlnaHQvbGli
L2NvbXBvbmVudCcKK10sIGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQpIHsKKyAgICBmdW5jdGlv
biBuZXdJdGVtKCkgeworICAgICAgICB2YXIgRU5URVJfS0VZID0gMTM7CisKKyAgICAgICAgdGhp
cy5jcmVhdGVPbkVudGVyID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGlmIChlLndoaWNo
ICE9PSBFTlRFUl9LRVkgfHwKKyAgICAgICAgICAgICAgICAhdGhpcy4kbm9kZS52YWwoKS50cmlt
KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHRoaXMudHJpZ2dlcigndWlBZGRSZXF1ZXN0ZWQnLCB7CisgICAgICAgICAgICAgICAgdGl0
bGU6IHRoaXMuJG5vZGUudmFsKCkudHJpbSgpCisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgdGhpcy4kbm9kZS52YWwoJycpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuYWZ0ZXIo
J2luaXRpYWxpemUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLm9uKCdrZXlkb3du
JywgdGhpcy5jcmVhdGVPbkVudGVyKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJu
IGRlZmluZUNvbXBvbmVudChuZXdJdGVtKTsKK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvYXBwL2pzL3VpL3N0YXRzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
YXBwL2pzL3VpL3N0YXRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkYTdhYzY2YTc0N2RjYTY0YjcwNjAzOWJi
NjA4NTUwZDM2MjBkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9hcHAvanMvdWkvc3RhdHMuanMKQEAgLTAsMCArMSwzNyBAQAorLypnbG9iYWwgZGVmaW5lICov
CisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywK
KyAgICAnLi93aXRoX2ZpbHRlcnMnLAorICAgICd0ZXh0IXRlbXBsYXRlcy9zdGF0cy5odG1sJywK
KyAgICAnYXBwL3V0aWxzJworXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCwgd2l0aEZpbHRl
cnMsIHN0YXRzVG1wbCwgdXRpbHMpIHsKKyAgICBmdW5jdGlvbiBzdGF0cygpIHsKKyAgICAgICAg
dmFyIHRlbXBsYXRlID0gdXRpbHMudG1wbChzdGF0c1RtcGwpOworCisgICAgICAgIHRoaXMuYXR0
cmlidXRlcyh7CisgICAgICAgICAgICBjbGVhckNvbXBsZXRlZFNlbGVjdG9yOiAnI2NsZWFyLWNv
bXBsZXRlZCcKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAo
ZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIHRvZ2dsZSA9IGRhdGEuYWxsID4gMDsKKworICAg
ICAgICAgICAgdGhpcy4kbm9kZS5odG1sKHRlbXBsYXRlKGRhdGEpKTsKKyAgICAgICAgICAgIHRo
aXMuJG5vZGUudG9nZ2xlKHRvZ2dsZSk7CisgICAgICAgICAgICB0aGlzLm1hcmtTZWxlY3RlZChk
YXRhLmZpbHRlcik7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5jbGVhckNvbXBsZXRlZCA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlDbGVhclJlcXVlc3Rl
ZCcpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICB0aGlzLiRub2RlLmhpZGUoKTsKKyAgICAgICAgICAgIHRo
aXMub24oZG9jdW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJywgdGhpcy5yZW5kZXIpOworICAgICAg
ICAgICAgdGhpcy5vbignY2xpY2snLCB7ICdjbGVhckNvbXBsZXRlZFNlbGVjdG9yJzogdGhpcy5j
bGVhckNvbXBsZXRlZCB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmlu
ZUNvbXBvbmVudChzdGF0cywgd2l0aEZpbHRlcnMpOworfSk7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvdG9kb19saXN0LmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvYXBwL2pzL3VpL3RvZG9fbGlzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTRkODNkNzU1NDgw
YmY3OTNjODgzZGUwMzFlYzI0YjAxYWI3YTdlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvYXBwL2pzL3VpL3RvZG9fbGlzdC5qcwpAQCAtMCwwICsxLDEwOCBAQAor
LypnbG9iYWwgZGVmaW5lLCAkICovCisndXNlIHN0cmljdCc7CisKK2RlZmluZShbCisgICAgJ2Zs
aWdodC9saWIvY29tcG9uZW50JywKKyAgICAndGV4dCF0ZW1wbGF0ZXMvdG9kby5odG1sJywKKyAg
ICAnYXBwL3V0aWxzJworXSwgZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCwgdG9kb1RtcGwsIHV0
aWxzKSB7CisgICAgZnVuY3Rpb24gdG9kb0xpc3QoKSB7CisgICAgICAgIHZhciBFTlRFUl9LRVkg
PSAxMzsKKyAgICAgICAgdmFyIHRlbXBsYXRlID0gdXRpbHMudG1wbCh0b2RvVG1wbCk7CisKKyAg
ICAgICAgdGhpcy5hdHRyaWJ1dGVzKHsKKyAgICAgICAgICAgIGRlc3Ryb3lTZWxlY3RvcjogJ2J1
dHRvbi5kZXN0cm95JywKKyAgICAgICAgICAgIHRvZ2dsZVNlbGVjdG9yOiAnaW5wdXQudG9nZ2xl
JywKKyAgICAgICAgICAgIGxhYmVsU2VsZWN0b3I6ICdsYWJlbCcsCisgICAgICAgICAgICBlZGl0
U2VsZWN0b3I6ICcuZWRpdCcKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5yZW5kZXJBbGwg
PSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdGhpcy4kbm9kZS5odG1sKCcnKTsK
KyAgICAgICAgICAgIGRhdGEudG9kb3MuZm9yRWFjaChmdW5jdGlvbiAoZWFjaCkgeworICAgICAg
ICAgICAgICAgIHRoaXMucmVuZGVyKGUsIHsgdG9kbzogZWFjaCB9KTsKKyAgICAgICAgICAgIH0s
IHRoaXMpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKGUs
IGRhdGEpIHsKKyAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdkYXRhVG9kb0FkZGVkJyAmJiBk
YXRhLmZpbHRlciA9PT0gJ2NvbXBsZXRlZCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuJG5vZGUuYXBwZW5kKHRlbXBsYXRlKGRh
dGEudG9kbykpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuZWRpdCA9IGZ1bmN0aW9uIChl
LCBkYXRhKSB7CisgICAgICAgICAgICB2YXIgJHRvZG9FbCA9ICQoZGF0YS5lbCkucGFyZW50cygn
bGknKTsKKworICAgICAgICAgICAgJHRvZG9FbC5hZGRDbGFzcygnZWRpdGluZycpOworICAgICAg
ICAgICAgdGhpcy5zZWxlY3QoJ2VkaXRTZWxlY3RvcicpLmZvY3VzKCk7CisgICAgICAgIH07CisK
KyAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAg
IHZhciAkaW5wdXRFbCA9ICQoZS5jdXJyZW50VGFyZ2V0KTsKKyAgICAgICAgICAgIHZhciAkdG9k
b0VsID0gJGlucHV0RWwucGFyZW50cygnbGknKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9ICRp
bnB1dEVsLnZhbCgpLnRyaW0oKTsKKyAgICAgICAgICAgIHZhciBpZCA9ICR0b2RvRWwuYXR0cign
aWQnKTsKKworICAgICAgICAgICAgaWYgKCEkdG9kb0VsLmhhc0NsYXNzKCdlZGl0aW5nJykpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICR0
b2RvRWwucmVtb3ZlQ2xhc3MoJ2VkaXRpbmcnKTsKKworICAgICAgICAgICAgaWYgKHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgJHRvZG9FbC5maW5kKCdsYWJlbCcpLmh0bWwodmFsdWUpOworICAg
ICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlVcGRhdGVSZXF1ZXN0ZWQnLCAgeyBpZDogaWQs
IHRpdGxlOiB2YWx1ZSB9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dGhpcy50cmlnZ2VyKCd1aVJlbW92ZVJlcXVlc3RlZCcsIHsgaWQ6IGlkIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZU9uRW50ZXIgPSBm
dW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IEVOVEVSX0tF
WSkgeworICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZShlLCBkYXRhKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlcXVlc3RSZW1vdmUgPSBmdW5j
dGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIGlkID0gJChkYXRhLmVsKS5hdHRyKCdp
ZCcpLnNwbGl0KCdfJylbMV07CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpUmVtb3ZlUmVx
dWVzdGVkJywgeyBpZDogaWQgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZW1vdmUg
PSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyICR0b2RvRWwgPSB0aGlzLiRu
b2RlLmZpbmQoJyMnICsgZGF0YS5pZCk7CisgICAgICAgICAgICAkdG9kb0VsLnJlbW92ZSgpOwor
ICAgICAgICB9OworCisgICAgICAgIHRoaXMudG9nZ2xlID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsK
KyAgICAgICAgICAgIHZhciAkdG9kb0VsID0gJChkYXRhLmVsKS5wYXJlbnRzKCdsaScpOworCisg
ICAgICAgICAgICAkdG9kb0VsLnRvZ2dsZUNsYXNzKCdjb21wbGV0ZWQnKTsKKyAgICAgICAgICAg
IHRoaXMudHJpZ2dlcigndWlUb2dnbGVSZXF1ZXN0ZWQnLCB7IGlkOiAkdG9kb0VsLmF0dHIoJ2lk
JykgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhVG9kb0FkZGVk
JywgdGhpcy5yZW5kZXIpOworICAgICAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ2RhdGFUb2Rv
c0xvYWRlZCcsIHRoaXMucmVuZGVyQWxsKTsKKyAgICAgICAgICAgIHRoaXMub24oZG9jdW1lbnQs
ICdkYXRhVG9kb3NGaWx0ZXJlZCcsIHRoaXMucmVuZGVyQWxsKTsKKyAgICAgICAgICAgIHRoaXMu
b24oZG9jdW1lbnQsICdkYXRhVG9kb1RvZ2dsZWRBbGwnLCB0aGlzLnJlbmRlckFsbCk7CisgICAg
ICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YVRvZG9SZW1vdmVkJywgdGhpcy5yZW1vdmUp
OworCisgICAgICAgICAgICB0aGlzLm9uKCdjbGljaycsIHsgJ2Rlc3Ryb3lTZWxlY3Rvcic6IHRo
aXMucmVxdWVzdFJlbW92ZSB9KTsKKyAgICAgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeyAndG9n
Z2xlU2VsZWN0b3InOiB0aGlzLnRvZ2dsZSB9KTsKKyAgICAgICAgICAgIHRoaXMub24oJ2RibGNs
aWNrJywgeyAnbGFiZWxTZWxlY3Rvcic6IHRoaXMuZWRpdCB9KTsKKworICAgICAgICAgICAgdGhp
cy4kbm9kZS5vbignYmx1cicsICcuZWRpdCcsIHRoaXMucmVxdWVzdFVwZGF0ZS5iaW5kKHRoaXMp
KTsKKyAgICAgICAgICAgIHRoaXMuJG5vZGUub24oJ2tleWRvd24nLCAnLmVkaXQnLCB0aGlzLnJl
cXVlc3RVcGRhdGVPbkVudGVyLmJpbmQodGhpcykpOworCisgICAgICAgICAgICAvLyB0aGVzZSBk
b24ndCB3b3JrCisgICAgICAgICAgICAvLyB0aGlzLm9uKHRoaXMuYXR0ci5lZGl0U2VsZWN0b3Is
ICdibHVyJywgdGhpcy5yZXF1ZXN0VXBkYXRlKTsKKyAgICAgICAgICAgIC8vIHRoaXMub24oJ2Js
dXInLCB7ICdlZGl0U2VsZWN0b3InOiB0aGlzLnJlcXVlc3RVcGRhdGUgfSk7CisKKyAgICAgICAg
ICAgIHRoaXMudHJpZ2dlcigndWlMb2FkUmVxdWVzdGVkJyk7CisgICAgICAgIH0pOworICAgIH0K
KworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQodG9kb0xpc3QpOworfSk7CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvdG9nZ2xlX2FsbC5qcyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS90b2dnbGVfYWxsLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRk
YzY5ODNjMzFhYjZmYzFiMTcxODA1ODU3MGQ0MjM3ZGY3NDc0OGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvdG9nZ2xlX2FsbC5qcwpAQCAtMCww
ICsxLDI1IEBACisvKmdsb2JhbCBkZWZpbmUgKi8KKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKFsK
KyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnCitdLCBmdW5jdGlvbiAoZGVmaW5lQ29tcG9uZW50
KSB7CisgICAgZnVuY3Rpb24gdG9nZ2xlQWxsKCkgeworICAgICAgICB0aGlzLnRvZ2dsZUFsbENv
bXBsZXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVRvZ2ds
ZUFsbFJlcXVlc3RlZCcsIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IHRoaXMuJG5vZGUu
aXMoJzpjaGVja2VkJykKKyAgICAgICAgICAgIH0pOworICAgICAgICB9OworCisgICAgICAgIHRo
aXMudG9nZ2xlQ2hlY2tib3ggPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdGhp
cy5ub2RlLmNoZWNrZWQgPSAhZGF0YS5yZW1haW5pbmc7CisgICAgICAgIH07CisKKyAgICAgICAg
dGhpcy5hZnRlcignaW5pdGlhbGl6ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRoaXMu
b24oJ2NsaWNrJywgdGhpcy50b2dnbGVBbGxDb21wbGV0ZSk7CisgICAgICAgICAgICB0aGlzLm9u
KGRvY3VtZW50LCAnZGF0YVN0YXRzQ291bnRlZCcsIHRoaXMudG9nZ2xlQ2hlY2tib3gpOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KHRvZ2dsZUFsbCk7
Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC9qcy91aS93aXRo
X2ZpbHRlcnMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkvd2l0aF9maWx0
ZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIxNzI3OThlMWU5NzA0OTdhOTBmNjNjMmY0MDIzYzdjZjkwYzM3
MTMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdWkv
d2l0aF9maWx0ZXJzLmpzCkBAIC0wLDAgKzEsMjYgQEAKKy8qZ2xvYmFsIGRlZmluZSwgJCAqLwor
J3VzZSBzdHJpY3QnOworCitkZWZpbmUoZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBmdW5jdGlv
biB3aXRoRmlsdGVycygpIHsKKyAgICAgICAgdGhpcy5hdHRyaWJ1dGVzKHsKKyAgICAgICAgICAg
IGZpbHRlclNlbGVjdG9yOiAnI2ZpbHRlcnMgYScKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhp
cy5jaG9vc2VGaWx0ZXIgPSBmdW5jdGlvbiAoZSwgZGF0YSkgeworICAgICAgICAgICAgdmFyIGZp
bHRlciA9IGRhdGEuZWwuaGFzaC5zbGljZSgyKTsKKworICAgICAgICAgICAgdGhpcy5zZWxlY3Qo
J2ZpbHRlclNlbGVjdG9yJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAk
KGRhdGEuZWwpLmFkZENsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICAgICAgdGhpcy50cmlnZ2Vy
KCd1aUZpbHRlclJlcXVlc3RlZCcsIHsgZmlsdGVyOiBmaWx0ZXIgfSk7CisgICAgICAgIH07CisK
KyAgICAgICAgdGhpcy5tYXJrU2VsZWN0ZWQgPSBmdW5jdGlvbiAoZmlsdGVyKSB7CisgICAgICAg
ICAgICB0aGlzLiRub2RlLmZpbmQoJ1tocmVmPSIjLycgKyBmaWx0ZXIgKyAnIl0nKS5hZGRDbGFz
cygnc2VsZWN0ZWQnKTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmFmdGVyKCdpbml0aWFs
aXplJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdGhpcy5vbignY2xpY2snLCB7IGZpbHRl
clNlbGVjdG9yOiB0aGlzLmNob29zZUZpbHRlciB9KTsKKyAgICAgICAgfSk7CisgICAgfTsKK30p
OwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3V0aWxzLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL2pzL3V0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhODU3
MzM5MWMwNTRjNDExOGY0NTg0ZjA5OTBiYjNjNmQ4ODNhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3kt
ZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9hcHAvanMvdXRpbHMuanMKQEAgLTAsMCArMSwxMzQgQEAK
Ky8qZ2xvYmFsIGRlZmluZSAqLworJ3VzZSBzdHJpY3QnOworCisvLyB0bXBsIGZ1bmN0aW9uIHNj
b29wZWQgZnJvbSB1bmRlcnNjb3JlLgorLy8gaHR0cDovL2RvY3VtZW50Y2xvdWQuZ2l0aHViLmNv
bS91bmRlcnNjb3JlLyN0ZW1wbGF0ZQorZGVmaW5lKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgXyA9
IHt9OworCisgICAgLy8gTGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciBlc2NhcGluZy4KKyAgICB2
YXIgZW50aXR5TWFwID0geworICAgICAgICBlc2NhcGU6IHsKKyAgICAgICAgICAgICcmJzogJyZh
bXA7JywKKyAgICAgICAgICAgICc8JzogJyZsdDsnLAorICAgICAgICAgICAgJz4nOiAnJmd0Oycs
CisgICAgICAgICAgICAnIic6ICcmcXVvdDsnLAorICAgICAgICAgICAgLypqc2hpbnQgcXVvdG1h
cms6ZmFsc2UgKi8KKyAgICAgICAgICAgICInIjogJyYjeDI3OycsCisgICAgICAgICAgICAnLyc6
ICcmI3gyRjsnCisgICAgICAgIH0KKyAgICB9OworCisgICAgdmFyIGVzY2FwZUtleXMgPSAnJjw+
IlwnLyc7CisgICAgdmFyIHVuZXNjYXBlS2V5cyA9ICcmYW1wO3wmbHQ7fCZndDt8JnF1b3Q7fCYj
eDI3O3wmI3gyRjsnOworCisgICAgLy8gUmVnZXhlcyBjb250YWluaW5nIHRoZSBrZXlzIGFuZCB2
YWx1ZXMgbGlzdGVkIGltbWVkaWF0ZWx5IGFib3ZlLgorICAgIHZhciBlbnRpdHlSZWdleGVzID0g
eworICAgICAgICBlc2NhcGU6ICAgbmV3IFJlZ0V4cCgnWycgKyBlc2NhcGVLZXlzICsgJ10nLCAn
ZycpLAorICAgICAgICB1bmVzY2FwZTogbmV3IFJlZ0V4cCgnKCcgKyB1bmVzY2FwZUtleXMgKyAn
KScsICdnJykKKyAgICB9OworCisgICAgLy8gRnVuY3Rpb25zIGZvciBlc2NhcGluZyBhbmQgdW5l
c2NhcGluZyBzdHJpbmdzIHRvL2Zyb20gSFRNTCBpbnRlcnBvbGF0aW9uLgorICAgIFsnZXNjYXBl
JywgJ3VuZXNjYXBlJ10uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7CisgICAgICAgIF9bbWV0
aG9kXSA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmcgPT09IG51
bGwgfHwgc3RyaW5nID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoJycgKyBzdHJpbmcpLnJlcGxh
Y2UoZW50aXR5UmVnZXhlc1ttZXRob2RdLCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZW50aXR5TWFwW21ldGhvZF1bbWF0Y2hdOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH07CisgICAgfSk7CisKKyAgICB2YXIgc2V0dGluZ3MgPSB7CisgICAgICAgIGV2YWx1
YXRlOiAvPCUoW1xzXFNdKz8pJT4vZywKKyAgICAgICAgaW50ZXJwb2xhdGU6IC88JT0oW1xzXFNd
Kz8pJT4vZywKKyAgICAgICAgZXNjYXBlOiAvPCUtKFtcc1xTXSs/KSU+L2cKKyAgICB9OworCisg
ICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87CisgICAgdmFyIGVzY2FwZXMgPSB7CisgICAgICAgIC8q
anNoaW50IHF1b3RtYXJrOmZhbHNlICovCisgICAgICAgICInIjogIiciLAorICAgICAgICAnXFwn
OiAnXFwnLAorICAgICAgICAnXHInOiAncicsCisgICAgICAgICdcbic6ICduJywKKyAgICAgICAg
J1x0JzogJ3QnLAorICAgICAgICAnXHUyMDI4JzogJ3UyMDI4JywKKyAgICAgICAgJ1x1MjAyOSc6
ICd1MjAyOScKKyAgICB9OworCisgICAgdmFyIGVzY2FwZXIgPSAvXFx8J3xccnxcbnxcdHxcdTIw
Mjh8XHUyMDI5L2c7CisKKyAgICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWls
YXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgorICAgIC8vIFVuZGVyc2NvcmUgdGVt
cGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFj
ZSwKKyAgICAvLyBhbmQgY29ycmVjdGx5IGVzY2FwZXMgcXVvdGVzIHdpdGhpbiBpbnRlcnBvbGF0
ZWQgY29kZS4KKyAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbiAodGV4dCwgZGF0YSkgeworICAg
ICAgICB2YXIgcmVuZGVyOworCisgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9u
ZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLgorICAgICAgICB2YXIgbWF0Y2hl
ciA9IG5ldyBSZWdFeHAoWworICAgICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8fCBub01hdGNo
KS5zb3VyY2UsCisgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCku
c291cmNlLAorICAgICAgICAgICAgKHNldHRpbmdzLmV2YWx1YXRlIHx8IG5vTWF0Y2gpLnNvdXJj
ZQorICAgICAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7CisKKyAgICAgICAgLy8gQ29tcGls
ZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlh
dGVseS4KKyAgICAgICAgdmFyIGluZGV4ID0gMDsKKyAgICAgICAgdmFyIHNvdXJjZSA9ICJfX3Ar
PSciOworICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24gKG1hdGNoLCBlc2Nh
cGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICBzb3VyY2Ug
Kz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBl
ciwgZnVuY3Rpb24gKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICdcXCcgKyBlc2Nh
cGVzW21hdGNoXTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAoZXNjYXBlKSB7
CisgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2NhcGUgKyAiKSk9
PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChpbnRlcnBvbGF0ZSkgeworICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytcbigoX190
PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190KStcbiciOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGV2YWx1YXRlKSB7CisgICAgICAgICAgICAgICAgc291cmNlICs9
ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIG1h
dGNoOworICAgICAgICB9KTsKKyAgICAgICAgc291cmNlICs9ICInO1xuIjsKKworICAgICAgICAv
LyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxv
Y2FsIHNjb3BlLgorICAgICAgICBpZiAoIXNldHRpbmdzLnZhcmlhYmxlKSB7CisgICAgICAgICAg
ICBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKKyAgICAgICAg
fQorCisgICAgICAgIHNvdXJjZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBl
LmpvaW4sIiArCisgICAgICAgICAgICAicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFy
Z3VtZW50cywnJyk7fTtcbiIgKworICAgICAgICAgICAgc291cmNlICsgInJldHVybiBfX3A7XG4i
OworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvKmpzaGludCBldmlsOnRydWUgKi8KKyAg
ICAgICAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2Jq
JywgJ18nLCBzb3VyY2UpOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgIGVy
ci5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICB0aHJvdyBlcnI7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihkYXRhLCBfKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uIChkYXRhKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcmVuZGVyLmNhbGwodGhpcywgZGF0YSwgXyk7CisgICAgICAgIH07
CisKKyAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24gc291cmNlIGFzIGEg
Y29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAgICAgICB0ZW1wbGF0ZS5zb3VyY2Ug
PSAnZnVuY3Rpb24oJyArIChzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJykgKyAnKXtcbicgKyBz
b3VyY2UgKyAnfSc7CisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgIH07CisKKyAgICBy
ZXR1cm4geworICAgICAgICB0bXBsOiB0ZW1wbGF0ZQorICAgIH07Cit9KTsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbCBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC90ZW1wbGF0ZXMvc3RhdHMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
N2NiYTllYTg0ODZmNzY5MzkyMzE2NTc1OWNhNzRjZDE5NTgwYmJhCi0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvYXBwL3RlbXBsYXRlcy9zdGF0cy5odG1sCkBAIC0w
LDAgKzEsMTcgQEAKKzxzcGFuIGlkPSJ0b2RvLWNvdW50Ij4KKyAgICA8c3Ryb25nPjwlPSByZW1h
aW5pbmcgJT48L3N0cm9uZz4gPCU9IHJlbWFpbmluZyA9PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJyAl
PiBsZWZ0Cis8L3NwYW4+Cis8dWwgaWQ9ImZpbHRlcnMiPgorICAgIDxsaT4KKyAgICAgICAgPGEg
aHJlZj0iIy8iPkFsbDwvYT4KKyAgICA8L2xpPgorICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0i
Iy9hY3RpdmUiPkFjdGl2ZTwvYT4KKyAgICA8L2xpPgorICAgIDxsaT4KKyAgICAgICAgPGEgaHJl
Zj0iIy9jb21wbGV0ZWQiPkNvbXBsZXRlZDwvYT4KKyAgICA8L2xpPgorPC91bD4KKzwlIGlmIChj
b21wbGV0ZWQpIHsgJT4KKzxidXR0b24gaWQ9ImNsZWFyLWNvbXBsZXRlZCI+Q2xlYXIgY29tcGxl
dGVkPC9idXR0b24+Cis8JSB9ICU+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L2FwcC90
ZW1wbGF0ZXMvdG9kby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxZmY3NTM4OWRmNTcwMTI2MmUxZjUyNjFl
Yzk0NTMzMjRjM2ViNmQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdo
dC9hcHAvdGVtcGxhdGVzL3RvZG8uaHRtbApAQCAtMCwwICsxLDggQEAKKzxsaSBpZD0iPCU9IGlk
ICU+IiBjbGFzcz0iPCU9IGNvbXBsZXRlZCA/ICdjb21wbGV0ZWQnIDogJycgJT4iPgorICAgIDxk
aXYgY2xhc3M9InZpZXciPgorICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZSIgdHlwZT0iY2hl
Y2tib3giIDwlPSBjb21wbGV0ZWQgPyAnY2hlY2tlZCcgOiAnJyAlPj4KKyAgICAgICAgPGxhYmVs
PjwlLSB0aXRsZSAlPjwvbGFiZWw+CisgICAgICAgIDxidXR0b24gaWQ9ImRlc3Ryb3lfPCU9IGlk
ICU+IiBjbGFzcz0iZGVzdHJveSI+PC9idXR0b24+CisgICAgPC9kaXY+CisgICAgPGlucHV0IGNs
YXNzPSJlZGl0IiB2YWx1ZT0iPCUtIHRpdGxlICU+Ij4KKzwvbGk+CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
aW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDBmYmIwYzk4MTYzNDFiMmJjZTQ4NzkwMjRkYjc5Yzc2
YWFmMDE3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvaW5kZXgu
aHRtbApAQCAtMCwwICsxLDMwIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBk
YXRhLWZyYW1ld29yaz0iZmxpZ2h0Ij4KKyAgICA8aGVhZD4KKyAgICAgICAgPG1ldGEgY2hhcnNl
dD0idXRmLTgiPgorICAgICAgICA8dGl0bGU+RmxpZ2h0IOKAoiBUb2RvPC90aXRsZT4KKyAgICAg
ICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJub2RlX21vZHVsZXMvdG9kb212Yy1jb21t
b24vYmFzZS5jc3MiPgorICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im5vZGVf
bW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzIj4KKyAgICA8L2hlYWQ+CisgICAgPGJv
ZHk+CisgICAgICAgIDxzZWN0aW9uIGlkPSJ0b2RvYXBwIj4KKyAgICAgICAgICAgIDxoZWFkZXIg
aWQ9ImhlYWRlciI+CisgICAgICAgICAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgICAg
ICAgICA8aW5wdXQgaWQ9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVkcyB0byBiZSBk
b25lPyIgYXV0b2ZvY3VzPgorICAgICAgICAgICAgPC9oZWFkZXI+CisgICAgICAgICAgICA8c2Vj
dGlvbiBpZD0ibWFpbiI+CisgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJ0b2dnbGUtYWxsIiB0
eXBlPSJjaGVja2JveCI+CisgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0idG9nZ2xlLWFsbCI+
TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICAgICAgICAgIDx1bCBpZD0idG9k
by1saXN0Ij48L3VsPgorICAgICAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICAgICAgPGZvb3Rl
ciBpZD0iZm9vdGVyIj48L2Zvb3Rlcj4KKyAgICAgICAgPC9zZWN0aW9uPgorICAgICAgICA8Zm9v
dGVyIGlkPSJpbmZvIj4KKyAgICAgICAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9k
bzwvcD4KKyAgICAgICAgICAgIDxwPlNwZWVkb21ldGVyIHZlcnNpb24gYnkgQWRkeSBPc21hbmk8
L3A+CisgICAgICAgICAgICA8cD5DcmVhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29t
L21rdWtsaXMiPk1pY2hhbCBLdWtsaXM8L2E+PC9wPgorICAgICAgICAgICAgPHA+UGFydCBvZiA8
YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgorICAgICAgICA8L2Zv
b3Rlcj4KKyAgICAgICAgPHNjcmlwdCBkYXRhLW1haW49ImFwcC9qcy9tYWluIiBzcmM9Im5vZGVf
bW9kdWxlcy9yZXF1aXJlanMvcmVxdWlyZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2Rl
cG90L1JFQURNRS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBv
dC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM3NmY3MDVlNzJiZDQ0MzEwMWRkNDVhMjRmOGEyN2Yw
OTY4OWUxOAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVf
bW9kdWxlcy9kZXBvdC9SRUFETUUubWQKQEAgLTAsMCArMSwxODUgQEAKKyMjIGRlcG90LmpzCisK
K1shW2J1aWxkIHN0YXR1c10oaHR0cHM6Ly9zZWN1cmUudHJhdmlzLWNpLm9yZy9ta3VrbGlzL2Rl
cG90LmpzLnBuZyldKGh0dHA6Ly90cmF2aXMtY2kub3JnL21rdWtsaXMvZGVwb3QuanMpCisKKyFb
ZGVwb3QuanNdKGh0dHA6Ly9vaTQ1LnRpbnlwaWMuY29tL3hvaXE3bC5qcGcpCisKKworIyMgRGVz
Y3JpcHRpb24KKworKipkZXBvdC5qcyoqIGlzIGEgbmFtZXNwYWNlZCBbbG9jYWxTdG9yYWdlXSho
dHRwOi8vZGl2ZWludG9odG1sNS5pbmZvL3N0b3JhZ2UuaHRtbCkgd3JhcHBlciB3aXRoIGEgc2lt
cGxlIEFQSS4KK1RoZXJlIGFyZSBbb3RoZXJdKGh0dHA6Ly9icmlhbi5pby9sYXduY2hhaXIvKSBb
dG9vbHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJjdXN3ZXN0aW4vc3RvcmUuanMvKSBvdXQgdGhl
cmUgYnV0IG5vbmUKK29mIHRoZW0gaGFkIHdoYXQgSSB3YXMgbG9va2luZyBmb3IuCisKKworIyMg
U2V0dXAKKworZGVwb3QuanMgc2hvdWxkIHdvcmsgd2VsbCB3aXRoIENvbW1vbkpTIGFuZCBBTUQg
bG9hZGVycy4KK0lmIGxvYWRlcnMgYXJlIG5vdCBwcmVzZW50IGRlcG90LmpzIHdpbGwgYXR0YWNo
IGl0c2VsZiB0byB0aGUgY3VycmVudCBjb250ZXh0ICh3aW5kb3cpIHdoZW4gbG9hZGVkIHZpYSBg
PHNjcmlwdCBzcmM9ImRlcG90Lm1pbi5qcyI+PC9zY3JpcHQ+YC4KKworZGVwb3QuanMgaXMgYWxz
byBhIFtib3dlcl0oaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvYm93ZXIpIFtjb21wb25lbnRd
KGh0dHA6Ly9zaW5kcmVzb3JodXMuY29tL2Jvd2VyLWNvbXBvbmVudHMvKSBzbyB5b3Ugc2hvdWxk
IGJlIGFibGUgdG8gaW5zdGFsbCBpdCBieSBydW5uaW5nOgorCitgYm93ZXIgaW5zdGFsbCBkZXBv
dGAKKworb3IgaWYgeW91IGFscmVhZHkgaGF2ZSBhIGJvd2VyIGJhc2VkIHByb2plY3QgeW91IGNh
biBhZGQgZGVwb3QuanMgdG8geW91ciBkZXBlbmRlbmN5IGxpc3QgaW4gYGNvbXBvbmVudC5qc29u
YAorCitgYGBqcworICJkZXBlbmRlbmNpZXMiOiB7CisgICAgLi4uCisgICAgImRlcG90IjogIjAu
eC54IgorICAgIC4uLgorICB9CitgYGAKKworCisjIyBEZXBlbmRlbmNpZXMKKworZGVwb3QuanMg
ZG9lcyBub3QgZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJpZXMgaG93ZXZlciBpZiB5b3UgcGxh
biB0byBzdXBwb3J0IG9sZGVyIGJyb3dzZXJzIHlvdSB3aWxsIG5lZWQgdG8gaW5jbHVkZSBbRVM1
LXNoaW1dKGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0pLgorCitJZiB5b3Ug
cGxhbiB0byBydW4gaXQgb24gYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IFtsb2NhbFN0b3Jh
Z2VdKGh0dHA6Ly9kaXZlaW50b2h0bWw1LmluZm8vc3RvcmFnZS5odG1sKSB5b3UgbWF5IHRyeSB0
byBpbmNsdWRlIFtzdG9yYWdlIHBvbHlmaWxsXShodHRwczovL2dpc3QuZ2l0aHViLmNvbS9yZW15
LzM1MDQzMykuCisKKyMjIEFQSQorCisrIHNhdmUocmVjb3JkKQorCisrIHVwZGF0ZUFsbChoYXNo
KQorCisrIHVwZGF0ZShoYXNoKQorCisrIGZpbmQoaGFzaCB8IGZ1bmN0aW9uKQorCisrIGFsbCgp
CisKKysgZGVzdHJveShpZCB8IHJlY29yZCkKKworKyBkZXN0cm95QWxsKG5vbmUgfCBoYXNoIHwg
ZnVuY3Rpb24pCisKKysgZ2V0KGlkKQorCisrIHNpemUoKQorCisjI1VzYWdlCisKKyMjIyNEZWZp
bmUgbmV3IHN0b3JlCisKK2BgYGpzCit2YXIgdG9kb1N0b3JlID0gZGVwb3QoJ3RvZG9zJyk7Citg
YGAKKworIyMjI0FkZCBuZXcgcmVjb3JkcworCitgX2lkYCBwcm9wZXJ0eSB3aWxsIGJlIGdlbmVy
YXRlZCBhbmQgYXR0YWNoZWQgdG8gZWFjaCBuZXcgcmVjb3JkOgorCitgYGBqcwordG9kb1N0b3Jl
LnNhdmUoeyB0aXRsZTogInRvZG8xIiB9KTsKK3RvZG9TdG9yZS5zYXZlKHsgdGl0bGU6ICJ0b2Rv
MiIsIGNvbXBsZXRlZDogdHJ1ZSB9KTsKK3RvZG9TdG9yZS5zYXZlKHsgdGl0bGU6ICJ0b2RvMyIs
IGNvbXBsZXRlZDogdHJ1ZSB9KTsKK2BgYAorCisjIyMjVXBkYXRlIGFsbCByZWNvcmRzCisKK2Bg
YGpzCit0b2RvU3RvcmUudXBkYXRlQWxsKHsgY29tcGxldGVkOiBmYWxzZSB9KTsKK2BgYAorCisj
IyMjUmV0dXJuIGFsbCByZWNvcmRzCisKK2BgYGpzCit0b2RvU3RvcmUuYWxsKCk7IC8vIFt7IGlk
OiAxLCB0aXRsZSAidG9kbzEiIH0sIHtpZDogMiwgdGl0bGU6IHRvZG8yIH1dCitgYGAKKworIyMj
I0ZpbmQgcmVjb3JkcworCisqIGZpbmQgYmFzZWQgb24gZ2l2ZW4gY3JpdGVyaWEKKworYGBganMK
K3RvZG9TdG9yZS5maW5kKHsgY29tcGxldGVkOiB0cnVlIH0pOyAvLyBbeyBpZDogMiwgdGl0bGU6
ICJ0b2RvMiIgfSwgeyBpZDogMywgdGl0bGU6ICJ0b2RvMyIgfV0KK2BgYAorCisqIGZpbmQgYmFz
ZWQgb24gZ2l2ZW4gZnVuY3Rpb24KKworYGBganMKK3RvZG9TdG9yZS5maW5kKGZ1bmN0aW9uIChy
ZWNvcmQpIHsKKyAgcmV0dXJuIHJlY29yZC5jb21wbGV0ZWQgJiYgcmVjb3JkLnRpdGxlID09ICJ0
b2RvMyI7Cit9KTsgLy8gW3sgaWQ6IDMsIHRpdGxlOiAidG9kbzMiIH1dCitgYGAKKworCisjIyMj
UmV0dXJuIHNpbmdsZSByZWNvcmQgYnkgaWQKKworYGBganMKK3RvZG9TdG9yZS5nZXQoMSk7IC8v
IHsgaWQ6IDEsIHRpdGxlOiAidG9kbzEiIH0KK2BgYAorCisjIyMjRGVzdHJveSBzaW5nbGUgcmVj
b3JkCisKKyogYnkgcmVjb3JkIGlkCisKK2BgYGpzCit0b2RvU3RvcmUuZGVzdHJveSgxKTsKK2Bg
YAorCisqIGJ5IHJlY29yZCBvYmplY3QKKworYGBganMKK3RvZG9TdG9yZS5kZXN0cm95KHRvZG8p
OworYGBgCisKKyMjIyNEZXN0cm95IGFsbCByZWNvcmRzCisKKyogZGVzdHJveSBhbGwKKworYGBg
anMKK3RvZG9TdG9yZS5kZXN0cm95QWxsKCk7CitgYGAKKworKiBkZXN0cm95IGJ5IGdpdmVuIGNy
aXRlcmlhCisKK2BgYGpzCit0b2RvU3RvcmUuZGVzdHJveUFsbCh7IGNvbXBsZXRlZDogdHJ1ZSB9
KTsKK2BgYAorCisqIGRlc3Ryb3kgYnkgZ2l2ZW4gZnVuY3Rpb24KKworYGBganMKK3RvZG9TdG9y
ZS5kZXN0cm95QWxsKGZ1bmN0aW9uIChyZWNvcmQpIHsKKyAgcmV0dXJuIHJlY29yZC5jb21wbGV0
ZWQgJiYgcmVjb3JkLnRpdGxlID09ICJ0b2RvMyI7Cit9KTsKK2BgYAorCisjI09wdGlvbnMKKwor
WW91IGNhbiBwYXNzIGEgc2Vjb25kIHBhcmFtZXRlciB0byBkZXBvdC5qcyB3aXRoIGFkZGl0aW9u
YWwgb3B0aW9ucy4KKworYGBganMKK3ZhciB0b2RvU3RvcmUgPSBkZXBvdCgidG9kb3MiLCBvcHRp
b25zKTsKK2BgYAorCisjIyMgQXZhaWxhYmxlIG9wdGlvbnM6CisKKysgaWRBdHRyaWJ1dGUgLSB1
c2VkIHRvIG92ZXJyaWRlIHJlY29yZCBpZCBwcm9wZXJ0eSAoZGVmYXVsdDogYF9pZGApCisKK2Bg
YGpzCit2YXIgdG9kb1N0b3JlID0gZGVwb3QoInRvZG9zIiwgeyBpZEF0dHJpYnV0ZTogJ2lkJyB9
KTsKK2BgYAorCisrIHN0b3JhZ2VBZGFwdG9yIC0gdXNlZCB0byBvdmVycmlkZSBzdG9yYWdlIHR5
cGUgKGRlZmF1bHQ6IGBsb2NhbFN0b3JhZ2VgKQorCitgYGBqcwordmFyIHRvZG9TdG9yZSA9IGRl
cG90KCd0b2RvcycsIHsgc3RvcmFnZUFkYXB0b3I6IHNlc3Npb25TdG9yYWdlIH0pOworYGBgCisK
KworIyNDb250cmlidXRvcnM6CisKKyogW0Bta3VrbGlzXShodHRwOi8vZ2l0aHViLmNvbS9ta3Vr
bGlzKQorKiBbQHNjdHRubHNuXShodHRwOi8vZ2l0aHViLmNvbS9zY3R0bmxzbikKKyogW0BjaHJp
c3BpdHRdKGh0dHA6Ly9naXRodWIuY29tL2NocmlzcGl0dCkKKyogW0BzaW1vbnNtaXRoXShodHRw
Oi8vZ2l0aHViLmNvbS9zaW1vbnNtaXRoKQorKiBbQG1kbGF3c29uXShodHRwOi8vZ2l0aHViLmNv
bS9tZGxhd3NvbikKKyogW0BqZGJhcnRsZXR0XShodHRwOi8vZ2l0aHViLmNvbS9qZGJhcnRsZXR0
KQorCisjI0xpY2Vuc2U6Cis8cHJlPgorVGhlIE1JVCBMaWNlbnNlCis8L3ByZT4KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5k
ZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9kZXBvdC5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9kZXBvdC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41ZjgzODJiYjBmNmFlMzA1YjhiZTE0NjE1NzU0ODU1ZWUxMDBjNDg3Ci0tLSAvZGV2
L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2RlcG90L2Rl
cG90LmpzCkBAIC0wLDAgKzEsMjQ5IEBACisvLyBkZXBvdC5qcyB2MC4xLjYKKworLy8gKGMpIDIw
MTMgTWljaGFsIEt1a2xpcworLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBo
dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisKKyhmdW5jdGlvbiAobmFtZSwgcm9v
dCwgZmFjdG9yeSkgeworICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcpIHsKKyAgICBt
b2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09
ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeworICAgIGRlZmluZShmYWN0b3J5KTsKKyAgfSBl
bHNlIHsKKyAgICByb290W25hbWVdID0gZmFjdG9yeSgpOworICB9Cit9KCJkZXBvdCIsIHRoaXMs
IGZ1bmN0aW9uICgpIHsKKworICAidXNlIHN0cmljdCI7CisKKyAgLy8gZGVwb3QgYXBpCisKKyAg
dmFyIGFwaSA9IHsKKworICAgIHNhdmU6IGZ1bmN0aW9uIChyZWNvcmQpIHsKKyAgICAgIHZhciBp
ZCwgaWRzOworCisgICAgICB0aGlzLnJlZnJlc2goKTsKKworICAgICAgaWYgKCFyZWNvcmRbdGhp
cy5pZEF0dHJpYnV0ZV0pIHsKKyAgICAgICAgcmVjb3JkW3RoaXMuaWRBdHRyaWJ1dGVdID0gZ3Vp
ZCgpOworICAgICAgfQorCisgICAgICBpZCA9IHJlY29yZFt0aGlzLmlkQXR0cmlidXRlXSArICcn
OworCisgICAgICBpZiAodGhpcy5pZHMuaW5kZXhPZihpZCkgPCAwKSB7CisgICAgICAgIHRoaXMu
aWRzLnB1c2goaWQpOworICAgICAgICBpZHMgPSB0aGlzLmlkcy5qb2luKCIsIik7CisgICAgICAg
IHRoaXMuc3RvcmFnZUFkYXB0b3Iuc2V0SXRlbSh0aGlzLm5hbWUsIGlkcyk7CisgICAgICAgIHRo
aXMuc3RvcmUgPSBpZHM7CisgICAgICB9CisKKyAgICAgIHRoaXMuc3RvcmFnZUFkYXB0b3Iuc2V0
SXRlbShnZXRLZXkodGhpcy5uYW1lLCBpZCksIEpTT04uc3RyaW5naWZ5KHJlY29yZCkpOworCisg
ICAgICByZXR1cm4gcmVjb3JkOworICAgIH0sCisKKyAgICB1cGRhdGU6IGZ1bmN0aW9uIChpZCwg
ZGF0YSkgeworICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICd1bmRlZmluZWQnKSB7CisgICAgICAg
IGRhdGEgPSBpZDsKKyAgICAgICAgaWQgPSBkYXRhW3RoaXMuaWRBdHRyaWJ1dGVdOworICAgICAg
fQorCisgICAgICB2YXIgcmVjb3JkID0gdGhpcy5nZXQoaWQpOworCisgICAgICBpZiAocmVjb3Jk
KSB7CisgICAgICAgIHJlY29yZCA9IGV4dGVuZChyZWNvcmQsIGRhdGEpOworICAgICAgICB0aGlz
LnNhdmUocmVjb3JkKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHJlY29yZDsKKyAgICB9LAor
CisgICAgdXBkYXRlQWxsOiBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgdmFyIHJlY29yZHMgPSB0
aGlzLmFsbCgpOworCisgICAgICByZWNvcmRzLmZvckVhY2goZnVuY3Rpb24gKHJlY29yZCkgewor
ICAgICAgICByZWNvcmQgPSBleHRlbmQocmVjb3JkLCBkYXRhKTsKKyAgICAgICAgdGhpcy5zYXZl
KHJlY29yZCk7CisgICAgICB9LCB0aGlzKTsKKworICAgICAgcmV0dXJuIHJlY29yZHM7CisgICAg
fSwKKworICAgIGZpbmQ6IGZ1bmN0aW9uIChjcml0ZXJpYSkgeworICAgICAgdmFyIGtleSwgbWF0
Y2gsIHJlY29yZDsKKyAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lOworICAgICAgdmFyIHNlbGYg
PSB0aGlzOworCisgICAgICBpZiAoIWNyaXRlcmlhKSByZXR1cm4gdGhpcy5hbGwoKTsKKworICAg
ICAgdGhpcy5yZWZyZXNoKCk7CisKKyAgICAgIHJldHVybiB0aGlzLmlkcy5yZWR1Y2UoZnVuY3Rp
b24gKG1lbW8sIGlkKSB7CisgICAgICAgIHJlY29yZCA9IGpzb25EYXRhKHNlbGYuc3RvcmFnZUFk
YXB0b3IuZ2V0SXRlbShnZXRLZXkobmFtZSwgaWQpKSk7CisgICAgICAgIG1hdGNoID0gZmluZE1h
dGNoKGNyaXRlcmlhLCByZWNvcmQpOworCisgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAg
IG1lbW8ucHVzaChyZWNvcmQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1lbW87Cisg
ICAgICB9LCBbXSk7CisgICAgfSwKKworICAgIGdldDogZnVuY3Rpb24gKGlkKSB7CisgICAgICBy
ZXR1cm4ganNvbkRhdGEodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGdldEtleSh0aGlzLm5h
bWUsIGlkKSkpOworICAgIH0sCisKKyAgICBhbGw6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBy
ZWNvcmQsIHNlbGYgPSB0aGlzLCBuYW1lID0gdGhpcy5uYW1lOworCisgICAgICB0aGlzLnJlZnJl
c2goKTsKKworICAgICAgcmV0dXJuIHRoaXMuaWRzLnJlZHVjZShmdW5jdGlvbiAobWVtbywgaWQp
IHsKKyAgICAgICAgcmVjb3JkID0gc2VsZi5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKGdldEtleShu
YW1lLCBpZCkpOworCisgICAgICAgIGlmIChyZWNvcmQpIHsKKyAgICAgICAgICBtZW1vLnB1c2go
anNvbkRhdGEocmVjb3JkKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWVtbzsKKyAg
ICAgIH0sIFtdKTsKKyAgICB9LAorCisgICAgZGVzdHJveTogZnVuY3Rpb24gKHJlY29yZCkgewor
ICAgICAgdmFyIGluZGV4OworICAgICAgdmFyIGlkID0gKHJlY29yZFt0aGlzLmlkQXR0cmlidXRl
XSkgPyByZWNvcmRbdGhpcy5pZEF0dHJpYnV0ZV0gOiByZWNvcmQ7CisgICAgICB2YXIga2V5ID0g
Z2V0S2V5KHRoaXMubmFtZSwgaWQpOworCisgICAgICByZWNvcmQgPSBqc29uRGF0YSh0aGlzLnN0
b3JhZ2VBZGFwdG9yLmdldEl0ZW0oa2V5KSk7CisgICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJl
bW92ZUl0ZW0oa2V5KTsKKworICAgICAgaW5kZXggPSB0aGlzLmlkcy5pbmRleE9mKGlkKTsKKyAg
ICAgIGlmIChpbmRleCAhPSAtMSkgdGhpcy5pZHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIHRo
aXMuc3RvcmFnZUFkYXB0b3Iuc2V0SXRlbSh0aGlzLm5hbWUsIHRoaXMuaWRzLmpvaW4oIiwiKSk7
CisKKyAgICAgIHJldHVybiByZWNvcmQ7CisgICAgfSwKKworICAgIGRlc3Ryb3lBbGw6IGZ1bmN0
aW9uIChjcml0ZXJpYSkgeworICAgICAgdmFyIGF0dHIsIGlkLCBtYXRjaCwgcmVjb3JkLCBrZXk7
CisKKyAgICAgIHRoaXMucmVmcmVzaCgpOworCisgICAgICBmb3IgKHZhciBpID0gdGhpcy5pZHMu
bGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWQgPSB0aGlzLmlkc1tpXTsKKyAg
ICAgICAga2V5ID0gZ2V0S2V5KHRoaXMubmFtZSwgaWQpOworCisgICAgICAgIGlmIChjcml0ZXJp
YSkgeworCisgICAgICAgICAgcmVjb3JkID0ganNvbkRhdGEodGhpcy5zdG9yYWdlQWRhcHRvci5n
ZXRJdGVtKGtleSkpOworICAgICAgICAgIG1hdGNoID0gZmluZE1hdGNoKGNyaXRlcmlhLCByZWNv
cmQpOworCisgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICB0aGlzLnN0b3JhZ2VB
ZGFwdG9yLnJlbW92ZUl0ZW0oa2V5KTsKKyAgICAgICAgICAgIHRoaXMuaWRzLnNwbGljZShpLCAx
KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB0
aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0oa2V5KTsKKyAgICAgICAgfQorICAgICAgfQor
CisgICAgICBpZiAoY3JpdGVyaWEpIHsKKyAgICAgICAgdGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJ
dGVtKHRoaXMubmFtZSwgdGhpcy5pZHMuam9pbigiLCIpKTsKKyAgICAgIH0KKyAgICAgIGVsc2Ug
eworICAgICAgICB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0odGhpcy5uYW1lKTsKKyAg
ICAgICAgdGhpcy5pZHMgPSBbXTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgc2l6ZTogZnVuY3Rp
b24gKCkgeworICAgICAgdGhpcy5yZWZyZXNoKCk7CisKKyAgICAgIHJldHVybiB0aGlzLmlkcy5s
ZW5ndGg7CisgICAgfSwKKworICAgIHJlZnJlc2g6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBz
dG9yZSA9IHRoaXMuc3RvcmFnZUFkYXB0b3IuZ2V0SXRlbSh0aGlzLm5hbWUpOworCisgICAgICBp
ZiAodGhpcy5zdG9yZSAmJiB0aGlzLnN0b3JlID09PSBzdG9yZSkgeworICAgICAgICByZXR1cm47
CisgICAgICB9CisKKyAgICAgIHRoaXMuaWRzID0gKHN0b3JlICYmIHN0b3JlLnNwbGl0KCIsIikp
IHx8IFtdOworICAgICAgdGhpcy5zdG9yZSA9IHN0b3JlOworICAgIH0KKyAgfTsKKworICAvLyBo
ZWxwZXJzCisKKyAgZnVuY3Rpb24ganNvbkRhdGEoZGF0YSkgeworICAgIHJldHVybiBkYXRhICYm
IEpTT04ucGFyc2UoZGF0YSk7CisgIH0KKworICBmdW5jdGlvbiBnZXRLZXkobmFtZSwgaWQpIHsK
KyAgICByZXR1cm4gbmFtZSArICItIiArIGlkOworICB9CisKKyAgZnVuY3Rpb24gZmluZE1hdGNo
KGNyaXRlcmlhLCByZWNvcmQpIHsKKyAgICB2YXIgbWF0Y2gsIGF0dHI7CisKKyAgICBpZiAodHlw
ZW9mIGNyaXRlcmlhID09ICdmdW5jdGlvbicpIHsKKyAgICAgIG1hdGNoID0gY3JpdGVyaWEocmVj
b3JkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBtYXRjaCA9IHRydWU7CisgICAgICBmb3Ig
KGF0dHIgaW4gY3JpdGVyaWEpIHsKKyAgICAgICAgbWF0Y2ggJj0gKGNyaXRlcmlhW2F0dHJdID09
PSByZWNvcmRbYXR0cl0pOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXRjaDsKKyAg
fQorCisgIGZ1bmN0aW9uIHM0KCkgeworICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5y
YW5kb20oKSkgKiAweDEwMDAwKQorICAgICAgLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSk7Cisg
IH0KKworICBmdW5jdGlvbiBndWlkKCkgeworICAgIHJldHVybiBzNCgpICsgczQoKSArICctJyAr
IHM0KCkgKyAnLScgKyBzNCgpICsKKyAgICAgICctJyArczQoKSArICctJyArIHM0KCkgKyBzNCgp
ICsgczQoKTsKKyAgfQorCisgIGZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzb3VyY2UpIHsKKyAgICBm
b3IgKHZhciBrZXkgaW4gc291cmNlKSB7CisgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5
KGtleSkpIHsKKyAgICAgICAgZGVzdFtrZXldID0gc291cmNlW2tleV07CisgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIGRlc3Q7CisgIH0KKworICBmdW5jdGlvbiBkZXBvdChuYW1lLCBvcHRp
b25zKSB7CisgICAgdmFyIGluc3RhbmNlOworCisgICAgb3B0aW9ucyA9IGV4dGVuZCh7CisgICAg
ICBpZEF0dHJpYnV0ZTogJ19pZCcsCisgICAgICBzdG9yYWdlQWRhcHRvcjogbG9jYWxTdG9yYWdl
CisgICAgfSwgb3B0aW9ucyk7CisKKyAgICBpZiAoIW9wdGlvbnMuc3RvcmFnZUFkYXB0b3IpIHRo
cm93IG5ldyBFcnJvcigiTm8gc3RvcmFnZSBhZGFwdG9yIHdhcyBmb3VuZCIpOworCisgICAgaW5z
dGFuY2UgPSBPYmplY3QuY3JlYXRlKGFwaSwgeworICAgICAgbmFtZTogeyB2YWx1ZTogbmFtZSB9
LAorICAgICAgaWRBdHRyaWJ1dGU6IHsgdmFsdWU6IG9wdGlvbnMuaWRBdHRyaWJ1dGUgfSwKKyAg
ICAgIHN0b3JhZ2VBZGFwdG9yOiB7IHZhbHVlOiBvcHRpb25zLnN0b3JhZ2VBZGFwdG9yIH0KKyAg
ICB9KTsKKworICAgIGluc3RhbmNlLnJlZnJlc2goKTsKKworICAgIHJldHVybiBpbnN0YW5jZTsK
KyAgfQorCisgIHJldHVybiBkZXBvdDsKK30pKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9kZXBvdC9kZXBvdC5taW4uanMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZGVwb3QvZGVwb3QubWluLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1
ZDZiNjMzNjcxMjNmMDg3MmJjYmE0MGY1Yjk5ZDdkYmFkYTc2YzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZGVwb3QvZGVwb3QubWluLmpz
CkBAIC0wLDAgKzEsNiBAQAorLy8gZGVwb3QuanMgdjAuMS42IHwgKGMpIDIwMTMgTWljaGFsIEt1
a2xpcyB8IExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQorKGZ1bmN0aW9uKGYsaCxkKXsi
b2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZCgpOiJmdW5jdGlvbiI9PXR5
cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGQpOmhbZl09ZCgpfSkoImRlcG90Iix0aGlz
LGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihiKXtyZXR1cm4gYiYmSlNPTi5wYXJzZShiKX1mdW5jdGlv
biBoKGIsYSl7dmFyIGMsZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYiljPWIoYSk7ZWxzZSBmb3Io
ZSBpbiBjPSEwLGIpYyY9YltlXT09PWFbZV07cmV0dXJuIGN9ZnVuY3Rpb24gZCgpe3JldHVybiBN
YXRoLmZsb29yKDY1NTM2KigxK01hdGgucmFuZG9tKCkpKS50b1N0cmluZygxNikuc3Vic3RyaW5n
KDEpfWZ1bmN0aW9uIGcoYixhKXtmb3IodmFyIGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiYo
YltjXT1hW2NdKTtyZXR1cm4gYn12YXIgaj17c2F2ZTpmdW5jdGlvbihiKXt2YXIgYTtiW3RoaXMu
aWRBdHRyaWJ1dGVdfHwoYlt0aGlzLmlkQXR0cmlidXRlXT0KK2QoKStkKCkrIi0iK2QoKSsiLSIr
ZCgpKyItIitkKCkrIi0iK2QoKStkKCkrZCgpKTthPWJbdGhpcy5pZEF0dHJpYnV0ZV0rIiI7MD50
aGlzLmlkcy5pbmRleE9mKGEpJiYodGhpcy5pZHMucHVzaChhKSx0aGlzLnN0b3JhZ2VBZGFwdG9y
LnNldEl0ZW0odGhpcy5uYW1lLHRoaXMuaWRzLmpvaW4oIiwiKSkpO3RoaXMuc3RvcmFnZUFkYXB0
b3Iuc2V0SXRlbSh0aGlzLm5hbWUrIi0iK2EsSlNPTi5zdHJpbmdpZnkoYikpO3JldHVybiBifSx1
cGRhdGU6ZnVuY3Rpb24oYixhKXsidW5kZWZpbmVkIj09dHlwZW9mIGEmJihhPWIsYj1hW3RoaXMu
aWRBdHRyaWJ1dGVdKTt2YXIgYz10aGlzLmdldChiKTtjJiYoYz1nKGMsYSksdGhpcy5zYXZlKGMp
KTtyZXR1cm4gY30sdXBkYXRlQWxsOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuYWxsKCk7YS5mb3JF
YWNoKGZ1bmN0aW9uKGEpe2E9ZyhhLGIpO3RoaXMuc2F2ZShhKX0sdGhpcyk7cmV0dXJuIGF9LGZp
bmQ6ZnVuY3Rpb24oYil7dmFyIGEsYyxlPQordGhpcy5uYW1lLGQ9dGhpcztyZXR1cm4hYj90aGlz
LmFsbCgpOnRoaXMuaWRzLnJlZHVjZShmdW5jdGlvbihnLGope2M9ZihkLnN0b3JhZ2VBZGFwdG9y
LmdldEl0ZW0oZSsiLSIraikpOyhhPWgoYixjKSkmJmcucHVzaChjKTtyZXR1cm4gZ30sW10pfSxn
ZXQ6ZnVuY3Rpb24oYil7cmV0dXJuIGYodGhpcy5zdG9yYWdlQWRhcHRvci5nZXRJdGVtKHRoaXMu
bmFtZSsiLSIrYikpfSxhbGw6ZnVuY3Rpb24oKXt2YXIgYixhPXRoaXMsYz10aGlzLm5hbWU7cmV0
dXJuIHRoaXMuaWRzLnJlZHVjZShmdW5jdGlvbihlLGQpeyhiPWEuc3RvcmFnZUFkYXB0b3IuZ2V0
SXRlbShjKyItIitkKSkmJmUucHVzaChmKGIpKTtyZXR1cm4gZX0sW10pfSxkZXN0cm95OmZ1bmN0
aW9uKGIpe3ZhciBhO2E9Ylt0aGlzLmlkQXR0cmlidXRlXT9iW3RoaXMuaWRBdHRyaWJ1dGVdOmI7
dmFyIGM9dGhpcy5uYW1lKyItIithO2I9Zih0aGlzLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oYykp
O3RoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRlbShjKTsKK2E9dGhpcy5pZHMuaW5kZXhPZihh
KTstMSE9YSYmdGhpcy5pZHMuc3BsaWNlKGEsMSk7dGhpcy5zdG9yYWdlQWRhcHRvci5zZXRJdGVt
KHRoaXMubmFtZSx0aGlzLmlkcy5qb2luKCIsIikpO3JldHVybiBifSxkZXN0cm95QWxsOmZ1bmN0
aW9uKGIpe2Zvcih2YXIgYSxjLGQ9dGhpcy5pZHMubGVuZ3RoLTE7MDw9ZDtkLS0paWYoYT10aGlz
Lmlkc1tkXSxhPXRoaXMubmFtZSsiLSIrYSxiKXtpZihjPWYodGhpcy5zdG9yYWdlQWRhcHRvci5n
ZXRJdGVtKGEpKSxjPWgoYixjKSl0aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0oYSksdGhp
cy5pZHMuc3BsaWNlKGQsMSl9ZWxzZSB0aGlzLnN0b3JhZ2VBZGFwdG9yLnJlbW92ZUl0ZW0oYSk7
Yj90aGlzLnN0b3JhZ2VBZGFwdG9yLnNldEl0ZW0odGhpcy5uYW1lLHRoaXMuaWRzLmpvaW4oIiwi
KSk6KHRoaXMuc3RvcmFnZUFkYXB0b3IucmVtb3ZlSXRlbSh0aGlzLm5hbWUpLHRoaXMuaWRzPVtd
KX0sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkcy5sZW5ndGh9fTsKK3JldHVybiBmdW5j
dGlvbihiLGEpe3ZhciBjLGQ7YT1nKHtpZEF0dHJpYnV0ZToiX2lkIixzdG9yYWdlQWRhcHRvcjps
b2NhbFN0b3JhZ2V9LGEpO2lmKCFhLnN0b3JhZ2VBZGFwdG9yKXRocm93IEVycm9yKCJObyBzdG9y
YWdlIGFkYXB0b3Igd2FzIGZvdW5kIik7ZD0oYz1hLnN0b3JhZ2VBZGFwdG9yLmdldEl0ZW0oYikp
JiZjLnNwbGl0KCIsIil8fFtdO3JldHVybiBPYmplY3QuY3JlYXRlKGose25hbWU6e3ZhbHVlOmJ9
LHN0b3JlOnt2YWx1ZTpjfSxpZHM6e3ZhbHVlOmQsd3JpdGFibGU6ITB9LGlkQXR0cmlidXRlOnt2
YWx1ZTphLmlkQXR0cmlidXRlfSxzdG9yYWdlQWRhcHRvcjp7dmFsdWU6YS5zdG9yYWdlQWRhcHRv
cn19KX19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9kZXBvdC9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvZGVwb3QvcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkYWZiNTM3N2JkNmIyNTRiZTZhNDE3
YjU4YTc2NDk1MmEwNGVhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvZGVwb3QvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsNzEgQEAKK3sK
KyAgIl9hcmdzIjogWworICAgIFsKKyAgICAgIHsKKyAgICAgICAgInJhdyI6ICJkZXBvdEBeMC4x
LjYiLAorICAgICAgICAic2NvcGUiOiBudWxsLAorICAgICAgICAiZXNjYXBlZE5hbWUiOiAiZGVw
b3QiLAorICAgICAgICAibmFtZSI6ICJkZXBvdCIsCisgICAgICAgICJyYXdTcGVjIjogIl4wLjEu
NiIsCisgICAgICAgICJzcGVjIjogIj49MC4xLjYgPDAuMi4wIiwKKyAgICAgICAgInR5cGUiOiAi
cmFuZ2UiCisgICAgICB9LAorICAgICAgIi9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21ldGVy
LWEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiCisgICAgXQor
ICBdLAorICAiX2Zyb20iOiAiZGVwb3RAPj0wLjEuNiA8MC4yLjAiLAorICAiX2lkIjogImRlcG90
QDAuMS42IiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvZGVwb3QiLAor
ICAiX25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAiYXBwZWRlbWljIiwKKyAgICAiZW1haWwiOiAi
ZGVya0BhcHBlZGVtaWMubmwiCisgIH0sCisgICJfbnBtVmVyc2lvbiI6ICIxLjMuNSIsCisgICJf
cGhhbnRvbUNoaWxkcmVuIjoge30sCisgICJfcmVxdWVzdGVkIjogeworICAgICJyYXciOiAiZGVw
b3RAXjAuMS42IiwKKyAgICAic2NvcGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJkZXBv
dCIsCisgICAgIm5hbWUiOiAiZGVwb3QiLAorICAgICJyYXdTcGVjIjogIl4wLjEuNiIsCisgICAg
InNwZWMiOiAiPj0wLjEuNiA8MC4yLjAiLAorICAgICJ0eXBlIjogInJhbmdlIgorICB9LAorICAi
X3JlcXVpcmVkQnkiOiBbCisgICAgIi8iCisgIF0sCisgICJfcmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZGVwb3QvLS9kZXBvdC0wLjEuNi50Z3oiLAorICAiX3NoYXN1bSI6
ICIwN2U2ZTAxMTNhNDg4Y2RmZjI1YWE3ZWI5Mzk0ZDA4YTk5OWYyZDM1IiwKKyAgIl9zaHJpbmt3
cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogImRlcG90QF4wLjEuNiIsCisgICJfd2hlcmUiOiAiL1Vz
ZXJzL2FkZHlvL0Rlc2t0b3AvU3BlZWRvbWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodCIsCisgICJhbmFseXplIjogZmFsc2UsCisgICJhdXRob3IiOiB7
CisgICAgIm5hbWUiOiAiTWljaGFsIEt1a2xpcyIsCisgICAgImVtYWlsIjogIm1pY2hhbC5rdWts
aXNAZ21haWwuY29tIgorICB9LAorICAiZGVwZW5kZW5jaWVzIjoge30sCisgICJkZXNjcmlwdGlv
biI6ICJbIVtidWlsZCBzdGF0dXNdKGh0dHBzOi8vc2VjdXJlLnRyYXZpcy1jaS5vcmcvbWt1a2xp
cy9kZXBvdC5qcy5wbmcpXShodHRwOi8vdHJhdmlzLWNpLm9yZy9ta3VrbGlzL2RlcG90LmpzKSIs
CisgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgIm1vY2hhLXBoYW50b21qcyI6ICJsYXRlc3Qi
CisgIH0sCisgICJkaXJlY3RvcmllcyI6IHt9LAorICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjog
IjA3ZTZlMDExM2E0ODhjZGZmMjVhYTdlYjkzOTRkMDhhOTk5ZjJkMzUiLAorICAgICJ0YXJiYWxs
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlcG90Ly0vZGVwb3QtMC4xLjYudGd6Igor
ICB9LAorICAiZW5naW5lcyI6IHsKKyAgICAibm9kZSI6ICIqIgorICB9LAorICAibWFpbnRhaW5l
cnMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiYXBwZWRlbWljIiwKKyAgICAgICJlbWFpbCI6
ICJkZXJrQGFwcGVkZW1pYy5ubCIKKyAgICB9CisgIF0sCisgICJuYW1lIjogImRlcG90IiwKKyAg
Im9wdGlvbmFsRGVwZW5kZW5jaWVzIjoge30sCisgICJyZWFkbWUiOiAiRVJST1I6IE5vIFJFQURN
RSBkYXRhIGZvdW5kISIsCisgICJ2ZXJzaW9uIjogIjAuMS42IgorfQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL0xJQ0VOU0UgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vTElDRU5TRQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZWUwODI1NWNiOTcxOGQ5MzU5YmNjZWE5MDViZTc0ODI2MzdlZTY5Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL0xJ
Q0VOU0UKQEAgLTAsMCArMSwxOSBAQAorCitDb3B5cmlnaHQgMjAwOSwgMjAxMCBLcmlzdG9waGVy
IE1pY2hhZWwgS293YWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitQZXJtaXNzaW9uIGlzIGhlcmVi
eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5
CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo
ZSAiU29mdHdhcmUiKSwgdG8KK2RlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp
b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCityaWdodHMgdG8gdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IK
K3NlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo
b20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBz
dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S
CitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklH
SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElB
QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ
U0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX
QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKK0lOIFRIRSBTT0ZUV0FSRS4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUt
c2hhbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9l
czUtc2hhbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGM5ODQ1OTc1MTMzNDE4NDM5MjQ3ZGU5OWI1YzBhNzMw
MTU1OTRmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9t
b2R1bGVzL2VzNS1zaGltL2VzNS1zaGFtLmpzCkBAIC0wLDAgKzEsNDQ2IEBACisvLyBDb3B5cmln
aHQgMjAwOS0yMDEyIGJ5IGNvbnRyaWJ1dG9ycywgTUlUIExpY2Vuc2UKKy8vIHZpbTogdHM9NCBz
dHM9NCBzdz00IGV4cGFuZHRhYgorCisvL0FkZCBzZW1pY29sb24gdG8gcHJldmVudCBJSUZFIGZy
b20gYmVpbmcgcGFzc2VkIGFzIGFyZ3VtZW50IHRvIGNvbmNhdGVkIGNvZGUuCis7CisvLyBNb2R1
bGUgc3lzdGVtcyBtYWdpYyBkYW5jZQorKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7CisgICAgLy8g
UmVxdWlyZUpTCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgeworICAgICAg
ICBkZWZpbmUoZGVmaW5pdGlvbik7CisgICAgLy8gWVVJMworICAgIH0gZWxzZSBpZiAodHlwZW9m
IFlVSSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIFlVSS5hZGQoImVzNS1zaGFtIiwgZGVmaW5p
dGlvbik7CisgICAgLy8gQ29tbW9uSlMgYW5kIDxzY3JpcHQ+CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZGVmaW5pdGlvbigpOworICAgIH0KK30pKGZ1bmN0aW9uICgpIHsKKworCit2YXIgY2FsbCA9
IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwordmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0
LnByb3RvdHlwZTsKK3ZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093
blByb3BlcnR5KTsKKworLy8gSWYgSlMgZW5naW5lIHN1cHBvcnRzIGFjY2Vzc29ycyBjcmVhdGlu
ZyBzaG9ydGN1dHMuCit2YXIgZGVmaW5lR2V0dGVyOwordmFyIGRlZmluZVNldHRlcjsKK3ZhciBs
b29rdXBHZXR0ZXI7Cit2YXIgbG9va3VwU2V0dGVyOwordmFyIHN1cHBvcnRzQWNjZXNzb3JzOwor
aWYgKChzdXBwb3J0c0FjY2Vzc29ycyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmlu
ZUdldHRlcl9fIikpKSB7CisgICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9m
T2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOworICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChw
cm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsKKyAgICBsb29rdXBHZXR0ZXIgPSBj
YWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7CisgICAgbG9va3Vw
U2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOwor
fQorCisvLyBFUzUgMTUuMi4zLjIKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4y
CitpZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgeworICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNv
bS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMjaXNzdWUvMgorICAgIC8vIGh0dHA6Ly9lam9obi5v
cmcvYmxvZy9vYmplY3RnZXRwcm90b3R5cGVvZi8KKyAgICAvLyByZWNvbW1lbmRlZCBieSBmc2No
YWVmZXIgb24gZ2l0aHViCisgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0
UHJvdG90eXBlT2Yob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8
ICgKKyAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgID8gb2Jq
ZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZQorICAgICAgICAgICAgICAgIDogcHJvdG90eXBlT2ZP
YmplY3QKKyAgICAgICAgKTsKKyAgICB9OworfQorCisvL0VTNSAxNS4yLjMuMworLy9odHRwOi8v
ZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMworCitmdW5jdGlvbiBkb2VzR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yV29yayhvYmplY3QpIHsKKyAgICB0cnkgeworICAgICAgICBvYmplY3Quc2VudGlu
ZWwgPSAwOworICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigK
KyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAgICAgICAgICAgICAgInNlbnRpbmVsIgorICAg
ICAgICApLnZhbHVlID09PSAwOworICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAv
LyByZXR1cm5zIGZhbHN5CisgICAgfQorfQorCisvL2NoZWNrIHdoZXRoZXIgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yIHdvcmtzIGlmIGl0J3MgZ2l2ZW4uIE90aGVyd2lzZSwKKy8vc2hpbSBwYXJ0
aWFsbHkuCitpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7CisgICAgdmFyIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcldvcmtzT25PYmplY3QgPSAKKyAgICAgICAgZG9lc0dldE93blByb3BlcnR5
RGVzY3JpcHRvcldvcmsoe30pOworICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3Jr
c09uRG9tID0gdHlwZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiIHx8CisgICAgZG9lc0dldE93
blByb3BlcnR5RGVzY3JpcHRvcldvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOwor
ICAgIGlmICghZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29ya3NPbkRvbSB8fCAKKyAgICAgICAg
ICAgICFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3Jrc09uT2JqZWN0CisgICAgKSB7CisgICAg
ICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGYWxsYmFjayA9IE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3I7CisgICAgfQorfQorCitpZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IgfHwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRmFsbGJhY2spIHsKKyAgICB2
YXIgRVJSX05PTl9PQkpFQ1QgPSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxs
ZWQgb24gYSBub24tb2JqZWN0OiAiOworCisgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5
KSB7CisgICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2Jq
ZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCArIG9iamVjdCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBtYWtlIGEgdmFsaWFudCBhdHRlbXB0IHRvIHVzZSB0aGUgcmVhbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IKKyAgICAgICAgLy8gZm9yIEk4J3MgRE9NIGVsZW1lbnRzLgorICAg
ICAgICBpZiAoZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRmFsbGJhY2spIHsKKyAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldE93blByb3BlcnR5RGVzY3JpcHRvckZh
bGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gY2F0
Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAgIC8vIHRyeSB0aGUgc2hpbSBpZiB0aGUg
cmVhbCBvbmUgZG9lc24ndCB3b3JrCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiBvYmplY3QgZG9lcyBub3Qgb3ducyBwcm9wZXJ0eSByZXR1cm4gdW5kZWZpbmVkIGlt
bWVkaWF0ZWx5LgorICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG9iamVjdCBoYXMgYSBw
cm9wZXJ0eSB0aGVuIGl0J3MgZm9yIHN1cmUgYm90aCBgZW51bWVyYWJsZWAgYW5kCisgICAgICAg
IC8vIGBjb25maWd1cmFibGVgLgorICAgICAgICB2YXIgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFi
bGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OworCisgICAgICAgIC8vIElmIEpTIGVuZ2lu
ZSBzdXBwb3J0cyBhY2Nlc3NvciBwcm9wZXJ0aWVzIHRoZW4gcHJvcGVydHkgbWF5IGJlIGEKKyAg
ICAgICAgLy8gZ2V0dGVyIG9yIHNldHRlci4KKyAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3Jz
KSB7CisgICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxs
IHJldHVybiBhIGdldHRlciBldmVuCisgICAgICAgICAgICAvLyBpZiBvYmplY3QgaGFzIG93biBu
b24gZ2V0dGVyIHByb3BlcnR5IGFsb25nIHdpdGggYSBzYW1lIG5hbWVkCisgICAgICAgICAgICAv
LyBpbmhlcml0ZWQgZ2V0dGVyLiBUbyBhdm9pZCBtaXNiZWhhdmlvciB3ZSB0ZW1wb3JhcnkgcmVt
b3ZlCisgICAgICAgICAgICAvLyBgX19wcm90b19fYCBzbyB0aGF0IGBfX2xvb2t1cEdldHRlcl9f
YCB3aWxsIHJldHVybiBnZXR0ZXIgb25seQorICAgICAgICAgICAgLy8gaWYgaXQncyBvd25lZCBi
eSBhbiBvYmplY3QuCisgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9f
XzsKKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKKwor
ICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KTsK
KyAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7
CisKKyAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2ZSBnZXR0ZXIgYW5kIHNldHRlciB3ZSBjYW4g
cHV0IHZhbHVlcyBiYWNrLgorICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlw
ZTsKKworICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZ2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0
dGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gc2V0dGVyOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZiBpdCB3YXMgYWNjZXNzb3IgcHJvcGVydHkgd2Un
cmUgZG9uZSBhbmQgcmV0dXJuIGhlcmUKKyAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBh
dm9pZCBhZGRpbmcgYHZhbHVlYCB0byB0aGUgZGVzY3JpcHRvci4KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IElmIHdlIGdvdCB0aGlzIGZhciB3ZSBrbm93IHRoYXQgb2JqZWN0IGhhcyBhbiBvd24gcHJvcGVy
dHkgdGhhdCBpcworICAgICAgICAvLyBub3QgYW4gYWNjZXNzb3Igc28gd2Ugc2V0IGl0IGFzIGEg
dmFsdWUgYW5kIHJldHVybiBkZXNjcmlwdG9yLgorICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0g
b2JqZWN0W3Byb3BlcnR5XTsKKyAgICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7Cisg
ICAgICAgIHJldHVybiBkZXNjcmlwdG9yOworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuNAor
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjQKK2lmICghT2JqZWN0LmdldE93blBy
b3BlcnR5TmFtZXMpIHsKKyAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9u
IGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBPYmplY3Qua2V5
cyhvYmplY3QpOworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuNQorLy8gaHR0cDovL2VzNS5n
aXRodWIuY29tLyN4MTUuMi4zLjUKK2lmICghT2JqZWN0LmNyZWF0ZSkgeworCisgICAgLy8gQ29u
dHJpYnV0ZWQgYnkgQnJhbmRvbiBCZW52aWUsIE9jdG9iZXIsIDIwMTIKKyAgICB2YXIgY3JlYXRl
RW1wdHk7CisgICAgdmFyIHN1cHBvcnRzUHJvdG8gPSBPYmplY3QucHJvdG90eXBlLl9fcHJvdG9f
XyA9PT0gbnVsbDsKKyAgICBpZiAoc3VwcG9ydHNQcm90byB8fCB0eXBlb2YgZG9jdW1lbnQgPT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4geyAiX19wcm90b19fIjogbnVsbCB9OworICAgICAgICB9OworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEluIG9sZCBJRSBfX3Byb3RvX18gY2FuJ3QgYmUgdXNlZCB0byBt
YW51YWxseSBzZXQgYG51bGxgLCBub3IgZG9lcworICAgICAgICAvLyBhbnkgb3RoZXIgbWV0aG9k
IGV4aXN0IHRvIG1ha2UgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBub3RoaW5nLAorICAg
ICAgICAvLyBhc2lkZSBmcm9tIE9iamVjdC5wcm90b3R5cGUgaXRzZWxmLiBJbnN0ZWFkLCBjcmVh
dGUgYSBuZXcgZ2xvYmFsCisgICAgICAgIC8vIG9iamVjdCBhbmQgKnN0ZWFsKiBpdHMgT2JqZWN0
LnByb3RvdHlwZSBhbmQgc3RyaXAgaXQgYmFyZS4gVGhpcyBpcworICAgICAgICAvLyB1c2VkIGFz
IHRoZSBwcm90b3R5cGUgdG8gY3JlYXRlIG51bGxhcnkgb2JqZWN0cy4KKyAgICAgICAgY3JlYXRl
RW1wdHkgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZG9jdW1l
bnQuYm9keSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICBpZnJhbWUu
c3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChp
ZnJhbWUpOworICAgICAgICAgICAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7CisgICAgICAg
ICAgICB2YXIgZW1wdHkgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3QucHJvdG90eXBlOwor
ICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGlmcmFtZSk7CisgICAgICAgICAgICBpZnJh
bWUgPSBudWxsOworICAgICAgICAgICAgZGVsZXRlIGVtcHR5LmNvbnN0cnVjdG9yOworICAgICAg
ICAgICAgZGVsZXRlIGVtcHR5Lmhhc093blByb3BlcnR5OworICAgICAgICAgICAgZGVsZXRlIGVt
cHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlOworICAgICAgICAgICAgZGVsZXRlIGVtcHR5LmlzUHJv
dG90eXBlT2Y7CisgICAgICAgICAgICBkZWxldGUgZW1wdHkudG9Mb2NhbGVTdHJpbmc7CisgICAg
ICAgICAgICBkZWxldGUgZW1wdHkudG9TdHJpbmc7CisgICAgICAgICAgICBkZWxldGUgZW1wdHku
dmFsdWVPZjsKKyAgICAgICAgICAgIGVtcHR5Ll9fcHJvdG9fXyA9IG51bGw7CisKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIEVtcHR5KCkge30KKyAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IGVt
cHR5OworICAgICAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBmdXR1cmUgY2FsbHMKKyAgICAgICAg
ICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgRW1wdHkoKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gbmV3IEVtcHR5
KCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNy
ZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHsKKworICAgICAgICB2YXIgb2JqZWN0OworICAg
ICAgICBmdW5jdGlvbiBUeXBlKCkge30gIC8vIEFuIGVtcHR5IGNvbnN0cnVjdG9yLgorCisgICAg
ICAgIGlmIChwcm90b3R5cGUgPT09IG51bGwpIHsKKyAgICAgICAgICAgIG9iamVjdCA9IGNyZWF0
ZUVtcHR5KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIHByb3Rv
dHlwZSAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHByb3RvdHlwZSAhPT0gImZ1bmN0aW9uIikgewor
ICAgICAgICAgICAgICAgIC8vIEluIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24gYHBhcmVudGAg
Y2FuIGJlIGBudWxsYAorICAgICAgICAgICAgICAgIC8vIE9SICphbnkqIGBpbnN0YW5jZW9mIE9i
amVjdGAgIChPYmplY3R8RnVuY3Rpb258QXJyYXl8UmVnRXhwfGV0YykKKyAgICAgICAgICAgICAg
ICAvLyBVc2UgYHR5cGVvZmAgdGhvLCBiL2MgaW4gb2xkIElFLCBET00gZWxlbWVudHMgYXJlIG5v
dCBgaW5zdGFuY2VvZiBPYmplY3RgCisgICAgICAgICAgICAgICAgLy8gbGlrZSB0aGV5IGFyZSBp
biBtb2Rlcm4gYnJvd3NlcnMuIFVzaW5nIGBPYmplY3QuY3JlYXRlYCBvbiBET00gZWxlbWVudHMK
KyAgICAgICAgICAgICAgICAvLyBpcy4uLmVyci4uLnByb2JhYmx5IGluYXBwcm9wcmlhdGUsIGJ1
dCB0aGUgbmF0aXZlIHZlcnNpb24gYWxsb3dzIGZvciBpdC4KKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCJPYmplY3QgcHJvdG90eXBlIG1heSBvbmx5IGJlIGFuIE9iamVjdCBv
ciBudWxsIik7IC8vIHNhbWUgbXNnIGFzIENocm9tZQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CisgICAgICAgICAgICBvYmplY3QgPSBuZXcg
VHlwZSgpOworICAgICAgICAgICAgLy8gSUUgaGFzIG5vIGJ1aWx0LWluIGltcGxlbWVudGF0aW9u
IG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgCisgICAgICAgICAgICAvLyBuZWl0aGVyIGBfX3By
b3RvX19gLCBidXQgdGhpcyBtYW51YWxseSBzZXR0aW5nIGBfX3Byb3RvX19gIHdpbGwKKyAgICAg
ICAgICAgIC8vIGd1YXJhbnRlZSB0aGF0IGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIHdpbGwgd29y
ayBhcyBleHBlY3RlZCB3aXRoCisgICAgICAgICAgICAvLyBvYmplY3RzIGNyZWF0ZWQgdXNpbmcg
YE9iamVjdC5jcmVhdGVgCisgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHByb3BlcnRpZXMgIT09IHZvaWQgMCkgeworICAg
ICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1IDE1
LjIuMy42CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNgorCisvLyBQYXRjaCBm
b3IgV2ViS2l0IGFuZCBJRTggc3RhbmRhcmQgbW9kZQorLy8gRGVzaWduZWQgYnkgaGF4IDxoYXgu
Z2l0aHViLmNvbT4KKy8vIHJlbGF0ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGlt
cy9lczUtc2hpbS9pc3N1ZXMjaXNzdWUvNQorLy8gSUU4IFJlZmVyZW5jZToKKy8vICAgICBodHRw
Oi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQyODI5MDAuYXNweAorLy8gICAg
IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9kZDIyOTkxNi5hc3B4Cisv
LyBXZWJLaXQgQnVnczoKKy8vICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzY0MjMKKworZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3QpIHsK
KyAgICB0cnkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAic2VudGlu
ZWwiLCB7fSk7CisgICAgICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKKyAgICB9IGNh
dGNoIChleGNlcHRpb24pIHsKKyAgICAgICAgLy8gcmV0dXJucyBmYWxzeQorICAgIH0KK30KKwor
Ly8gY2hlY2sgd2hldGhlciBkZWZpbmVQcm9wZXJ0eSB3b3JrcyBpZiBpdCdzIGdpdmVuLiBPdGhl
cndpc2UsCisvLyBzaGltIHBhcnRpYWxseS4KK2lmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsK
KyAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVByb3BlcnR5
V29yayh7fSk7CisgICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1
bWVudCA9PSAidW5kZWZpbmVkIiB8fAorICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKKyAgICBpZiAoIWRlZmluZVByb3BlcnR5V29y
a3NPbk9iamVjdCB8fCAhZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tKSB7CisgICAgICAgIHZhciBk
ZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LAorICAgICAgICAg
ICAgZGVmaW5lUHJvcGVydGllc0ZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7Cisg
ICAgfQorfQorCitpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZh
bGxiYWNrKSB7CisgICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkg
ZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7CisgICAgdmFyIEVSUl9OT05fT0JKRUNU
X1RBUkdFVCA9ICJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIK
KyAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJz
IGNhbiBub3QgYmUgZGVmaW5lZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOworCisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3Jp
cHRvcikgeworICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9m
IG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpIHsKKyAgICAgICAgICAg
IHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoKHR5cGVvZiBkZXNjcmlwdG9yICE9ICJvYmplY3QiICYmIHR5
cGVvZiBkZXNjcmlwdG9yICE9ICJmdW5jdGlvbiIpIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpIHsK
KyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRP
UiArIGRlc2NyaXB0b3IpOworICAgICAgICB9CisgICAgICAgIC8vIG1ha2UgYSB2YWxpYW50IGF0
dGVtcHQgdG8gdXNlIHRoZSByZWFsIGRlZmluZVByb3BlcnR5CisgICAgICAgIC8vIGZvciBJOCdz
IERPTSBlbGVtZW50cy4KKyAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKKyAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5RmFs
bGJhY2suY2FsbChPYmplY3QsIG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpOworICAgICAg
ICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgLy8gdHJ5IHRoZSBz
aGltIGlmIHRoZSByZWFsIG9uZSBkb2Vzbid0IHdvcmsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIElmIGl0J3MgYSBkYXRhIHByb3BlcnR5LgorICAgICAgICBpZiAob3du
cyhkZXNjcmlwdG9yLCAidmFsdWUiKSkgeworICAgICAgICAgICAgLy8gZmFpbCBzaWxlbnRseSBp
ZiAid3JpdGFibGUiLCAiZW51bWVyYWJsZSIsIG9yICJjb25maWd1cmFibGUiCisgICAgICAgICAg
ICAvLyBhcmUgcmVxdWVzdGVkIGJ1dCBub3Qgc3VwcG9ydGVkCisgICAgICAgICAgICAvKgorICAg
ICAgICAgICAgLy8gYWx0ZXJuYXRlIGFwcHJvYWNoOgorICAgICAgICAgICAgaWYgKCAvLyBjYW4n
dCBpbXBsZW1lbnQgdGhlc2UgZmVhdHVyZXM7IGFsbG93IGZhbHNlIGJ1dCBub3QgdHJ1ZQorICAg
ICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAid3JpdGFibGUiKSA/IGRlc2NyaXB0b3Iu
d3JpdGFibGUgOiB0cnVlKSB8fAorICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9yLCAi
ZW51bWVyYWJsZSIpID8gZGVzY3JpcHRvci5lbnVtZXJhYmxlIDogdHJ1ZSkgfHwKKyAgICAgICAg
ICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgImNvbmZpZ3VyYWJsZSIpID8gZGVzY3JpcHRvci5j
b25maWd1cmFibGUgOiB0cnVlKQorICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHRocm93
IG5ldyBSYW5nZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAiVGhpcyBpbXBsZW1lbnRhdGlv
biBvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgZG9lcyBub3QgIiArCisgICAgICAgICAgICAgICAg
ICAgICJzdXBwb3J0IGNvbmZpZ3VyYWJsZSwgZW51bWVyYWJsZSwgb3Igd3JpdGFibGUuIgorICAg
ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAqLworCisgICAgICAgICAgICBpZiAoc3VwcG9y
dHNBY2Nlc3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9w
ZXJ0eSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEFzIGFjY2Vzc29ycyBh
cmUgc3VwcG9ydGVkIG9ubHkgb24gZW5naW5lcyBpbXBsZW1lbnRpbmcKKyAgICAgICAgICAgICAg
ICAvLyBgX19wcm90b19fYCB3ZSBjYW4gc2FmZWx5IG92ZXJyaWRlIGBfX3Byb3RvX19gIHdoaWxl
IGRlZmluaW5nCisgICAgICAgICAgICAgICAgLy8gYSBwcm9wZXJ0eSB0byBtYWtlIHN1cmUgdGhh
dCB3ZSBkb24ndCBoaXQgYW4gaW5oZXJpdGVkCisgICAgICAgICAgICAgICAgLy8gYWNjZXNzb3Iu
CisgICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CisgICAg
ICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OworICAgICAg
ICAgICAgICAgIC8vIERlbGV0aW5nIGEgcHJvcGVydHkgYW55d2F5IHNpbmNlIGdldHRlciAvIHNl
dHRlciBtYXkgYmUKKyAgICAgICAgICAgICAgICAvLyBkZWZpbmVkIG9uIG9iamVjdCBpdHNlbGYu
CisgICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07CisgICAgICAgICAgICAg
ICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7CisgICAgICAgICAgICAgICAg
Ly8gU2V0dGluZyBvcmlnaW5hbCBgX19wcm90b19fYCBiYWNrIG5vdy4KKyAgICAgICAgICAgICAg
ICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nl
c3NvcnMpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NP
UlNfTk9UX1NVUFBPUlRFRCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB3ZSBn
b3QgdGhhdCBmYXIgdGhlbiBnZXR0ZXJzIGFuZCBzZXR0ZXJzIGNhbiBiZSBkZWZpbmVkICEhCisg
ICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAiZ2V0IikpIHsKKyAgICAgICAgICAgICAg
ICBkZWZpbmVHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5nZXQpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInNldCIpKSB7CisgICAg
ICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAg
IH07Cit9CisKKy8vIEVTNSAxNS4yLjMuNworLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUu
Mi4zLjcKK2lmICghT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgfHwgZGVmaW5lUHJvcGVydGllc0Zh
bGxiYWNrKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQ
cm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcykgeworICAgICAgICAvLyBtYWtlIGEgdmFsaWFu
dCBhdHRlbXB0IHRvIHVzZSB0aGUgcmVhbCBkZWZpbmVQcm9wZXJ0aWVzCisgICAgICAgIGlmIChk
ZWZpbmVQcm9wZXJ0aWVzRmFsbGJhY2spIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnRpZXNGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0
LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAg
ICAgICAgICAgIC8vIHRyeSB0aGUgc2hpbSBpZiB0aGUgcmVhbCBvbmUgZG9lc24ndCB3b3JrCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBw
cm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkg
JiYgcHJvcGVydHkgIT0gIl9fcHJvdG9fXyIpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30K
KworLy8gRVM1IDE1LjIuMy44CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOAor
aWYgKCFPYmplY3Quc2VhbCkgeworICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmpl
Y3QpIHsKKyAgICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1k
ZXRlY3Rpb24sIGJ1dAorICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3Jh
Y2VmdWxseSIgZGVncmFkZSB0byB3b3JraW5nCisgICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2Rl
LgorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuOQor
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjkKK2lmICghT2JqZWN0LmZyZWV6ZSkg
eworICAgIE9iamVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAg
IC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQK
KyAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3Jh
ZGUgdG8gd29ya2luZworICAgICAgICAvLyBidXQgaW5zZWN1cmUgY29kZS4KKyAgICAgICAgcmV0
dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBkZXRlY3QgYSBSaGlubyBidWcgYW5kIHBhdGNo
IGl0Cit0cnkgeworICAgIE9iamVjdC5mcmVlemUoZnVuY3Rpb24gKCkge30pOworfSBjYXRjaCAo
ZXhjZXB0aW9uKSB7CisgICAgT2JqZWN0LmZyZWV6ZSA9IChmdW5jdGlvbiBmcmVlemUoZnJlZXpl
T2JqZWN0KSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAg
ICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZyZWV6ZU9iamVjdChvYmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
ICAgIH0pKE9iamVjdC5mcmVlemUpOworfQorCisvLyBFUzUgMTUuMi4zLjEwCisvLyBodHRwOi8v
ZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTAKK2lmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25z
KSB7CisgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVu
c2lvbnMob2JqZWN0KSB7CisgICAgICAgIC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtz
IGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQKKyAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNv
ZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29ya2luZworICAgICAgICAvLyBidXQgaW5z
ZWN1cmUgY29kZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBFUzUg
MTUuMi4zLjExCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTEKK2lmICghT2Jq
ZWN0LmlzU2VhbGVkKSB7CisgICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQo
b2JqZWN0KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUu
Mi4zLjEyCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTIKK2lmICghT2JqZWN0
LmlzRnJvemVuKSB7CisgICAgT2JqZWN0LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2Jq
ZWN0KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4z
LjEzCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTMKK2lmICghT2JqZWN0Lmlz
RXh0ZW5zaWJsZSkgeworICAgIE9iamVjdC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVu
c2libGUob2JqZWN0KSB7CisgICAgICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCB0
aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCisgICAgICAgIGlmIChPYmplY3Qob2JqZWN0KSAh
PT0gb2JqZWN0KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8g
bWVzc2FnZQorICAgICAgICB9CisgICAgICAgIC8vIDIuIFJldHVybiB0aGUgQm9vbGVhbiB2YWx1
ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAgICAg
dmFyIG5hbWUgPSAnJzsKKyAgICAgICAgd2hpbGUgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAg
ICAgICAgICAgbmFtZSArPSAnPyc7CisgICAgICAgIH0KKyAgICAgICAgb2JqZWN0W25hbWVdID0g
dHJ1ZTsKKyAgICAgICAgdmFyIHJldHVyblZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOworICAg
ICAgICBkZWxldGUgb2JqZWN0W25hbWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cisg
ICAgfTsKK30KKworfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2Rl
X21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoYW0ubWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGFtLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzNj
MjdhM2ZkOGUxNjNkOWYzMDMxNzc0NWI4NzRmNjgyYWQzMjMxCi0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGFtLm1p
bi5qcwpAQCAtMCwwICsxLDIgQEAKKyhmdW5jdGlvbihkZWZpbml0aW9uKXtpZih0eXBlb2YgZGVm
aW5lPT0iZnVuY3Rpb24iKXtkZWZpbmUoZGVmaW5pdGlvbil9ZWxzZSBpZih0eXBlb2YgWVVJPT0i
ZnVuY3Rpb24iKXtZVUkuYWRkKCJlczUtc2hhbSIsZGVmaW5pdGlvbil9ZWxzZXtkZWZpbml0aW9u
KCl9fSkoZnVuY3Rpb24oKXt2YXIgY2FsbD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDt2YXIgcHJv
dG90eXBlT2ZPYmplY3Q9T2JqZWN0LnByb3RvdHlwZTt2YXIgb3ducz1jYWxsLmJpbmQocHJvdG90
eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpO3ZhciBkZWZpbmVHZXR0ZXI7dmFyIGRlZmluZVNl
dHRlcjt2YXIgbG9va3VwR2V0dGVyO3ZhciBsb29rdXBTZXR0ZXI7dmFyIHN1cHBvcnRzQWNjZXNz
b3JzO2lmKHN1cHBvcnRzQWNjZXNzb3JzPW93bnMocHJvdG90eXBlT2ZPYmplY3QsIl9fZGVmaW5l
R2V0dGVyX18iKSl7ZGVmaW5lR2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2Rl
ZmluZUdldHRlcl9fKTtkZWZpbmVTZXR0ZXI9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9f
ZGVmaW5lU2V0dGVyX18pO2xvb2t1cEdldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3Qu
X19sb29rdXBHZXR0ZXJfXyk7bG9va3VwU2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVj
dC5fX2xvb2t1cFNldHRlcl9fKX1pZighT2JqZWN0LmdldFByb3RvdHlwZU9mKXtPYmplY3QuZ2V0
UHJvdG90eXBlT2Y9ZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KXtyZXR1cm4gb2JqZWN0
Ll9fcHJvdG9fX3x8KG9iamVjdC5jb25zdHJ1Y3Rvcj9vYmplY3QuY29uc3RydWN0b3IucHJvdG90
eXBlOnByb3RvdHlwZU9mT2JqZWN0KX19ZnVuY3Rpb24gZG9lc0dldE93blByb3BlcnR5RGVzY3Jp
cHRvcldvcmsob2JqZWN0KXt0cnl7b2JqZWN0LnNlbnRpbmVsPTA7cmV0dXJuIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCJzZW50aW5lbCIpLnZhbHVlPT09MH1jYXRjaChl
eGNlcHRpb24pe319aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXt2YXIgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yV29ya3NPbk9iamVjdD1kb2VzR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29yayh7
fSk7dmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvcldvcmtzT25Eb209dHlwZW9mIGRvY3VtZW50
PT0idW5kZWZpbmVkInx8ZG9lc0dldE93blByb3BlcnR5RGVzY3JpcHRvcldvcmsoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2IikpO2lmKCFnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JXb3Jrc09u
RG9tfHwhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yV29ya3NPbk9iamVjdCl7dmFyIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvckZhbGxiYWNrPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9
fWlmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfHxnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JGYWxsYmFjayl7dmFyIEVSUl9OT05fT0JKRUNUPSJPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICI7T2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcj1mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LHByb3Bl
cnR5KXtpZih0eXBlb2Ygb2JqZWN0IT0ib2JqZWN0IiYmdHlwZW9mIG9iamVjdCE9ImZ1bmN0aW9u
Inx8b2JqZWN0PT09bnVsbCl7dGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCtvYmpl
Y3QpfWlmKGdldE93blByb3BlcnR5RGVzY3JpcHRvckZhbGxiYWNrKXt0cnl7cmV0dXJuIGdldE93
blByb3BlcnR5RGVzY3JpcHRvckZhbGxiYWNrLmNhbGwoT2JqZWN0LG9iamVjdCxwcm9wZXJ0eSl9
Y2F0Y2goZXhjZXB0aW9uKXt9fWlmKCFvd25zKG9iamVjdCxwcm9wZXJ0eSkpe3JldHVybn12YXIg
ZGVzY3JpcHRvcj17ZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfTtpZihzdXBwb3J0
c0FjY2Vzc29ycyl7dmFyIHByb3RvdHlwZT1vYmplY3QuX19wcm90b19fO29iamVjdC5fX3Byb3Rv
X189cHJvdG90eXBlT2ZPYmplY3Q7dmFyIGdldHRlcj1sb29rdXBHZXR0ZXIob2JqZWN0LHByb3Bl
cnR5KTt2YXIgc2V0dGVyPWxvb2t1cFNldHRlcihvYmplY3QscHJvcGVydHkpO29iamVjdC5fX3By
b3RvX189cHJvdG90eXBlO2lmKGdldHRlcnx8c2V0dGVyKXtpZihnZXR0ZXIpe2Rlc2NyaXB0b3Iu
Z2V0PWdldHRlcn1pZihzZXR0ZXIpe2Rlc2NyaXB0b3Iuc2V0PXNldHRlcn1yZXR1cm4gZGVzY3Jp
cHRvcn19ZGVzY3JpcHRvci52YWx1ZT1vYmplY3RbcHJvcGVydHldO2Rlc2NyaXB0b3Iud3JpdGFi
bGU9dHJ1ZTtyZXR1cm4gZGVzY3JpcHRvcn19aWYoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
KXtPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz1mdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCl7cmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCl9fWlmKCFPYmplY3QuY3JlYXRlKXt2
YXIgY3JlYXRlRW1wdHk7dmFyIHN1cHBvcnRzUHJvdG89T2JqZWN0LnByb3RvdHlwZS5fX3Byb3Rv
X189PT1udWxsO2lmKHN1cHBvcnRzUHJvdG98fHR5cGVvZiBkb2N1bWVudD09InVuZGVmaW5lZCIp
e2NyZWF0ZUVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJue19fcHJvdG9fXzpudWxsfX19ZWxzZXtjcmVh
dGVFbXB0eT1mdW5jdGlvbigpe3ZhciBpZnJhbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZy
YW1lIik7dmFyIHBhcmVudD1kb2N1bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7
aWZyYW1lLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3BhcmVudC5hcHBlbmRDaGlsZChpZnJhbWUpO2lm
cmFtZS5zcmM9ImphdmFzY3JpcHQ6Ijt2YXIgZW1wdHk9aWZyYW1lLmNvbnRlbnRXaW5kb3cuT2Jq
ZWN0LnByb3RvdHlwZTtwYXJlbnQucmVtb3ZlQ2hpbGQoaWZyYW1lKTtpZnJhbWU9bnVsbDtkZWxl
dGUgZW1wdHkuY29uc3RydWN0b3I7ZGVsZXRlIGVtcHR5Lmhhc093blByb3BlcnR5O2RlbGV0ZSBl
bXB0eS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtkZWxldGUgZW1wdHkuaXNQcm90b3R5cGVPZjtkZWxl
dGUgZW1wdHkudG9Mb2NhbGVTdHJpbmc7ZGVsZXRlIGVtcHR5LnRvU3RyaW5nO2RlbGV0ZSBlbXB0
eS52YWx1ZU9mO2VtcHR5Ll9fcHJvdG9fXz1udWxsO2Z1bmN0aW9uIEVtcHR5KCl7fUVtcHR5LnBy
b3RvdHlwZT1lbXB0eTtjcmVhdGVFbXB0eT1mdW5jdGlvbigpe3JldHVybiBuZXcgRW1wdHl9O3Jl
dHVybiBuZXcgRW1wdHl9fU9iamVjdC5jcmVhdGU9ZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSxw
cm9wZXJ0aWVzKXt2YXIgb2JqZWN0O2Z1bmN0aW9uIFR5cGUoKXt9aWYocHJvdG90eXBlPT09bnVs
bCl7b2JqZWN0PWNyZWF0ZUVtcHR5KCl9ZWxzZXtpZih0eXBlb2YgcHJvdG90eXBlIT09Im9iamVj
dCImJnR5cGVvZiBwcm90b3R5cGUhPT0iZnVuY3Rpb24iKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJP
YmplY3QgcHJvdG90eXBlIG1heSBvbmx5IGJlIGFuIE9iamVjdCBvciBudWxsIil9VHlwZS5wcm90
b3R5cGU9cHJvdG90eXBlO29iamVjdD1uZXcgVHlwZTtvYmplY3QuX19wcm90b19fPXByb3RvdHlw
ZX1pZihwcm9wZXJ0aWVzIT09dm9pZCAwKXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3Qs
cHJvcGVydGllcyl9cmV0dXJuIG9iamVjdH19ZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29y
ayhvYmplY3Qpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCJzZW50aW5lbCIse30p
O3JldHVybiJzZW50aW5lbCJpbiBvYmplY3R9Y2F0Y2goZXhjZXB0aW9uKXt9fWlmKE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eSl7dmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdD1kb2VzRGVmaW5l
UHJvcGVydHlXb3JrKHt9KTt2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tPXR5cGVvZiBkb2N1
bWVudD09InVuZGVmaW5lZCJ8fGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2IikpO2lmKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3R8fCFkZWZpbmVQ
cm9wZXJ0eVdvcmtzT25Eb20pe3ZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrPU9iamVjdC5kZWZp
bmVQcm9wZXJ0eSxkZWZpbmVQcm9wZXJ0aWVzRmFsbGJhY2s9T2JqZWN0LmRlZmluZVByb3BlcnRp
ZXN9fWlmKCFPYmplY3QuZGVmaW5lUHJvcGVydHl8fGRlZmluZVByb3BlcnR5RmFsbGJhY2spe3Zh
ciBFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SPSJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJl
IGFuIG9iamVjdDogIjt2YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUPSJPYmplY3QuZGVmaW5lUHJv
cGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICI7dmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBP
UlRFRD0iZ2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIrIm9uIHRoaXMgamF2
YXNjcmlwdCBlbmdpbmUiO09iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbiBkZWZpbmVQcm9w
ZXJ0eShvYmplY3QscHJvcGVydHksZGVzY3JpcHRvcil7aWYodHlwZW9mIG9iamVjdCE9Im9iamVj
dCImJnR5cGVvZiBvYmplY3QhPSJmdW5jdGlvbiJ8fG9iamVjdD09PW51bGwpe3Rocm93IG5ldyBU
eXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUK29iamVjdCl9aWYodHlwZW9mIGRlc2NyaXB0
b3IhPSJvYmplY3QiJiZ0eXBlb2YgZGVzY3JpcHRvciE9ImZ1bmN0aW9uInx8ZGVzY3JpcHRvcj09
PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUitkZXNj
cmlwdG9yKX1pZihkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKXt0cnl7cmV0dXJuIGRlZmluZVByb3Bl
cnR5RmFsbGJhY2suY2FsbChPYmplY3Qsb2JqZWN0LHByb3BlcnR5LGRlc2NyaXB0b3IpfWNhdGNo
KGV4Y2VwdGlvbil7fX1pZihvd25zKGRlc2NyaXB0b3IsInZhbHVlIikpe2lmKHN1cHBvcnRzQWNj
ZXNzb3JzJiYobG9va3VwR2V0dGVyKG9iamVjdCxwcm9wZXJ0eSl8fGxvb2t1cFNldHRlcihvYmpl
Y3QscHJvcGVydHkpKSl7dmFyIHByb3RvdHlwZT1vYmplY3QuX19wcm90b19fO29iamVjdC5fX3By
b3RvX189cHJvdG90eXBlT2ZPYmplY3Q7ZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07b2JqZWN0W3By
b3BlcnR5XT1kZXNjcmlwdG9yLnZhbHVlO29iamVjdC5fX3Byb3RvX189cHJvdG90eXBlfWVsc2V7
b2JqZWN0W3Byb3BlcnR5XT1kZXNjcmlwdG9yLnZhbHVlfX1lbHNle2lmKCFzdXBwb3J0c0FjY2Vz
c29ycyl7dGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQpfWlm
KG93bnMoZGVzY3JpcHRvciwiZ2V0Iikpe2RlZmluZUdldHRlcihvYmplY3QscHJvcGVydHksZGVz
Y3JpcHRvci5nZXQpfWlmKG93bnMoZGVzY3JpcHRvciwic2V0Iikpe2RlZmluZVNldHRlcihvYmpl
Y3QscHJvcGVydHksZGVzY3JpcHRvci5zZXQpfX1yZXR1cm4gb2JqZWN0fX1pZighT2JqZWN0LmRl
ZmluZVByb3BlcnRpZXN8fGRlZmluZVByb3BlcnRpZXNGYWxsYmFjayl7T2JqZWN0LmRlZmluZVBy
b3BlcnRpZXM9ZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QscHJvcGVydGllcyl7aWYo
ZGVmaW5lUHJvcGVydGllc0ZhbGxiYWNrKXt0cnl7cmV0dXJuIGRlZmluZVByb3BlcnRpZXNGYWxs
YmFjay5jYWxsKE9iamVjdCxvYmplY3QscHJvcGVydGllcyl9Y2F0Y2goZXhjZXB0aW9uKXt9fWZv
cih2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcyl7aWYob3ducyhwcm9wZXJ0aWVzLHByb3BlcnR5
KSYmcHJvcGVydHkhPSJfX3Byb3RvX18iKXtPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LHBy
b3BlcnR5LHByb3BlcnRpZXNbcHJvcGVydHldKX19cmV0dXJuIG9iamVjdH19aWYoIU9iamVjdC5z
ZWFsKXtPYmplY3Quc2VhbD1mdW5jdGlvbiBzZWFsKG9iamVjdCl7cmV0dXJuIG9iamVjdH19aWYo
IU9iamVjdC5mcmVlemUpe09iamVjdC5mcmVlemU9ZnVuY3Rpb24gZnJlZXplKG9iamVjdCl7cmV0
dXJuIG9iamVjdH19dHJ5e09iamVjdC5mcmVlemUoZnVuY3Rpb24oKXt9KX1jYXRjaChleGNlcHRp
b24pe09iamVjdC5mcmVlemU9ZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCl7cmV0dXJuIGZ1
bmN0aW9uIGZyZWV6ZShvYmplY3Qpe2lmKHR5cGVvZiBvYmplY3Q9PSJmdW5jdGlvbiIpe3JldHVy
biBvYmplY3R9ZWxzZXtyZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCl9fX0oT2JqZWN0LmZyZWV6
ZSl9aWYoIU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyl7T2JqZWN0LnByZXZlbnRFeHRlbnNpb25z
PWZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCl7cmV0dXJuIG9iamVjdH19aWYoIU9i
amVjdC5pc1NlYWxlZCl7T2JqZWN0LmlzU2VhbGVkPWZ1bmN0aW9uIGlzU2VhbGVkKG9iamVjdCl7
cmV0dXJuIGZhbHNlfX1pZighT2JqZWN0LmlzRnJvemVuKXtPYmplY3QuaXNGcm96ZW49ZnVuY3Rp
b24gaXNGcm96ZW4ob2JqZWN0KXtyZXR1cm4gZmFsc2V9fWlmKCFPYmplY3QuaXNFeHRlbnNpYmxl
KXtPYmplY3QuaXNFeHRlbnNpYmxlPWZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3Qpe2lmKE9i
amVjdChvYmplY3QpIT09b2JqZWN0KXt0aHJvdyBuZXcgVHlwZUVycm9yfXZhciBuYW1lPSIiO3do
aWxlKG93bnMob2JqZWN0LG5hbWUpKXtuYW1lKz0iPyJ9b2JqZWN0W25hbWVdPXRydWU7dmFyIHJl
dHVyblZhbHVlPW93bnMob2JqZWN0LG5hbWUpO2RlbGV0ZSBvYmplY3RbbmFtZV07cmV0dXJuIHJl
dHVyblZhbHVlfX19KTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzNS1zaGFtLm1hcApcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0
L25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUtc2hpbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9lczUtc2hpbS9lczUtc2hpbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTE2ZDM5
M2ExODJiOTE5NjYwMDRkYmFkMTdjNWJkOTMzMmQ2MzFkCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGltLmpzCkBA
IC0wLDAgKzEsMTM2MCBAQAorLy8gQ29weXJpZ2h0IDIwMDktMjAxMiBieSBjb250cmlidXRvcnMs
IE1JVCBMaWNlbnNlCisvLyB2aW06IHRzPTQgc3RzPTQgc3c9NCBleHBhbmR0YWIKKworLy9BZGQg
c2VtaWNvbG9uIHRvIHByZXZlbnQgSUlGRSBmcm9tIGJlaW5nIHBhc3NlZCBhcyBhcmd1bWVudCB0
byBjb25jYXRlZCBjb2RlLgorOworLy8gTW9kdWxlIHN5c3RlbXMgbWFnaWMgZGFuY2UKKyhmdW5j
dGlvbiAoZGVmaW5pdGlvbikgeworICAgIC8vIFJlcXVpcmVKUworICAgIGlmICh0eXBlb2YgZGVm
aW5lID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pOworICAgIC8v
IFlVSTMKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBZVUkgPT0gImZ1bmN0aW9uIikgeworICAgICAg
ICBZVUkuYWRkKCJlczUiLCBkZWZpbml0aW9uKTsKKyAgICAvLyBDb21tb25KUyBhbmQgPHNjcmlw
dD4KKyAgICB9IGVsc2UgeworICAgICAgICBkZWZpbml0aW9uKCk7CisgICAgfQorfSkoZnVuY3Rp
b24gKCkgeworCisvKioKKyAqIEJyaW5ncyBhbiBlbnZpcm9ubWVudCBhcyBjbG9zZSB0byBFQ01B
U2NyaXB0IDUgY29tcGxpYW5jZQorICogYXMgaXMgcG9zc2libGUgd2l0aCB0aGUgZmFjaWxpdGll
cyBvZiBlcnN0d2hpbGUgZW5naW5lcy4KKyAqCisgKiBBbm5vdGF0ZWQgRVM1OiBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vIChzcGVjaWZpYyBsaW5rcyBiZWxvdykKKyAqIEVTNSBTcGVjOiBodHRwOi8v
d3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRWNt
YS0yNjIucGRmCisgKiBSZXF1aXJlZCByZWFkaW5nOiBodHRwOi8vamF2YXNjcmlwdHdlYmxvZy53
b3JkcHJlc3MuY29tLzIwMTEvMTIvMDUvZXh0ZW5kaW5nLWphdmFzY3JpcHQtbmF0aXZlcy8KKyAq
LworCisvLyBFUy01IDE1LjEuMi4yCitpZiAocGFyc2VJbnQoJzA4JykgIT09IDgpIHsKKyAgICBw
YXJzZUludCA9IChmdW5jdGlvbiAob3JpZ1BhcnNlSW50KSB7CisgICAgICAgIHZhciBoZXhSZWdl
eCA9IC9eMFt4WF0vOworICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2VJbnRFUzUoc3RyLCBy
YWRpeCkgeworICAgICAgICAgICAgc3RyID0gU3RyaW5nKHN0cikudHJpbSgpOworICAgICAgICAg
ICAgaWYgKCErcmFkaXgpIHsKKyAgICAgICAgICAgICAgICByYWRpeCA9IGhleFJlZ2V4LnRlc3Qo
c3RyKSA/IDE2IDogMTA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb3JpZ1Bh
cnNlSW50KHN0ciwgcmFkaXgpOworICAgICAgICB9OworICAgIH0ocGFyc2VJbnQpKTsKK30KKwor
Ly8KKy8vIEZ1bmN0aW9uCisvLyA9PT09PT09PQorLy8KKworLy8gRVMtNSAxNS4zLjQuNQorLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMy40LjUKKworZnVuY3Rpb24gRW1wdHkoKSB7fQor
CitpZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7CisgICAgRnVuY3Rpb24ucHJvdG90eXBl
LmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCisgICAgICAgIC8v
IDEuIExldCBUYXJnZXQgYmUgdGhlIHRoaXMgdmFsdWUuCisgICAgICAgIHZhciB0YXJnZXQgPSB0
aGlzOworICAgICAgICAvLyAyLiBJZiBJc0NhbGxhYmxlKFRhcmdldCkgaXMgZmFsc2UsIHRocm93
IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gImZ1
bmN0aW9uIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJv
dG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiICsgdGFyZ2V0KTsKKyAgICAgICAg
fQorICAgICAgICAvLyAzLiBMZXQgQSBiZSBhIG5ldyAocG9zc2libHkgZW1wdHkpIGludGVybmFs
IGxpc3Qgb2YgYWxsIG9mIHRoZQorICAgICAgICAvLyAgIGFyZ3VtZW50IHZhbHVlcyBwcm92aWRl
ZCBhZnRlciB0aGlzQXJnIChhcmcxLCBhcmcyIGV0YyksIGluIG9yZGVyLgorICAgICAgICAvLyBY
WFggc2xpY2VkQXJncyB3aWxsIHN0YW5kIGluIGZvciAiQSIgaWYgdXNlZAorICAgICAgICB2YXIg
YXJncyA9IF9BcnJheV9zbGljZV8uY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNh
bGwKKyAgICAgICAgLy8gNC4gTGV0IEYgYmUgYSBuZXcgbmF0aXZlIEVDTUFTY3JpcHQgb2JqZWN0
LgorICAgICAgICAvLyAxMS4gU2V0IHRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5
IG9mIEYgdG8gdGhlIHN0YW5kYXJkCisgICAgICAgIC8vICAgYnVpbHQtaW4gRnVuY3Rpb24gcHJv
dG90eXBlIG9iamVjdCBhcyBzcGVjaWZpZWQgaW4gMTUuMy4zLjEuCisgICAgICAgIC8vIDEyLiBT
ZXQgdGhlIFtbQ2FsbF1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCisg
ICAgICAgIC8vICAgMTUuMy40LjUuMS4KKyAgICAgICAgLy8gMTMuIFNldCB0aGUgW1tDb25zdHJ1
Y3RdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAg
IDE1LjMuNC41LjIuCisgICAgICAgIC8vIDE0LiBTZXQgdGhlIFtbSGFzSW5zdGFuY2VdXSBpbnRl
cm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAgIDE1LjMuNC41
LjMuCisgICAgICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIGlm
ICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHsKKyAgICAgICAgICAgICAgICAvLyAxNS4zLjQuNS4y
IFtbQ29uc3RydWN0XV0KKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBbW0NvbnN0cnVjdF1d
IGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwKKyAgICAgICAgICAgICAgICAv
LyBGIHRoYXQgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGJpbmQgZnVuY3Rpb24gaXMgY2FsbGVkIHdp
dGggYQorICAgICAgICAgICAgICAgIC8vIGxpc3Qgb2YgYXJndW1lbnRzIEV4dHJhQXJncywgdGhl
IGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHRh
cmdldCBiZSB0aGUgdmFsdWUgb2YgRidzIFtbVGFyZ2V0RnVuY3Rpb25dXQorICAgICAgICAgICAg
ICAgIC8vICAgaW50ZXJuYWwgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgLy8gMi4gSWYgdGFy
Z2V0IGhhcyBubyBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCwgYQorICAgICAgICAgICAg
ICAgIC8vICAgVHlwZUVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24uCisgICAgICAgICAgICAgICAg
Ly8gMy4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50
ZXJuYWwKKyAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8v
IDQuIExldCBhcmdzIGJlIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZXMgYXMg
dGhlCisgICAgICAgICAgICAgICAgLy8gICBsaXN0IGJvdW5kQXJncyBpbiB0aGUgc2FtZSBvcmRl
ciBmb2xsb3dlZCBieSB0aGUgc2FtZQorICAgICAgICAgICAgICAgIC8vICAgdmFsdWVzIGFzIHRo
ZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4KKyAgICAgICAgICAgICAgICAvLyA1
LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFs
CisgICAgICAgICAgICAgICAgLy8gICBtZXRob2Qgb2YgdGFyZ2V0IHByb3ZpZGluZyBhcmdzIGFz
IHRoZSBhcmd1bWVudHMuCisKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFw
cGx5KAorICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAgICAgICBhcmdz
LmNvbmNhdChfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzKSkKKyAgICAgICAgICAgICAgICAp
OworICAgICAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIDE1LjMuNC41LjEgW1tDYWxsXV0KKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRo
ZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYSBmdW5jdGlvbiBvYmplY3QsIEYsCisgICAg
ICAgICAgICAgICAgLy8gd2hpY2ggd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGJpbmQgZnVuY3Rpb24g
aXMgY2FsbGVkIHdpdGggYQorICAgICAgICAgICAgICAgIC8vIHRoaXMgdmFsdWUgYW5kIGEgbGlz
dCBvZiBhcmd1bWVudHMgRXh0cmFBcmdzLCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAg
Ly8gc3RlcHMgYXJlIHRha2VuOgorICAgICAgICAgICAgICAgIC8vIDEuIExldCBib3VuZEFyZ3Mg
YmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kQXJnc11dIGludGVybmFsCisgICAgICAgICAgICAg
ICAgLy8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgYm91bmRUaGlzIGJl
IHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZFRoaXNdXSBpbnRlcm5hbAorICAgICAgICAgICAgICAg
IC8vICAgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHRhcmdldCBiZSB0aGUg
dmFsdWUgb2YgRidzIFtbVGFyZ2V0RnVuY3Rpb25dXSBpbnRlcm5hbAorICAgICAgICAgICAgICAg
IC8vICAgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgLy8gNC4gTGV0IGFyZ3MgYmUgYSBuZXcg
bGlzdCBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGUKKyAgICAgICAgICAgICAgICAv
LyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1l
CisgICAgICAgICAgICAgICAgLy8gICB2YWx1ZXMgYXMgdGhlIGxpc3QgRXh0cmFBcmdzIGluIHRo
ZSBzYW1lIG9yZGVyLgorICAgICAgICAgICAgICAgIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZAorICAgICAgICAgICAgICAgIC8v
ICAgb2YgdGFyZ2V0IHByb3ZpZGluZyBib3VuZFRoaXMgYXMgdGhlIHRoaXMgdmFsdWUgYW5kCisg
ICAgICAgICAgICAgICAgLy8gICBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLgorCisg
ICAgICAgICAgICAgICAgLy8gZXF1aXY6IHRhcmdldC5jYWxsKHRoaXMsIC4uLmJvdW5kQXJncywg
Li4uYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KAorICAgICAgICAg
ICAgICAgICAgICB0aGF0LAorICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChfQXJyYXlf
c2xpY2VfLmNhbGwoYXJndW1lbnRzKSkKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAg
ICB9CisKKyAgICAgICAgfTsKKworICAgICAgICAvLyAxNS4gSWYgdGhlIFtbQ2xhc3NdXSBpbnRl
cm5hbCBwcm9wZXJ0eSBvZiBUYXJnZXQgaXMgIkZ1bmN0aW9uIiwgdGhlbgorICAgICAgICAvLyAg
ICAgYS4gTGV0IEwgYmUgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxl
bmd0aCBvZiBBLgorICAgICAgICAvLyAgICAgYi4gU2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5
IG9mIEYgdG8gZWl0aGVyIDAgb3IgTCwgd2hpY2hldmVyIGlzCisgICAgICAgIC8vICAgICAgIGxh
cmdlci4KKyAgICAgICAgLy8gMTYuIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9m
IEYgdG8gMC4KKworICAgICAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQu
bGVuZ3RoIC0gYXJncy5sZW5ndGgpOworCisgICAgICAgIC8vIDE3LiBTZXQgdGhlIGF0dHJpYnV0
ZXMgb2YgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byB0aGUgdmFsdWVzCisgICAgICAg
IC8vICAgc3BlY2lmaWVkIGluIDE1LjMuNS4xLgorICAgICAgICB2YXIgYm91bmRBcmdzID0gW107
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgYm91bmRBcmdzLnB1c2goIiQiICsgaSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBY
WFggQnVpbGQgYSBkeW5hbWljIGZ1bmN0aW9uIHdpdGggZGVzaXJlZCBhbW91bnQgb2YgYXJndW1l
bnRzIGlzIHRoZSBvbmx5IAorICAgICAgICAvLyB3YXkgdG8gc2V0IHRoZSBsZW5ndGggcHJvcGVy
dHkgb2YgYSBmdW5jdGlvbi4gCisgICAgICAgIC8vIEluIGVudmlyb25tZW50cyB3aGVyZSBDb250
ZW50IFNlY3VyaXR5IFBvbGljaWVzIGVuYWJsZWQgKENocm9tZSBleHRlbnNpb25zLCAKKyAgICAg
ICAgLy8gZm9yIGV4LikgYWxsIHVzZSBvZiBldmFsIG9yIEZ1bmN0aW9uIGNvc3RydWN0b3IgdGhy
b3dzIGFuIGV4Y2VwdGlvbi4gCisgICAgICAgIC8vIEhvd2V2ZXIgaW4gYWxsIG9mIHRoZXNlIGVu
dmlyb25tZW50cyBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBleGlzdHMgCisgICAgICAgIC8vIGFu
ZCBzbyB0aGlzIGNvZGUgd2lsbCBuZXZlciBiZSBleGVjdXRlZC4KKyAgICAgICAgdmFyIGJvdW5k
ID0gRnVuY3Rpb24oImJpbmRlciIsICJyZXR1cm4gZnVuY3Rpb24oIiArIGJvdW5kQXJncy5qb2lu
KCIsIikgKyAiKXtyZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0iKShiaW5kZXIp
OworCisgICAgICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7CisgICAgICAgICAgICBFbXB0eS5w
cm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOworICAgICAgICAgICAgYm91bmQucHJvdG90eXBl
ID0gbmV3IEVtcHR5KCk7CisgICAgICAgICAgICAvLyBDbGVhbiB1cCBkYW5nbGluZyByZWZlcmVu
Y2VzLgorICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFRPRE8KKyAgICAgICAgLy8gMTguIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50
ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0cnVlLgorCisgICAgICAgIC8vIFRPRE8KKyAgICAgICAg
Ly8gMTkuIExldCB0aHJvd2VyIGJlIHRoZSBbW1Rocm93VHlwZUVycm9yXV0gZnVuY3Rpb24gT2Jq
ZWN0ICgxMy4yLjMpLgorICAgICAgICAvLyAyMC4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCBvZiBGIHdpdGgKKyAgICAgICAgLy8gICBhcmd1bWVudHMgImNh
bGxlciIsIFByb3BlcnR5RGVzY3JpcHRvciB7W1tHZXRdXTogdGhyb3dlciwgW1tTZXRdXToKKyAg
ICAgICAgLy8gICB0aHJvd2VyLCBbW0VudW1lcmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxl
XV06IGZhbHNlfSwgYW5kCisgICAgICAgIC8vICAgZmFsc2UuCisgICAgICAgIC8vIDIxLiBDYWxs
IHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aAorICAg
ICAgICAvLyAgIGFyZ3VtZW50cyAiYXJndW1lbnRzIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dl
dF1dOiB0aHJvd2VyLAorICAgICAgICAvLyAgIFtbU2V0XV06IHRocm93ZXIsIFtbRW51bWVyYWJs
ZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LAorICAgICAgICAvLyAgIGFuZCBm
YWxzZS4KKworICAgICAgICAvLyBUT0RPCisgICAgICAgIC8vIE5PVEUgRnVuY3Rpb24gb2JqZWN0
cyBjcmVhdGVkIHVzaW5nIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGRvIG5vdAorICAgICAgICAv
LyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5IG9yIHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJh
bWV0ZXJzXV0sIGFuZAorICAgICAgICAvLyBbW1Njb3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy4K
KyAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0ZSBwcm90b3R5cGUgaW4gcHVyZS1qcy4KKworICAg
ICAgICAvLyAyMi4gUmV0dXJuIEYuCisgICAgICAgIHJldHVybiBib3VuZDsKKyAgICB9OworfQor
CisvLyBTaG9ydGN1dCB0byBhbiBvZnRlbiBhY2Nlc3NlZCBwcm9wZXJ0aWVzLCBpbiBvcmRlciB0
byBhdm9pZCBtdWx0aXBsZQorLy8gZGVyZWZlcmVuY2UgdGhhdCBjb3N0cyB1bml2ZXJzYWxseS4K
Ky8vIF9QbGVhc2Ugbm90ZTogU2hvcnRjdXRzIGFyZSBkZWZpbmVkIGFmdGVyIGBGdW5jdGlvbi5w
cm90b3R5cGUuYmluZGAgYXMgd2UKKy8vIHVzIGl0IGluIGRlZmluaW5nIHNob3J0Y3V0cy4KK3Zh
ciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7Cit2YXIgcHJvdG90eXBlT2ZBcnJheSA9
IEFycmF5LnByb3RvdHlwZTsKK3ZhciBwcm90b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5
cGU7Cit2YXIgX0FycmF5X3NsaWNlXyA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7CisvLyBIYXZp
bmcgYSB0b1N0cmluZyBsb2NhbCB2YXJpYWJsZSBuYW1lIGJyZWFrcyBpbiBPcGVyYSBzbyB1c2Ug
X3RvU3RyaW5nLgordmFyIF90b1N0cmluZyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50
b1N0cmluZyk7Cit2YXIgb3ducyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5oYXNPd25Q
cm9wZXJ0eSk7CisKKy8vIElmIEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvcnMgY3JlYXRpbmcg
c2hvcnRjdXRzLgordmFyIGRlZmluZUdldHRlcjsKK3ZhciBkZWZpbmVTZXR0ZXI7Cit2YXIgbG9v
a3VwR2V0dGVyOwordmFyIGxvb2t1cFNldHRlcjsKK3ZhciBzdXBwb3J0c0FjY2Vzc29yczsKK2lm
ICgoc3VwcG9ydHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVH
ZXR0ZXJfXyIpKSkgeworICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9i
amVjdC5fX2RlZmluZUdldHRlcl9fKTsKKyAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJv
dG90eXBlT2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7CisgICAgbG9va3VwR2V0dGVyID0gY2Fs
bC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOworICAgIGxvb2t1cFNl
dHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKK30K
KworLy8KKy8vIEFycmF5CisvLyA9PT09PQorLy8KKworLy8gRVM1IDE1LjQuNC4xMgorLy8gaHR0
cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjEyCisvLyBEZWZhdWx0IHZhbHVlIGZvciBzZWNv
bmQgcGFyYW0KKy8vIFtidWdmaXgsIGllbHQ5LCBvbGQgYnJvd3NlcnNdCisvLyBJRSA8IDkgYnVn
OiBbMSwyXS5zcGxpY2UoMCkuam9pbigiIikgPT0gIiIgYnV0IHNob3VsZCBiZSAiMTIiCitpZiAo
WzEsMl0uc3BsaWNlKDApLmxlbmd0aCAhPSAyKSB7CisgICAgdmFyIGFycmF5X3NwbGljZSA9IEFy
cmF5LnByb3RvdHlwZS5zcGxpY2U7CisgICAgdmFyIGFycmF5X3B1c2ggPSBBcnJheS5wcm90b3R5
cGUucHVzaDsKKyAgICB2YXIgYXJyYXlfdW5zaGlmdCA9IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0
OworCisgICAgaWYgKGZ1bmN0aW9uKCkgeyAvLyB0ZXN0IElFIDwgOSB0byBzcGxpY2UgYnVnIC0g
c2VlIGlzc3VlICMxMzgKKyAgICAgICAgZnVuY3Rpb24gbWFrZUFycmF5KGwpIHsKKyAgICAgICAg
ICAgIHZhciBhID0gW107CisgICAgICAgICAgICB3aGlsZSAobC0tKSB7CisgICAgICAgICAgICAg
ICAgYS51bnNoaWZ0KGwpCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYQorICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGFycmF5ID0gW10KKyAgICAgICAgICAgICwgbGVuZ3RoQmVm
b3JlCisgICAgICAgIDsKKworICAgICAgICBhcnJheS5zcGxpY2UuYmluZChhcnJheSwgMCwgMCku
YXBwbHkobnVsbCwgbWFrZUFycmF5KDIwKSk7CisgICAgICAgIGFycmF5LnNwbGljZS5iaW5kKGFy
cmF5LCAwLCAwKS5hcHBseShudWxsLCBtYWtlQXJyYXkoMjYpKTsKKworICAgICAgICBsZW5ndGhC
ZWZvcmUgPSBhcnJheS5sZW5ndGg7IC8vMjAKKyAgICAgICAgYXJyYXkuc3BsaWNlKDUsIDAsICJY
WFgiKTsgLy8gYWRkIG9uZSBlbGVtZW50CisKKyAgICAgICAgaWYgKGxlbmd0aEJlZm9yZSArIDEg
PT0gYXJyYXkubGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMgcmlnaHQg
c3BsaWNlIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgYnVncworICAgICAgICB9CisgICAgICAgIC8v
IGVsc2UgeworICAgICAgICAvLyAgICBJRTggYnVnCisgICAgICAgIC8vIH0KKyAgICB9KCkpIHsv
L0lFIDYvNworICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24oc3RhcnQs
IGRlbGV0ZUNvdW50KSB7CisgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHJldHVybiBhcnJheV9zcGxpY2UuYXBwbHkodGhpcywgWworICAgICAgICAgICAgICAg
ICAgICBzdGFydCA9PT0gdm9pZCAwID8gMCA6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICBk
ZWxldGVDb3VudCA9PT0gdm9pZCAwID8gKHRoaXMubGVuZ3RoIC0gc3RhcnQpIDogZGVsZXRlQ291
bnQKKyAgICAgICAgICAgICAgICBdLmNvbmNhdChfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRz
LCAyKSkpCisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIGVsc2Ugey8vSUU4
CisgICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFydCwgZGVsZXRl
Q291bnQpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQKKyAgICAgICAgICAgICAgICAsIGFyZ3Mg
PSBfQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRzLCAyKQorICAgICAgICAgICAgICAgICwgYWRk
RWxlbWVudHNDb3VudCA9IGFyZ3MubGVuZ3RoCisgICAgICAgICAgICA7CisKKyAgICAgICAgICAg
IGlmICghYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBbXTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSB2b2lkIDApIHsgLy8gZGVm
YXVsdAorICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChkZWxldGVDb3VudCA9PT0gdm9pZCAwKSB7IC8vIGRlZmF1bHQKKyAgICAgICAgICAg
ICAgICBkZWxldGVDb3VudCA9IHRoaXMubGVuZ3RoIC0gc3RhcnQ7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChhZGRFbGVtZW50c0NvdW50ID4gMCkgeworICAgICAgICAgICAgICAg
IGlmIChkZWxldGVDb3VudCA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA9
PSB0aGlzLmxlbmd0aCkgeyAvLyB0aW55IG9wdGltaXNhdGlvbiAjMQorICAgICAgICAgICAgICAg
ICAgICAgICAgYXJyYXlfcHVzaC5hcHBseSh0aGlzLCBhcmdzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGFydCA9PSAwKSB7IC8vIHRpbnkgb3B0aW1pc2F0aW9uICMyCisgICAgICAg
ICAgICAgICAgICAgICAgICBhcnJheV91bnNoaWZ0LmFwcGx5KHRoaXMsIGFyZ3MpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQXJyYXkucHJvdG90eXBlLnNwbGlj
ZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9BcnJheV9zbGljZV8u
Y2FsbCh0aGlzLCBzdGFydCwgc3RhcnQgKyBkZWxldGVDb3VudCk7Ly8gZGVsZXRlIHBhcnQKKyAg
ICAgICAgICAgICAgICBhcmdzLnB1c2guYXBwbHkoYXJncywgX0FycmF5X3NsaWNlXy5jYWxsKHRo
aXMsIHN0YXJ0ICsgZGVsZXRlQ291bnQsIHRoaXMubGVuZ3RoKSk7Ly8gcmlnaHQgcGFydAorICAg
ICAgICAgICAgICAgIGFyZ3MudW5zaGlmdC5hcHBseShhcmdzLCBfQXJyYXlfc2xpY2VfLmNhbGwo
dGhpcywgMCwgc3RhcnQpKTsvLyBsZWZ0IHBhcnQKKworICAgICAgICAgICAgICAgIC8vIGRlbGV0
ZSBhbGwgaXRlbXMgZnJvbSB0aGlzIGFycmF5IGFuZCByZXBsYWNlIGl0IHRvICdsZWZ0IHBhcnQn
ICsgX0FycmF5X3NsaWNlXy5jYWxsKGFyZ3VtZW50cywgMikgKyAncmlnaHQgcGFydCcKKyAgICAg
ICAgICAgICAgICBhcmdzLnVuc2hpZnQoMCwgdGhpcy5sZW5ndGgpOworCisgICAgICAgICAgICAg
ICAgYXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsIGFyZ3MpOworCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGFycmF5X3Nw
bGljZS5jYWxsKHRoaXMsIHN0YXJ0LCBkZWxldGVDb3VudCk7CisgICAgICAgIH0KKworICAgIH0K
K30KKworLy8gRVM1IDE1LjQuNC4xMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40
LjEzCisvLyBSZXR1cm4gbGVuK2FyZ0NvdW50LgorLy8gW2J1Z2ZpeCwgaWVsdDhdCisvLyBJRSA8
IDggYnVnOiBbXS51bnNoaWZ0KDApID09IHVuZGVmaW5lZCBidXQgc2hvdWxkIGJlICIxIgoraWYg
KFtdLnVuc2hpZnQoMCkgIT0gMSkgeworICAgIHZhciBhcnJheV91bnNoaWZ0ID0gQXJyYXkucHJv
dG90eXBlLnVuc2hpZnQ7CisgICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgYXJyYXlfdW5zaGlmdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAg
ICByZXR1cm4gdGhpcy5sZW5ndGg7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuMy4yCisvLyBo
dHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjMuMgorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNB
cnJheQoraWYgKCFBcnJheS5pc0FycmF5KSB7CisgICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9u
IGlzQXJyYXkob2JqKSB7CisgICAgICAgIHJldHVybiBfdG9TdHJpbmcob2JqKSA9PSAiW29iamVj
dCBBcnJheV0iOworICAgIH07Cit9CisKKy8vIFRoZSBJc0NhbGxhYmxlKCkgY2hlY2sgaW4gdGhl
IEFycmF5IGZ1bmN0aW9ucworLy8gaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIHN0cmljdCBjaGVj
ayBvbiB0aGUKKy8vIGludGVybmFsIGNsYXNzIG9mIHRoZSBvYmplY3QgdG8gdHJhcCBjYXNlcyB3
aGVyZQorLy8gdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdhcyBhY3R1YWxseSBhIHJlZ3VsYXIKKy8v
IGV4cHJlc3Npb24gbGl0ZXJhbCwgd2hpY2ggaW4gVjggYW5kCisvLyBKYXZhU2NyaXB0Q29yZSBp
cyBhIHR5cGVvZiAiZnVuY3Rpb24iLiAgT25seSBpbgorLy8gVjggYXJlIHJlZ3VsYXIgZXhwcmVz
c2lvbiBsaXRlcmFscyBwZXJtaXR0ZWQgYXMKKy8vIHJlZHVjZSBwYXJhbWV0ZXJzLCBzbyBpdCBp
cyBkZXNpcmFibGUgaW4gdGhlCisvLyBnZW5lcmFsIGNhc2UgZm9yIHRoZSBzaGltIHRvIG1hdGNo
IHRoZSBtb3JlCisvLyBzdHJpY3QgYW5kIGNvbW1vbiBiZWhhdmlvciBvZiByZWplY3RpbmcgcmVn
dWxhcgorLy8gZXhwcmVzc2lvbnMuCisKKy8vIEVTNSAxNS40LjQuMTgKKy8vIGh0dHA6Ly9lczUu
Z2l0aHViLmNvbS8jeDE1LjQuNC4xOAorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcv
ZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvYXJyYXkvZm9yRWFjaAorCisv
LyBDaGVjayBmYWlsdXJlIG9mIGJ5LWluZGV4IGFjY2VzcyBvZiBzdHJpbmcgY2hhcmFjdGVycyAo
SUUgPCA5KQorLy8gYW5kIGZhaWx1cmUgb2YgYDAgaW4gYm94ZWRTdHJpbmdgIChSaGlubykKK3Zh
ciBib3hlZFN0cmluZyA9IE9iamVjdCgiYSIpLAorICAgIHNwbGl0U3RyaW5nID0gYm94ZWRTdHJp
bmdbMF0gIT0gImEiIHx8ICEoMCBpbiBib3hlZFN0cmluZyk7CisvLyBDaGVjayBub2RlIDAuNi4y
MSBidWcgd2hlcmUgdGhpcmQgcGFyYW1ldGVyIGlzIG5vdCBib3hlZAordmFyIGJveGVkRm9yRWFj
aCA9IHRydWU7CitpZiAoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKKyAgICBBcnJheS5wcm90
b3R5cGUuZm9yRWFjaC5jYWxsKCJmb28iLCBmdW5jdGlvbihpdGVtLCBpLCBvYmopIHsKKyAgICAg
ICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSBib3hlZEZvckVhY2ggPSBmYWxzZTsKKyAg
ICB9KTsKK30KKworaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCB8fCAhYm94ZWRGb3JFYWNo
KSB7CisgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAv
KiwgdGhpc3AqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAg
ICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0
IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAg
ICAgICAgb2JqZWN0LAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV0sCisgICAgICAg
ICAgICBpID0gLTEsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKwor
ICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3Qg
YSBjYWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmpl
Y3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBU
T0RPIG1lc3NhZ2UKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHsK
KyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZva2Ug
dGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggY2FsbCwgcGFzc2luZyBhcmd1bWVudHM6CisgICAg
ICAgICAgICAgICAgLy8gY29udGV4dCwgcHJvcGVydHkgdmFsdWUsIHByb3BlcnR5IGtleSwgdGhp
c0FyZyBvYmplY3QKKyAgICAgICAgICAgICAgICAvLyBjb250ZXh0CisgICAgICAgICAgICAgICAg
ZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjE5CisvLyBodHRwOi8vZXM1LmdpdGh1
Yi5jb20vI3gxNS40LjQuMTkKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0Nv
cmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvbWFwCitpZiAoIUFycmF5
LnByb3RvdHlwZS5tYXApIHsKKyAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFw
KGZ1biAvKiwgdGhpc3AqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyks
CisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJb
b2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAg
ICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+
IDAsCisgICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAorICAgICAgICAgICAgdGhp
c3AgPSBhcmd1bWVudHNbMV07CisKKyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24g
b3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90
b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
aWYgKGkgaW4gc2VsZikKKyAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBmdW4uY2FsbCh0aGlz
cCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMjAKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNv
bS8jeDE1LjQuNC4yMAorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9K
YXZhU2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9maWx0ZXIKK2lmICghQXJyYXku
cHJvdG90eXBlLmZpbHRlcikgeworICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlv
biBmaWx0ZXIoZnVuIC8qLCB0aGlzcCAqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmpl
Y3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRo
aXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIi
KSA6CisgICAgICAgICAgICAgICAgICAgIG9iamVjdCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNl
bGYubGVuZ3RoID4+PiAwLAorICAgICAgICAgICAgcmVzdWx0ID0gW10sCisgICAgICAgICAgICB2
YWx1ZSwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworCisgICAgICAgIC8vIElm
IG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1
bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0i
KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVu
Y3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IHNlbGZbaV07CisgICAgICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1
ZSwgaSwgb2JqZWN0KSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4xNgorLy8gaHR0cDovL2Vz
NS5naXRodWIuY29tLyN4MTUuNC40LjE2CisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9y
Zy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9ldmVyeQoraWYg
KCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBm
dW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0
b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJp
bmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3Bs
aXQoIiIpIDoKKyAgICAgICAgICAgICAgICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBz
ZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworCisg
ICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBh
IGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVj
dCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIg
aXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgIWZ1bi5j
YWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMTcKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8j
eDE1LjQuNC4xNworLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlw
dC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvc29tZQoraWYgKCFBcnJheS5wcm90b3R5
cGUuc29tZSkgeworICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4g
LyosIHRoaXNwICovKSB7CisgICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKKyAg
ICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmpl
Y3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAg
ICAgICAgICBvYmplY3QsCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwK
KyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOworCisgICAgICAgIC8vIElmIG5vIGNh
bGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9u
CisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7Cisg
ICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24i
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0s
IGksIG9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKK30KKworLy8gRVM1
IDE1LjQuNC4yMQorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIxCisvLyBodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5j
ZS9PYmplY3RzL0FycmF5L3JlZHVjZQoraWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7Cisg
ICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRp
YWwqLykgeworICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAg
ICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmlu
Z10iID8KKyAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAg
b2JqZWN0LAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAg
ICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2Fs
bGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1
bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBu
b3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gbm8gdmFsdWUgdG8gcmV0
dXJuIGlmIG5vIGluaXRpYWwgdmFsdWUgYW5kIGFuIGVtcHR5IGFycmF5CisgICAgICAgIGlmICgh
bGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIp
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICB2YXIgcmVzdWx0Owor
ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CisgICAgICAgICAgICByZXN1bHQg
PSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkbyB7CisgICAg
ICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBzZWxmW2krK107CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIGlmIGFycmF5IGNvbnRhaW5zIG5vIHZhbHVlcywgbm8g
aW5pdGlhbCB2YWx1ZSB0byByZXR1cm4KKyAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0
aCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2Yg
ZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9i
amVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMjIKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNv
bS8jeDE1LjQuNC4yMgorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9K
YXZhU2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9yZWR1Y2VSaWdodAoraWYgKCFB
cnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpIHsKKyAgICBBcnJheS5wcm90b3R5cGUucmVkdWNl
UmlnaHQgPSBmdW5jdGlvbiByZWR1Y2VSaWdodChmdW4gLyosIGluaXRpYWwqLykgeworICAgICAg
ICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBzZWxmID0gc3BsaXRT
dHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KKyAgICAgICAg
ICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CisgICAgICAgICAgICAgICAgb2JqZWN0LAorICAgICAg
ICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgLy8gSWYgbm8gY2Fs
bGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24K
KyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAg
ICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gbm8gdmFsdWUgdG8gcmV0dXJuIGlmIG5vIGluaXRp
YWwgdmFsdWUsIGVtcHR5IGFycmF5CisgICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5s
ZW5ndGggPT0gMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmln
aHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgcmVzdWx0LCBpID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPj0gMikgeworICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChpIGlu
IHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0
dXJuCisgICAgICAgICAgICAgICAgaWYgKC0taSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBp
bml0aWFsIHZhbHVlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAo
dHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAo
aSBpbiB0aGlzKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCBy
ZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hp
bGUgKGktLSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQorCisvLyBFUzUg
MTUuNC40LjE0CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTQKKy8vIGh0dHBz
Oi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9P
YmplY3RzL0FycmF5L2luZGV4T2YKK2lmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKFsw
LCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkgeworICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9m
ID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHsKKyAgICAgICAg
dmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3Ry
aW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAgICAgICAgICAg
ICB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAw
OworCisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID4gMSkgeworICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1bWVudHNbMV0pOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMKKyAgICAgICAgaSA9IGkg
Pj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsKKyAgICAgICAgZm9yICg7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBz
b3VnaHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4xNQor
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE1CisvLyBodHRwczovL2RldmVsb3Bl
ci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJh
eS9sYXN0SW5kZXhPZgoraWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgfHwgKFswLCAx
XS5sYXN0SW5kZXhPZigwLCAtMykgIT0gLTEpKSB7CisgICAgQXJyYXkucHJvdG90eXBlLmxhc3RJ
bmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8pIHsK
KyAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltv
YmplY3QgU3RyaW5nXSIgPworICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKKyAgICAg
ICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVu
Z3RoID4+PiAwOworCisgICAgICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGkgPSBsZW5ndGggLSAxOworICAgICAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0lu
dGVnZXIoYXJndW1lbnRzWzFdKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gaGFuZGxlIG5lZ2F0
aXZlIGluZGljZXMKKyAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhp
KTsKKyAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBz
ZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9OworfQor
CisvLworLy8gT2JqZWN0CisvLyA9PT09PT0KKy8vCisKKy8vIEVTNSAxNS4yLjMuMTQKKy8vIGh0
dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4xNAoraWYgKCFPYmplY3Qua2V5cykgeworICAg
IC8vIGh0dHA6Ly93aGF0dGhlaGVhZHNhaWQuY29tLzIwMTAvMTAvYS1zYWZlci1vYmplY3Qta2V5
cy1jb21wYXRpYmlsaXR5LWltcGxlbWVudGF0aW9uCisgICAgdmFyIGhhc0RvbnRFbnVtQnVnID0g
dHJ1ZSwKKyAgICAgICAgZG9udEVudW1zID0gWworICAgICAgICAgICAgInRvU3RyaW5nIiwKKyAg
ICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIsCisgICAgICAgICAgICAidmFsdWVPZiIsCisgICAg
ICAgICAgICAiaGFzT3duUHJvcGVydHkiLAorICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAor
ICAgICAgICAgICAgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwKKyAgICAgICAgICAgICJjb25zdHJ1
Y3RvciIKKyAgICAgICAgXSwKKyAgICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxl
bmd0aDsKKworICAgIGZvciAodmFyIGtleSBpbiB7InRvU3RyaW5nIjogbnVsbH0pIHsKKyAgICAg
ICAgaGFzRG9udEVudW1CdWcgPSBmYWxzZTsKKyAgICB9CisKKyAgICBPYmplY3Qua2V5cyA9IGZ1
bmN0aW9uIGtleXMob2JqZWN0KSB7CisKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgKHR5cGVv
ZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fAor
ICAgICAgICAgICAgb2JqZWN0ID09PSBudWxsCisgICAgICAgICkgeworICAgICAgICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIGtleXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbmFt
ZSBpbiBvYmplY3QpIHsKKyAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgbmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICBrZXlzLnB1c2gobmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaGFzRG9udEVudW1CdWcpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwLCBpaSA9IGRvbnRFbnVtc0xlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZG9udEVudW0gPSBkb250RW51bXNbaV07CisgICAgICAgICAgICAgICAgaWYgKG93bnMo
b2JqZWN0LCBkb250RW51bSkpIHsKKyAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRvbnRF
bnVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGtleXM7CisgICAgfTsKKworfQorCisvLworLy8gRGF0ZQorLy8gPT09PQorLy8K
KworLy8gRVM1IDE1LjkuNS40MworLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS41LjQz
CisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBTdHJpbmcgdmFsdWUgcmVwcmVzZW50IHRoZSBp
bnN0YW5jZSBpbiB0aW1lCisvLyByZXByZXNlbnRlZCBieSB0aGlzIERhdGUgb2JqZWN0LiBUaGUg
Zm9ybWF0IG9mIHRoZSBTdHJpbmcgaXMgdGhlIERhdGUgVGltZQorLy8gc3RyaW5nIGZvcm1hdCBk
ZWZpbmVkIGluIDE1LjkuMS4xNS4gQWxsIGZpZWxkcyBhcmUgcHJlc2VudCBpbiB0aGUgU3RyaW5n
LgorLy8gVGhlIHRpbWUgem9uZSBpcyBhbHdheXMgVVRDLCBkZW5vdGVkIGJ5IHRoZSBzdWZmaXgg
Wi4gSWYgdGhlIHRpbWUgdmFsdWUgb2YKKy8vIHRoaXMgb2JqZWN0IGlzIG5vdCBhIGZpbml0ZSBO
dW1iZXIgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24uCit2YXIgbmVnYXRpdmVEYXRl
ID0gLTYyMTk4NzU1MjAwMDAwLAorICAgIG5lZ2F0aXZlWWVhclN0cmluZyA9ICItMDAwMDAxIjsK
K2lmICgKKyAgICAhRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgfHwKKyAgICAobmV3IERhdGUo
bmVnYXRpdmVEYXRlKS50b0lTT1N0cmluZygpLmluZGV4T2YobmVnYXRpdmVZZWFyU3RyaW5nKSA9
PT0gLTEpCispIHsKKyAgICBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyA9IGZ1bmN0aW9uIHRv
SVNPU3RyaW5nKCkgeworICAgICAgICB2YXIgcmVzdWx0LCBsZW5ndGgsIHZhbHVlLCB5ZWFyLCBt
b250aDsKKyAgICAgICAgaWYgKCFpc0Zpbml0ZSh0aGlzKSkgeworICAgICAgICAgICAgdGhyb3cg
bmV3IFJhbmdlRXJyb3IoIkRhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nIGNhbGxlZCBvbiBub24t
ZmluaXRlIHZhbHVlLiIpOworICAgICAgICB9CisKKyAgICAgICAgeWVhciA9IHRoaXMuZ2V0VVRD
RnVsbFllYXIoKTsKKworICAgICAgICBtb250aCA9IHRoaXMuZ2V0VVRDTW9udGgoKTsKKyAgICAg
ICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTEx
CisgICAgICAgIHllYXIgKz0gTWF0aC5mbG9vcihtb250aCAvIDEyKTsKKyAgICAgICAgbW9udGgg
PSAobW9udGggJSAxMiArIDEyKSAlIDEyOworCisgICAgICAgIC8vIHRoZSBkYXRlIHRpbWUgc3Ry
aW5nIGZvcm1hdCBpcyBzcGVjaWZpZWQgaW4gMTUuOS4xLjE1LgorICAgICAgICByZXN1bHQgPSBb
bW9udGggKyAxLCB0aGlzLmdldFVUQ0RhdGUoKSwKKyAgICAgICAgICAgIHRoaXMuZ2V0VVRDSG91
cnMoKSwgdGhpcy5nZXRVVENNaW51dGVzKCksIHRoaXMuZ2V0VVRDU2Vjb25kcygpXTsKKyAgICAg
ICAgeWVhciA9ICgKKyAgICAgICAgICAgICh5ZWFyIDwgMCA/ICItIiA6ICh5ZWFyID4gOTk5OSA/
ICIrIiA6ICIiKSkgKworICAgICAgICAgICAgKCIwMDAwMCIgKyBNYXRoLmFicyh5ZWFyKSkKKyAg
ICAgICAgICAgIC5zbGljZSgwIDw9IHllYXIgJiYgeWVhciA8PSA5OTk5ID8gLTQgOiAtNikKKyAg
ICAgICAgKTsKKworICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoOworICAgICAgICB3aGls
ZSAobGVuZ3RoLS0pIHsKKyAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0W2xlbmd0aF07CisgICAg
ICAgICAgICAvLyBwYWQgbW9udGhzLCBkYXlzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMg
dG8gaGF2ZSB0d28KKyAgICAgICAgICAgIC8vIGRpZ2l0cy4KKyAgICAgICAgICAgIGlmICh2YWx1
ZSA8IDEwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSAiMCIgKyB2YWx1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBwYWQgbWlsbGlzZWNvbmRzIHRv
IGhhdmUgdGhyZWUgZGlnaXRzLgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgeWVhciAr
ICItIiArIHJlc3VsdC5zbGljZSgwLCAyKS5qb2luKCItIikgKworICAgICAgICAgICAgIlQiICsg
cmVzdWx0LnNsaWNlKDIpLmpvaW4oIjoiKSArICIuIiArCisgICAgICAgICAgICAoIjAwMCIgKyB0
aGlzLmdldFVUQ01pbGxpc2Vjb25kcygpKS5zbGljZSgtMykgKyAiWiIKKyAgICAgICAgKTsKKyAg
ICB9OworfQorCisKKy8vIEVTNSAxNS45LjUuNDQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8j
eDE1LjkuNS40NAorLy8gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIFN0cmluZyByZXByZXNlbnRh
dGlvbiBvZiBhIERhdGUgb2JqZWN0IGZvciB1c2UgYnkKKy8vIEpTT04uc3RyaW5naWZ5ICgxNS4x
Mi4zKS4KK3ZhciBkYXRlVG9KU09OSXNTdXBwb3J0ZWQgPSBmYWxzZTsKK3RyeSB7CisgICAgZGF0
ZVRvSlNPTklzU3VwcG9ydGVkID0gKAorICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pTT04gJiYK
KyAgICAgICAgbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbCAmJgorICAgICAgICBuZXcg
RGF0ZShuZWdhdGl2ZURhdGUpLnRvSlNPTigpLmluZGV4T2YobmVnYXRpdmVZZWFyU3RyaW5nKSAh
PT0gLTEgJiYKKyAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyAvLyBnZW5lcmlj
CisgICAgICAgICAgICB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9KQorICAgICk7Cit9IGNhdGNo
IChlKSB7Cit9CitpZiAoIWRhdGVUb0pTT05Jc1N1cHBvcnRlZCkgeworICAgIERhdGUucHJvdG90
eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUg
dG9KU09OIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudCBrZXksIHRoZSBmb2xsb3dpbmcK
KyAgICAgICAgLy8gc3RlcHMgYXJlIHRha2VuOgorCisgICAgICAgIC8vIDEuICBMZXQgTyBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3QsIGdpdmluZyBpdCB0aGUgdGhpcworICAgICAg
ICAvLyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCisgICAgICAgIC8vIDIuIExldCB0diBiZSB0b1By
aW1pdGl2ZShPLCBoaW50IE51bWJlcikuCisgICAgICAgIHZhciBvID0gT2JqZWN0KHRoaXMpLAor
ICAgICAgICAgICAgdHYgPSB0b1ByaW1pdGl2ZShvKSwKKyAgICAgICAgICAgIHRvSVNPOworICAg
ICAgICAvLyAzLiBJZiB0diBpcyBhIE51bWJlciBhbmQgaXMgbm90IGZpbml0ZSwgcmV0dXJuIG51
bGwuCisgICAgICAgIGlmICh0eXBlb2YgdHYgPT09ICJudW1iZXIiICYmICFpc0Zpbml0ZSh0dikp
IHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIC8vIDQuIExl
dCB0b0lTTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0
aG9kIG9mCisgICAgICAgIC8vIE8gd2l0aCBhcmd1bWVudCAidG9JU09TdHJpbmciLgorICAgICAg
ICB0b0lTTyA9IG8udG9JU09TdHJpbmc7CisgICAgICAgIC8vIDUuIElmIElzQ2FsbGFibGUodG9J
U08pIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCisgICAgICAgIGlmICh0
eXBlb2YgdG9JU08gIT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcigidG9JU09TdHJpbmcgcHJvcGVydHkgaXMgbm90IGNhbGxhYmxlIik7CisgICAgICAgIH0K
KyAgICAgICAgLy8gNi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0g
aW50ZXJuYWwgbWV0aG9kIG9mCisgICAgICAgIC8vICB0b0lTTyB3aXRoIE8gYXMgdGhlIHRoaXMg
dmFsdWUgYW5kIGFuIGVtcHR5IGFyZ3VtZW50IGxpc3QuCisgICAgICAgIHJldHVybiB0b0lTTy5j
YWxsKG8pOworCisgICAgICAgIC8vIE5PVEUgMSBUaGUgYXJndW1lbnQgaXMgaWdub3JlZC4KKwor
ICAgICAgICAvLyBOT1RFIDIgVGhlIHRvSlNPTiBmdW5jdGlvbiBpcyBpbnRlbnRpb25hbGx5IGdl
bmVyaWM7IGl0IGRvZXMgbm90CisgICAgICAgIC8vIHJlcXVpcmUgdGhhdCBpdHMgdGhpcyB2YWx1
ZSBiZSBhIERhdGUgb2JqZWN0LiBUaGVyZWZvcmUsIGl0IGNhbiBiZQorICAgICAgICAvLyB0cmFu
c2ZlcnJlZCB0byBvdGhlciBraW5kcyBvZiBvYmplY3RzIGZvciB1c2UgYXMgYSBtZXRob2QuIEhv
d2V2ZXIsCisgICAgICAgIC8vIGl0IGRvZXMgcmVxdWlyZSB0aGF0IGFueSBzdWNoIG9iamVjdCBo
YXZlIGEgdG9JU09TdHJpbmcgbWV0aG9kLiBBbgorICAgICAgICAvLyBvYmplY3QgaXMgZnJlZSB0
byB1c2UgdGhlIGFyZ3VtZW50IGtleSB0byBmaWx0ZXIgaXRzCisgICAgICAgIC8vIHN0cmluZ2lm
aWNhdGlvbi4KKyAgICB9OworfQorCisvLyBFUzUgMTUuOS40LjIKKy8vIGh0dHA6Ly9lczUuZ2l0
aHViLmNvbS8jeDE1LjkuNC4yCisvLyBiYXNlZCBvbiB3b3JrIHNoYXJlZCBieSBEYW5pZWwgRnJp
ZXNlbiAoZGFudG1hbikKKy8vIGh0dHA6Ly9naXN0LmdpdGh1Yi5jb20vMzAzMjQ5CitpZiAoIURh
dGUucGFyc2UgfHwgIkRhdGUucGFyc2UgaXMgYnVnZ3kiKSB7CisgICAgLy8gWFhYIGdsb2JhbCBh
c3NpZ25tZW50IHdvbid0IHdvcmsgaW4gZW1iZWRkaW5ncyB0aGF0IHVzZQorICAgIC8vIGFuIGFs
dGVybmF0ZSBvYmplY3QgZm9yIHRoZSBjb250ZXh0LgorICAgIERhdGUgPSAoZnVuY3Rpb24oTmF0
aXZlRGF0ZSkgeworCisgICAgICAgIC8vIERhdGUubGVuZ3RoID09PSA3CisgICAgICAgIGZ1bmN0
aW9uIERhdGUoWSwgTSwgRCwgaCwgbSwgcywgbXMpIHsKKyAgICAgICAgICAgIHZhciBsZW5ndGgg
PSBhcmd1bWVudHMubGVuZ3RoOworICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBOYXRp
dmVEYXRlKSB7CisgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBsZW5ndGggPT0gMSAmJiBTdHJp
bmcoWSkgPT09IFkgPyAvLyBpc1N0cmluZyhZKQorICAgICAgICAgICAgICAgICAgICAvLyBXZSBl
eHBsaWNpdGx5IHBhc3MgaXQgdGhyb3VnaCBwYXJzZToKKyAgICAgICAgICAgICAgICAgICAgbmV3
IE5hdGl2ZURhdGUoRGF0ZS5wYXJzZShZKSkgOgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIHRvIG1hbnVhbGx5IG1ha2UgY2FsbHMgZGVwZW5kaW5nIG9uIGFyZ3VtZW50CisgICAgICAg
ICAgICAgICAgICAgIC8vIGxlbmd0aCBoZXJlCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+
PSA3ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwgbSwgcywgbXMpIDoKKyAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoID49IDYgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBoLCBtLCBzKSA6
CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA1ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwg
RCwgaCwgbSkgOgorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNCA/IG5ldyBOYXRpdmVE
YXRlKFksIE0sIEQsIGgpIDoKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDMgPyBuZXcg
TmF0aXZlRGF0ZShZLCBNLCBEKSA6CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSAyID8g
bmV3IE5hdGl2ZURhdGUoWSwgTSkgOgorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gMSA/
IG5ldyBOYXRpdmVEYXRlKFkpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXcgTmF0aXZlRGF0ZSgpOworICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgbWl4dXBzIHdpdGgg
dW5maXhlZCBEYXRlIG9iamVjdAorICAgICAgICAgICAgICAgIGRhdGUuY29uc3RydWN0b3IgPSBE
YXRlOworICAgICAgICAgICAgICAgIHJldHVybiBkYXRlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAg
fTsKKworICAgICAgICAvLyAxNS45LjEuMTUgRGF0ZSBUaW1lIFN0cmluZyBGb3JtYXQuCisgICAg
ICAgIHZhciBpc29EYXRlRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoIl4iICsKKyAgICAgICAgICAg
ICIoXFxkezR9fFtcK1wtXVxcZHs2fSkiICsgLy8gZm91ci1kaWdpdCB5ZWFyIGNhcHR1cmUgb3Ig
c2lnbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDYtZGlnaXQg
ZXh0ZW5kZWQgeWVhcgorICAgICAgICAgICAgIig/Oi0oXFxkezJ9KSIgKyAvLyBvcHRpb25hbCBt
b250aCBjYXB0dXJlCisgICAgICAgICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIGRh
eSBjYXB0dXJlCisgICAgICAgICAgICAiKD86IiArIC8vIGNhcHR1cmUgaG91cnM6bWludXRlczpz
ZWNvbmRzLm1pbGxpc2Vjb25kcworICAgICAgICAgICAgICAgICJUKFxcZHsyfSkiICsgLy8gaG91
cnMgY2FwdHVyZQorICAgICAgICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBjYXB0
dXJlCisgICAgICAgICAgICAgICAgIig/OiIgKyAvLyBvcHRpb25hbCA6c2Vjb25kcy5taWxsaXNl
Y29uZHMKKyAgICAgICAgICAgICAgICAgICAgIjooXFxkezJ9KSIgKyAvLyBzZWNvbmRzIGNhcHR1
cmUKKyAgICAgICAgICAgICAgICAgICAgIig/OihcXC5cXGR7MSx9KSk/IiArIC8vIG1pbGxpc2Vj
b25kcyBjYXB0dXJlCisgICAgICAgICAgICAgICAgIik/IiArCisgICAgICAgICAgICAiKCIgKyAv
LyBjYXB0dXJlIFVUQyBvZmZzZXQgY29tcG9uZW50CisgICAgICAgICAgICAgICAgIlp8IiArIC8v
IFVUQyBjYXB0dXJlCisgICAgICAgICAgICAgICAgIig/OiIgKyAvLyBvZmZzZXQgc3BlY2lmaWVy
ICsvLWhvdXJzOm1pbnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgIihbLStdKSIgKyAvLyBzaWdu
IGNhcHR1cmUKKyAgICAgICAgICAgICAgICAgICAgIihcXGR7Mn0pIiArIC8vIGhvdXJzIG9mZnNl
dCBjYXB0dXJlCisgICAgICAgICAgICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBv
ZmZzZXQgY2FwdHVyZQorICAgICAgICAgICAgICAgICIpIiArCisgICAgICAgICAgICAiKT8pPyk/
KT8iICsKKyAgICAgICAgIiQiKTsKKworICAgICAgICB2YXIgbW9udGhzID0gWworICAgICAgICAg
ICAgMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQs
IDM2NQorICAgICAgICBdOworCisgICAgICAgIGZ1bmN0aW9uIGRheUZyb21Nb250aCh5ZWFyLCBt
b250aCkgeworICAgICAgICAgICAgdmFyIHQgPSBtb250aCA+IDEgPyAxIDogMDsKKyAgICAgICAg
ICAgIHJldHVybiAoCisgICAgICAgICAgICAgICAgbW9udGhzW21vbnRoXSArCisgICAgICAgICAg
ICAgICAgTWF0aC5mbG9vcigoeWVhciAtIDE5NjkgKyB0KSAvIDQpIC0KKyAgICAgICAgICAgICAg
ICBNYXRoLmZsb29yKCh5ZWFyIC0gMTkwMSArIHQpIC8gMTAwKSArCisgICAgICAgICAgICAgICAg
TWF0aC5mbG9vcigoeWVhciAtIDE2MDEgKyB0KSAvIDQwMCkgKworICAgICAgICAgICAgICAgIDM2
NSAqICh5ZWFyIC0gMTk3MCkKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiB0b1VUQyh0KSB7CisgICAgICAgICAgICByZXR1cm4gTnVtYmVyKG5ldyBOYXRpdmVE
YXRlKDE5NzAsIDAsIDEsIDAsIDAsIDAsIHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENv
cHkgYW55IGN1c3RvbSBtZXRob2RzIGEgM3JkIHBhcnR5IGxpYnJhcnkgbWF5IGhhdmUgYWRkZWQK
KyAgICAgICAgZm9yICh2YXIga2V5IGluIE5hdGl2ZURhdGUpIHsKKyAgICAgICAgICAgIERhdGVb
a2V5XSA9IE5hdGl2ZURhdGVba2V5XTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvcHkgIm5h
dGl2ZSIgbWV0aG9kcyBleHBsaWNpdGx5OyB0aGV5IG1heSBiZSBub24tZW51bWVyYWJsZQorICAg
ICAgICBEYXRlLm5vdyA9IE5hdGl2ZURhdGUubm93OworICAgICAgICBEYXRlLlVUQyA9IE5hdGl2
ZURhdGUuVVRDOworICAgICAgICBEYXRlLnByb3RvdHlwZSA9IE5hdGl2ZURhdGUucHJvdG90eXBl
OworICAgICAgICBEYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERhdGU7CisKKyAgICAgICAg
Ly8gVXBncmFkZSBEYXRlLnBhcnNlIHRvIGhhbmRsZSBzaW1wbGlmaWVkIElTTyA4NjAxIHN0cmlu
Z3MKKyAgICAgICAgRGF0ZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHN0cmluZykgeworICAgICAg
ICAgICAgdmFyIG1hdGNoID0gaXNvRGF0ZUV4cHJlc3Npb24uZXhlYyhzdHJpbmcpOworICAgICAg
ICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgLy8gcGFyc2UgbW9udGhzLCBkYXlz
LCBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcworICAgICAgICAgICAg
ICAgIC8vIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICAg
ICAgLy8gcGFyc2UgdGhlIFVUQyBvZmZzZXQgY29tcG9uZW50CisgICAgICAgICAgICAgICAgdmFy
IHllYXIgPSBOdW1iZXIobWF0Y2hbMV0pLAorICAgICAgICAgICAgICAgICAgICBtb250aCA9IE51
bWJlcihtYXRjaFsyXSB8fCAxKSAtIDEsCisgICAgICAgICAgICAgICAgICAgIGRheSA9IE51bWJl
cihtYXRjaFszXSB8fCAxKSAtIDEsCisgICAgICAgICAgICAgICAgICAgIGhvdXIgPSBOdW1iZXIo
bWF0Y2hbNF0gfHwgMCksCisgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IE51bWJlcihtYXRj
aFs1XSB8fCAwKSwKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kID0gTnVtYmVyKG1hdGNoWzZd
IHx8IDApLAorICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZCA9IE1hdGguZmxvb3IoTnVt
YmVyKG1hdGNoWzddIHx8IDApICogMTAwMCksCisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4g
dGltZSB6b25lIGlzIG1pc3NlZCwgbG9jYWwgb2Zmc2V0IHNob3VsZCBiZSB1c2VkCisgICAgICAg
ICAgICAgICAgICAgIC8vIChFUyA1LjEgYnVnKQorICAgICAgICAgICAgICAgICAgICAvLyBzZWUg
aHR0cHM6Ly9idWdzLmVjbWFzY3JpcHQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTIKKyAgICAgICAg
ICAgICAgICAgICAgaXNMb2NhbFRpbWUgPSBCb29sZWFuKG1hdGNoWzRdICYmICFtYXRjaFs4XSks
CisgICAgICAgICAgICAgICAgICAgIHNpZ25PZmZzZXQgPSBtYXRjaFs5XSA9PT0gIi0iID8gMSA6
IC0xLAorICAgICAgICAgICAgICAgICAgICBob3VyT2Zmc2V0ID0gTnVtYmVyKG1hdGNoWzEwXSB8
fCAwKSwKKyAgICAgICAgICAgICAgICAgICAgbWludXRlT2Zmc2V0ID0gTnVtYmVyKG1hdGNoWzEx
XSB8fCAwKSwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0OworICAgICAgICAgICAgICAgIGlm
ICgKKyAgICAgICAgICAgICAgICAgICAgaG91ciA8ICgKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1pbnV0ZSA+IDAgfHwgc2Vjb25kID4gMCB8fCBtaWxsaXNlY29uZCA+IDAgPworICAgICAgICAg
ICAgICAgICAgICAgICAgMjQgOiAyNQorICAgICAgICAgICAgICAgICAgICApICYmCisgICAgICAg
ICAgICAgICAgICAgIG1pbnV0ZSA8IDYwICYmIHNlY29uZCA8IDYwICYmIG1pbGxpc2Vjb25kIDwg
MTAwMCAmJgorICAgICAgICAgICAgICAgICAgICBtb250aCA+IC0xICYmIG1vbnRoIDwgMTIgJiYg
aG91ck9mZnNldCA8IDI0ICYmCisgICAgICAgICAgICAgICAgICAgIG1pbnV0ZU9mZnNldCA8IDYw
ICYmIC8vIGRldGVjdCBpbnZhbGlkIG9mZnNldHMKKyAgICAgICAgICAgICAgICAgICAgZGF5ID4g
LTEgJiYKKyAgICAgICAgICAgICAgICAgICAgZGF5IDwgKAorICAgICAgICAgICAgICAgICAgICAg
ICAgZGF5RnJvbU1vbnRoKHllYXIsIG1vbnRoICsgMSkgLQorICAgICAgICAgICAgICAgICAgICAg
ICAgZGF5RnJvbU1vbnRoKHllYXIsIG1vbnRoKQorICAgICAgICAgICAgICAgICAgICApCisgICAg
ICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIChkYXlGcm9tTW9udGgoeWVhciwgbW9udGgpICsgZGF5KSAqIDI0ICsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgKworICAgICAgICAgICAgICAgICAgICAgICAg
aG91ck9mZnNldCAqIHNpZ25PZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgKSAqIDYwOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICAocmVz
dWx0ICsgbWludXRlICsgbWludXRlT2Zmc2V0ICogc2lnbk9mZnNldCkgKiA2MCArCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgKSAqIDEwMDAgKyBt
aWxsaXNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9jYWxUaW1lKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0b1VUQyhyZXN1bHQpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgtOC42NGUxNSA8PSByZXN1bHQgJiYg
cmVzdWx0IDw9IDguNjRlMTUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOYXRp
dmVEYXRlLnBhcnNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisKKyAgICAg
ICAgcmV0dXJuIERhdGU7CisgICAgfSkoRGF0ZSk7Cit9CisKKy8vIEVTNSAxNS45LjQuNAorLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjQKK2lmICghRGF0ZS5ub3cpIHsKKyAgICBE
YXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0
VGltZSgpOworICAgIH07Cit9CisKKworLy8KKy8vIE51bWJlcgorLy8gPT09PT09CisvLworCisv
LyBFUzUuMSAxNS43LjQuNQorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNy40LjUKK2lm
ICghTnVtYmVyLnByb3RvdHlwZS50b0ZpeGVkIHx8ICgwLjAwMDA4KS50b0ZpeGVkKDMpICE9PSAn
MC4wMDAnIHx8ICgwLjkpLnRvRml4ZWQoMCkgPT09ICcwJyB8fCAoMS4yNTUpLnRvRml4ZWQoMikg
IT09ICcxLjI1JyB8fCAoMTAwMDAwMDAwMDAwMDAwMDEyOCkudG9GaXhlZCgwKSAhPT0gIjEwMDAw
MDAwMDAwMDAwMDAxMjgiKSB7CisgICAgLy8gSGlkZSB0aGVzZSB2YXJpYWJsZXMgYW5kIGZ1bmN0
aW9ucworICAgIChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBiYXNlLCBzaXplLCBkYXRhLCBp
OworCisgICAgICAgIGJhc2UgPSAxZTc7CisgICAgICAgIHNpemUgPSA2OworICAgICAgICBkYXRh
ID0gWzAsIDAsIDAsIDAsIDAsIDBdOworCisgICAgICAgIGZ1bmN0aW9uIG11bHRpcGx5KG4sIGMp
IHsKKyAgICAgICAgICAgIHZhciBpID0gLTE7CisgICAgICAgICAgICB3aGlsZSAoKytpIDwgc2l6
ZSkgeworICAgICAgICAgICAgICAgIGMgKz0gbiAqIGRhdGFbaV07CisgICAgICAgICAgICAgICAg
ZGF0YVtpXSA9IGMgJSBiYXNlOworICAgICAgICAgICAgICAgIGMgPSBNYXRoLmZsb29yKGMgLyBi
YXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGRpdmlk
ZShuKSB7CisgICAgICAgICAgICB2YXIgaSA9IHNpemUsIGMgPSAwOworICAgICAgICAgICAgd2hp
bGUgKC0taSA+PSAwKSB7CisgICAgICAgICAgICAgICAgYyArPSBkYXRhW2ldOworICAgICAgICAg
ICAgICAgIGRhdGFbaV0gPSBNYXRoLmZsb29yKGMgLyBuKTsKKyAgICAgICAgICAgICAgICBjID0g
KGMgJSBuKSAqIGJhc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHZhciBpID0gc2l6ZTsKKyAgICAgICAgICAg
IHZhciBzID0gJyc7CisgICAgICAgICAgICB3aGlsZSAoLS1pID49IDApIHsKKyAgICAgICAgICAg
ICAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pOworICAgICAgICAgICAgICAgICAg
ICBpZiAocyA9PT0gJycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0OworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcyArPSAnMDAw
MDAwMCcuc2xpY2UoMCwgNyAtIHQubGVuZ3RoKSArIHQ7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gczsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBvdyh4LCBuLCBhY2MpIHsKKyAgICAgICAg
ICAgIHJldHVybiAobiA9PT0gMCA/IGFjYyA6IChuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwg
YWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpKSk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBsb2coeCkgeworICAgICAgICAgICAgdmFyIG4gPSAwOworICAgICAgICAgICAg
d2hpbGUgKHggPj0gNDA5NikgeworICAgICAgICAgICAgICAgIG4gKz0gMTI7CisgICAgICAgICAg
ICAgICAgeCAvPSA0MDk2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKHggPj0g
MikgeworICAgICAgICAgICAgICAgIG4gKz0gMTsKKyAgICAgICAgICAgICAgICB4IC89IDI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgfQorCisgICAgICAg
IE51bWJlci5wcm90b3R5cGUudG9GaXhlZCA9IGZ1bmN0aW9uIChmcmFjdGlvbkRpZ2l0cykgewor
ICAgICAgICAgICAgdmFyIGYsIHgsIHMsIG0sIGUsIHosIGosIGs7CisKKyAgICAgICAgICAgIC8v
IFRlc3QgZm9yIE5hTiBhbmQgcm91bmQgZnJhY3Rpb25EaWdpdHMgZG93bgorICAgICAgICAgICAg
ZiA9IE51bWJlcihmcmFjdGlvbkRpZ2l0cyk7CisgICAgICAgICAgICBmID0gZiAhPT0gZiA/IDAg
OiBNYXRoLmZsb29yKGYpOworCisgICAgICAgICAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk51bWJlci50b0ZpeGVkIGNhbGxl
ZCB3aXRoIGludmFsaWQgbnVtYmVyIG9mIGRlY2ltYWxzIik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHggPSBOdW1iZXIodGhpcyk7CisKKyAgICAgICAgICAgIC8vIFRlc3QgZm9yIE5h
TgorICAgICAgICAgICAgaWYgKHggIT09IHgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5h
TiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIGl0IGlzIHRvbyBiaWcgb3Ig
c21hbGwsIHJldHVybiB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBudW1iZXIKKyAgICAgICAgICAg
IGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoeCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHMgPSAiIjsKKworICAgICAg
ICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgcyA9ICItIjsKKyAgICAgICAgICAg
ICAgICB4ID0gLXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG0gPSAiMCI7CisKKyAg
ICAgICAgICAgIGlmICh4ID4gMWUtMjEpIHsKKyAgICAgICAgICAgICAgICAvLyAxZS0yMSA8IHgg
PCAxZTIxCisgICAgICAgICAgICAgICAgLy8gLTcwIDwgbG9nMih4KSA8IDcwCisgICAgICAgICAg
ICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTsKKyAgICAgICAgICAgICAgICB6
ID0gKGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpKTsKKyAgICAg
ICAgICAgICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7IC8vIE1hdGgucG93KDIsIDUyKTsKKyAg
ICAgICAgICAgICAgICBlID0gNTIgLSBlOworCisgICAgICAgICAgICAgICAgLy8gLTE4IDwgZSA8
IDEyMgorICAgICAgICAgICAgICAgIC8vIHggPSB6IC8gMiBeIGUKKyAgICAgICAgICAgICAgICBp
ZiAoZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwbHkoMCwgeik7CisgICAgICAg
ICAgICAgICAgICAgIGogPSBmOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqID49IDcp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBqIC09IDc7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgaiA9IGUgLSAxOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqID49IDIzKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqIC09IDIzOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgZGl2aWRlKDEgPDwgaik7CisgICAgICAgICAgICAgICAgICAgIG11bHRpcGx5KDEsIDEp
OworICAgICAgICAgICAgICAgICAgICBkaXZpZGUoMik7CisgICAgICAgICAgICAgICAgICAgIG0g
PSB0b1N0cmluZygpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIG11bHRpcGx5KDAsIHopOworICAgICAgICAgICAgICAgICAgICBtdWx0aXBseSgxIDw8ICgt
ZSksIDApOworICAgICAgICAgICAgICAgICAgICBtID0gdG9TdHJpbmcoKSArICcwLjAwMDAwMDAw
MDAwMDAwMDAwMDAwJy5zbGljZSgyLCAyICsgZik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoZiA+IDApIHsKKyAgICAgICAgICAgICAgICBrID0g
bS5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICBpZiAoayA8PSBmKSB7CisgICAgICAgICAgICAg
ICAgICAgIG0gPSBzICsgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMCcuc2xpY2UoMCwgZiAtIGsgKyAy
KSArIG07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbSA9
IHMgKyBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbSA9IHMgKyBt
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbTsKKyAgICAgICAgfQorICAg
IH0oKSk7Cit9CisKKworLy8KKy8vIFN0cmluZworLy8gPT09PT09CisvLworCisKKy8vIEVTNSAx
NS41LjQuMTQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjUuNC4xNAorCisvLyBbYnVn
Zml4LCBJRSBsdCA5LCBmaXJlZm94IDQsIEtvbnF1ZXJvciwgT3BlcmEsIG9ic2N1cmUgYnJvd3Nl
cnNdCisvLyBNYW55IGJyb3dzZXJzIGRvIG5vdCBzcGxpdCBwcm9wZXJseSB3aXRoIHJlZ3VsYXIg
ZXhwcmVzc2lvbnMgb3IgdGhleQorLy8gZG8gbm90IHBlcmZvcm0gdGhlIHNwbGl0IGNvcnJlY3Rs
eSB1bmRlciBvYnNjdXJlIGNvbmRpdGlvbnMuCisvLyBTZWUgaHR0cDovL2Jsb2cuc3RldmVubGV2
aXRoYW4uY29tL2FyY2hpdmVzL2Nyb3NzLWJyb3dzZXItc3BsaXQKKy8vIEkndmUgdGVzdGVkIGlu
IG1hbnkgYnJvd3NlcnMgYW5kIHRoaXMgc2VlbXMgdG8gY292ZXIgdGhlIGRldmlhbnQgb25lczoK
Ky8vICAgICdhYicuc3BsaXQoLyg/OmFiKSovKSBzaG91bGQgYmUgWyIiLCAiIl0sIG5vdCBbIiJd
CisvLyAgICAnLicuc3BsaXQoLyguPykoLj8pLykgc2hvdWxkIGJlIFsiIiwgIi4iLCAiIiwgIiJd
LCBub3QgWyIiLCAiIl0KKy8vICAgICd0ZXNzdCcuc3BsaXQoLyhzKSovKSBzaG91bGQgYmUgWyJ0
IiwgdW5kZWZpbmVkLCAiZSIsICJzIiwgInQiXSwgbm90CisvLyAgICAgICBbdW5kZWZpbmVkLCAi
dCIsIHVuZGVmaW5lZCwgImUiLCAuLi5dCisvLyAgICAnJy5zcGxpdCgvLj8vKSBzaG91bGQgYmUg
W10sIG5vdCBbIiJdCisvLyAgICAnLicuc3BsaXQoLygpKCkvKSBzaG91bGQgYmUgWyIuIl0sIG5v
dCBbIiIsICIiLCAiLiJdCisKK3ZhciBzdHJpbmdfc3BsaXQgPSBTdHJpbmcucHJvdG90eXBlLnNw
bGl0OworaWYgKAorICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT09IDIgfHwKKyAg
ICAnLicuc3BsaXQoLyguPykoLj8pLykubGVuZ3RoICE9PSA0IHx8CisgICAgJ3Rlc3N0Jy5zcGxp
dCgvKHMpKi8pWzFdID09PSAidCIgfHwKKyAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGggfHwKKyAg
ICAnLicuc3BsaXQoLygpKCkvKS5sZW5ndGggPiAxCispIHsKKyAgICAoZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgY29tcGxpYW50RXhlY05wY2cgPSAvKCk/Py8uZXhlYygiIilbMV0gPT09IHZv
aWQgMDsgLy8gTlBDRzogbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAKKworICAgICAg
ICBTdHJpbmcucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHsK
KyAgICAgICAgICAgIHZhciBzdHJpbmcgPSB0aGlzOworICAgICAgICAgICAgaWYgKHNlcGFyYXRv
ciA9PT0gdm9pZCAwICYmIGxpbWl0ID09PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBbXTsK
KworICAgICAgICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRp
dmUgc3BsaXQKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo
c2VwYXJhdG9yKSAhPT0gIltvYmplY3QgUmVnRXhwXSIpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RyaW5nX3NwbGl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZhciBvdXRwdXQgPSBbXSwKKyAgICAgICAgICAgICAgICBmbGFncyA9IChz
ZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICJpIiA6ICIiKSArCisgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VwYXJhdG9yLm11bHRpbGluZSAgPyAibSIgOiAiIikgKworICAgICAgICAgICAgICAgICAg
ICAgICAgKHNlcGFyYXRvci5leHRlbmRlZCAgID8gIngiIDogIiIpICsgLy8gUHJvcG9zZWQgZm9y
IEVTNgorICAgICAgICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgICAgID8gInki
IDogIiIpLCAvLyBGaXJlZm94IDMrCisgICAgICAgICAgICAgICAgbGFzdExhc3RJbmRleCA9IDAs
CisgICAgICAgICAgICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAg
aXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHkKKyAgICAgICAgICAgICAgICBzZXBhcmF0b3Ig
PSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgImciKSwKKyAgICAgICAgICAg
ICAgICBzZXBhcmF0b3IyLCBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoOworICAgICAgICAg
ICAgc3RyaW5nICs9ICIiOyAvLyBUeXBlLWNvbnZlcnQKKyAgICAgICAgICAgIGlmICghY29tcGxp
YW50RXhlY05wY2cpIHsKKyAgICAgICAgICAgICAgICAvLyBEb2Vzbid0IG5lZWQgZmxhZ3MgZ3ks
IGJ1dCB0aGV5IGRvbid0IGh1cnQKKyAgICAgICAgICAgICAgICBzZXBhcmF0b3IyID0gbmV3IFJl
Z0V4cCgiXiIgKyBzZXBhcmF0b3Iuc291cmNlICsgIiQoPyFcXHMpIiwgZmxhZ3MpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLyogVmFsdWVzIGZvciBgbGltaXRgLCBwZXIgdGhlIHNwZWM6
CisgICAgICAgICAgICAgKiBJZiB1bmRlZmluZWQ6IDQyOTQ5NjcyOTUgLy8gTWF0aC5wb3coMiwg
MzIpIC0gMQorICAgICAgICAgICAgICogSWYgMCwgSW5maW5pdHksIG9yIE5hTjogMAorICAgICAg
ICAgICAgICogSWYgcG9zaXRpdmUgbnVtYmVyOiBsaW1pdCA9IE1hdGguZmxvb3IobGltaXQpOyBp
ZiAobGltaXQgPiA0Mjk0OTY3Mjk1KSBsaW1pdCAtPSA0Mjk0OTY3Mjk2OworICAgICAgICAgICAg
ICogSWYgbmVnYXRpdmUgbnVtYmVyOiA0Mjk0OTY3Mjk2IC0gTWF0aC5mbG9vcihNYXRoLmFicyhs
aW1pdCkpCisgICAgICAgICAgICAgKiBJZiBvdGhlcjogVHlwZS1jb252ZXJ0LCB0aGVuIHVzZSB0
aGUgYWJvdmUgcnVsZXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbGltaXQgPSBsaW1p
dCA9PT0gdm9pZCAwID8KKyAgICAgICAgICAgICAgICAtMSA+Pj4gMCA6IC8vIE1hdGgucG93KDIs
IDMyKSAtIDEKKyAgICAgICAgICAgICAgICBsaW1pdCA+Pj4gMDsgLy8gVG9VaW50MzIobGltaXQp
CisgICAgICAgICAgICB3aGlsZSAobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdHJpbmcpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gYHNlcGFyYXRvci5sYXN0SW5kZXhgIGlzIG5vdCByZWxpYWJsZSBj
cm9zcy1icm93c2VyCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBt
YXRjaFswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxh
c3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpeCBi
cm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1
bmRlZmluZWRgIGZvcgorICAgICAgICAgICAgICAgICAgICAvLyBub25wYXJ0aWNpcGF0aW5nIGNh
cHR1cmluZyBncm91cHMKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBj
ZyAmJiBtYXRjaC5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFsw
XS5yZXBsYWNlKHNlcGFyYXRvcjIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdm9p
ZCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtpXSA9IHZv
aWQgMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1h
dGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQXJy
YXkucHJvdG90eXBlLnB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBd
Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggPj0gbGltaXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzZXBhcmF0b3IubGFzdEluZGV4ID09PSBt
YXRjaC5pbmRleCkgeworICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3IubGFzdEluZGV4Kys7
IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nLmxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3IudGVzdCgiIikpIHsK
KyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goIiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5n
LnNsaWNlKGxhc3RMYXN0SW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBvdXRwdXQubGVuZ3RoID4gbGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgbGltaXQpIDogb3V0cHV0
OworICAgICAgICB9OworICAgIH0oKSk7CisKKy8vIFtidWdmaXgsIGNocm9tZV0KKy8vIElmIHNl
cGFyYXRvciBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHJlc3VsdCBhcnJheSBjb250YWlucyBqdXN0
IG9uZSBTdHJpbmcsCisvLyB3aGljaCBpcyB0aGUgdGhpcyB2YWx1ZSAoY29udmVydGVkIHRvIGEg
U3RyaW5nKS4gSWYgbGltaXQgaXMgbm90IHVuZGVmaW5lZCwKKy8vIHRoZW4gdGhlIG91dHB1dCBh
cnJheSBpcyB0cnVuY2F0ZWQgc28gdGhhdCBpdCBjb250YWlucyBubyBtb3JlIHRoYW4gbGltaXQK
Ky8vIGVsZW1lbnRzLgorLy8gIjAiLnNwbGl0KHVuZGVmaW5lZCwgMCkgLT4gW10KK30gZWxzZSBp
ZiAoIjAiLnNwbGl0KHZvaWQgMCwgMCkubGVuZ3RoKSB7CisgICAgU3RyaW5nLnByb3RvdHlwZS5z
cGxpdCA9IGZ1bmN0aW9uKHNlcGFyYXRvciwgbGltaXQpIHsKKyAgICAgICAgaWYgKHNlcGFyYXRv
ciA9PT0gdm9pZCAwICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107CisgICAgICAgIHJldHVybiBz
dHJpbmdfc3BsaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9Cit9CisKKworLy8gRUNN
QS0yNjIsIDNyZCBCLjIuMworLy8gTm90ZSBhbiBFQ01BU2NyaXB0IHN0YW5kYXJ0LCBhbHRob3Vn
aCBFQ01BU2NyaXB0IDNyZCBFZGl0aW9uIGhhcyBhCisvLyBub24tbm9ybWF0aXZlIHNlY3Rpb24g
c3VnZ2VzdGluZyB1bmlmb3JtIHNlbWFudGljcyBhbmQgaXQgc2hvdWxkIGJlCisvLyBub3JtYWxp
emVkIGFjcm9zcyBhbGwgYnJvd3NlcnMKKy8vIFtidWdmaXgsIElFIGx0IDldIElFIDwgOSBzdWJz
dHIoKSB3aXRoIG5lZ2F0aXZlIHZhbHVlIG5vdCB3b3JraW5nIGluIElFCitpZiAoIiIuc3Vic3Ry
ICYmICIwYiIuc3Vic3RyKC0xKSAhPT0gImIiKSB7CisgICAgdmFyIHN0cmluZ19zdWJzdHIgPSBT
dHJpbmcucHJvdG90eXBlLnN1YnN0cjsKKyAgICAvKioKKyAgICAgKiAgR2V0IHRoZSBzdWJzdHJp
bmcgb2YgYSBzdHJpbmcKKyAgICAgKiAgQHBhcmFtICB7aW50ZWdlcn0gIHN0YXJ0ICAgd2hlcmUg
dG8gc3RhcnQgdGhlIHN1YnN0cmluZworICAgICAqICBAcGFyYW0gIHtpbnRlZ2VyfSAgbGVuZ3Ro
ICBob3cgbWFueSBjaGFyYWN0ZXJzIHRvIHJldHVybgorICAgICAqICBAcmV0dXJuIHtzdHJpbmd9
CisgICAgICovCisgICAgU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgPSBmdW5jdGlvbihzdGFydCwg
bGVuZ3RoKSB7CisgICAgICAgIHJldHVybiBzdHJpbmdfc3Vic3RyLmNhbGwoCisgICAgICAgICAg
ICB0aGlzLAorICAgICAgICAgICAgc3RhcnQgPCAwID8gKChzdGFydCA9IHRoaXMubGVuZ3RoICsg
c3RhcnQpIDwgMCA/IDAgOiBzdGFydCkgOiBzdGFydCwKKyAgICAgICAgICAgIGxlbmd0aAorICAg
ICAgICApOworICAgIH0KK30KKworLy8gRVM1IDE1LjUuNC4yMAorLy8gaHR0cDovL2VzNS5naXRo
dWIuY29tLyN4MTUuNS40LjIwCit2YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhB
MFx1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwMyIgKworICAgICJcdTIwMDRcdTIw
MDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjgi
ICsKKyAgICAiXHUyMDI5XHVGRUZGIjsKK2lmICghU3RyaW5nLnByb3RvdHlwZS50cmltIHx8IHdz
LnRyaW0oKSkgeworICAgIC8vIGh0dHA6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZl
cy9mYXN0ZXItdHJpbS1qYXZhc2NyaXB0CisgICAgLy8gaHR0cDovL3BlcmZlY3Rpb25raWxscy5j
b20vd2hpdGVzcGFjZS1kZXZpYXRpb25zLworICAgIHdzID0gIlsiICsgd3MgKyAiXSI7CisgICAg
dmFyIHRyaW1CZWdpblJlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCisg
ICAgICAgIHRyaW1FbmRSZWdleHAgPSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKKyAgICBT
dHJpbmcucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbiB0cmltKCkgeworICAgICAgICBpZiAodGhp
cyA9PT0gdm9pZCAwIHx8IHRoaXMgPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIit0aGlzKyIgdG8gb2JqZWN0Iik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKQorICAgICAgICAgICAgLnJlcGxhY2UodHJpbUJl
Z2luUmVnZXhwLCAiIikKKyAgICAgICAgICAgIC5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsK
KyAgICB9OworfQorCisvLworLy8gVXRpbAorLy8gPT09PT09CisvLworCisvLyBFUzUgOS40Cisv
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjQKKy8vIGh0dHA6Ly9qc3BlcmYuY29tL3RvLWlu
dGVnZXIKKworZnVuY3Rpb24gdG9JbnRlZ2VyKG4pIHsKKyAgICBuID0gK247CisgICAgaWYgKG4g
IT09IG4pIHsgLy8gaXNOYU4KKyAgICAgICAgbiA9IDA7CisgICAgfSBlbHNlIGlmIChuICE9PSAw
ICYmIG4gIT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgeworICAgICAgICBuID0gKG4gPiAwIHx8
IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOworICAgIH0KKyAgICByZXR1cm4gbjsKK30K
KworZnVuY3Rpb24gaXNQcmltaXRpdmUoaW5wdXQpIHsKKyAgICB2YXIgdHlwZSA9IHR5cGVvZiBp
bnB1dDsKKyAgICByZXR1cm4gKAorICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fAorICAgICAgICB0
eXBlID09PSAidW5kZWZpbmVkIiB8fAorICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIgfHwKKyAg
ICAgICAgdHlwZSA9PT0gIm51bWJlciIgfHwKKyAgICAgICAgdHlwZSA9PT0gInN0cmluZyIKKyAg
ICApOworfQorCitmdW5jdGlvbiB0b1ByaW1pdGl2ZShpbnB1dCkgeworICAgIHZhciB2YWwsIHZh
bHVlT2YsIHRvU3RyaW5nOworICAgIGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKKyAgICAgICAg
cmV0dXJuIGlucHV0OworICAgIH0KKyAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsKKyAgICBp
ZiAodHlwZW9mIHZhbHVlT2YgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgdmFsID0gdmFsdWVP
Zi5jYWxsKGlucHV0KTsKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB2YWw7CisgICAgICAgIH0KKyAgICB9CisgICAgdG9TdHJpbmcgPSBpbnB1dC50
b1N0cmluZzsKKyAgICBpZiAodHlwZW9mIHRvU3RyaW5nID09PSAiZnVuY3Rpb24iKSB7CisgICAg
ICAgIHZhbCA9IHRvU3RyaW5nLmNhbGwoaW5wdXQpOworICAgICAgICBpZiAoaXNQcmltaXRpdmUo
dmFsKSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0
aHJvdyBuZXcgVHlwZUVycm9yKCk7Cit9CisKKy8vIEVTNSA5LjkKKy8vIGh0dHA6Ly9lczUuZ2l0
aHViLmNvbS8jeDkuOQordmFyIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsKKyAgICBpZiAobyA9
PSBudWxsKSB7IC8vIHRoaXMgbWF0Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAorICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOwor
ICAgIH0KKyAgICByZXR1cm4gT2JqZWN0KG8pOworfTsKKworfSk7CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZXM1LXNoaW0vZXM1LXNoaW0ubWluLmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2VzNS1zaGltL2VzNS1zaGlt
Lm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZGMwZTI5MzcwN2ZkYmMzMmE2MTBmYTU4Zjk5YjllODVkN2Mx
YjI1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL2VzNS1zaGltL2VzNS1zaGltLm1pbi5qcwpAQCAtMCwwICsxLDIgQEAKKyhmdW5jdGlvbihk
ZWZpbml0aW9uKXtpZih0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iKXtkZWZpbmUoZGVmaW5pdGlv
bil9ZWxzZSBpZih0eXBlb2YgWVVJPT0iZnVuY3Rpb24iKXtZVUkuYWRkKCJlczUiLGRlZmluaXRp
b24pfWVsc2V7ZGVmaW5pdGlvbigpfX0pKGZ1bmN0aW9uKCl7aWYocGFyc2VJbnQoIjA4IikhPT04
KXtwYXJzZUludD1mdW5jdGlvbihvcmlnUGFyc2VJbnQpe3ZhciBoZXhSZWdleD0vXjBbeFhdLzty
ZXR1cm4gZnVuY3Rpb24gcGFyc2VJbnRFUzUoc3RyLHJhZGl4KXtzdHI9U3RyaW5nKHN0cikudHJp
bSgpO2lmKCErcmFkaXgpe3JhZGl4PWhleFJlZ2V4LnRlc3Qoc3RyKT8xNjoxMH1yZXR1cm4gb3Jp
Z1BhcnNlSW50KHN0cixyYWRpeCl9fShwYXJzZUludCl9ZnVuY3Rpb24gRW1wdHkoKXt9aWYoIUZ1
bmN0aW9uLnByb3RvdHlwZS5iaW5kKXtGdW5jdGlvbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbiBi
aW5kKHRoYXQpe3ZhciB0YXJnZXQ9dGhpcztpZih0eXBlb2YgdGFyZ2V0IT0iZnVuY3Rpb24iKXt0
aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5j
b21wYXRpYmxlICIrdGFyZ2V0KX12YXIgYXJncz1fQXJyYXlfc2xpY2VfLmNhbGwoYXJndW1lbnRz
LDEpO3ZhciBiaW5kZXI9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgYm91bmQpe3ZhciBy
ZXN1bHQ9dGFyZ2V0LmFwcGx5KHRoaXMsYXJncy5jb25jYXQoX0FycmF5X3NsaWNlXy5jYWxsKGFy
Z3VtZW50cykpKTtpZihPYmplY3QocmVzdWx0KT09PXJlc3VsdCl7cmV0dXJuIHJlc3VsdH1yZXR1
cm4gdGhpc31lbHNle3JldHVybiB0YXJnZXQuYXBwbHkodGhhdCxhcmdzLmNvbmNhdChfQXJyYXlf
c2xpY2VfLmNhbGwoYXJndW1lbnRzKSkpfX07dmFyIGJvdW5kTGVuZ3RoPU1hdGgubWF4KDAsdGFy
Z2V0Lmxlbmd0aC1hcmdzLmxlbmd0aCk7dmFyIGJvdW5kQXJncz1bXTtmb3IodmFyIGk9MDtpPGJv
dW5kTGVuZ3RoO2krKyl7Ym91bmRBcmdzLnB1c2goIiQiK2kpfXZhciBib3VuZD1GdW5jdGlvbigi
YmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uKCIrYm91bmRBcmdzLmpvaW4oIiwiKSsiKXtyZXR1cm4g
YmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0iKShiaW5kZXIpO2lmKHRhcmdldC5wcm90b3R5
cGUpe0VtcHR5LnByb3RvdHlwZT10YXJnZXQucHJvdG90eXBlO2JvdW5kLnByb3RvdHlwZT1uZXcg
RW1wdHk7RW1wdHkucHJvdG90eXBlPW51bGx9cmV0dXJuIGJvdW5kfX12YXIgY2FsbD1GdW5jdGlv
bi5wcm90b3R5cGUuY2FsbDt2YXIgcHJvdG90eXBlT2ZBcnJheT1BcnJheS5wcm90b3R5cGU7dmFy
IHByb3RvdHlwZU9mT2JqZWN0PU9iamVjdC5wcm90b3R5cGU7dmFyIF9BcnJheV9zbGljZV89cHJv
dG90eXBlT2ZBcnJheS5zbGljZTt2YXIgX3RvU3RyaW5nPWNhbGwuYmluZChwcm90b3R5cGVPZk9i
amVjdC50b1N0cmluZyk7dmFyIG93bnM9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093
blByb3BlcnR5KTt2YXIgZGVmaW5lR2V0dGVyO3ZhciBkZWZpbmVTZXR0ZXI7dmFyIGxvb2t1cEdl
dHRlcjt2YXIgbG9va3VwU2V0dGVyO3ZhciBzdXBwb3J0c0FjY2Vzc29ycztpZihzdXBwb3J0c0Fj
Y2Vzc29ycz1vd25zKHByb3RvdHlwZU9mT2JqZWN0LCJfX2RlZmluZUdldHRlcl9fIikpe2RlZmlu
ZUdldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7ZGVm
aW5lU2V0dGVyPWNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTts
b29rdXBHZXR0ZXI9Y2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18p
O2xvb2t1cFNldHRlcj1jYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBTZXR0ZXJf
Xyl9aWYoWzEsMl0uc3BsaWNlKDApLmxlbmd0aCE9Mil7dmFyIGFycmF5X3NwbGljZT1BcnJheS5w
cm90b3R5cGUuc3BsaWNlO3ZhciBhcnJheV9wdXNoPUFycmF5LnByb3RvdHlwZS5wdXNoO3ZhciBh
cnJheV91bnNoaWZ0PUFycmF5LnByb3RvdHlwZS51bnNoaWZ0O2lmKGZ1bmN0aW9uKCl7ZnVuY3Rp
b24gbWFrZUFycmF5KGwpe3ZhciBhPVtdO3doaWxlKGwtLSl7YS51bnNoaWZ0KGwpfXJldHVybiBh
fXZhciBhcnJheT1bXSxsZW5ndGhCZWZvcmU7YXJyYXkuc3BsaWNlLmJpbmQoYXJyYXksMCwwKS5h
cHBseShudWxsLG1ha2VBcnJheSgyMCkpO2FycmF5LnNwbGljZS5iaW5kKGFycmF5LDAsMCkuYXBw
bHkobnVsbCxtYWtlQXJyYXkoMjYpKTtsZW5ndGhCZWZvcmU9YXJyYXkubGVuZ3RoO2FycmF5LnNw
bGljZSg1LDAsIlhYWCIpO2lmKGxlbmd0aEJlZm9yZSsxPT1hcnJheS5sZW5ndGgpe3JldHVybiB0
cnVlfX0oKSl7QXJyYXkucHJvdG90eXBlLnNwbGljZT1mdW5jdGlvbihzdGFydCxkZWxldGVDb3Vu
dCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe3JldHVybltdfWVsc2V7cmV0dXJuIGFycmF5X3NwbGlj
ZS5hcHBseSh0aGlzLFtzdGFydD09PXZvaWQgMD8wOnN0YXJ0LGRlbGV0ZUNvdW50PT09dm9pZCAw
P3RoaXMubGVuZ3RoLXN0YXJ0OmRlbGV0ZUNvdW50XS5jb25jYXQoX0FycmF5X3NsaWNlXy5jYWxs
KGFyZ3VtZW50cywyKSkpfX19ZWxzZXtBcnJheS5wcm90b3R5cGUuc3BsaWNlPWZ1bmN0aW9uKHN0
YXJ0LGRlbGV0ZUNvdW50KXt2YXIgcmVzdWx0LGFyZ3M9X0FycmF5X3NsaWNlXy5jYWxsKGFyZ3Vt
ZW50cywyKSxhZGRFbGVtZW50c0NvdW50PWFyZ3MubGVuZ3RoO2lmKCFhcmd1bWVudHMubGVuZ3Ro
KXtyZXR1cm5bXX1pZihzdGFydD09PXZvaWQgMCl7c3RhcnQ9MH1pZihkZWxldGVDb3VudD09PXZv
aWQgMCl7ZGVsZXRlQ291bnQ9dGhpcy5sZW5ndGgtc3RhcnR9aWYoYWRkRWxlbWVudHNDb3VudD4w
KXtpZihkZWxldGVDb3VudDw9MCl7aWYoc3RhcnQ9PXRoaXMubGVuZ3RoKXthcnJheV9wdXNoLmFw
cGx5KHRoaXMsYXJncyk7cmV0dXJuW119aWYoc3RhcnQ9PTApe2FycmF5X3Vuc2hpZnQuYXBwbHko
dGhpcyxhcmdzKTtyZXR1cm5bXX19cmVzdWx0PV9BcnJheV9zbGljZV8uY2FsbCh0aGlzLHN0YXJ0
LHN0YXJ0K2RlbGV0ZUNvdW50KTthcmdzLnB1c2guYXBwbHkoYXJncyxfQXJyYXlfc2xpY2VfLmNh
bGwodGhpcyxzdGFydCtkZWxldGVDb3VudCx0aGlzLmxlbmd0aCkpO2FyZ3MudW5zaGlmdC5hcHBs
eShhcmdzLF9BcnJheV9zbGljZV8uY2FsbCh0aGlzLDAsc3RhcnQpKTthcmdzLnVuc2hpZnQoMCx0
aGlzLmxlbmd0aCk7YXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsYXJncyk7cmV0dXJuIHJlc3VsdH1y
ZXR1cm4gYXJyYXlfc3BsaWNlLmNhbGwodGhpcyxzdGFydCxkZWxldGVDb3VudCl9fX1pZihbXS51
bnNoaWZ0KDApIT0xKXt2YXIgYXJyYXlfdW5zaGlmdD1BcnJheS5wcm90b3R5cGUudW5zaGlmdDtB
cnJheS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbigpe2FycmF5X3Vuc2hpZnQuYXBwbHkodGhp
cyxhcmd1bWVudHMpO3JldHVybiB0aGlzLmxlbmd0aH19aWYoIUFycmF5LmlzQXJyYXkpe0FycmF5
LmlzQXJyYXk9ZnVuY3Rpb24gaXNBcnJheShvYmope3JldHVybiBfdG9TdHJpbmcob2JqKT09Iltv
YmplY3QgQXJyYXldIn19dmFyIGJveGVkU3RyaW5nPU9iamVjdCgiYSIpLHNwbGl0U3RyaW5nPWJv
eGVkU3RyaW5nWzBdIT0iYSJ8fCEoMCBpbiBib3hlZFN0cmluZyk7dmFyIGJveGVkRm9yRWFjaD10
cnVlO2lmKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKXtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5j
YWxsKCJmb28iLGZ1bmN0aW9uKGl0ZW0saSxvYmope2lmKHR5cGVvZiBvYmohPT0ib2JqZWN0Iili
b3hlZEZvckVhY2g9ZmFsc2V9KX1pZighQXJyYXkucHJvdG90eXBlLmZvckVhY2h8fCFib3hlZEZv
ckVhY2gpe0FycmF5LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uIGZvckVhY2goZnVuKXt2YXIg
b2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJl90b1N0cmluZyh0aGlzKT09
IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6b2JqZWN0LHRoaXNwPWFyZ3VtZW50c1sx
XSxpPS0xLGxlbmd0aD1zZWxmLmxlbmd0aD4+PjA7aWYoX3RvU3RyaW5nKGZ1bikhPSJbb2JqZWN0
IEZ1bmN0aW9uXSIpe3Rocm93IG5ldyBUeXBlRXJyb3J9d2hpbGUoKytpPGxlbmd0aCl7aWYoaSBp
biBzZWxmKXtmdW4uY2FsbCh0aGlzcCxzZWxmW2ldLGksb2JqZWN0KX19fX1pZighQXJyYXkucHJv
dG90eXBlLm1hcCl7QXJyYXkucHJvdG90eXBlLm1hcD1mdW5jdGlvbiBtYXAoZnVuKXt2YXIgb2Jq
ZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJl90b1N0cmluZyh0aGlzKT09Iltv
YmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0aD4+
PjAscmVzdWx0PUFycmF5KGxlbmd0aCksdGhpc3A9YXJndW1lbnRzWzFdO2lmKF90b1N0cmluZyhm
dW4pIT0iW29iamVjdCBGdW5jdGlvbl0iKXt0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5v
dCBhIGZ1bmN0aW9uIil9Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKXtpZihpIGluIHNlbGYpcmVz
dWx0W2ldPWZ1bi5jYWxsKHRoaXNwLHNlbGZbaV0saSxvYmplY3QpfXJldHVybiByZXN1bHR9fWlm
KCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKXtBcnJheS5wcm90b3R5cGUuZmlsdGVyPWZ1bmN0aW9u
IGZpbHRlcihmdW4pe3ZhciBvYmplY3Q9dG9PYmplY3QodGhpcyksc2VsZj1zcGxpdFN0cmluZyYm
X3RvU3RyaW5nKHRoaXMpPT0iW29iamVjdCBTdHJpbmddIj90aGlzLnNwbGl0KCIiKTpvYmplY3Qs
bGVuZ3RoPXNlbGYubGVuZ3RoPj4+MCxyZXN1bHQ9W10sdmFsdWUsdGhpc3A9YXJndW1lbnRzWzFd
O2lmKF90b1N0cmluZyhmdW4pIT0iW29iamVjdCBGdW5jdGlvbl0iKXt0aHJvdyBuZXcgVHlwZUVy
cm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIil9Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSsrKXtp
ZihpIGluIHNlbGYpe3ZhbHVlPXNlbGZbaV07aWYoZnVuLmNhbGwodGhpc3AsdmFsdWUsaSxvYmpl
Y3QpKXtyZXN1bHQucHVzaCh2YWx1ZSl9fX1yZXR1cm4gcmVzdWx0fX1pZighQXJyYXkucHJvdG90
eXBlLmV2ZXJ5KXtBcnJheS5wcm90b3R5cGUuZXZlcnk9ZnVuY3Rpb24gZXZlcnkoZnVuKXt2YXIg
b2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJl90b1N0cmluZyh0aGlzKT09
IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxlbmd0aD1zZWxmLmxlbmd0
aD4+PjAsdGhpc3A9YXJndW1lbnRzWzFdO2lmKF90b1N0cmluZyhmdW4pIT0iW29iamVjdCBGdW5j
dGlvbl0iKXt0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIil9Zm9y
KHZhciBpPTA7aTxsZW5ndGg7aSsrKXtpZihpIGluIHNlbGYmJiFmdW4uY2FsbCh0aGlzcCxzZWxm
W2ldLGksb2JqZWN0KSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX19aWYoIUFycmF5LnByb3Rv
dHlwZS5zb21lKXtBcnJheS5wcm90b3R5cGUuc29tZT1mdW5jdGlvbiBzb21lKGZ1bil7dmFyIG9i
amVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9PSJb
b2JqZWN0IFN0cmluZ10iP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5ndGg+
Pj4wLHRoaXNwPWFyZ3VtZW50c1sxXTtpZihfdG9TdHJpbmcoZnVuKSE9IltvYmplY3QgRnVuY3Rp
b25dIil7dGhyb3cgbmV3IFR5cGVFcnJvcihmdW4rIiBpcyBub3QgYSBmdW5jdGlvbiIpfWZvcih2
YXIgaT0wO2k8bGVuZ3RoO2krKyl7aWYoaSBpbiBzZWxmJiZmdW4uY2FsbCh0aGlzcCxzZWxmW2ld
LGksb2JqZWN0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19aWYoIUFycmF5LnByb3RvdHlw
ZS5yZWR1Y2Upe0FycmF5LnByb3RvdHlwZS5yZWR1Y2U9ZnVuY3Rpb24gcmVkdWNlKGZ1bil7dmFy
IG9iamVjdD10b09iamVjdCh0aGlzKSxzZWxmPXNwbGl0U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9
PSJbb2JqZWN0IFN0cmluZ10iP3RoaXMuc3BsaXQoIiIpOm9iamVjdCxsZW5ndGg9c2VsZi5sZW5n
dGg+Pj4wO2lmKF90b1N0cmluZyhmdW4pIT0iW29iamVjdCBGdW5jdGlvbl0iKXt0aHJvdyBuZXcg
VHlwZUVycm9yKGZ1bisiIGlzIG5vdCBhIGZ1bmN0aW9uIil9aWYoIWxlbmd0aCYmYXJndW1lbnRz
Lmxlbmd0aD09MSl7dGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdp
dGggbm8gaW5pdGlhbCB2YWx1ZSIpfXZhciBpPTA7dmFyIHJlc3VsdDtpZihhcmd1bWVudHMubGVu
Z3RoPj0yKXtyZXN1bHQ9YXJndW1lbnRzWzFdfWVsc2V7ZG97aWYoaSBpbiBzZWxmKXtyZXN1bHQ9
c2VsZltpKytdO2JyZWFrfWlmKCsraT49bGVuZ3RoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1
Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIil9fXdoaWxlKHRydWUpfWZv
cig7aTxsZW5ndGg7aSsrKXtpZihpIGluIHNlbGYpe3Jlc3VsdD1mdW4uY2FsbCh2b2lkIDAscmVz
dWx0LHNlbGZbaV0saSxvYmplY3QpfX1yZXR1cm4gcmVzdWx0fX1pZighQXJyYXkucHJvdG90eXBl
LnJlZHVjZVJpZ2h0KXtBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQ9ZnVuY3Rpb24gcmVkdWNl
UmlnaHQoZnVuKXt2YXIgb2JqZWN0PXRvT2JqZWN0KHRoaXMpLHNlbGY9c3BsaXRTdHJpbmcmJl90
b1N0cmluZyh0aGlzKT09IltvYmplY3QgU3RyaW5nXSI/dGhpcy5zcGxpdCgiIik6b2JqZWN0LGxl
bmd0aD1zZWxmLmxlbmd0aD4+PjA7aWYoX3RvU3RyaW5nKGZ1bikhPSJbb2JqZWN0IEZ1bmN0aW9u
XSIpe3Rocm93IG5ldyBUeXBlRXJyb3IoZnVuKyIgaXMgbm90IGEgZnVuY3Rpb24iKX1pZighbGVu
Z3RoJiZhcmd1bWVudHMubGVuZ3RoPT0xKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdo
dCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX12YXIgcmVzdWx0LGk9bGVu
Z3RoLTE7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7cmVzdWx0PWFyZ3VtZW50c1sxXX1lbHNle2Rv
e2lmKGkgaW4gc2VsZil7cmVzdWx0PXNlbGZbaS0tXTticmVha31pZigtLWk8MCl7dGhyb3cgbmV3
IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZh
bHVlIil9fXdoaWxlKHRydWUpfWlmKGk8MCl7cmV0dXJuIHJlc3VsdH1kb3tpZihpIGluIHRoaXMp
e3Jlc3VsdD1mdW4uY2FsbCh2b2lkIDAscmVzdWx0LHNlbGZbaV0saSxvYmplY3QpfX13aGlsZShp
LS0pO3JldHVybiByZXN1bHR9fWlmKCFBcnJheS5wcm90b3R5cGUuaW5kZXhPZnx8WzAsMV0uaW5k
ZXhPZigxLDIpIT0tMSl7QXJyYXkucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24gaW5kZXhPZihz
b3VnaHQpe3ZhciBzZWxmPXNwbGl0U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9PSJbb2JqZWN0IFN0
cmluZ10iP3RoaXMuc3BsaXQoIiIpOnRvT2JqZWN0KHRoaXMpLGxlbmd0aD1zZWxmLmxlbmd0aD4+
PjA7aWYoIWxlbmd0aCl7cmV0dXJuLTF9dmFyIGk9MDtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2k9
dG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSl9aT1pPj0wP2k6TWF0aC5tYXgoMCxsZW5ndGgraSk7Zm9y
KDtpPGxlbmd0aDtpKyspe2lmKGkgaW4gc2VsZiYmc2VsZltpXT09PXNvdWdodCl7cmV0dXJuIGl9
fXJldHVybi0xfX1pZighQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mfHxbMCwxXS5sYXN0SW5k
ZXhPZigwLC0zKSE9LTEpe0FycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbiBsYXN0
SW5kZXhPZihzb3VnaHQpe3ZhciBzZWxmPXNwbGl0U3RyaW5nJiZfdG9TdHJpbmcodGhpcyk9PSJb
b2JqZWN0IFN0cmluZ10iP3RoaXMuc3BsaXQoIiIpOnRvT2JqZWN0KHRoaXMpLGxlbmd0aD1zZWxm
Lmxlbmd0aD4+PjA7aWYoIWxlbmd0aCl7cmV0dXJuLTF9dmFyIGk9bGVuZ3RoLTE7aWYoYXJndW1l
bnRzLmxlbmd0aD4xKXtpPU1hdGgubWluKGksdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpfWk9aT49
MD9pOmxlbmd0aC1NYXRoLmFicyhpKTtmb3IoO2k+PTA7aS0tKXtpZihpIGluIHNlbGYmJnNvdWdo
dD09PXNlbGZbaV0pe3JldHVybiBpfX1yZXR1cm4tMX19aWYoIU9iamVjdC5rZXlzKXt2YXIgaGFz
RG9udEVudW1CdWc9dHJ1ZSxkb250RW51bXM9WyJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwi
dmFsdWVPZiIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVt
ZXJhYmxlIiwiY29uc3RydWN0b3IiXSxkb250RW51bXNMZW5ndGg9ZG9udEVudW1zLmxlbmd0aDtm
b3IodmFyIGtleSBpbnt0b1N0cmluZzpudWxsfSl7aGFzRG9udEVudW1CdWc9ZmFsc2V9T2JqZWN0
LmtleXM9ZnVuY3Rpb24ga2V5cyhvYmplY3Qpe2lmKHR5cGVvZiBvYmplY3QhPSJvYmplY3QiJiZ0
eXBlb2Ygb2JqZWN0IT0iZnVuY3Rpb24ifHxvYmplY3Q9PT1udWxsKXt0aHJvdyBuZXcgVHlwZUVy
cm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iil9dmFyIGtleXM9W107Zm9y
KHZhciBuYW1lIGluIG9iamVjdCl7aWYob3ducyhvYmplY3QsbmFtZSkpe2tleXMucHVzaChuYW1l
KX19aWYoaGFzRG9udEVudW1CdWcpe2Zvcih2YXIgaT0wLGlpPWRvbnRFbnVtc0xlbmd0aDtpPGlp
O2krKyl7dmFyIGRvbnRFbnVtPWRvbnRFbnVtc1tpXTtpZihvd25zKG9iamVjdCxkb250RW51bSkp
e2tleXMucHVzaChkb250RW51bSl9fX1yZXR1cm4ga2V5c319dmFyIG5lZ2F0aXZlRGF0ZT0tNjIx
OTg3NTUyZTUsbmVnYXRpdmVZZWFyU3RyaW5nPSItMDAwMDAxIjtpZighRGF0ZS5wcm90b3R5cGUu
dG9JU09TdHJpbmd8fG5ldyBEYXRlKG5lZ2F0aXZlRGF0ZSkudG9JU09TdHJpbmcoKS5pbmRleE9m
KG5lZ2F0aXZlWWVhclN0cmluZyk9PT0tMSl7RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc9ZnVu
Y3Rpb24gdG9JU09TdHJpbmcoKXt2YXIgcmVzdWx0LGxlbmd0aCx2YWx1ZSx5ZWFyLG1vbnRoO2lm
KCFpc0Zpbml0ZSh0aGlzKSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRhdGUucHJvdG90eXBlLnRv
SVNPU3RyaW5nIGNhbGxlZCBvbiBub24tZmluaXRlIHZhbHVlLiIpfXllYXI9dGhpcy5nZXRVVENG
dWxsWWVhcigpO21vbnRoPXRoaXMuZ2V0VVRDTW9udGgoKTt5ZWFyKz1NYXRoLmZsb29yKG1vbnRo
LzEyKTttb250aD0obW9udGglMTIrMTIpJTEyO3Jlc3VsdD1bbW9udGgrMSx0aGlzLmdldFVUQ0Rh
dGUoKSx0aGlzLmdldFVUQ0hvdXJzKCksdGhpcy5nZXRVVENNaW51dGVzKCksdGhpcy5nZXRVVENT
ZWNvbmRzKCldO3llYXI9KHllYXI8MD8iLSI6eWVhcj45OTk5PyIrIjoiIikrKCIwMDAwMCIrTWF0
aC5hYnMoeWVhcikpLnNsaWNlKDA8PXllYXImJnllYXI8PTk5OTk/LTQ6LTYpO2xlbmd0aD1yZXN1
bHQubGVuZ3RoO3doaWxlKGxlbmd0aC0tKXt2YWx1ZT1yZXN1bHRbbGVuZ3RoXTtpZih2YWx1ZTwx
MCl7cmVzdWx0W2xlbmd0aF09IjAiK3ZhbHVlfX1yZXR1cm4geWVhcisiLSIrcmVzdWx0LnNsaWNl
KDAsMikuam9pbigiLSIpKyJUIityZXN1bHQuc2xpY2UoMikuam9pbigiOiIpKyIuIisoIjAwMCIr
dGhpcy5nZXRVVENNaWxsaXNlY29uZHMoKSkuc2xpY2UoLTMpKyJaIn19dmFyIGRhdGVUb0pTT05J
c1N1cHBvcnRlZD1mYWxzZTt0cnl7ZGF0ZVRvSlNPTklzU3VwcG9ydGVkPURhdGUucHJvdG90eXBl
LnRvSlNPTiYmbmV3IERhdGUoTmFOKS50b0pTT04oKT09PW51bGwmJm5ldyBEYXRlKG5lZ2F0aXZl
RGF0ZSkudG9KU09OKCkuaW5kZXhPZihuZWdhdGl2ZVllYXJTdHJpbmcpIT09LTEmJkRhdGUucHJv
dG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0cnVlfX0p
fWNhdGNoKGUpe31pZighZGF0ZVRvSlNPTklzU3VwcG9ydGVkKXtEYXRlLnByb3RvdHlwZS50b0pT
T049ZnVuY3Rpb24gdG9KU09OKGtleSl7dmFyIG89T2JqZWN0KHRoaXMpLHR2PXRvUHJpbWl0aXZl
KG8pLHRvSVNPO2lmKHR5cGVvZiB0dj09PSJudW1iZXIiJiYhaXNGaW5pdGUodHYpKXtyZXR1cm4g
bnVsbH10b0lTTz1vLnRvSVNPU3RyaW5nO2lmKHR5cGVvZiB0b0lTTyE9ImZ1bmN0aW9uIil7dGhy
b3cgbmV3IFR5cGVFcnJvcigidG9JU09TdHJpbmcgcHJvcGVydHkgaXMgbm90IGNhbGxhYmxlIil9
cmV0dXJuIHRvSVNPLmNhbGwobyl9fWlmKCFEYXRlLnBhcnNlfHwiRGF0ZS5wYXJzZSBpcyBidWdn
eSIpe0RhdGU9ZnVuY3Rpb24oTmF0aXZlRGF0ZSl7ZnVuY3Rpb24gRGF0ZShZLE0sRCxoLG0scyxt
cyl7dmFyIGxlbmd0aD1hcmd1bWVudHMubGVuZ3RoO2lmKHRoaXMgaW5zdGFuY2VvZiBOYXRpdmVE
YXRlKXt2YXIgZGF0ZT1sZW5ndGg9PTEmJlN0cmluZyhZKT09PVk/bmV3IE5hdGl2ZURhdGUoRGF0
ZS5wYXJzZShZKSk6bGVuZ3RoPj03P25ldyBOYXRpdmVEYXRlKFksTSxELGgsbSxzLG1zKTpsZW5n
dGg+PTY/bmV3IE5hdGl2ZURhdGUoWSxNLEQsaCxtLHMpOmxlbmd0aD49NT9uZXcgTmF0aXZlRGF0
ZShZLE0sRCxoLG0pOmxlbmd0aD49ND9uZXcgTmF0aXZlRGF0ZShZLE0sRCxoKTpsZW5ndGg+PTM/
bmV3IE5hdGl2ZURhdGUoWSxNLEQpOmxlbmd0aD49Mj9uZXcgTmF0aXZlRGF0ZShZLE0pOmxlbmd0
aD49MT9uZXcgTmF0aXZlRGF0ZShZKTpuZXcgTmF0aXZlRGF0ZTtkYXRlLmNvbnN0cnVjdG9yPURh
dGU7cmV0dXJuIGRhdGV9cmV0dXJuIE5hdGl2ZURhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZh
ciBpc29EYXRlRXhwcmVzc2lvbj1uZXcgUmVnRXhwKCJeIisiKFxcZHs0fXxbKy1dXFxkezZ9KSIr
Iig/Oi0oXFxkezJ9KSIrIig/Oi0oXFxkezJ9KSIrIig/OiIrIlQoXFxkezJ9KSIrIjooXFxkezJ9
KSIrIig/OiIrIjooXFxkezJ9KSIrIig/OihcXC5cXGR7MSx9KSk/IisiKT8iKyIoIisiWnwiKyIo
PzoiKyIoWy0rXSkiKyIoXFxkezJ9KSIrIjooXFxkezJ9KSIrIikiKyIpPyk/KT8pPyIrIiQiKTt2
YXIgbW9udGhzPVswLDMxLDU5LDkwLDEyMCwxNTEsMTgxLDIxMiwyNDMsMjczLDMwNCwzMzQsMzY1
XTtmdW5jdGlvbiBkYXlGcm9tTW9udGgoeWVhcixtb250aCl7dmFyIHQ9bW9udGg+MT8xOjA7cmV0
dXJuIG1vbnRoc1ttb250aF0rTWF0aC5mbG9vcigoeWVhci0xOTY5K3QpLzQpLU1hdGguZmxvb3Io
KHllYXItMTkwMSt0KS8xMDApK01hdGguZmxvb3IoKHllYXItMTYwMSt0KS80MDApKzM2NSooeWVh
ci0xOTcwKX1mdW5jdGlvbiB0b1VUQyh0KXtyZXR1cm4gTnVtYmVyKG5ldyBOYXRpdmVEYXRlKDE5
NzAsMCwxLDAsMCwwLHQpKX1mb3IodmFyIGtleSBpbiBOYXRpdmVEYXRlKXtEYXRlW2tleV09TmF0
aXZlRGF0ZVtrZXldfURhdGUubm93PU5hdGl2ZURhdGUubm93O0RhdGUuVVRDPU5hdGl2ZURhdGUu
VVRDO0RhdGUucHJvdG90eXBlPU5hdGl2ZURhdGUucHJvdG90eXBlO0RhdGUucHJvdG90eXBlLmNv
bnN0cnVjdG9yPURhdGU7RGF0ZS5wYXJzZT1mdW5jdGlvbiBwYXJzZShzdHJpbmcpe3ZhciBtYXRj
aD1pc29EYXRlRXhwcmVzc2lvbi5leGVjKHN0cmluZyk7aWYobWF0Y2gpe3ZhciB5ZWFyPU51bWJl
cihtYXRjaFsxXSksbW9udGg9TnVtYmVyKG1hdGNoWzJdfHwxKS0xLGRheT1OdW1iZXIobWF0Y2hb
M118fDEpLTEsaG91cj1OdW1iZXIobWF0Y2hbNF18fDApLG1pbnV0ZT1OdW1iZXIobWF0Y2hbNV18
fDApLHNlY29uZD1OdW1iZXIobWF0Y2hbNl18fDApLG1pbGxpc2Vjb25kPU1hdGguZmxvb3IoTnVt
YmVyKG1hdGNoWzddfHwwKSoxZTMpLGlzTG9jYWxUaW1lPUJvb2xlYW4obWF0Y2hbNF0mJiFtYXRj
aFs4XSksc2lnbk9mZnNldD1tYXRjaFs5XT09PSItIj8xOi0xLGhvdXJPZmZzZXQ9TnVtYmVyKG1h
dGNoWzEwXXx8MCksbWludXRlT2Zmc2V0PU51bWJlcihtYXRjaFsxMV18fDApLHJlc3VsdDtpZiho
b3VyPChtaW51dGU+MHx8c2Vjb25kPjB8fG1pbGxpc2Vjb25kPjA/MjQ6MjUpJiZtaW51dGU8NjAm
JnNlY29uZDw2MCYmbWlsbGlzZWNvbmQ8MWUzJiZtb250aD4tMSYmbW9udGg8MTImJmhvdXJPZmZz
ZXQ8MjQmJm1pbnV0ZU9mZnNldDw2MCYmZGF5Pi0xJiZkYXk8ZGF5RnJvbU1vbnRoKHllYXIsbW9u
dGgrMSktZGF5RnJvbU1vbnRoKHllYXIsbW9udGgpKXtyZXN1bHQ9KChkYXlGcm9tTW9udGgoeWVh
cixtb250aCkrZGF5KSoyNCtob3VyK2hvdXJPZmZzZXQqc2lnbk9mZnNldCkqNjA7cmVzdWx0PSgo
cmVzdWx0K21pbnV0ZSttaW51dGVPZmZzZXQqc2lnbk9mZnNldCkqNjArc2Vjb25kKSoxZTMrbWls
bGlzZWNvbmQ7aWYoaXNMb2NhbFRpbWUpe3Jlc3VsdD10b1VUQyhyZXN1bHQpfWlmKC04NjRlMTM8
PXJlc3VsdCYmcmVzdWx0PD04NjRlMTMpe3JldHVybiByZXN1bHR9fXJldHVybiBOYU59cmV0dXJu
IE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gRGF0ZX0oRGF0
ZSl9aWYoIURhdGUubm93KXtEYXRlLm5vdz1mdW5jdGlvbiBub3coKXtyZXR1cm4obmV3IERhdGUp
LmdldFRpbWUoKX19aWYoIU51bWJlci5wcm90b3R5cGUudG9GaXhlZHx8OGUtNS50b0ZpeGVkKDMp
IT09IjAuMDAwInx8LjkudG9GaXhlZCgwKT09PSIwInx8MS4yNTUudG9GaXhlZCgyKSE9PSIxLjI1
Inx8MHhkZTBiNmIzYTc2NDAwODAudG9GaXhlZCgwKSE9PSIxMDAwMDAwMDAwMDAwMDAwMTI4Iil7
KGZ1bmN0aW9uKCl7dmFyIGJhc2Usc2l6ZSxkYXRhLGk7YmFzZT0xZTc7c2l6ZT02O2RhdGE9WzAs
MCwwLDAsMCwwXTtmdW5jdGlvbiBtdWx0aXBseShuLGMpe3ZhciBpPS0xO3doaWxlKCsraTxzaXpl
KXtjKz1uKmRhdGFbaV07ZGF0YVtpXT1jJWJhc2U7Yz1NYXRoLmZsb29yKGMvYmFzZSl9fWZ1bmN0
aW9uIGRpdmlkZShuKXt2YXIgaT1zaXplLGM9MDt3aGlsZSgtLWk+PTApe2MrPWRhdGFbaV07ZGF0
YVtpXT1NYXRoLmZsb29yKGMvbik7Yz1jJW4qYmFzZX19ZnVuY3Rpb24gdG9TdHJpbmcoKXt2YXIg
aT1zaXplO3ZhciBzPSIiO3doaWxlKC0taT49MCl7aWYocyE9PSIifHxpPT09MHx8ZGF0YVtpXSE9
PTApe3ZhciB0PVN0cmluZyhkYXRhW2ldKTtpZihzPT09IiIpe3M9dH1lbHNle3MrPSIwMDAwMDAw
Ii5zbGljZSgwLDctdC5sZW5ndGgpK3R9fX1yZXR1cm4gc31mdW5jdGlvbiBwb3coeCxuLGFjYyl7
cmV0dXJuIG49PT0wP2FjYzpuJTI9PT0xP3Bvdyh4LG4tMSxhY2MqeCk6cG93KHgqeCxuLzIsYWNj
KX1mdW5jdGlvbiBsb2coeCl7dmFyIG49MDt3aGlsZSh4Pj00MDk2KXtuKz0xMjt4Lz00MDk2fXdo
aWxlKHg+PTIpe24rPTE7eC89Mn1yZXR1cm4gbn1OdW1iZXIucHJvdG90eXBlLnRvRml4ZWQ9ZnVu
Y3Rpb24oZnJhY3Rpb25EaWdpdHMpe3ZhciBmLHgscyxtLGUseixqLGs7Zj1OdW1iZXIoZnJhY3Rp
b25EaWdpdHMpO2Y9ZiE9PWY/MDpNYXRoLmZsb29yKGYpO2lmKGY8MHx8Zj4yMCl7dGhyb3cgbmV3
IFJhbmdlRXJyb3IoIk51bWJlci50b0ZpeGVkIGNhbGxlZCB3aXRoIGludmFsaWQgbnVtYmVyIG9m
IGRlY2ltYWxzIil9eD1OdW1iZXIodGhpcyk7aWYoeCE9PXgpe3JldHVybiJOYU4ifWlmKHg8PS0x
ZTIxfHx4Pj0xZTIxKXtyZXR1cm4gU3RyaW5nKHgpfXM9IiI7aWYoeDwwKXtzPSItIjt4PS14fW09
IjAiO2lmKHg+MWUtMjEpe2U9bG9nKHgqcG93KDIsNjksMSkpLTY5O3o9ZTwwP3gqcG93KDIsLWUs
MSk6eC9wb3coMixlLDEpO3oqPTQ1MDM1OTk2MjczNzA0OTY7ZT01Mi1lO2lmKGU+MCl7bXVsdGlw
bHkoMCx6KTtqPWY7d2hpbGUoaj49Nyl7bXVsdGlwbHkoMWU3LDApO2otPTd9bXVsdGlwbHkocG93
KDEwLGosMSksMCk7aj1lLTE7d2hpbGUoaj49MjMpe2RpdmlkZSgxPDwyMyk7ai09MjN9ZGl2aWRl
KDE8PGopO211bHRpcGx5KDEsMSk7ZGl2aWRlKDIpO209dG9TdHJpbmcoKX1lbHNle211bHRpcGx5
KDAseik7bXVsdGlwbHkoMTw8LWUsMCk7bT10b1N0cmluZygpKyIwLjAwMDAwMDAwMDAwMDAwMDAw
MDAwIi5zbGljZSgyLDIrZil9fWlmKGY+MCl7az1tLmxlbmd0aDtpZihrPD1mKXttPXMrIjAuMDAw
MDAwMDAwMDAwMDAwMDAwMCIuc2xpY2UoMCxmLWsrMikrbX1lbHNle209cyttLnNsaWNlKDAsay1m
KSsiLiIrbS5zbGljZShrLWYpfX1lbHNle209cyttfXJldHVybiBtfX0pKCl9dmFyIHN0cmluZ19z
cGxpdD1TdHJpbmcucHJvdG90eXBlLnNwbGl0O2lmKCJhYiIuc3BsaXQoLyg/OmFiKSovKS5sZW5n
dGghPT0yfHwiLiIuc3BsaXQoLyguPykoLj8pLykubGVuZ3RoIT09NHx8InRlc3N0Ii5zcGxpdCgv
KHMpKi8pWzFdPT09InQifHwiIi5zcGxpdCgvLj8vKS5sZW5ndGh8fCIuIi5zcGxpdCgvKCkoKS8p
Lmxlbmd0aD4xKXsoZnVuY3Rpb24oKXt2YXIgY29tcGxpYW50RXhlY05wY2c9LygpPz8vLmV4ZWMo
IiIpWzFdPT09dm9pZCAwO1N0cmluZy5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oc2VwYXJhdG9y
LGxpbWl0KXt2YXIgc3RyaW5nPXRoaXM7aWYoc2VwYXJhdG9yPT09dm9pZCAwJiZsaW1pdD09PTAp
cmV0dXJuW107aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlcGFyYXRvcikhPT0i
W29iamVjdCBSZWdFeHBdIil7cmV0dXJuIHN0cmluZ19zcGxpdC5hcHBseSh0aGlzLGFyZ3VtZW50
cyl9dmFyIG91dHB1dD1bXSxmbGFncz0oc2VwYXJhdG9yLmlnbm9yZUNhc2U/ImkiOiIiKSsoc2Vw
YXJhdG9yLm11bHRpbGluZT8ibSI6IiIpKyhzZXBhcmF0b3IuZXh0ZW5kZWQ/IngiOiIiKSsoc2Vw
YXJhdG9yLnN0aWNreT8ieSI6IiIpLGxhc3RMYXN0SW5kZXg9MCxzZXBhcmF0b3I9bmV3IFJlZ0V4
cChzZXBhcmF0b3Iuc291cmNlLGZsYWdzKyJnIiksc2VwYXJhdG9yMixtYXRjaCxsYXN0SW5kZXgs
bGFzdExlbmd0aDtzdHJpbmcrPSIiO2lmKCFjb21wbGlhbnRFeGVjTnBjZyl7c2VwYXJhdG9yMj1u
ZXcgUmVnRXhwKCJeIitzZXBhcmF0b3Iuc291cmNlKyIkKD8hXFxzKSIsZmxhZ3MpfWxpbWl0PWxp
bWl0PT09dm9pZCAwPy0xPj4+MDpsaW1pdD4+PjA7d2hpbGUobWF0Y2g9c2VwYXJhdG9yLmV4ZWMo
c3RyaW5nKSl7bGFzdEluZGV4PW1hdGNoLmluZGV4K21hdGNoWzBdLmxlbmd0aDtpZihsYXN0SW5k
ZXg+bGFzdExhc3RJbmRleCl7b3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgs
bWF0Y2guaW5kZXgpKTtpZighY29tcGxpYW50RXhlY05wY2cmJm1hdGNoLmxlbmd0aD4xKXttYXRj
aFswXS5yZXBsYWNlKHNlcGFyYXRvcjIsZnVuY3Rpb24oKXtmb3IodmFyIGk9MTtpPGFyZ3VtZW50
cy5sZW5ndGgtMjtpKyspe2lmKGFyZ3VtZW50c1tpXT09PXZvaWQgMCl7bWF0Y2hbaV09dm9pZCAw
fX19KX1pZihtYXRjaC5sZW5ndGg+MSYmbWF0Y2guaW5kZXg8c3RyaW5nLmxlbmd0aCl7QXJyYXku
cHJvdG90eXBlLnB1c2guYXBwbHkob3V0cHV0LG1hdGNoLnNsaWNlKDEpKX1sYXN0TGVuZ3RoPW1h
dGNoWzBdLmxlbmd0aDtsYXN0TGFzdEluZGV4PWxhc3RJbmRleDtpZihvdXRwdXQubGVuZ3RoPj1s
aW1pdCl7YnJlYWt9fWlmKHNlcGFyYXRvci5sYXN0SW5kZXg9PT1tYXRjaC5pbmRleCl7c2VwYXJh
dG9yLmxhc3RJbmRleCsrfX1pZihsYXN0TGFzdEluZGV4PT09c3RyaW5nLmxlbmd0aCl7aWYobGFz
dExlbmd0aHx8IXNlcGFyYXRvci50ZXN0KCIiKSl7b3V0cHV0LnB1c2goIiIpfX1lbHNle291dHB1
dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSl9cmV0dXJuIG91dHB1dC5sZW5ndGg+
bGltaXQ/b3V0cHV0LnNsaWNlKDAsbGltaXQpOm91dHB1dH19KSgpfWVsc2UgaWYoIjAiLnNwbGl0
KHZvaWQgMCwwKS5sZW5ndGgpe1N0cmluZy5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oc2VwYXJh
dG9yLGxpbWl0KXtpZihzZXBhcmF0b3I9PT12b2lkIDAmJmxpbWl0PT09MClyZXR1cm5bXTtyZXR1
cm4gc3RyaW5nX3NwbGl0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19aWYoIiIuc3Vic3RyJiYiMGIi
LnN1YnN0cigtMSkhPT0iYiIpe3ZhciBzdHJpbmdfc3Vic3RyPVN0cmluZy5wcm90b3R5cGUuc3Vi
c3RyO1N0cmluZy5wcm90b3R5cGUuc3Vic3RyPWZ1bmN0aW9uKHN0YXJ0LGxlbmd0aCl7cmV0dXJu
IHN0cmluZ19zdWJzdHIuY2FsbCh0aGlzLHN0YXJ0PDA/KHN0YXJ0PXRoaXMubGVuZ3RoK3N0YXJ0
KTwwPzA6c3RhcnQ6c3RhcnQsbGVuZ3RoKX19dmFyIHdzPSIgICAgXG4LXGZcciBceGEwXHUxNjgw
XHUxODBlXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIisiXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3
XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDJmXHUyMDVmXHUzMDAwXHUyMDI4IisiXHUyMDI5XHVmZWZm
IjtpZighU3RyaW5nLnByb3RvdHlwZS50cmltfHx3cy50cmltKCkpe3dzPSJbIit3cysiXSI7dmFy
IHRyaW1CZWdpblJlZ2V4cD1uZXcgUmVnRXhwKCJeIit3cyt3cysiKiIpLHRyaW1FbmRSZWdleHA9
bmV3IFJlZ0V4cCh3cyt3cysiKiQiKTtTdHJpbmcucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24gdHJp
bSgpe2lmKHRoaXM9PT12b2lkIDB8fHRoaXM9PT1udWxsKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJj
YW4ndCBjb252ZXJ0ICIrdGhpcysiIHRvIG9iamVjdCIpfXJldHVybiBTdHJpbmcodGhpcykucmVw
bGFjZSh0cmltQmVnaW5SZWdleHAsIiIpLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwiIil9fWZ1bmN0
aW9uIHRvSW50ZWdlcihuKXtuPStuO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEv
MCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqTWF0aC5mbG9vcihNYXRoLmFicyhuKSl9cmV0dXJu
IG59ZnVuY3Rpb24gaXNQcmltaXRpdmUoaW5wdXQpe3ZhciB0eXBlPXR5cGVvZiBpbnB1dDtyZXR1
cm4gaW5wdXQ9PT1udWxsfHx0eXBlPT09InVuZGVmaW5lZCJ8fHR5cGU9PT0iYm9vbGVhbiJ8fHR5
cGU9PT0ibnVtYmVyInx8dHlwZT09PSJzdHJpbmcifWZ1bmN0aW9uIHRvUHJpbWl0aXZlKGlucHV0
KXt2YXIgdmFsLHZhbHVlT2YsdG9TdHJpbmc7aWYoaXNQcmltaXRpdmUoaW5wdXQpKXtyZXR1cm4g
aW5wdXR9dmFsdWVPZj1pbnB1dC52YWx1ZU9mO2lmKHR5cGVvZiB2YWx1ZU9mPT09ImZ1bmN0aW9u
Iil7dmFsPXZhbHVlT2YuY2FsbChpbnB1dCk7aWYoaXNQcmltaXRpdmUodmFsKSl7cmV0dXJuIHZh
bH19dG9TdHJpbmc9aW5wdXQudG9TdHJpbmc7aWYodHlwZW9mIHRvU3RyaW5nPT09ImZ1bmN0aW9u
Iil7dmFsPXRvU3RyaW5nLmNhbGwoaW5wdXQpO2lmKGlzUHJpbWl0aXZlKHZhbCkpe3JldHVybiB2
YWx9fXRocm93IG5ldyBUeXBlRXJyb3J9dmFyIHRvT2JqZWN0PWZ1bmN0aW9uKG8pe2lmKG89PW51
bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8gb2JqZWN0Iil9
cmV0dXJuIE9iamVjdChvKX19KTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzNS1zaGltLm1hcApc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvTElDRU5TRSBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxp
Z2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZWEwNjg5YzgwNTMw
NjIxM2ExNzA0MWFiNWE1NTA0ZDgwMzVlYjFkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9MSUNFTlNFCkBAIC0wLDAgKzEsMTkg
QEAKK0NvcHlyaWdodCAoYykgMjAxMy0yMDE0IFR3aXR0ZXIsIEluYyBhbmQgb3RoZXJzCisKK1Bl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
IG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l
bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUg
d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmln
aHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1
YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy
bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywg
c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu
CithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKwor
VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g
VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitB
VVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B
R0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJ
T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhF
IFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL2ZsaWdodC9pbmRleC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9mbGlnaHQvaW5kZXguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg4NTlkMzU2NWUwOGE3NWRhODZlYzg2OWM0
ZmRlOTcwNjBiZTc3NgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0
L25vZGVfbW9kdWxlcy9mbGlnaHQvaW5kZXguanMKQEAgLTAsMCArMSwyOSBAQAorLyogQ29weXJp
Z2h0IDIwMTMgVHdpdHRlciwgSW5jLiBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UuIGh0
dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgKi8KKworZGVmaW5lKAorCisgIFsKKyAg
ICAnLi9saWIvYWR2aWNlJywKKyAgICAnLi9saWIvY29tcG9uZW50JywKKyAgICAnLi9saWIvY29t
cG9zZScsCisgICAgJy4vbGliL2RlYnVnJywKKyAgICAnLi9saWIvbG9nZ2VyJywKKyAgICAnLi9s
aWIvcmVnaXN0cnknLAorICAgICcuL2xpYi91dGlscycKKyAgXSwKKworICBmdW5jdGlvbihhZHZp
Y2UsIGNvbXBvbmVudCwgY29tcG9zZSwgZGVidWcsIGxvZ2dlciwgcmVnaXN0cnksIHV0aWxzKSB7
CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgcmV0dXJuIHsKKyAgICAgIGFkdmljZTogYWR2aWNl
LAorICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsCisgICAgICBjb21wb3NlOiBjb21wb3NlLAor
ICAgICAgZGVidWc6IGRlYnVnLAorICAgICAgbG9nZ2VyOiBsb2dnZXIsCisgICAgICByZWdpc3Ry
eTogcmVnaXN0cnksCisgICAgICB1dGlsczogdXRpbHMKKyAgICB9OworCisgIH0KKyk7CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9h
ZHZpY2UuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xp
Yi9hZHZpY2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM1YjFiOTAxYzU5MWIwOWRkZTU2MTE1NWUxYzY0MTlj
YzM0ZmFiYgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVf
bW9kdWxlcy9mbGlnaHQvbGliL2FkdmljZS5qcwpAQCAtMCwwICsxLDY2IEBACisvKiBDb3B5cmln
aHQgMjAxMyBUd2l0dGVyLCBJbmMuIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZS4gaHR0
cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCAqLworCitkZWZpbmUoCisKKyAgWworICAg
ICcuL3V0aWxzJworICBdLAorCisgIGZ1bmN0aW9uKHV0aWxzKSB7CisgICAgJ3VzZSBzdHJpY3Qn
OworCisgICAgdmFyIGFkdmljZSA9IHsKKworICAgICAgYXJvdW5kOiBmdW5jdGlvbihiYXNlLCB3
cmFwcGVkKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEFyb3VuZCgpIHsKKyAg
ICAgICAgICAvLyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQgYmVuY2htYXJrZWQgZmFzdGVy
CisgICAgICAgICAgdmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBB
cnJheShsICsgMSk7CisgICAgICAgICAgYXJnc1swXSA9IGJhc2UuYmluZCh0aGlzKTsKKyAgICAg
ICAgICBmb3IgKDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgYXJnc1tpICsgMV0gPSBhcmd1
bWVudHNbaV07CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB3cmFwcGVkLmFwcGx5KHRo
aXMsIGFyZ3MpOworICAgICAgICB9OworICAgICAgfSwKKworICAgICAgYmVmb3JlOiBmdW5jdGlv
bihiYXNlLCBiZWZvcmUpIHsKKyAgICAgICAgdmFyIGJlZm9yZUZuID0gKHR5cGVvZiBiZWZvcmUg
PT0gJ2Z1bmN0aW9uJykgPyBiZWZvcmUgOiBiZWZvcmUub2JqW2JlZm9yZS5mbk5hbWVdOworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gY29tcG9zZWRCZWZvcmUoKSB7CisgICAgICAgICAgYmVmb3Jl
Rm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgICByZXR1cm4gYmFzZS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOworICAgICAgICB9OworICAgICAgfSwKKworICAgICAgYWZ0ZXI6IGZ1
bmN0aW9uKGJhc2UsIGFmdGVyKSB7CisgICAgICAgIHZhciBhZnRlckZuID0gKHR5cGVvZiBhZnRl
ciA9PSAnZnVuY3Rpb24nKSA/IGFmdGVyIDogYWZ0ZXIub2JqW2FmdGVyLmZuTmFtZV07CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEFmdGVyKCkgeworICAgICAgICAgIHZhciByZXMg
PSAoYmFzZS51bmJvdW5kIHx8IGJhc2UpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAg
ICAgYWZ0ZXJGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgIHJldHVybiByZXM7
CisgICAgICAgIH07CisgICAgICB9LAorCisgICAgICAvLyBhIG1peGluIHRoYXQgYWxsb3dzIG90
aGVyIG1peGlucyB0byBhdWdtZW50IGV4aXN0aW5nIGZ1bmN0aW9ucyBieSBhZGRpbmcgYWRkaXRp
b25hbAorICAgICAgLy8gY29kZSBiZWZvcmUsIGFmdGVyIG9yIGFyb3VuZC4KKyAgICAgIHdpdGhB
ZHZpY2U6IGZ1bmN0aW9uKCkgeworICAgICAgICBbJ2JlZm9yZScsICdhZnRlcicsICdhcm91bmQn
XS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICB0aGlzW21dID0gZnVuY3Rpb24obWV0
aG9kLCBmbikgeworCisgICAgICAgICAgICB1dGlscy5tdXRhdGVQcm9wZXJ0eSh0aGlzLCBtZXRo
b2QsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNbbWV0aG9kXSA9
PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgdGhpc1ttZXRob2RdID0gYWR2aWNlW21d
KHRoaXNbbWV0aG9kXSwgZm4pOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHRoaXNbbWV0aG9kXSA9IGZuOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
cmV0dXJuIHRoaXNbbWV0aG9kXTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgfTsKKyAg
ICAgICAgfSwgdGhpcyk7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBhZHZpY2U7Cisg
IH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMv
ZmxpZ2h0L2xpYi9iYXNlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVz
L2ZsaWdodC9saWIvYmFzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMWI0ZWI2MzU1M2E0Mzk4ZDBjNmVmNjIy
NTJkYjc3NjFjNjA4YTc4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGln
aHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvYmFzZS5qcwpAQCAtMCwwICsxLDMwOSBAQAorLyog
Q29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLiBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vu
c2UuIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgKi8KKworZGVmaW5lKAorCisg
IFsKKyAgICAnLi91dGlscycsCisgICAgJy4vcmVnaXN0cnknLAorICAgICcuL2RlYnVnJworICBd
LAorCisgIGZ1bmN0aW9uKHV0aWxzLCByZWdpc3RyeSwgZGVidWcpIHsKKyAgICAndXNlIHN0cmlj
dCc7CisKKyAgICAvLyBjb21tb24gbWl4aW4gYWxsb2NhdGVzIGJhc2ljIGZ1bmN0aW9uYWxpdHkg
LSB1c2VkIGJ5IGFsbCBjb21wb25lbnQgcHJvdG90eXBlcworICAgIC8vIGNhbGxiYWNrIGNvbnRl
eHQgaXMgYm91bmQgdG8gY29tcG9uZW50CisgICAgdmFyIGNvbXBvbmVudElkID0gMDsKKworICAg
IGZ1bmN0aW9uIHRlYXJkb3duSW5zdGFuY2UoaW5zdGFuY2VJbmZvKSB7CisgICAgICBpbnN0YW5j
ZUluZm8uZXZlbnRzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbihldmVudCkgeworICAgICAgICB2
YXIgYXJncyA9IFtldmVudC50eXBlXTsKKworICAgICAgICBldmVudC5lbGVtZW50ICYmIGFyZ3Mu
dW5zaGlmdChldmVudC5lbGVtZW50KTsKKyAgICAgICAgKHR5cGVvZiBldmVudC5jYWxsYmFjayA9
PSAnZnVuY3Rpb24nKSAmJiBhcmdzLnB1c2goZXZlbnQuY2FsbGJhY2spOworCisgICAgICAgIHRo
aXMub2ZmLmFwcGx5KHRoaXMsIGFyZ3MpOworICAgICAgfSwgaW5zdGFuY2VJbmZvLmluc3RhbmNl
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1NlcmlhbGl6YWJsZSh0eXBlLCBkYXRhKSB7
CisgICAgICB0cnkgeworICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoZGF0YSwgJyonKTsKKyAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgY29uc29sZS5sb2coJ3Vuc2VyaWFsaXphYmxlIGRh
dGEgZm9yIGV2ZW50Jyx0eXBlLCc6JyxkYXRhKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKAor
ICAgICAgICAgIFsnVGhlIGV2ZW50JywgdHlwZSwgJ29uIGNvbXBvbmVudCcsIHRoaXMudG9TdHJp
bmcoKSwgJ3dhcyB0cmlnZ2VyZWQgd2l0aCBub24tc2VyaWFsaXphYmxlIGRhdGEnXS5qb2luKCcg
JykKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbml0QXR0cmli
dXRlcyhhdHRycykgeworICAgICAgdmFyIGRlZmluZWRLZXlzID0gW10sIGluY29taW5nS2V5czsK
KworICAgICAgdGhpcy5hdHRyID0gbmV3IHRoaXMuYXR0ckRlZjsKKworICAgICAgaWYgKGRlYnVn
LmVuYWJsZWQgJiYgd2luZG93LmNvbnNvbGUpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHRo
aXMuYXR0ckRlZi5wcm90b3R5cGUpIHsKKyAgICAgICAgICBkZWZpbmVkS2V5cy5wdXNoKGtleSk7
CisgICAgICAgIH0KKyAgICAgICAgaW5jb21pbmdLZXlzID0gT2JqZWN0LmtleXMoYXR0cnMpOwor
CisgICAgICAgIGZvciAodmFyIGkgPSBpbmNvbWluZ0tleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBp
LS0pIHsKKyAgICAgICAgICBpZiAoZGVmaW5lZEtleXMuaW5kZXhPZihpbmNvbWluZ0tleXNbaV0p
ID09IC0xKSB7CisgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Bhc3NlZCB1bnVzZWQgYXR0cmli
dXRlcyBpbmNsdWRpbmcgIicgKyBpbmNvbWluZ0tleXNbaV0gKworICAgICAgICAgICAgICAgICAg
ICAgICAgICciIHRvIGNvbXBvbmVudCAiJyArIHRoaXMudG9TdHJpbmcoKSArICciLicpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IGZvciAodmFyIGtleSBpbiB0aGlzLmF0dHJEZWYucHJvdG90eXBlKSB7CisgICAgICAgIGlmICh0
eXBlb2YgYXR0cnNba2V5XSAgPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICBpZiAodGhpcy5h
dHRyW2tleV0gPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWly
ZWQgYXR0cmlidXRlICInICsga2V5ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBu
b3Qgc3BlY2lmaWVkIGluIGF0dGFjaFRvIGZvciBjb21wb25lbnQgIicgKyB0aGlzLnRvU3RyaW5n
KCkgKyAnIi4nKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhp
cy5hdHRyW2tleV0gPSBhdHRyc1trZXldOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVv
ZiB0aGlzLmF0dHJba2V5XSA9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgdGhpcy5hdHRyW2tl
eV0gPSB0aGlzLmF0dHJba2V5XS5jYWxsKHRoaXMpOworICAgICAgICB9CisgICAgICB9CisKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBpbml0RGVwcmVjYXRlZEF0dHJpYnV0ZXMoYXR0cnMpIHsKKyAg
ICAgIC8vIG1lcmdlIGRlZmF1bHRzIHdpdGggc3VwcGxpZWQgb3B0aW9ucworICAgICAgLy8gcHV0
IG9wdGlvbnMgaW4gYXR0ci5fX3Byb3RvX18gdG8gYXZvaWQgbWVyZ2Ugb3ZlcmhlYWQKKyAgICAg
IHZhciBhdHRyID0gT2JqZWN0LmNyZWF0ZShhdHRycyk7CisKKyAgICAgIGZvciAodmFyIGtleSBp
biB0aGlzLmRlZmF1bHRzKSB7CisgICAgICAgIGlmICghYXR0cnMuaGFzT3duUHJvcGVydHkoa2V5
KSkgeworICAgICAgICAgIGF0dHJba2V5XSA9IHRoaXMuZGVmYXVsdHNba2V5XTsKKyAgICAgICAg
fQorICAgICAgfQorCisgICAgICB0aGlzLmF0dHIgPSBhdHRyOworCisgICAgICBPYmplY3Qua2V5
cyh0aGlzLmRlZmF1bHRzIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICBp
ZiAodGhpcy5kZWZhdWx0c1trZXldID09PSBudWxsICYmIHRoaXMuYXR0cltrZXldID09PSBudWxs
KSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBhdHRyaWJ1dGUgIicgKyBr
ZXkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBub3Qgc3BlY2lmaWVkIGluIGF0dGFj
aFRvIGZvciBjb21wb25lbnQgIicgKyB0aGlzLnRvU3RyaW5nKCkgKyAnIi4nKTsKKyAgICAgICAg
fQorICAgICAgfSwgdGhpcyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcHJveHlFdmVudFRvKHRh
cmdldEV2ZW50KSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oZSwgZGF0YSkgeworICAgICAgICAk
KGUudGFyZ2V0KS50cmlnZ2VyKHRhcmdldEV2ZW50LCBkYXRhKTsKKyAgICAgIH07CisgICAgfQor
CisgICAgZnVuY3Rpb24gd2l0aEJhc2UoKSB7CisKKyAgICAgIC8vIGRlbGVnYXRlIHRyaWdnZXIs
IGJpbmQgYW5kIHVuYmluZCB0byBhbiBlbGVtZW50CisgICAgICAvLyBpZiAkZWxlbWVudCBub3Qg
c3VwcGxpZWQsIHVzZSBjb21wb25lbnQncyBub2RlCisgICAgICAvLyBvdGhlciBhcmd1bWVudHMg
YXJlIHBhc3NlZCBvbgorICAgICAgLy8gZXZlbnQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBzcGVj
aWZ5aW5nIHRoZSB0eXBlCisgICAgICAvLyBvZiB0aGUgZXZlbnQsIG9yIGEgaGFzaCBzcGVjaWZ5
aW5nIGJvdGggdGhlIHR5cGUKKyAgICAgIC8vIGFuZCBhIGRlZmF1bHQgZnVuY3Rpb24gdG8gYmUg
Y2FsbGVkLgorICAgICAgdGhpcy50cmlnZ2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciAk
ZWxlbWVudCwgdHlwZSwgZGF0YSwgZXZlbnQsIGRlZmF1bHRGbjsKKyAgICAgICAgdmFyIGxhc3RJ
bmRleCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxLCBsYXN0QXJnID0gYXJndW1lbnRzW2xhc3RJbmRl
eF07CisKKyAgICAgICAgaWYgKHR5cGVvZiBsYXN0QXJnICE9ICdzdHJpbmcnICYmICEobGFzdEFy
ZyAmJiBsYXN0QXJnLmRlZmF1bHRCZWhhdmlvcikpIHsKKyAgICAgICAgICBsYXN0SW5kZXgtLTsK
KyAgICAgICAgICBkYXRhID0gbGFzdEFyZzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXN0
SW5kZXggPT0gMSkgeworICAgICAgICAgICRlbGVtZW50ID0gJChhcmd1bWVudHNbMF0pOworICAg
ICAgICAgIGV2ZW50ID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKKyAgICAgICAgICBldmVudCA9IGFyZ3VtZW50c1swXTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChldmVudC5kZWZhdWx0QmVoYXZpb3IpIHsKKyAgICAg
ICAgICBkZWZhdWx0Rm4gPSBldmVudC5kZWZhdWx0QmVoYXZpb3I7CisgICAgICAgICAgZXZlbnQg
PSAkLkV2ZW50KGV2ZW50LnR5cGUpOworICAgICAgICB9CisKKyAgICAgICAgdHlwZSA9IGV2ZW50
LnR5cGUgfHwgZXZlbnQ7CisKKyAgICAgICAgaWYgKGRlYnVnLmVuYWJsZWQgJiYgd2luZG93LnBv
c3RNZXNzYWdlKSB7CisgICAgICAgICAgY2hlY2tTZXJpYWxpemFibGUuY2FsbCh0aGlzLCB0eXBl
LCBkYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdHRyLmV2ZW50
RGF0YSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICBkYXRhID0gJC5leHRlbmQodHJ1ZSwge30s
IHRoaXMuYXR0ci5ldmVudERhdGEsIGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgJGVsZW1l
bnQudHJpZ2dlcigoZXZlbnQgfHwgdHlwZSksIGRhdGEpOworCisgICAgICAgIGlmIChkZWZhdWx0
Rm4gJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CisgICAgICAgICAgKHRoaXNbZGVm
YXVsdEZuXSB8fCBkZWZhdWx0Rm4pLmNhbGwodGhpcywgZXZlbnQsIGRhdGEpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuICRlbGVtZW50OworICAgICAgfTsKKworCisgICAgICB0aGlzLm9u
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciAkZWxlbWVudCwgdHlwZSwgY2FsbGJhY2ssIG9y
aWdpbmFsQ2I7CisgICAgICAgIHZhciBsYXN0SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoIC0gMSwg
b3JpZ2luID0gYXJndW1lbnRzW2xhc3RJbmRleF07CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcmln
aW4gPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAvL2RlbGVnYXRlIGNhbGxiYWNrCisgICAgICAg
ICAgb3JpZ2luYWxDYiA9IHV0aWxzLmRlbGVnYXRlKAorICAgICAgICAgICAgdGhpcy5yZXNvbHZl
RGVsZWdhdGVSdWxlcyhvcmlnaW4pCisgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlIGlmICh0
eXBlb2Ygb3JpZ2luID09ICdzdHJpbmcnKSB7CisgICAgICAgICAgb3JpZ2luYWxDYiA9IHByb3h5
RXZlbnRUbyhvcmlnaW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG9yaWdpbmFsQ2Ig
PSBvcmlnaW47CisgICAgICAgIH0KKworICAgICAgICBpZiAobGFzdEluZGV4ID09IDIpIHsKKyAg
ICAgICAgICAkZWxlbWVudCA9ICQoYXJndW1lbnRzWzBdKTsKKyAgICAgICAgICB0eXBlID0gYXJn
dW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4k
bm9kZTsKKyAgICAgICAgICB0eXBlID0gYXJndW1lbnRzWzBdOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHR5cGVvZiBvcmlnaW5hbENiICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9yaWdpbmFs
Q2IgIT0gJ29iamVjdCcpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBi
aW5kIHRvICInICsgdHlwZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICciIGJlY2F1c2Ug
dGhlIGdpdmVuIGNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpOworICAg
ICAgICB9CisKKyAgICAgICAgY2FsbGJhY2sgPSBvcmlnaW5hbENiLmJpbmQodGhpcyk7CisgICAg
ICAgIGNhbGxiYWNrLnRhcmdldCA9IG9yaWdpbmFsQ2I7CisgICAgICAgIGNhbGxiYWNrLmNvbnRl
eHQgPSB0aGlzOworCisgICAgICAgICRlbGVtZW50Lm9uKHR5cGUsIGNhbGxiYWNrKTsKKworICAg
ICAgICAvLyBzdG9yZSBldmVyeSBib3VuZCB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFjaworICAgICAg
ICBvcmlnaW5hbENiLmJvdW5kIHx8IChvcmlnaW5hbENiLmJvdW5kID0gW10pOworICAgICAgICBv
cmlnaW5hbENiLmJvdW5kLnB1c2goY2FsbGJhY2spOworCisgICAgICAgIHJldHVybiBjYWxsYmFj
azsKKyAgICAgIH07CisKKyAgICAgIHRoaXMub2ZmID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciAkZWxlbWVudCwgdHlwZSwgY2FsbGJhY2s7CisgICAgICAgIHZhciBsYXN0SW5kZXggPSBhcmd1
bWVudHMubGVuZ3RoIC0gMTsKKworICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tsYXN0SW5k
ZXhdID09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICBjYWxsYmFjayA9IGFyZ3VtZW50c1tsYXN0
SW5kZXhdOworICAgICAgICAgIGxhc3RJbmRleCAtPSAxOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGxhc3RJbmRleCA9PSAxKSB7CisgICAgICAgICAgJGVsZW1lbnQgPSAkKGFyZ3VtZW50c1sw
XSk7CisgICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAkZWxlbWVudCA9IHRoaXMuJG5vZGU7CisgICAgICAgICAgdHlwZSA9IGFyZ3VtZW50
c1swXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgIC8v
dGhpcyBjYWxsYmFjayBtYXkgYmUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9yIGEgYm91bmQgdmVy
c2lvbgorICAgICAgICAgIHZhciBib3VuZEZ1bmN0aW9ucyA9IGNhbGxiYWNrLnRhcmdldCA/IGNh
bGxiYWNrLnRhcmdldC5ib3VuZCA6IGNhbGxiYWNrLmJvdW5kIHx8IFtdOworICAgICAgICAgIC8v
c2V0IGNhbGxiYWNrIHRvIHZlcnNpb24gYm91bmQgYWdhaW5zdCB0aGlzIGluc3RhbmNlCisgICAg
ICAgICAgYm91bmRGdW5jdGlvbnMgJiYgYm91bmRGdW5jdGlvbnMuc29tZShmdW5jdGlvbihmbiwg
aSwgYXJyKSB7CisgICAgICAgICAgICBpZiAoZm4uY29udGV4dCAmJiAodGhpcy5pZGVudGl0eSA9
PSBmbi5jb250ZXh0LmlkZW50aXR5KSkgeworICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDEp
OworICAgICAgICAgICAgICBjYWxsYmFjayA9IGZuOworICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgICAkZWxlbWVu
dC5vZmYodHlwZSwgY2FsbGJhY2spOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIExv
b3AgdGhyb3VnaCB0aGUgZXZlbnRzIG9mIGB0aGlzYCBpbnN0YW5jZQorICAgICAgICAgIC8vIGFu
ZCB1bmJpbmQgdXNpbmcgdGhlIGNhbGxiYWNrCisgICAgICAgICAgcmVnaXN0cnkuZmluZEluc3Rh
bmNlSW5mbyh0aGlzKS5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAg
ICAgIGlmICh0eXBlID09IGV2ZW50LnR5cGUpIHsKKyAgICAgICAgICAgICAgJGVsZW1lbnQub2Zm
KHR5cGUsIGV2ZW50LmNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiAkZWxlbWVudDsKKyAgICAgIH07CisKKyAgICAgIHRo
aXMucmVzb2x2ZURlbGVnYXRlUnVsZXMgPSBmdW5jdGlvbihydWxlSW5mbykgeworICAgICAgICB2
YXIgcnVsZXMgPSB7fTsKKworICAgICAgICBPYmplY3Qua2V5cyhydWxlSW5mbykuZm9yRWFjaChm
dW5jdGlvbihyKSB7CisgICAgICAgICAgaWYgKCEociBpbiB0aGlzLmF0dHIpKSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCAiJyArIHRoaXMudG9TdHJpbmcoKSArICci
IHdhbnRzIHRvIGxpc3RlbiBvbiAiJyArIHIgKyAnIiBidXQgbm8gc3VjaCBhdHRyaWJ1dGUgd2Fz
IGRlZmluZWQuJyk7CisgICAgICAgICAgfQorICAgICAgICAgIHJ1bGVzW3RoaXMuYXR0cltyXV0g
PSAodHlwZW9mIHJ1bGVJbmZvW3JdID09ICdzdHJpbmcnKSA/IHByb3h5RXZlbnRUbyhydWxlSW5m
b1tyXSkgOiBydWxlSW5mb1tyXTsKKyAgICAgICAgfSwgdGhpcyk7CisKKyAgICAgICAgcmV0dXJu
IHJ1bGVzOworICAgICAgfTsKKworICAgICAgdGhpcy5zZWxlY3QgPSBmdW5jdGlvbihhdHRyaWJ1
dGVLZXkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuJG5vZGUuZmluZCh0aGlzLmF0dHJbYXR0cmli
dXRlS2V5XSk7CisgICAgICB9OworCisgICAgICAvLyBOZXctc3R5bGUgYXR0cmlidXRlcworCisg
ICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBmdW5jdGlvbihhdHRycykgeworCisgICAgICAgIHZhciBB
dHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7fTsKKworICAgICAgICBpZiAodGhpcy5hdHRyRGVmKSB7
CisgICAgICAgICAgQXR0cmlidXRlcy5wcm90b3R5cGUgPSBuZXcgdGhpcy5hdHRyRGVmOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBhdHRycykgeworICAgICAgICAgIEF0
dHJpYnV0ZXMucHJvdG90eXBlW25hbWVdID0gYXR0cnNbbmFtZV07CisgICAgICAgIH0KKworICAg
ICAgICB0aGlzLmF0dHJEZWYgPSBBdHRyaWJ1dGVzOworICAgICAgfTsKKworICAgICAgLy8gRGVw
cmVjYXRlZCBhdHRyaWJ1dGVzCisKKyAgICAgIHRoaXMuZGVmYXVsdEF0dHJzID0gZnVuY3Rpb24o
ZGVmYXVsdHMpIHsKKyAgICAgICAgdXRpbHMucHVzaCh0aGlzLmRlZmF1bHRzLCBkZWZhdWx0cywg
dHJ1ZSkgfHwgKHRoaXMuZGVmYXVsdHMgPSBkZWZhdWx0cyk7CisgICAgICB9OworCisgICAgICB0
aGlzLmluaXRpYWxpemUgPSBmdW5jdGlvbihub2RlLCBhdHRycykgeworICAgICAgICBhdHRycyA9
IGF0dHJzIHx8IHt9OworICAgICAgICB0aGlzLmlkZW50aXR5IHx8ICh0aGlzLmlkZW50aXR5ID0g
Y29tcG9uZW50SWQrKyk7CisKKyAgICAgICAgaWYgKCFub2RlKSB7CisgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdDb21wb25lbnQgbmVlZHMgYSBub2RlJyk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobm9kZS5qcXVlcnkpIHsKKyAgICAgICAgICB0aGlzLm5vZGUgPSBub2RlWzBdOworICAg
ICAgICAgIHRoaXMuJG5vZGUgPSBub2RlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRo
aXMubm9kZSA9IG5vZGU7CisgICAgICAgICAgdGhpcy4kbm9kZSA9ICQobm9kZSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodGhpcy5hdHRyRGVmKSB7CisgICAgICAgICAgaW5pdEF0dHJpYnV0
ZXMuY2FsbCh0aGlzLCBhdHRycyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaW5pdERl
cHJlY2F0ZWRBdHRyaWJ1dGVzLmNhbGwodGhpcywgYXR0cnMpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICB9OworCisgICAgICB0aGlzLnRlYXJkb3duID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRlYXJkb3duSW5zdGFuY2UocmVnaXN0cnkuZmluZEluc3RhbmNlSW5m
byh0aGlzKSk7CisgICAgICB9OworICAgIH0KKworICAgIHJldHVybiB3aXRoQmFzZTsKKyAgfQor
KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGln
aHQvbGliL2NvbXBvbmVudC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy9mbGlnaHQvbGliL2NvbXBvbmVudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjFmODgwMTEzODg1Y2JjZjVi
MzI1Y2M0NjAyYzQ2NDI0N2FmNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvY29tcG9uZW50LmpzCkBAIC0wLDAgKzEs
MTI3IEBACisvKiBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMuIExpY2Vuc2VkIHVuZGVyIFRo
ZSBNSVQgTGljZW5zZS4gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCAqLworCitk
ZWZpbmUoCisKKyAgWworICAgICcuL2FkdmljZScsCisgICAgJy4vdXRpbHMnLAorICAgICcuL2Nv
bXBvc2UnLAorICAgICcuL2Jhc2UnLAorICAgICcuL3JlZ2lzdHJ5JywKKyAgICAnLi9sb2dnZXIn
LAorICAgICcuL2RlYnVnJworICBdLAorCisgIGZ1bmN0aW9uKGFkdmljZSwgdXRpbHMsIGNvbXBv
c2UsIHdpdGhCYXNlLCByZWdpc3RyeSwgd2l0aExvZ2dpbmcsIGRlYnVnKSB7CisgICAgJ3VzZSBz
dHJpY3QnOworCisgICAgdmFyIGZ1bmN0aW9uTmFtZVJlZ0V4ID0gL2Z1bmN0aW9uICguKj8pXHM/
XCgvOworCisgICAgLy8gdGVhcmRvd24gZm9yIGFsbCBpbnN0YW5jZXMgb2YgdGhpcyBjb25zdHJ1
Y3RvcgorICAgIGZ1bmN0aW9uIHRlYXJkb3duQWxsKCkgeworICAgICAgdmFyIGNvbXBvbmVudElu
Zm8gPSByZWdpc3RyeS5maW5kQ29tcG9uZW50SW5mbyh0aGlzKTsKKworICAgICAgY29tcG9uZW50
SW5mbyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRJbmZvLmluc3RhbmNlcykuZm9yRWFjaChmdW5j
dGlvbihrKSB7CisgICAgICAgIHZhciBpbmZvID0gY29tcG9uZW50SW5mby5pbnN0YW5jZXNba107
CisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBhIHByZXZpb3VzIHRlYXJkb3duIGNhdXNl
ZCBhbm90aGVyIGNvbXBvbmVudCB0byB0ZWFyZG93biwKKyAgICAgICAgLy8gc28gd2UgY2FuJ3Qg
YXNzdW1lIHRoYXQgdGhlIGluc3RhbmNlcyBvYmplY3QgaXMgYXMgaXQgd2FzLgorICAgICAgICBp
ZiAoaW5mbyAmJiBpbmZvLmluc3RhbmNlKSB7CisgICAgICAgICAgaW5mby5pbnN0YW5jZS50ZWFy
ZG93bigpOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhdHRh
Y2hUbyhzZWxlY3Rvci8qLCBvcHRpb25zIGFyZ3MgKi8pIHsKKyAgICAgIC8vIHVucGFja2luZyBh
cmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgIHZhciBsID0gYXJndW1l
bnRzLmxlbmd0aDsKKyAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGwgLSAxKTsKKyAgICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1l
bnRzW2ldOworICAgICAgfQorCisgICAgICBpZiAoIXNlbGVjdG9yKSB7CisgICAgICAgIHRocm93
IG5ldyBFcnJvcignQ29tcG9uZW50IG5lZWRzIHRvIGJlIGF0dGFjaFRvXCdkIGEgalF1ZXJ5IG9i
amVjdCwgbmF0aXZlIG5vZGUgb3Igc2VsZWN0b3Igc3RyaW5nJyk7CisgICAgICB9CisKKyAgICAg
IHZhciBvcHRpb25zID0gdXRpbHMubWVyZ2UuYXBwbHkodXRpbHMsIGFyZ3MpOworICAgICAgdmFy
IGNvbXBvbmVudEluZm8gPSByZWdpc3RyeS5maW5kQ29tcG9uZW50SW5mbyh0aGlzKTsKKworICAg
ICAgJChzZWxlY3RvcikuZWFjaChmdW5jdGlvbihpLCBub2RlKSB7CisgICAgICAgIGlmIChjb21w
b25lbnRJbmZvICYmIGNvbXBvbmVudEluZm8uaXNBdHRhY2hlZFRvKG5vZGUpKSB7CisgICAgICAg
ICAgLy8gYWxyZWFkeSBhdHRhY2hlZAorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIChuZXcgdGhpcykuaW5pdGlhbGl6ZShub2RlLCBvcHRpb25zKTsKKyAgICAgIH0uYmlu
ZCh0aGlzKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcHJldHR5UHJpbnRNaXhpbnMoKSB7Cisg
ICAgICAvL2NvdWxkIGJlIGNhbGxlZCBmcm9tIGNvbnN0cnVjdG9yIG9yIGNvbnN0cnVjdG9yLnBy
b3RvdHlwZQorICAgICAgdmFyIG1peGVkSW4gPSB0aGlzLm1peGVkSW4gfHwgdGhpcy5wcm90b3R5
cGUubWl4ZWRJbiB8fCBbXTsKKyAgICAgIHJldHVybiBtaXhlZEluLm1hcChmdW5jdGlvbihtaXhp
bikgeworICAgICAgICBpZiAobWl4aW4ubmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgLy8gZnVu
Y3Rpb24gbmFtZSBwcm9wZXJ0eSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciwgdXNlIHJl
Z2V4CisgICAgICAgICAgdmFyIG0gPSBtaXhpbi50b1N0cmluZygpLm1hdGNoKGZ1bmN0aW9uTmFt
ZVJlZ0V4KTsKKyAgICAgICAgICByZXR1cm4gKG0gJiYgbVsxXSkgPyBtWzFdIDogJyc7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIChtaXhpbi5uYW1lICE9ICd3aXRoQmFzZScp
ID8gbWl4aW4ubmFtZSA6ICcnOworICAgICAgICB9CisgICAgICB9KS5maWx0ZXIoQm9vbGVhbiku
am9pbignLCAnKTsKKyAgICB9OworCisKKyAgICAvLyBkZWZpbmUgdGhlIGNvbnN0cnVjdG9yIGZv
ciBhIGN1c3RvbSBjb21wb25lbnQgdHlwZQorICAgIC8vIHRha2VzIGFuIHVubGltaXRlZCBudW1i
ZXIgb2YgbWl4aW4gZnVuY3Rpb25zIGFzIGFyZ3VtZW50cworICAgIC8vIHR5cGljYWwgYXBpIGNh
bGwgd2l0aCAzIG1peGluczogZGVmaW5lKHRpbWVsaW5lLCB3aXRoVHdlZXRDYXBhYmlsaXR5LCB3
aXRoU2Nyb2xsQ2FwYWJpbGl0eSk7CisgICAgZnVuY3Rpb24gZGVmaW5lKC8qbWl4aW5zKi8pIHsK
KyAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIK
KyAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAgIHZhciBtaXhpbnMgPSBuZXcg
QXJyYXkobCk7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICBt
aXhpbnNbaV0gPSBhcmd1bWVudHNbaV07CisgICAgICB9CisKKyAgICAgIHZhciBDb21wb25lbnQg
PSBmdW5jdGlvbigpIHt9OworCisgICAgICBDb21wb25lbnQudG9TdHJpbmcgPSBDb21wb25lbnQu
cHJvdG90eXBlLnRvU3RyaW5nID0gcHJldHR5UHJpbnRNaXhpbnM7CisgICAgICBpZiAoZGVidWcu
ZW5hYmxlZCkgeworICAgICAgICBDb21wb25lbnQuZGVzY3JpYmUgPSBDb21wb25lbnQucHJvdG90
eXBlLmRlc2NyaWJlID0gQ29tcG9uZW50LnRvU3RyaW5nKCk7CisgICAgICB9CisKKyAgICAgIC8v
ICdvcHRpb25zJyBpcyBvcHRpb25hbCBoYXNoIHRvIGJlIG1lcmdlZCB3aXRoICdkZWZhdWx0cycg
aW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uCisgICAgICBDb21wb25lbnQuYXR0YWNoVG8gPSBh
dHRhY2hUbzsKKyAgICAgIC8vIGVuYWJsZXMgZXh0ZW5zaW9uIG9mIGV4aXN0aW5nICJiYXNlIiBD
b21wb25lbnRzCisgICAgICBDb21wb25lbnQubWl4aW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIG5ld0NvbXBvbmVudCA9IGRlZmluZSgpOyAvL1RPRE86IGZpeCBwcmV0dHkgcHJpbnQKKyAg
ICAgICAgdmFyIG5ld1Byb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ29tcG9uZW50LnByb3RvdHlw
ZSk7CisgICAgICAgIG5ld1Byb3RvdHlwZS5taXhlZEluID0gW10uY29uY2F0KENvbXBvbmVudC5w
cm90b3R5cGUubWl4ZWRJbik7CisgICAgICAgIG5ld1Byb3RvdHlwZS5kZWZhdWx0cyA9IHV0aWxz
Lm1lcmdlKENvbXBvbmVudC5wcm90b3R5cGUuZGVmYXVsdHMpOworICAgICAgICBuZXdQcm90b3R5
cGUuYXR0ckRlZiA9IENvbXBvbmVudC5wcm90b3R5cGUuYXR0ckRlZjsKKyAgICAgICAgY29tcG9z
ZS5taXhpbihuZXdQcm90b3R5cGUsIGFyZ3VtZW50cyk7CisgICAgICAgIG5ld0NvbXBvbmVudC5w
cm90b3R5cGUgPSBuZXdQcm90b3R5cGU7CisgICAgICAgIG5ld0NvbXBvbmVudC5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPSBuZXdDb21wb25lbnQ7CisgICAgICAgIHJldHVybiBuZXdDb21wb25lbnQ7
CisgICAgICB9OworICAgICAgQ29tcG9uZW50LnRlYXJkb3duQWxsID0gdGVhcmRvd25BbGw7CisK
KyAgICAgIC8vIHByZXBlbmQgY29tbW9uIG1peGlucyB0byBzdXBwbGllZCBsaXN0LCB0aGVuIG1p
eGluIGFsbCBmbGF2b3JzCisgICAgICBpZiAoZGVidWcuZW5hYmxlZCkgeworICAgICAgICBtaXhp
bnMudW5zaGlmdCh3aXRoTG9nZ2luZyk7CisgICAgICB9CisgICAgICBtaXhpbnMudW5zaGlmdCh3
aXRoQmFzZSwgYWR2aWNlLndpdGhBZHZpY2UsIHJlZ2lzdHJ5LndpdGhSZWdpc3RyYXRpb24pOwor
ICAgICAgY29tcG9zZS5taXhpbihDb21wb25lbnQucHJvdG90eXBlLCBtaXhpbnMpOworCisgICAg
ICByZXR1cm4gQ29tcG9uZW50OworICAgIH0KKworICAgIGRlZmluZS50ZWFyZG93bkFsbCA9IGZ1
bmN0aW9uKCkgeworICAgICAgcmVnaXN0cnkuY29tcG9uZW50cy5zbGljZSgpLmZvckVhY2goZnVu
Y3Rpb24oYykgeworICAgICAgICBjLmNvbXBvbmVudC50ZWFyZG93bkFsbCgpOworICAgICAgfSk7
CisgICAgICByZWdpc3RyeS5yZXNldCgpOworICAgIH07CisKKyAgICByZXR1cm4gZGVmaW5lOwor
ICB9CispOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVz
L2ZsaWdodC9saWIvY29tcG9zZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9k
dWxlcy9mbGlnaHQvbGliL2NvbXBvc2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgyNTUwY2YyZjNhZTEzNzI0
ZjdkOTNkZThiMjk3MTM4NjdkYjJkMAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQvbGliL2NvbXBvc2UuanMKQEAgLTAsMCArMSw0
MSBAQAorLyogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLiBMaWNlbnNlZCB1bmRlciBUaGUg
TUlUIExpY2Vuc2UuIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgKi8KKworZGVm
aW5lKAorCisgIFsKKyAgICAnLi91dGlscycKKyAgXSwKKworICBmdW5jdGlvbih1dGlscykgewor
ICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBkb250TG9jayA9IFsnbWl4ZWRJbicsICdhdHRy
RGVmJ107CisKKyAgICBmdW5jdGlvbiBzZXRXcml0YWJpbGl0eShvYmosIHdyaXRhYmxlKSB7Cisg
ICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeworICAgICAgICBp
ZiAoZG9udExvY2suaW5kZXhPZihrZXkpIDwgMCkgeworICAgICAgICAgIHV0aWxzLnByb3BlcnR5
V3JpdGFiaWxpdHkob2JqLCBrZXksIHdyaXRhYmxlKTsKKyAgICAgICAgfQorICAgICAgfSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gbWl4aW4oYmFzZSwgbWl4aW5zKSB7CisgICAgICBiYXNlLm1p
eGVkSW4gPSBiYXNlLmhhc093blByb3BlcnR5KCdtaXhlZEluJykgPyBiYXNlLm1peGVkSW4gOiBb
XTsKKworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXhpbnMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgaWYgKGJhc2UubWl4ZWRJbi5pbmRleE9mKG1peGluc1tpXSkgPT0gLTEpIHsKKyAgICAg
ICAgICBzZXRXcml0YWJpbGl0eShiYXNlLCBmYWxzZSk7CisgICAgICAgICAgbWl4aW5zW2ldLmNh
bGwoYmFzZSk7CisgICAgICAgICAgYmFzZS5taXhlZEluLnB1c2gobWl4aW5zW2ldKTsKKyAgICAg
ICAgfQorICAgICAgfQorCisgICAgICBzZXRXcml0YWJpbGl0eShiYXNlLCB0cnVlKTsKKyAgICB9
CisKKyAgICByZXR1cm4geworICAgICAgbWl4aW46IG1peGluCisgICAgfTsKKworICB9CispOwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9s
aWIvZGVidWcuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0
L2xpYi9kZWJ1Zy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTgzMzBmNzgwNDFiMjg0OGMwMmIzNmJmZDA2NmMx
NTJjN2ZmNDNlCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9k
ZV9tb2R1bGVzL2ZsaWdodC9saWIvZGVidWcuanMKQEAgLTAsMCArMSwxNjMgQEAKKy8qIENvcHly
aWdodCAyMDEzIFR3aXR0ZXIsIEluYy4gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlLiBo
dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUICovCisKK2RlZmluZSgKKworICBbJy4v
cmVnaXN0cnknXSwKKworICBmdW5jdGlvbihyZWdpc3RyeSkgeworICAgICd1c2Ugc3RyaWN0JzsK
KworICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAg
IC8vIFNlYXJjaCBvYmplY3QgbW9kZWwKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKworICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRl
cm0sIG9wdGlvbnMpIHsKKyAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworICAgICAgdmFy
IG9iaiA9IG9wdGlvbnMub2JqIHx8IHdpbmRvdzsKKyAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5w
YXRoIHx8ICgob2JqID09IHdpbmRvdykgPyAnd2luZG93JyA6ICcnKTsKKyAgICAgIHZhciBwcm9w
cyA9IE9iamVjdC5rZXlzKG9iaik7CisgICAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3Ap
IHsKKyAgICAgICAgaWYgKCh0ZXN0c1t1dGlsXSB8fCB1dGlsKShzZWFyY2hUZXJtLCBvYmosIHBy
b3ApKSB7CisgICAgICAgICAgY29uc29sZS5sb2coW3BhdGgsICcuJywgcHJvcF0uam9pbignJyks
ICctPicsIFsnKCcsIHR5cGVvZiBvYmpbcHJvcF0sICcpJ10uam9pbignJyksIG9ialtwcm9wXSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChv
YmpbcHJvcF0pID09ICdbb2JqZWN0IE9iamVjdF0nICYmIChvYmpbcHJvcF0gIT0gb2JqKSAmJiBw
YXRoLnNwbGl0KCcuJykuaW5kZXhPZihwcm9wKSA9PSAtMSkgeworICAgICAgICAgIHRyYXZlcnNl
KHV0aWwsIHNlYXJjaFRlcm0sIHtvYmo6IG9ialtwcm9wXSwgcGF0aDogW3BhdGgscHJvcF0uam9p
bignLicpfSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNl
YXJjaCh1dGlsLCBleHBlY3RlZCwgc2VhcmNoVGVybSwgb3B0aW9ucykgeworICAgICAgaWYgKCFl
eHBlY3RlZCB8fCB0eXBlb2Ygc2VhcmNoVGVybSA9PSBleHBlY3RlZCkgeworICAgICAgICB0cmF2
ZXJzZSh1dGlsLCBzZWFyY2hUZXJtLCBvcHRpb25zKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IGNvbnNvbGUuZXJyb3IoW3NlYXJjaFRlcm0sICdtdXN0IGJlJywgZXhwZWN0ZWRdLmpvaW4oJyAn
KSk7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIHRlc3RzID0geworICAgICAgJ25hbWUnOiBm
dW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4gc2VhcmNoVGVybSA9PSBwcm9w
O30sCisgICAgICAnbmFtZUNvbnRhaW5zJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9w
KSB7cmV0dXJuIHByb3AuaW5kZXhPZihzZWFyY2hUZXJtKSA+IC0xO30sCisgICAgICAndHlwZSc6
IGZ1bmN0aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVybiBvYmpbcHJvcF0gaW5zdGFu
Y2VvZiBzZWFyY2hUZXJtO30sCisgICAgICAndmFsdWUnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBv
YmosIHByb3ApIHtyZXR1cm4gb2JqW3Byb3BdID09PSBzZWFyY2hUZXJtO30sCisgICAgICAndmFs
dWVDb2VyY2VkJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIG9ialtw
cm9wXSA9PSBzZWFyY2hUZXJtO30KKyAgICB9OworCisgICAgZnVuY3Rpb24gYnlOYW1lKHNlYXJj
aFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ25hbWUnLCAnc3RyaW5nJywgc2VhcmNoVGVybSwgb3B0
aW9ucyk7fQorICAgIGZ1bmN0aW9uIGJ5TmFtZUNvbnRhaW5zKHNlYXJjaFRlcm0sIG9wdGlvbnMp
IHtzZWFyY2goJ25hbWVDb250YWlucycsICdzdHJpbmcnLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9
CisgICAgZnVuY3Rpb24gYnlUeXBlKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3R5cGUn
LCAnZnVuY3Rpb24nLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9CisgICAgZnVuY3Rpb24gYnlWYWx1
ZShzZWFyY2hUZXJtLCBvcHRpb25zKSB7c2VhcmNoKCd2YWx1ZScsIG51bGwsIHNlYXJjaFRlcm0s
IG9wdGlvbnMpO30KKyAgICBmdW5jdGlvbiBieVZhbHVlQ29lcmNlZChzZWFyY2hUZXJtLCBvcHRp
b25zKSB7c2VhcmNoKCd2YWx1ZUNvZXJjZWQnLCBudWxsLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9
CisgICAgZnVuY3Rpb24gY3VzdG9tKGZuLCBvcHRpb25zKSB7dHJhdmVyc2UoZm4sIG51bGwsIG9w
dGlvbnMpO30KKworICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorICAgIC8vIEV2ZW50IGxvZ2dpbmcKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKworICAgIHZhciBBTEwgPSAnYWxsJzsgLy9ubyBmaWx0ZXIK
KworICAgIC8vbG9nIG5vdGhpbmcgYnkgZGVmYXVsdAorICAgIHZhciBsb2dGaWx0ZXIgPSB7Cisg
ICAgICBldmVudE5hbWVzOiBbXSwKKyAgICAgIGFjdGlvbnM6IFtdCisgICAgfQorCisgICAgZnVu
Y3Rpb24gZmlsdGVyRXZlbnRMb2dzQnlBY3Rpb24oLyphY3Rpb25zKi8pIHsKKyAgICAgIHZhciBh
Y3Rpb25zID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpOworCisgICAgICBsb2dGaWx0ZXIuZXZl
bnROYW1lcy5sZW5ndGggfHwgKGxvZ0ZpbHRlci5ldmVudE5hbWVzID0gQUxMKTsKKyAgICAgIGxv
Z0ZpbHRlci5hY3Rpb25zID0gYWN0aW9ucy5sZW5ndGggPyBhY3Rpb25zIDogQUxMOworICAgICAg
c2F2ZUxvZ0ZpbHRlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbHRlckV2ZW50TG9nc0J5
TmFtZSgvKmV2ZW50TmFtZXMqLykgeworICAgICAgdmFyIGV2ZW50TmFtZXMgPSBbXS5zbGljZS5j
YWxsKGFyZ3VtZW50cyk7CisKKyAgICAgIGxvZ0ZpbHRlci5hY3Rpb25zLmxlbmd0aCB8fCAobG9n
RmlsdGVyLmFjdGlvbnMgPSBBTEwpOworICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBldmVu
dE5hbWVzLmxlbmd0aCA/IGV2ZW50TmFtZXMgOiBBTEw7CisgICAgICBzYXZlTG9nRmlsdGVyKCk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gaGlkZUFsbEV2ZW50TG9ncygpIHsKKyAgICAgIGxvZ0Zp
bHRlci5hY3Rpb25zID0gW107CisgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9IFtdOworICAg
ICAgc2F2ZUxvZ0ZpbHRlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNob3dBbGxFdmVudExv
Z3MoKSB7CisgICAgICBsb2dGaWx0ZXIuYWN0aW9ucyA9IEFMTDsKKyAgICAgIGxvZ0ZpbHRlci5l
dmVudE5hbWVzID0gQUxMOworICAgICAgc2F2ZUxvZ0ZpbHRlcigpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHNhdmVMb2dGaWx0ZXIoKSB7CisgICAgICB0cnkgeworICAgICAgICBpZiAod2luZG93
LmxvY2FsU3RvcmFnZSkgeworICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsb2dGaWx0
ZXJfZXZlbnROYW1lcycsIGxvZ0ZpbHRlci5ldmVudE5hbWVzKTsKKyAgICAgICAgICBsb2NhbFN0
b3JhZ2Uuc2V0SXRlbSgnbG9nRmlsdGVyX2FjdGlvbnMnLCBsb2dGaWx0ZXIuYWN0aW9ucyk7Cisg
ICAgICAgIH0KKyAgICAgIH0gY2F0Y2ggKGlnbm9yZWQpIHt9OworICAgIH0KKworICAgIGZ1bmN0
aW9uIHJldHJpZXZlTG9nRmlsdGVyKCkgeworICAgICAgdmFyIGV2ZW50TmFtZXMsIGFjdGlvbnM7
CisgICAgICB0cnkgeworICAgICAgICBldmVudE5hbWVzID0gKHdpbmRvdy5sb2NhbFN0b3JhZ2Ug
JiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ0ZpbHRlcl9ldmVudE5hbWVzJykpOworICAgICAg
ICBhY3Rpb25zID0gKHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0o
J2xvZ0ZpbHRlcl9hY3Rpb25zJykpOworICAgICAgfSBjYXRjaCAoaWdub3JlZCkgeworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgICBldmVudE5hbWVzICYmIChsb2dGaWx0ZXIuZXZlbnRO
YW1lcyA9IGV2ZW50TmFtZXMpOworICAgICAgYWN0aW9ucyAmJiAobG9nRmlsdGVyLmFjdGlvbnMg
PSBhY3Rpb25zKTsKKworICAgICAgLy8gcmVjb25zdGl0dXRlIGFycmF5cyBpbiBwbGFjZQorICAg
ICAgT2JqZWN0LmtleXMobG9nRmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKKyAgICAgICAg
dmFyIHRoaXNQcm9wID0gbG9nRmlsdGVyW2tdOworICAgICAgICBpZiAodHlwZW9mIHRoaXNQcm9w
ID09ICdzdHJpbmcnICYmIHRoaXNQcm9wICE9PSBBTEwpIHsKKyAgICAgICAgICBsb2dGaWx0ZXJb
a10gPSB0aGlzUHJvcCA/IHRoaXNQcm9wLnNwbGl0KCcsJykgOiBbXTsKKyAgICAgICAgfQorICAg
ICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKworICAgICAgZW5hYmxlOiBmdW5jdGlvbihl
bmFibGUpIHsKKyAgICAgICAgdGhpcy5lbmFibGVkID0gISFlbmFibGU7CisKKyAgICAgICAgaWYg
KGVuYWJsZSAmJiB3aW5kb3cuY29uc29sZSkgeworICAgICAgICAgIGNvbnNvbGUuaW5mbygnQm9v
dGluZyBpbiBERUJVRyBtb2RlJyk7CisgICAgICAgICAgY29uc29sZS5pbmZvKCdZb3UgY2FuIGNv
bmZpZ3VyZSBldmVudCBsb2dnaW5nIHdpdGggREVCVUcuZXZlbnRzLmxvZ0FsbCgpL2xvZ05vbmUo
KS9sb2dCeU5hbWUoKS9sb2dCeUFjdGlvbigpJyk7CisgICAgICAgIH0KKworICAgICAgICByZXRy
aWV2ZUxvZ0ZpbHRlcigpOworCisgICAgICAgIHdpbmRvdy5ERUJVRyA9IHRoaXM7CisgICAgICB9
LAorCisgICAgICByZWdpc3RyeTogcmVnaXN0cnksCisKKyAgICAgIGZpbmQ6IHsKKyAgICAgICAg
YnlOYW1lOiBieU5hbWUsCisgICAgICAgIGJ5TmFtZUNvbnRhaW5zOiBieU5hbWVDb250YWlucywK
KyAgICAgICAgYnlUeXBlOiBieVR5cGUsCisgICAgICAgIGJ5VmFsdWU6IGJ5VmFsdWUsCisgICAg
ICAgIGJ5VmFsdWVDb2VyY2VkOiBieVZhbHVlQ29lcmNlZCwKKyAgICAgICAgY3VzdG9tOiBjdXN0
b20KKyAgICAgIH0sCisKKyAgICAgIGV2ZW50czogeworICAgICAgICBsb2dGaWx0ZXI6IGxvZ0Zp
bHRlciwKKworICAgICAgICAvLyBBY2NlcHRzIGFueSBudW1iZXIgb2YgYWN0aW9uIGFyZ3MKKyAg
ICAgICAgLy8gZS5nLiBERUJVRy5ldmVudHMubG9nQnlBY3Rpb24oIm9uIiwgIm9mZiIpCisgICAg
ICAgIGxvZ0J5QWN0aW9uOiBmaWx0ZXJFdmVudExvZ3NCeUFjdGlvbiwKKworICAgICAgICAvLyBB
Y2NlcHRzIGFueSBudW1iZXIgb2YgZXZlbnQgbmFtZSBhcmdzIChpbmMuIHJlZ2V4IG9yIHdpbGRj
YXJkcykKKyAgICAgICAgLy8gZS5nLiBERUJVRy5ldmVudHMubG9nQnlOYW1lKC91aS4qLywgIipU
aHJlYWQqIik7CisgICAgICAgIGxvZ0J5TmFtZTogZmlsdGVyRXZlbnRMb2dzQnlOYW1lLAorCisg
ICAgICAgIGxvZ0FsbDogc2hvd0FsbEV2ZW50TG9ncywKKyAgICAgICAgbG9nTm9uZTogaGlkZUFs
bEV2ZW50TG9ncworICAgICAgfQorICAgIH07CisgIH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9sb2dnZXIuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi9sb2dnZXIuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTUyYTI4OWVjZDg2NDE4ZjYyNDAwOTFmOTNmNDE1ZWU4MjFhMjMwNQotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9mbGlnaHQv
bGliL2xvZ2dlci5qcwpAQCAtMCwwICsxLDk4IEBACisvKiBDb3B5cmlnaHQgMjAxMyBUd2l0dGVy
LCBJbmMuIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZS4gaHR0cDovL29wZW5zb3VyY2Uu
b3JnL2xpY2Vuc2VzL01JVCAqLworCitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJworICBd
LAorCisgIGZ1bmN0aW9uKHV0aWxzKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIGFj
dGlvblN5bWJvbHMgPSB7CisgICAgICBvbjogJzwtJywKKyAgICAgIHRyaWdnZXI6ICctPicsCisg
ICAgICBvZmY6ICd4ICcKKyAgICB9OworCisgICAgZnVuY3Rpb24gZWxlbVRvU3RyaW5nKGVsZW0p
IHsKKyAgICAgIHZhciB0YWdTdHIgPSBlbGVtLnRhZ05hbWUgPyBlbGVtLnRhZ05hbWUudG9Mb3dl
ckNhc2UoKSA6IGVsZW0udG9TdHJpbmcoKTsKKyAgICAgIHZhciBjbGFzc1N0ciA9IGVsZW0uY2xh
c3NOYW1lID8gJy4nICsgKGVsZW0uY2xhc3NOYW1lKSA6ICcnOworICAgICAgdmFyIHJlc3VsdCA9
IHRhZ1N0ciArIGNsYXNzU3RyOworICAgICAgcmV0dXJuIGVsZW0udGFnTmFtZSA/IFsnXCcnLCAn
XCcnXS5qb2luKHJlc3VsdCkgOiByZXN1bHQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9nKGFj
dGlvbiwgY29tcG9uZW50LCBldmVudEFyZ3MpIHsKKyAgICAgIGlmICghd2luZG93LkRFQlVHIHx8
ICF3aW5kb3cuREVCVUcuZW5hYmxlZCkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAg
ICB2YXIgbmFtZSwgZXZlbnRUeXBlLCBlbGVtLCBmbiwgcGF5bG9hZCwgbG9nRmlsdGVyLCB0b1Jl
Z0V4cCwgYWN0aW9uTG9nZ2FibGUsIG5hbWVMb2dnYWJsZSwgaW5mbzsKKworICAgICAgaWYgKHR5
cGVvZiBldmVudEFyZ3NbZXZlbnRBcmdzLmxlbmd0aCAtIDFdID09ICdmdW5jdGlvbicpIHsKKyAg
ICAgICAgZm4gPSBldmVudEFyZ3MucG9wKCk7CisgICAgICAgIGZuID0gZm4udW5ib3VuZCB8fCBm
bjsgLy8gdXNlIHVuYm91bmQgdmVyc2lvbiBpZiBhbnkgKGJldHRlciBpbmZvKQorICAgICAgfQor
CisgICAgICBpZiAoZXZlbnRBcmdzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgIGVsZW0gPSBjb21w
b25lbnQuJG5vZGVbMF07CisgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50QXJnc1swXTsKKyAgICAg
IH0gZWxzZSBpZiAoKGV2ZW50QXJncy5sZW5ndGggPT0gMikgJiYgdHlwZW9mIGV2ZW50QXJnc1sx
XSA9PSAnb2JqZWN0JyAmJiAhZXZlbnRBcmdzWzFdLnR5cGUpIHsKKyAgICAgICAgLy8yIGFyZ3Ms
IGZpcnN0IGFyZyBpcyBub3QgZWxlbQorICAgICAgICBlbGVtID0gY29tcG9uZW50LiRub2RlWzBd
OworICAgICAgICBldmVudFR5cGUgPSBldmVudEFyZ3NbMF07CisgICAgICAgIGlmIChhY3Rpb24g
PT0gInRyaWdnZXIiKSB7CisgICAgICAgICAgcGF5bG9hZCA9IGV2ZW50QXJnc1sxXTsKKyAgICAg
ICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8yKyBhcmdzLCBmaXJzdCBhcmcgaXMgZWxl
bQorICAgICAgICBlbGVtID0gZXZlbnRBcmdzWzBdOworICAgICAgICBldmVudFR5cGUgPSBldmVu
dEFyZ3NbMV07CisgICAgICAgIGlmIChhY3Rpb24gPT0gInRyaWdnZXIiKSB7CisgICAgICAgICAg
cGF5bG9hZCA9IGV2ZW50QXJnc1syXTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBuYW1l
ID0gdHlwZW9mIGV2ZW50VHlwZSA9PSAnb2JqZWN0JyA/IGV2ZW50VHlwZS50eXBlIDogZXZlbnRU
eXBlOworCisgICAgICBsb2dGaWx0ZXIgPSBERUJVRy5ldmVudHMubG9nRmlsdGVyOworCisgICAg
ICAvLyBubyByZWdleCBmb3IgeW91LCBhY3Rpb25zLi4uCisgICAgICBhY3Rpb25Mb2dnYWJsZSA9
IGxvZ0ZpbHRlci5hY3Rpb25zID09ICdhbGwnIHx8IChsb2dGaWx0ZXIuYWN0aW9ucy5pbmRleE9m
KGFjdGlvbikgPiAtMSk7CisgICAgICAvLyBldmVudCBuYW1lIGZpbHRlciBhbGxvdyB3aWxkY2Fy
ZHMgb3IgcmVnZXguLi4KKyAgICAgIHRvUmVnRXhwID0gZnVuY3Rpb24oZXhwcikgeworICAgICAg
ICByZXR1cm4gZXhwci50ZXN0ID8gZXhwciA6IG5ldyBSZWdFeHAoJ14nICsgZXhwci5yZXBsYWNl
KC9cKi9nLCAnLionKSArICckJyk7CisgICAgICB9OworICAgICAgbmFtZUxvZ2dhYmxlID0KKyAg
ICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMgPT0gJ2FsbCcgfHwKKyAgICAgICAgbG9nRmlsdGVy
LmV2ZW50TmFtZXMuc29tZShmdW5jdGlvbihlKSB7cmV0dXJuIHRvUmVnRXhwKGUpLnRlc3QobmFt
ZSk7fSk7CisKKyAgICAgIGlmIChhY3Rpb25Mb2dnYWJsZSAmJiBuYW1lTG9nZ2FibGUpIHsKKyAg
ICAgICAgaW5mbyA9IFthY3Rpb25TeW1ib2xzW2FjdGlvbl0sIGFjdGlvbiwgJ1snICsgbmFtZSAr
ICddJ107CisgICAgICAgIHBheWxvYWQgJiYgaW5mby5wdXNoKHBheWxvYWQpOworICAgICAgICBp
bmZvLnB1c2goZWxlbVRvU3RyaW5nKGVsZW0pKTsKKyAgICAgICAgaW5mby5wdXNoKGNvbXBvbmVu
dC5jb25zdHJ1Y3Rvci5kZXNjcmliZS5zcGxpdCgnICcpLnNsaWNlKDAsMykuam9pbignICcpKTsK
KyAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZCAmJiBhY3Rpb24gPT0gJ3RyaWdnZXInICYm
IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoYWN0aW9uLCBuYW1lKTsKKyAgICAgICAgY29uc29sZS5p
bmZvLmFwcGx5KGNvbnNvbGUsIGluZm8pOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IHdpdGhMb2dnaW5nKCkgeworICAgICAgdGhpcy5iZWZvcmUoJ3RyaWdnZXInLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgbG9nKCd0cmlnZ2VyJywgdGhpcywgdXRpbHMudG9BcnJheShhcmd1bWVudHMp
KTsKKyAgICAgIH0pOworICAgICAgaWYgKGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQpIHsKKyAgICAg
ICAgdGhpcy5hZnRlcigndHJpZ2dlcicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGNvbnNvbGUu
Z3JvdXBFbmQoKTsKKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICB0aGlzLmJlZm9yZSgnb24n
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCdvbicsIHRoaXMsIHV0aWxzLnRvQXJyYXkoYXJn
dW1lbnRzKSk7CisgICAgICB9KTsKKyAgICAgIHRoaXMuYmVmb3JlKCdvZmYnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgbG9nKCdvZmYnLCB0aGlzLCB1dGlscy50b0FycmF5KGFyZ3VtZW50cykpOwor
ICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHdpdGhMb2dnaW5nOworICB9CispOwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2ZsaWdodC9saWIv
cmVnaXN0cnkuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0
L2xpYi9yZWdpc3RyeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjAwYjU4Njk3MTJmY2NiYWRhY2Q0ZmVkYjVl
ZGVmNmYyMDgxMzVjCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMKQEAgLTAsMCArMSwyMjQgQEAKKy8q
IENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYy4gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNl
bnNlLiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUICovCisKK2RlZmluZSgKKwor
ICBbXSwKKworICBmdW5jdGlvbigpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBmdW5jdGlv
biBwYXJzZUV2ZW50QXJncyhpbnN0YW5jZSwgYXJncykgeworICAgICAgdmFyIGVsZW1lbnQsIHR5
cGUsIGNhbGxiYWNrOworICAgICAgdmFyIGVuZCA9IGFyZ3MubGVuZ3RoOworCisgICAgICBpZiAo
dHlwZW9mIGFyZ3NbZW5kIC0gMV0gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgZW5kIC09IDE7
CisgICAgICAgIGNhbGxiYWNrID0gYXJnc1tlbmRdOworICAgICAgfQorCisgICAgICBpZiAodHlw
ZW9mIGFyZ3NbZW5kIC0gMV0gPT09ICdvYmplY3QnKSB7CisgICAgICAgIGVuZCAtPSAxOworICAg
ICAgfQorCisgICAgICBpZiAoZW5kID09IDIpIHsKKyAgICAgICAgZWxlbWVudCA9IGFyZ3NbMF07
CisgICAgICAgIHR5cGUgPSBhcmdzWzFdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxlbWVu
dCA9IGluc3RhbmNlLm5vZGU7CisgICAgICAgIHR5cGUgPSBhcmdzWzBdOworICAgICAgfQorCisg
ICAgICByZXR1cm4geworICAgICAgICBlbGVtZW50OiBlbGVtZW50LAorICAgICAgICB0eXBlOiB0
eXBlLAorICAgICAgICBjYWxsYmFjazogY2FsbGJhY2sKKyAgICAgIH07CisgICAgfQorCisgICAg
ZnVuY3Rpb24gbWF0Y2hFdmVudChhLCBiKSB7CisgICAgICByZXR1cm4gKAorICAgICAgICAoYS5l
bGVtZW50ID09IGIuZWxlbWVudCkgJiYKKyAgICAgICAgKGEudHlwZSA9PSBiLnR5cGUpICYmCisg
ICAgICAgIChiLmNhbGxiYWNrID09IG51bGwgfHwgKGEuY2FsbGJhY2sgPT0gYi5jYWxsYmFjaykp
CisgICAgICApOworICAgIH0KKworICAgIGZ1bmN0aW9uIFJlZ2lzdHJ5KCkgeworCisgICAgICB2
YXIgcmVnaXN0cnkgPSB0aGlzOworCisgICAgICAodGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0aGlzLmNvbXBvbmVudHMgPSBbXTsKKyAgICAgICAgdGhpcy5hbGxJbnN0YW5jZXMg
PSB7fTsKKyAgICAgICAgdGhpcy5ldmVudHMgPSBbXTsKKyAgICAgIH0pLmNhbGwodGhpcyk7CisK
KyAgICAgIGZ1bmN0aW9uIENvbXBvbmVudEluZm8oY29tcG9uZW50KSB7CisgICAgICAgIHRoaXMu
Y29tcG9uZW50ID0gY29tcG9uZW50OworICAgICAgICB0aGlzLmF0dGFjaGVkVG8gPSBbXTsKKyAg
ICAgICAgdGhpcy5pbnN0YW5jZXMgPSB7fTsKKworICAgICAgICB0aGlzLmFkZEluc3RhbmNlID0g
ZnVuY3Rpb24oaW5zdGFuY2UpIHsKKyAgICAgICAgICB2YXIgaW5zdGFuY2VJbmZvID0gbmV3IElu
c3RhbmNlSW5mbyhpbnN0YW5jZSk7CisgICAgICAgICAgdGhpcy5pbnN0YW5jZXNbaW5zdGFuY2Uu
aWRlbnRpdHldID0gaW5zdGFuY2VJbmZvOworICAgICAgICAgIHRoaXMuYXR0YWNoZWRUby5wdXNo
KGluc3RhbmNlLm5vZGUpOworCisgICAgICAgICAgcmV0dXJuIGluc3RhbmNlSW5mbzsKKyAgICAg
ICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZUluc3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2Up
IHsKKyAgICAgICAgICBkZWxldGUgdGhpcy5pbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldOwor
ICAgICAgICAgIHZhciBpbmRleE9mTm9kZSA9IHRoaXMuYXR0YWNoZWRUby5pbmRleE9mKGluc3Rh
bmNlLm5vZGUpOworICAgICAgICAgIChpbmRleE9mTm9kZSA+IC0xKSAmJiB0aGlzLmF0dGFjaGVk
VG8uc3BsaWNlKGluZGV4T2ZOb2RlLCAxKTsKKworICAgICAgICAgIGlmICghT2JqZWN0LmtleXMo
dGhpcy5pbnN0YW5jZXMpLmxlbmd0aCkgeworICAgICAgICAgICAgLy9pZiBJIGhvbGQgbm8gbW9y
ZSBpbnN0YW5jZXMgcmVtb3ZlIG1lIGZyb20gcmVnaXN0cnkKKyAgICAgICAgICAgIHJlZ2lzdHJ5
LnJlbW92ZUNvbXBvbmVudEluZm8odGhpcyk7CisgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgICAgIHRoaXMuaXNBdHRhY2hlZFRvID0gZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgIHJl
dHVybiB0aGlzLmF0dGFjaGVkVG8uaW5kZXhPZihub2RlKSA+IC0xOworICAgICAgICB9OworICAg
ICAgfQorCisgICAgICBmdW5jdGlvbiBJbnN0YW5jZUluZm8oaW5zdGFuY2UpIHsKKyAgICAgICAg
dGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlOworICAgICAgICB0aGlzLmV2ZW50cyA9IFtdOworCisg
ICAgICAgIHRoaXMuYWRkQmluZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgdGhpcy5l
dmVudHMucHVzaChldmVudCk7CisgICAgICAgICAgcmVnaXN0cnkuZXZlbnRzLnB1c2goZXZlbnQp
OworICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVtb3ZlQmluZCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGU7IGUgPSB0aGlzLmV2ZW50c1tpXTsgaSsr
KSB7CisgICAgICAgICAgICBpZiAobWF0Y2hFdmVudChlLCBldmVudCkpIHsKKyAgICAgICAgICAg
ICAgdGhpcy5ldmVudHMuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgIH0KKworICAgICAgdGhpcy5hZGRJbnN0YW5jZSA9IGZ1bmN0aW9u
KGluc3RhbmNlKSB7CisgICAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmZpbmRDb21wb25lbnRJ
bmZvKGluc3RhbmNlKTsKKworICAgICAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICAgIGNv
bXBvbmVudCA9IG5ldyBDb21wb25lbnRJbmZvKGluc3RhbmNlLmNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgICB0aGlzLmNvbXBvbmVudHMucHVzaChjb21wb25lbnQpOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIGluc3QgPSBjb21wb25lbnQuYWRkSW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAgICAg
IHRoaXMuYWxsSW5zdGFuY2VzW2luc3RhbmNlLmlkZW50aXR5XSA9IGluc3Q7CisKKyAgICAgICAg
cmV0dXJuIGNvbXBvbmVudDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMucmVtb3ZlSW5zdGFuY2Ug
PSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICAvL3JlbW92ZSBmcm9tIGNvbXBvbmVudCBp
bmZvCisgICAgICAgIHZhciBjb21wb25lbnRJbmZvID0gdGhpcy5maW5kQ29tcG9uZW50SW5mbyhp
bnN0YW5jZSk7CisgICAgICAgIGNvbXBvbmVudEluZm8gJiYgY29tcG9uZW50SW5mby5yZW1vdmVJ
bnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAgICAgLy9yZW1vdmUgZnJvbSByZWdpc3RyeQorICAg
ICAgICBkZWxldGUgdGhpcy5hbGxJbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldOworICAgICAg
fTsKKworICAgICAgdGhpcy5yZW1vdmVDb21wb25lbnRJbmZvID0gZnVuY3Rpb24oY29tcG9uZW50
SW5mbykgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbXBvbmVudHMuaW5kZXhPZihjb21w
b25lbnRJbmZvKTsKKyAgICAgICAgKGluZGV4ID4gLTEpICYmIHRoaXMuY29tcG9uZW50cy5zcGxp
Y2UoaW5kZXgsIDEpOworICAgICAgfTsKKworICAgICAgdGhpcy5maW5kQ29tcG9uZW50SW5mbyA9
IGZ1bmN0aW9uKHdoaWNoKSB7CisgICAgICAgIHZhciBjb21wb25lbnQgPSB3aGljaC5hdHRhY2hU
byA/IHdoaWNoIDogd2hpY2guY29uc3RydWN0b3I7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGM7IGMgPSB0aGlzLmNvbXBvbmVudHNbaV07IGkrKykgeworICAgICAgICAgIGlmIChjLmNvbXBv
bmVudCA9PT0gY29tcG9uZW50KSB7CisgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH07CisKKyAgICAgIHRo
aXMuZmluZEluc3RhbmNlSW5mbyA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgICAgIHJldHVy
biB0aGlzLmFsbEluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV0gfHwgbnVsbDsKKyAgICAgIH07
CisKKyAgICAgIHRoaXMuZ2V0Qm91bmRFdmVudE5hbWVzID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuZmluZEluc3RhbmNlSW5mbyhpbnN0YW5jZSkuZXZlbnRzLm1h
cChmdW5jdGlvbihldikgeworICAgICAgICAgIHJldHVybiBldi50eXBlOworICAgICAgICB9KTsK
KyAgICAgIH07CisKKyAgICAgIHRoaXMuZmluZEluc3RhbmNlSW5mb0J5Tm9kZSA9IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICBPYmplY3Qua2V5cyh0
aGlzLmFsbEluc3RhbmNlcykuZm9yRWFjaChmdW5jdGlvbihrKSB7CisgICAgICAgICAgdmFyIHRo
aXNJbnN0YW5jZUluZm8gPSB0aGlzLmFsbEluc3RhbmNlc1trXTsKKyAgICAgICAgICBpZiAodGhp
c0luc3RhbmNlSW5mby5pbnN0YW5jZS5ub2RlID09PSBub2RlKSB7CisgICAgICAgICAgICByZXN1
bHQucHVzaCh0aGlzSW5zdGFuY2VJbmZvKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIHRoaXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfTsKKworICAgICAgdGhpcy5vbiA9IGZ1
bmN0aW9uKGNvbXBvbmVudE9uKSB7CisgICAgICAgIHZhciBpbnN0YW5jZSA9IHJlZ2lzdHJ5LmZp
bmRJbnN0YW5jZUluZm8odGhpcyksIGJvdW5kQ2FsbGJhY2s7CisKKyAgICAgICAgLy8gdW5wYWNr
aW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgorICAgICAgICB2YXIgbCA9
IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSAxOworICAgICAgICB2YXIgb3RoZXJBcmdzID0gbmV3IEFy
cmF5KGwgLSAxKTsKKyAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICBvdGhl
ckFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlu
c3RhbmNlKSB7CisgICAgICAgICAgYm91bmRDYWxsYmFjayA9IGNvbXBvbmVudE9uLmFwcGx5KG51
bGwsIG90aGVyQXJncyk7CisgICAgICAgICAgaWYgKGJvdW5kQ2FsbGJhY2spIHsKKyAgICAgICAg
ICAgIG90aGVyQXJnc1tvdGhlckFyZ3MubGVuZ3RoIC0gMV0gPSBib3VuZENhbGxiYWNrOworICAg
ICAgICAgIH0KKyAgICAgICAgICB2YXIgZXZlbnQgPSBwYXJzZUV2ZW50QXJncyh0aGlzLCBvdGhl
ckFyZ3MpOworICAgICAgICAgIGluc3RhbmNlLmFkZEJpbmQoZXZlbnQpOworICAgICAgICB9Cisg
ICAgICB9OworCisgICAgICB0aGlzLm9mZiA9IGZ1bmN0aW9uKC8qZWwsIHR5cGUsIGNhbGxiYWNr
Ki8pIHsKKyAgICAgICAgdmFyIGV2ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgYXJndW1lbnRz
KSwKKyAgICAgICAgICAgIGluc3RhbmNlID0gcmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlz
KTsKKworICAgICAgICBpZiAoaW5zdGFuY2UpIHsKKyAgICAgICAgICBpbnN0YW5jZS5yZW1vdmVC
aW5kKGV2ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vcmVtb3ZlIGZyb20gZ2xvYmFsIGV2
ZW50IHJlZ2lzdHJ5CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBlOyBlID0gcmVnaXN0cnkuZXZl
bnRzW2ldOyBpKyspIHsKKyAgICAgICAgICBpZiAobWF0Y2hFdmVudChlLCBldmVudCkpIHsKKyAg
ICAgICAgICAgIHJlZ2lzdHJ5LmV2ZW50cy5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICB9OworCisgICAgICAvLyBkZWJ1ZyB0b29scyBtYXkgd2FudCB0byBhZGQg
YWR2aWNlIHRvIHRyaWdnZXIKKyAgICAgIHJlZ2lzdHJ5LnRyaWdnZXIgPSBmdW5jdGlvbigpIHt9
OworCisgICAgICB0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJlZ2lzdHJ5
LnJlbW92ZUluc3RhbmNlKHRoaXMpOworICAgICAgfTsKKworICAgICAgdGhpcy53aXRoUmVnaXN0
cmF0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICByZWdpc3RyeS5hZGRJbnN0YW5jZSh0aGlzKTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgdGhpcy5hcm91bmQoJ29uJywgcmVnaXN0cnkub24pOworICAgICAg
ICB0aGlzLmFmdGVyKCdvZmYnLCByZWdpc3RyeS5vZmYpOworICAgICAgICAvL2RlYnVnIHRvb2xz
IG1heSB3YW50IHRvIGFkZCBhZHZpY2UgdG8gdHJpZ2dlcgorICAgICAgICB3aW5kb3cuREVCVUcg
JiYgREVCVUcuZW5hYmxlZCAmJiB0aGlzLmFmdGVyKCd0cmlnZ2VyJywgcmVnaXN0cnkudHJpZ2dl
cik7CisgICAgICAgIHRoaXMuYWZ0ZXIoJ3RlYXJkb3duJywge29iajogcmVnaXN0cnksIGZuTmFt
ZTogJ3RlYXJkb3duJ30pOworICAgICAgfTsKKworICAgIH0KKworICAgIHJldHVybiBuZXcgUmVn
aXN0cnk7CisgIH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2Rl
X21vZHVsZXMvZmxpZ2h0L2xpYi91dGlscy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25v
ZGVfbW9kdWxlcy9mbGlnaHQvbGliL3V0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMTBiNTc0ZjJmN2E2
OGRjY2E0NDA0ZDQ2ZDEyMWRmMWI1Yzg4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvZmxpZ2h0L2xpYi91dGlscy5qcwpAQCAtMCwwICsx
LDMwNCBAQAorLyogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLiBMaWNlbnNlZCB1bmRlciBU
aGUgTUlUIExpY2Vuc2UuIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQgKi8KKwor
ZGVmaW5lKAorCisgIFsnLi9kZWJ1ZyddLAorCisgIGZ1bmN0aW9uKGRlYnVnKSB7CisgICAgJ3Vz
ZSBzdHJpY3QnOworCisgICAgdmFyIERFRkFVTFRfSU5URVJWQUwgPSAxMDA7CisKKyAgICBmdW5j
dGlvbiBjYW5Xcml0ZVByb3RlY3QoKSB7CisgICAgICB2YXIgd3JpdGVQcm90ZWN0U3VwcG9ydGVk
ID0gZGVidWcuZW5hYmxlZCAmJiAhT2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlKCdnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3InKTsKKyAgICAgIGlmICh3cml0ZVByb3RlY3RTdXBwb3J0ZWQpIHsK
KyAgICAgICAgLy9JRTggZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGlzIGJ1aWx0LWluIGJ1dCB0
aHJvd3MgZXhlcHRpb24gb24gbm9uIERPTSBvYmplY3RzCisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QsICdrZXlzJyk7CisgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgfQorCisgICAgICByZXR1cm4gd3JpdGVQcm90ZWN0U3VwcG9ydGVkOworICAgIH0KKworICAg
IHZhciB1dGlscyA9IHsKKworICAgICAgaXNEb21PYmo6IGZ1bmN0aW9uKG9iaikgeworICAgICAg
ICByZXR1cm4gISEob2JqLm5vZGVUeXBlIHx8IChvYmogPT09IHdpbmRvdykpOworICAgICAgfSwK
KworICAgICAgdG9BcnJheTogZnVuY3Rpb24ob2JqLCBmcm9tKSB7CisgICAgICAgIGZyb20gPSBm
cm9tIHx8IDA7CisgICAgICAgIHZhciBsZW4gPSBvYmoubGVuZ3RoLCBhcnIgPSBuZXcgQXJyYXko
bGVuIC0gZnJvbSk7CisgICAgICAgIGZvciAodmFyIGkgPSBmcm9tOyBpIDwgbGVuOyBpKyspIHsK
KyAgICAgICAgICBhcnJbaSAtIGZyb21dID0gb2JqW2ldOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBhcnI7CisgICAgICB9LAorCisgICAgICAvLyByZXR1cm5zIG5ldyBvYmplY3QgcmVwcmVz
ZW50aW5nIG11bHRpcGxlIG9iamVjdHMgbWVyZ2VkIHRvZ2V0aGVyCisgICAgICAvLyBvcHRpb25h
bCBmaW5hbCBhcmd1bWVudCBpcyBib29sZWFuIHdoaWNoIHNwZWNpZmllcyBpZiBtZXJnZSBpcyBy
ZWN1cnNpdmUKKyAgICAgIC8vIG9yaWdpbmFsIG9iamVjdHMgYXJlIHVubW9kaWZpZWQKKyAgICAg
IC8vCisgICAgICAvLyB1c2FnZToKKyAgICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9Owor
ICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YjozLCBjOjR9OworICAgICAgLy8gICBtZXJnZShiYXNl
LCBleHRyYSk7IC8ve2E6MiwgYjozLCBjOjR9CisgICAgICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2
fQorICAgICAgLy8KKyAgICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OworICAgICAgLy8g
ICB2YXIgZXh0cmEgPSB7YjozLCBjOjR9OworICAgICAgLy8gICB2YXIgZXh0cmFFeHRyYSA9IHth
OjQsIGQ6OX07CisgICAgICAvLyAgIG1lcmdlKGJhc2UsIGV4dHJhLCBleHRyYUV4dHJhKTsgLy97
YTo0LCBiOjMsIGM6NC4gZDogOX0KKyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9CisgICAg
ICAvLworICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6e2JiOjQsIGNjOjV9fTsKKyAgICAg
IC8vICAgdmFyIGV4dHJhID0ge2E6NCwgYjp7Y2M6NywgZGQ6MX19OworICAgICAgLy8gICBtZXJn
ZShiYXNlLCBleHRyYSwgdHJ1ZSk7IC8ve2E6NCwgYjp7YmI6NCwgY2M6NywgZGQ6MX19CisgICAg
ICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2fQorCisgICAgICBtZXJnZTogZnVuY3Rpb24oLypvYmox
LCBvYmoyLC4uLi5kZWVwQ29weSovKSB7CisgICAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMg
YnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVu
Z3RoLAorICAgICAgICAgICAgYXJncyA9IG5ldyBBcnJheShsICsgMSk7CisKKyAgICAgICAgaWYg
KGwgPT09IDApIHsKKyAgICAgICAgICByZXR1cm4ge307CisgICAgICAgIH0KKworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICAgIGFyZ3NbaSArIDFdID0gYXJn
dW1lbnRzW2ldOworICAgICAgICB9CisKKyAgICAgICAgLy9zdGFydCB3aXRoIGVtcHR5IG9iamVj
dCBzbyBhIGNvcHkgaXMgY3JlYXRlZAorICAgICAgICBhcmdzWzBdID0ge307CisKKyAgICAgICAg
aWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gdHJ1ZSkgeworICAgICAgICAgIC8vanF1ZXJ5
IGV4dGVuZCByZXF1aXJlcyBkZWVwIGNvcHkgYXMgZmlyc3QgYXJnCisgICAgICAgICAgYXJncy5w
b3AoKTsKKyAgICAgICAgICBhcmdzLnVuc2hpZnQodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gJC5leHRlbmQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsKKyAgICAgIH0sCisKKyAg
ICAgIC8vIHVwZGF0ZXMgYmFzZSBpbiBwbGFjZSBieSBjb3B5aW5nIHByb3BlcnRpZXMgb2YgZXh0
cmEgdG8gaXQKKyAgICAgIC8vIG9wdGlvbmFsbHkgY2xvYmJlciBwcm90ZWN0ZWQKKyAgICAgIC8v
IHVzYWdlOgorICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6Nn07CisgICAgICAvLyAgIHZh
ciBleHRyYSA9IHtjOjR9OworICAgICAgLy8gICBwdXNoKGJhc2UsIGV4dHJhKTsgLy97YToyLCBi
OjYsIGM6NH0KKyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjYsIGM6NH0KKyAgICAgIC8vCisg
ICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2fTsKKyAgICAgIC8vICAgdmFyIGV4dHJhID0g
e2I6IDQgYzo0fTsKKyAgICAgIC8vICAgcHVzaChiYXNlLCBleHRyYSwgdHJ1ZSk7IC8vRXJyb3Ig
KCJ1dGlscy5wdXNoIGF0dGVtcHRlZCB0byBvdmVyd3JpdGUgJ2InIHdoaWxlIHJ1bm5pbmcgaW4g
cHJvdGVjdGVkIG1vZGUiKQorICAgICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Nn0KKyAgICAgIC8v
CisgICAgICAvLyBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5IHdpbGwgbWVyZ2UgcmVjdXJzaXZl
bHkgd2hlbiBwcm90ZWN0IGlzIGZhbHNlCisgICAgICAvLyBlZzoKKyAgICAgIC8vIHZhciBiYXNl
ID0ge2E6MTYsIGI6e2JiOjQsIGNjOjEwfX07CisgICAgICAvLyB2YXIgZXh0cmEgPSB7Yjp7Y2M6
MjUsIGRkOjE5fSwgYzo1fTsKKyAgICAgIC8vIHB1c2goYmFzZSwgZXh0cmEpOyAvL3thOjE2LCB7
YmI6NCwgY2M6MjUsIGRkOjE5fSwgYzo1fQorICAgICAgLy8KKyAgICAgIHB1c2g6IGZ1bmN0aW9u
KGJhc2UsIGV4dHJhLCBwcm90ZWN0KSB7CisgICAgICAgIGlmIChiYXNlKSB7CisgICAgICAgICAg
T2JqZWN0LmtleXMoZXh0cmEgfHwge30pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAg
ICAgICBpZiAoYmFzZVtrZXldICYmIHByb3RlY3QpIHsKKyAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCd1dGlscy5wdXNoIGF0dGVtcHRlZCB0byBvdmVyd3JpdGUgIicgKyBrZXkgKyAnIiB3
aGlsZSBydW5uaW5nIGluIHByb3RlY3RlZCBtb2RlJyk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICh0eXBlb2YgYmFzZVtrZXldID09ICdvYmplY3QnICYmIHR5cGVvZiBleHRyYVtr
ZXldID09ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgIC8vIHJlY3Vyc2UKKyAgICAgICAgICAg
ICAgdGhpcy5wdXNoKGJhc2Vba2V5XSwgZXh0cmFba2V5XSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAvLyBubyBwcm90ZWN0LCBzbyBleHRyYSB3aW5zCisgICAgICAgICAg
ICAgIGJhc2Vba2V5XSA9IGV4dHJhW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwg
dGhpcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYmFzZTsKKyAgICAgIH0sCisKKyAg
ICAgIC8vIElmIG9iai5rZXkgcG9pbnRzIHRvIGFuIGVudW1lcmFibGUgcHJvcGVydHksIHJldHVy
biBpdHMgdmFsdWUKKyAgICAgIC8vIElmIG9iai5rZXkgcG9pbnRzIHRvIGEgbm9uLWVudW1lcmFi
bGUgcHJvcGVydHksIHJldHVybiB1bmRlZmluZWQKKyAgICAgIGdldEVudW1lcmFibGVQcm9wZXJ0
eTogZnVuY3Rpb24ob2JqLCBrZXkpIHsKKyAgICAgICAgcmV0dXJuIG9iai5wcm9wZXJ0eUlzRW51
bWVyYWJsZShrZXkpID8gb2JqW2tleV0gOiB1bmRlZmluZWQ7CisgICAgICB9LAorCisgICAgICAv
LyBidWlsZCBhIGZ1bmN0aW9uIGZyb20gb3RoZXIgZnVuY3Rpb24ocykKKyAgICAgIC8vIHV0aWxz
LmNvbXBvc2UoYSxiLGMpIC0+IGEoYihjKCkpKTsKKyAgICAgIC8vIGltcGxlbWVudGF0aW9uIGxp
ZnRlZCBmcm9tIHVuZGVyc2NvcmUuanMgKGMpIDIwMDktMjAxMiBKZXJlbXkgQXNoa2VuYXMKKyAg
ICAgIGNvbXBvc2U6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZnVuY3MgPSBhcmd1bWVudHM7
CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBhcmdzID0gYXJn
dW1lbnRzOworCisgICAgICAgICAgZm9yICh2YXIgaSA9IGZ1bmNzLmxlbmd0aCAtIDE7IGkgPj0g
MDsgaS0tKSB7CisgICAgICAgICAgICBhcmdzID0gW2Z1bmNzW2ldLmFwcGx5KHRoaXMsIGFyZ3Mp
XTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4gYXJnc1swXTsKKyAgICAgICAgfTsK
KyAgICAgIH0sCisKKyAgICAgIC8vIENhbiBvbmx5IHVuaXF1ZSBhcnJheXMgb2YgaG9tb2dlbmVv
dXMgcHJpbWl0aXZlcywgZS5nLiBhbiBhcnJheSBvZiBvbmx5IHN0cmluZ3MsIGFuIGFycmF5IG9m
IG9ubHkgYm9vbGVhbnMsIG9yIGFuIGFycmF5IG9mIG9ubHkgbnVtZXJpY3MKKyAgICAgIHVuaXF1
ZUFycmF5OiBmdW5jdGlvbihhcnJheSkgeworICAgICAgICB2YXIgdSA9IHt9LCBhID0gW107CisK
KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyArK2kpIHsK
KyAgICAgICAgICBpZiAodS5oYXNPd25Qcm9wZXJ0eShhcnJheVtpXSkpIHsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIGEucHVzaChhcnJheVtpXSk7Cisg
ICAgICAgICAgdVthcnJheVtpXV0gPSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGE7
CisgICAgICB9LAorCisgICAgICBkZWJvdW5jZTogZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRp
YXRlKSB7CisgICAgICAgIGlmICh0eXBlb2Ygd2FpdCAhPSAnbnVtYmVyJykgeworICAgICAgICAg
IHdhaXQgPSBERUZBVUxUX0lOVEVSVkFMOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRpbWVv
dXQsIHJlc3VsdDsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFy
IGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOworICAgICAgICAgIHZhciBsYXRlciA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBp
ZiAoIWltbWVkaWF0ZSkgeworICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRl
eHQsIGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgICAgdmFyIGNh
bGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7CisKKyAgICAgICAgICB0aW1lb3V0ICYmIGNs
ZWFyVGltZW91dCh0aW1lb3V0KTsKKyAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRl
ciwgd2FpdCk7CisKKyAgICAgICAgICBpZiAoY2FsbE5vdykgeworICAgICAgICAgICAgcmVzdWx0
ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgfSwKKworICAgICAgdGhyb3R0bGU6IGZ1
bmN0aW9uKGZ1bmMsIHdhaXQpIHsKKyAgICAgICAgaWYgKHR5cGVvZiB3YWl0ICE9ICdudW1iZXIn
KSB7CisgICAgICAgICAgd2FpdCA9IERFRkFVTFRfSU5URVJWQUw7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgdGhyb3R0bGluZywgbW9yZSwgcmVzdWx0
OworICAgICAgICB2YXIgd2hlbkRvbmUgPSB0aGlzLmRlYm91bmNlKGZ1bmN0aW9uKCkgeworICAg
ICAgICAgIG1vcmUgPSB0aHJvdHRsaW5nID0gZmFsc2U7CisgICAgICAgIH0sIHdhaXQpOworCisg
ICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBjb250ZXh0ID0gdGhpczsgYXJn
cyA9IGFyZ3VtZW50czsKKyAgICAgICAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHRpbWVvdXQgPSBudWxsOworICAgICAgICAgICAgaWYgKG1vcmUpIHsKKyAgICAgICAg
ICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHdoZW5Eb25lKCk7CisgICAgICAgICAgfTsKKworICAgICAgICAgIGlmICgh
dGltZW91dCkgeworICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQp
OworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICh0aHJvdHRsaW5nKSB7CisgICAgICAgICAg
ICBtb3JlID0gdHJ1ZTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3R0bGlu
ZyA9IHRydWU7CisgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
OworICAgICAgICAgIH0KKworICAgICAgICAgIHdoZW5Eb25lKCk7CisgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAgICAgIGNvdW50VGhlbjogZnVuY3Rp
b24obnVtLCBiYXNlKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBp
ZiAoIS0tbnVtKSB7IHJldHVybiBiYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KKyAgICAg
ICAgfTsKKyAgICAgIH0sCisKKyAgICAgIGRlbGVnYXRlOiBmdW5jdGlvbihydWxlcykgeworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oZSwgZGF0YSkgeworICAgICAgICAgIHZhciB0YXJnZXQgPSAk
KGUudGFyZ2V0KSwgcGFyZW50OworCisgICAgICAgICAgT2JqZWN0LmtleXMocnVsZXMpLmZvckVh
Y2goZnVuY3Rpb24oc2VsZWN0b3IpIHsKKyAgICAgICAgICAgIGlmICghZS5pc1Byb3BhZ2F0aW9u
U3RvcHBlZCgpICYmIChwYXJlbnQgPSB0YXJnZXQuY2xvc2VzdChzZWxlY3RvcikpLmxlbmd0aCkg
eworICAgICAgICAgICAgICBkYXRhID0gZGF0YSB8fCB7fTsKKyAgICAgICAgICAgICAgZGF0YS5l
bCA9IHBhcmVudFswXTsKKyAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzW3NlbGVjdG9yXS5hcHBs
eSh0aGlzLCBbZSwgZGF0YV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHRoaXMpOwor
ICAgICAgICB9OworICAgICAgfSwKKworICAgICAgLy8gZW5zdXJlcyB0aGF0IGEgZnVuY3Rpb24g
d2lsbCBvbmx5IGJlIGNhbGxlZCBvbmNlLgorICAgICAgLy8gdXNhZ2U6CisgICAgICAvLyB3aWxs
IG9ubHkgY3JlYXRlIHRoZSBhcHBsaWNhdGlvbiBvbmNlCisgICAgICAvLyAgIHZhciBpbml0aWFs
aXplID0gdXRpbHMub25jZShjcmVhdGVBcHBsaWNhdGlvbikKKyAgICAgIC8vICAgICBpbml0aWFs
aXplKCk7CisgICAgICAvLyAgICAgaW5pdGlhbGl6ZSgpOworICAgICAgLy8KKyAgICAgIC8vIHdp
bGwgb25seSBkZWxldGUgYSByZWNvcmQgb25jZQorICAgICAgLy8gICB2YXIgbXlIYW5sZGVyID0g
ZnVuY3Rpb24gKCkgeworICAgICAgLy8gICAgICQuYWpheCh7dHlwZTogJ0RFTEVURScsIHVybDog
J3NvbWV1cmwuY29tJywgZGF0YToge2lkOiAxfX0pOworICAgICAgLy8gICB9OworICAgICAgLy8g
ICB0aGlzLm9uKCdjbGljaycsIHV0aWxzLm9uY2UobXlIYW5kbGVyKSk7CisgICAgICAvLworICAg
ICAgb25jZTogZnVuY3Rpb24oZnVuYykgeworICAgICAgICB2YXIgcmFuLCByZXN1bHQ7CisKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlmIChyYW4pIHsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmFuID0gdHJ1ZTsK
KyAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgfSwKKworICAgICAgcHJvcGVy
dHlXcml0YWJpbGl0eTogZnVuY3Rpb24ob2JqLCBwcm9wLCB3cml0YWJsZSkgeworICAgICAgICBp
ZiAoY2FuV3JpdGVQcm90ZWN0KCkgJiYgb2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7CisgICAg
ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB3cml0YWJsZTogd3JpdGFi
bGUgfSk7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIC8vIFByb3BlcnR5IGxvY2tpbmcv
dW5sb2NraW5nCisgICAgICBtdXRhdGVQcm9wZXJ0eTogZnVuY3Rpb24ob2JqLCBwcm9wLCBvcCkg
eworICAgICAgICB2YXIgd3JpdGFibGU7CisKKyAgICAgICAgaWYgKCFjYW5Xcml0ZVByb3RlY3Qo
KSB8fCAhb2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7CisgICAgICAgICAgb3AuY2FsbChvYmop
OworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHdyaXRhYmxlID0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApLndyaXRhYmxlOworCisgICAg
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsgd3JpdGFibGU6IHRydWUgfSk7
CisgICAgICAgIG9wLmNhbGwob2JqKTsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9i
aiwgcHJvcCwgeyB3cml0YWJsZTogd3JpdGFibGUgfSk7CisKKyAgICAgIH0KKworICAgIH07CisK
KyAgICByZXR1cm4gdXRpbHM7CisgIH0KKyk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L2ZsaWdodC9ub2RlX21vZHVsZXMvanF1ZXJ5L1JFQURNRS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhMzE3NGE3
NzgxZTA4OTI4ZDM5MTZlNTY3YWJmZWJkNmU5NTAwMmEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvanF1ZXJ5L1JFQURNRS5tZApAQCAtMCww
ICsxLDY1IEBACisjIGpRdWVyeQorCis+IGpRdWVyeSBpcyBhIGZhc3QsIHNtYWxsLCBhbmQgZmVh
dHVyZS1yaWNoIEphdmFTY3JpcHQgbGlicmFyeS4KKworRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0
byBnZXQgc3RhcnRlZCBhbmQgaG93IHRvIHVzZSBqUXVlcnksIHBsZWFzZSBzZWUgW2pRdWVyeSdz
IGRvY3VtZW50YXRpb25dKGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS8pLgorRm9yIHNvdXJjZSBmaWxl
cyBhbmQgaXNzdWVzLCBwbGVhc2UgdmlzaXQgdGhlIFtqUXVlcnkgcmVwb10oaHR0cHM6Ly9naXRo
dWIuY29tL2pxdWVyeS9qcXVlcnkpLgorCisjIyBJbmNsdWRpbmcgalF1ZXJ5CisKK0JlbG93IGFy
ZSBzb21lIG9mIHRoZSBtb3N0IGNvbW1vbiB3YXlzIHRvIGluY2x1ZGUgalF1ZXJ5LgorCisjIyMg
QnJvd3NlcgorCisjIyMjIFNjcmlwdCB0YWcKKworYGBgaHRtbAorPHNjcmlwdCBzcmM9Imh0dHBz
Oi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0yLjIuMC5taW4uanMiPjwvc2NyaXB0PgorYGBgCisK
KyMjIyMgQmFiZWwKKworW0JhYmVsXShodHRwOi8vYmFiZWxqcy5pby8pIGlzIGEgbmV4dCBnZW5l
cmF0aW9uIEphdmFTY3JpcHQgY29tcGlsZXIuIE9uZSBvZiB0aGUgZmVhdHVyZXMgaXMgdGhlIGFi
aWxpdHkgdG8gdXNlIEVTNi9FUzIwMTUgbW9kdWxlcyBub3csIGV2ZW4gdGhvdWdoIGJyb3dzZXJz
IGRvIG5vdCB5ZXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUgbmF0aXZlbHkuCisKK2BgYGpzCitpbXBv
cnQgJCBmcm9tICJqcXVlcnkiOworYGBgCisKKyMjIyMgQnJvd3NlcmlmeS9XZWJwYWNrCisKK1Ro
ZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gdXNlIFtCcm93c2VyaWZ5XShodHRwOi8vYnJvd3Nlcmlm
eS5vcmcvKSBhbmQgW1dlYnBhY2tdKGh0dHBzOi8vd2VicGFjay5naXRodWIuaW8vKS4gRm9yIG1v
cmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlc2UgdG9vbHMsIHBsZWFzZSByZWZlciB0byB0aGUg
Y29ycmVzcG9uZGluZyBwcm9qZWN0J3MgZG9jdW1lbnRpb24uIEluIHRoZSBzY3JpcHQsIGluY2x1
ZGluZyBqUXVlcnkgd2lsbCB1c3VhbGx5IGxvb2sgbGlrZSB0aGlzLi4uCisKK2BgYGpzCit2YXIg
JCA9IHJlcXVpcmUoImpxdWVyeSIpOworYGBgCisKKyMjIyMgQU1EIChBc3luY2hyb25vdXMgTW9k
dWxlIERlZmluaXRpb24pCisKK0FNRCBpcyBhIG1vZHVsZSBmb3JtYXQgYnVpbHQgZm9yIHRoZSBi
cm93c2VyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgd2UgcmVjb21tZW5kIFtyZXF1aXJlLmpzJyBk
b2N1bWVudGF0aW9uXShodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL3doeWFtZC5odG1sKS4KKwor
YGBganMKK2RlZmluZShbImpxdWVyeSJdLCBmdW5jdGlvbigkKSB7CisKK30pOworYGBgCisKKyMj
IyBOb2RlCisKK1RvIGluY2x1ZGUgalF1ZXJ5IGluIFtOb2RlXShub2RlanMub3JnKSwgZmlyc3Qg
aW5zdGFsbCB3aXRoIG5wbS4KKworYGBgc2gKK25wbSBpbnN0YWxsIGpxdWVyeQorYGBgCisKK0Zv
ciBqUXVlcnkgdG8gd29yayBpbiBOb2RlLCBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQgaXMgcmVx
dWlyZWQuIFNpbmNlIG5vIHN1Y2ggd2luZG93IGV4aXN0cyBuYXRpdmVseSBpbiBOb2RlLCBvbmUg
Y2FuIGJlIG1vY2tlZCBieSB0b29scyBzdWNoIGFzIFtqc2RvbV0oaHR0cHM6Ly9naXRodWIuY29t
L3RtcHZhci9qc2RvbSkuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4K
KworYGBganMKK3JlcXVpcmUoImpzZG9tIikuZW52KCIiLCBmdW5jdGlvbihlcnIsIHdpbmRvdykg
eworCWlmIChlcnIpIHsKKwkJY29uc29sZS5lcnJvcihlcnIpOworCQlyZXR1cm47CisJfQorCisJ
dmFyICQgPSByZXF1aXJlKCJqcXVlcnkiKSh3aW5kb3cpOworfSk7CitgYGAKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnku
anMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1
ZXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg1OGE1YTk1MGRjZGNmM2NhYWYwNGZjOWY2YjFkY2NkNTMxNmE5
ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzCkBAIC0wLDAgKzEsOTgxNCBAQAorLyohCisgKiBqUXVl
cnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYyLjIuNAorICogaHR0cDovL2pxdWVyeS5jb20vCisgKgor
ICogSW5jbHVkZXMgU2l6emxlLmpzCisgKiBodHRwOi8vc2l6emxlanMuY29tLworICoKKyAqIENv
cHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxl
YXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UK
KyAqCisgKiBEYXRlOiAyMDE2LTA1LTIwVDE3OjIzWgorICovCisKKyhmdW5jdGlvbiggZ2xvYmFs
LCBmYWN0b3J5ICkgeworCisgICAgaWYgKCB0eXBlb2YgbW9kdWxlID09PSAib2JqZWN0IiAmJiB0
eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3QiICkgeworICAgICAgICAvLyBGb3IgQ29t
bW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5k
b3dgCisgICAgICAgIC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBq
UXVlcnkuCisgICAgICAgIC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3
aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgCisgICAgICAgIC8vIChzdWNoIGFzIE5vZGUuanMpLCBl
eHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLgorICAgICAgICAvLyBUaGlzIGFjY2Vu
dHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLgorICAg
ICAgICAvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKCJqcXVlcnkiKSh3aW5kb3cpOworICAg
ICAgICAvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLgorICAgICAgICBtb2R1bGUu
ZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/CisgICAgICAgICAgICBmYWN0b3J5KCBnbG9iYWws
IHRydWUgKSA6CisgICAgICAgICAgICBmdW5jdGlvbiggdyApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoICF3LmRvY3VtZW50ICkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
ICJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50IiApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSggdyApOworICAgICAgICAg
ICAgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWN0b3J5KCBnbG9iYWwgKTsKKyAgICB9CisK
Ky8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0Cit9KHR5cGVvZiB3aW5k
b3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9H
bG9iYWwgKSB7CisKKy8vIFN1cHBvcnQ6IEZpcmVmb3ggMTgrCisvLyBDYW4ndCBiZSBpbiBzdHJp
Y3QgbW9kZSwgc2V2ZXJhbCBsaWJzIGluY2x1ZGluZyBBU1AuTkVUIHRyYWNlCisvLyB0aGUgc3Rh
Y2sgdmlhIGFyZ3VtZW50cy5jYWxsZXIuY2FsbGVlIGFuZCBGaXJlZm94IGRpZXMgaWYKKy8vIHlv
dSB0cnkgdG8gdHJhY2UgdGhyb3VnaCAidXNlIHN0cmljdCIgY2FsbCBjaGFpbnMuICgjMTMzMzUp
CisvLyJ1c2Ugc3RyaWN0IjsKK3ZhciBhcnIgPSBbXTsKKwordmFyIGRvY3VtZW50ID0gd2luZG93
LmRvY3VtZW50OworCit2YXIgc2xpY2UgPSBhcnIuc2xpY2U7CisKK3ZhciBjb25jYXQgPSBhcnIu
Y29uY2F0OworCit2YXIgcHVzaCA9IGFyci5wdXNoOworCit2YXIgaW5kZXhPZiA9IGFyci5pbmRl
eE9mOworCit2YXIgY2xhc3MydHlwZSA9IHt9OworCit2YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBl
LnRvU3RyaW5nOworCit2YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTsKKwor
dmFyIHN1cHBvcnQgPSB7fTsKKworCisKK3ZhcgorICAgIHZlcnNpb24gPSAiMi4yLjQiLAorCisg
ICAgLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnkKKyAgICBqUXVlcnkgPSBmdW5jdGlv
biggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisKKyAgICAgICAgLy8gVGhlIGpRdWVyeSBvYmplY3Qg
aXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCisgICAgICAg
IC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJl
IHRocm93biBpZiBub3QgaW5jbHVkZWQpCisgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LmZuLmlu
aXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7CisgICAgfSwKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJv
aWQ8NC4xCisgICAgLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQCisgICAgcnRyaW0g
PSAvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csCisKKyAgICAvLyBNYXRjaGVz
IGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKKyAgICBybXNQcmVmaXggPSAvXi1tcy0vLAor
ICAgIHJkYXNoQWxwaGEgPSAvLShbXGRhLXpdKS9naSwKKworICAgIC8vIFVzZWQgYnkgalF1ZXJ5
LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKCkKKyAgICBmY2FtZWxDYXNlID0gZnVu
Y3Rpb24oIGFsbCwgbGV0dGVyICkgeworICAgICAgICByZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNl
KCk7CisgICAgfTsKKworalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHsKKworICAgIC8v
IFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKKyAgICBqcXVlcnk6IHZl
cnNpb24sCisKKyAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LAorCisgICAgLy8gU3RhcnQgd2l0aCBh
biBlbXB0eSBzZWxlY3RvcgorICAgIHNlbGVjdG9yOiAiIiwKKworICAgIC8vIFRoZSBkZWZhdWx0
IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAorICAgIGxlbmd0aDogMCwKKworICAgIHRv
QXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApOwor
ICAgIH0sCisKKyAgICAvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1l
bnQgc2V0IE9SCisgICAgLy8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEg
Y2xlYW4gYXJyYXkKKyAgICBnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CisgICAgICAgIHJldHVybiBu
dW0gIT0gbnVsbCA/CisKKyAgICAgICAgICAgIC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVu
dCBmcm9tIHRoZSBzZXQKKyAgICAgICAgICAgICggbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMu
bGVuZ3RoIF0gOiB0aGlzWyBudW0gXSApIDoKKworICAgICAgICAgICAgLy8gUmV0dXJuIGFsbCB0
aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheQorICAgICAgICAgICAgc2xpY2UuY2FsbCggdGhp
cyApOworICAgIH0sCisKKyAgICAvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNo
IGl0IG9udG8gdGhlIHN0YWNrCisgICAgLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxl
bWVudCBzZXQpCisgICAgcHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7CisKKyAgICAgICAg
Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKKyAgICAgICAgdmFyIHJl
dCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApOworCisgICAgICAg
IC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCisg
ICAgICAgIHJldC5wcmV2T2JqZWN0ID0gdGhpczsKKyAgICAgICAgcmV0LmNvbnRleHQgPSB0aGlz
LmNvbnRleHQ7CisKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBz
ZXQKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgLy8gRXhlY3V0ZSBhIGNhbGxi
YWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KKyAgICBlYWNoOiBmdW5j
dGlvbiggY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2Fs
bGJhY2sgKTsKKyAgICB9LAorCisgICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVs
ZW0sIGkgKSB7CisgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxl
bSApOworICAgICAgICB9ICkgKTsKKyAgICB9LAorCisgICAgc2xpY2U6IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVu
dHMgKSApOworICAgIH0sCisKKyAgICBmaXJzdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLmVxKCAwICk7CisgICAgfSwKKworICAgIGxhc3Q6IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5lcSggLTEgKTsKKyAgICB9LAorCisgICAgZXE6IGZ1bmN0aW9uKCBpICkg
eworICAgICAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGgsCisgICAgICAgICAgICBqID0gK2kgKyAo
IGkgPCAwID8gbGVuIDogMCApOworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0g
MCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7CisgICAgfSwKKworICAgIGVuZDog
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25z
dHJ1Y3RvcigpOworICAgIH0sCisKKyAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgICAg
Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRo
b2QuCisgICAgcHVzaDogcHVzaCwKKyAgICBzb3J0OiBhcnIuc29ydCwKKyAgICBzcGxpY2U6IGFy
ci5zcGxpY2UKK307CisKK2pRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rp
b24oKSB7CisgICAgdmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNs
b25lLAorICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSwKKyAgICAgICAgaSA9
IDEsCisgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsCisgICAgICAgIGRlZXAgPSBm
YWxzZTsKKworICAgIC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb24KKyAgICBpZiAoIHR5
cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKKyAgICAgICAgZGVlcCA9IHRhcmdldDsKKwor
ICAgICAgICAvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0CisgICAgICAgIHRhcmdl
dCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9OworICAgICAgICBpKys7CisgICAgfQorCisgICAgLy8g
SGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJs
ZSBpbiBkZWVwIGNvcHkpCisgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSAib2JqZWN0IiAmJiAh
alF1ZXJ5LmlzRnVuY3Rpb24oIHRhcmdldCApICkgeworICAgICAgICB0YXJnZXQgPSB7fTsKKyAg
ICB9CisKKyAgICAvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBp
cyBwYXNzZWQKKyAgICBpZiAoIGkgPT09IGxlbmd0aCApIHsKKyAgICAgICAgdGFyZ2V0ID0gdGhp
czsKKyAgICAgICAgaS0tOworICAgIH0KKworICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkg
eworCisgICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMK
KyAgICAgICAgaWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7CisK
KyAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3QKKyAgICAgICAgICAgIGZvciAo
IG5hbWUgaW4gb3B0aW9ucyApIHsKKyAgICAgICAgICAgICAgICBzcmMgPSB0YXJnZXRbIG5hbWUg
XTsKKyAgICAgICAgICAgICAgICBjb3B5ID0gb3B0aW9uc1sgbmFtZSBdOworCisgICAgICAgICAg
ICAgICAgLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcAorICAgICAgICAgICAgICAgIGlmICgg
dGFyZ2V0ID09PSBjb3B5ICkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdp
bmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKKyAgICAgICAgICAgICAgICBpZiAoIGRlZXAgJiYg
Y29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgKCBjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0FycmF5KCBjb3B5ICkgKSApICkgeworCisg
ICAgICAgICAgICAgICAgICAgIGlmICggY29weUlzQXJyYXkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb3B5SXNBcnJheSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgY2xv
bmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoIHNyYyApID8gc3JjIDogW107CisKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3Jj
ICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSA/IHNyYyA6IHt9OworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBv
YmplY3RzLCBjbG9uZSB0aGVtCisgICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0g
alF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTsKKworICAgICAgICAgICAgICAgIC8v
IERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldFsg
bmFtZSBdID0gY29weTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdAorICAgIHJldHVy
biB0YXJnZXQ7Cit9OworCitqUXVlcnkuZXh0ZW5kKCB7CisKKyAgICAvLyBVbmlxdWUgZm9yIGVh
Y2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2UKKyAgICBleHBhbmRvOiAialF1ZXJ5IiArICgg
dmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKKworICAgIC8v
IEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlCisgICAgaXNS
ZWFkeTogdHJ1ZSwKKworICAgIGVycm9yOiBmdW5jdGlvbiggbXNnICkgeworICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIG1zZyApOworICAgIH0sCisKKyAgICBub29wOiBmdW5jdGlvbigpIHt9LAor
CisgICAgaXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVy
eS50eXBlKCBvYmogKSA9PT0gImZ1bmN0aW9uIjsKKyAgICB9LAorCisgICAgaXNBcnJheTogQXJy
YXkuaXNBcnJheSwKKworICAgIGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICBy
ZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93OworICAgIH0sCisKKyAgICBp
c051bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7CisKKyAgICAgICAgLy8gcGFyc2VGbG9hdCBOYU5z
IG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKG51bGx8dHJ1ZXxmYWxzZXwiIikKKyAgICAg
ICAgLy8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGlj
dWxhcmx5IGhleCBsaXRlcmFscyAoIjB4Li4uIikKKyAgICAgICAgLy8gc3VidHJhY3Rpb24gZm9y
Y2VzIGluZmluaXRpZXMgdG8gTmFOCisgICAgICAgIC8vIGFkZGluZyAxIGNvcnJlY3RzIGxvc3Mg
b2YgcHJlY2lzaW9uIGZyb20gcGFyc2VGbG9hdCAoIzE1MTAwKQorICAgICAgICB2YXIgcmVhbFN0
cmluZ09iaiA9IG9iaiAmJiBvYmoudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuICFqUXVlcnku
aXNBcnJheSggb2JqICkgJiYgKCByZWFsU3RyaW5nT2JqIC0gcGFyc2VGbG9hdCggcmVhbFN0cmlu
Z09iaiApICsgMSApID49IDA7CisgICAgfSwKKworICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9u
KCBvYmogKSB7CisgICAgICAgIHZhciBrZXk7CisKKyAgICAgICAgLy8gTm90IHBsYWluIG9iamVj
dHM6CisgICAgICAgIC8vIC0gQW55IG9iamVjdCBvciB2YWx1ZSB3aG9zZSBpbnRlcm5hbCBbW0Ns
YXNzXV0gcHJvcGVydHkgaXMgbm90ICJbb2JqZWN0IE9iamVjdF0iCisgICAgICAgIC8vIC0gRE9N
IG5vZGVzCisgICAgICAgIC8vIC0gd2luZG93CisgICAgICAgIGlmICggalF1ZXJ5LnR5cGUoIG9i
aiApICE9PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmog
KSApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3QKKyAgICAgICAgaWYg
KCBvYmouY29uc3RydWN0b3IgJiYKKyAgICAgICAgICAgICAgICAhaGFzT3duLmNhbGwoIG9iaiwg
ImNvbnN0cnVjdG9yIiApICYmCisgICAgICAgICAgICAgICAgIWhhc093bi5jYWxsKCBvYmouY29u
c3RydWN0b3IucHJvdG90eXBlIHx8IHt9LCAiaXNQcm90b3R5cGVPZiIgKSApIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE93biBwcm9wZXJ0aWVz
IGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNwZWVkIHVwLAorICAgICAgICAvLyBpZiBs
YXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRpZXMgYXJlIG93bgorICAgICAgICBmb3Ig
KCBrZXkgaW4gb2JqICkge30KKworICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwg
aGFzT3duLmNhbGwoIG9iaiwga2V5ICk7CisgICAgfSwKKworICAgIGlzRW1wdHlPYmplY3Q6IGZ1
bmN0aW9uKCBvYmogKSB7CisgICAgICAgIHZhciBuYW1lOworICAgICAgICBmb3IgKCBuYW1lIGlu
IG9iaiApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgdHlwZTogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAg
ICAgaWYgKCBvYmogPT0gbnVsbCApIHsKKyAgICAgICAgICAgIHJldHVybiBvYmogKyAiIjsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wLCBpT1M8NiAoZnVuY3Rp
b25pc2ggUmVnRXhwKQorICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gIm9iamVjdCIgfHwg
dHlwZW9mIG9iaiA9PT0gImZ1bmN0aW9uIiA/CisgICAgICAgICAgICBjbGFzczJ0eXBlWyB0b1N0
cmluZy5jYWxsKCBvYmogKSBdIHx8ICJvYmplY3QiIDoKKyAgICAgICAgICAgIHR5cGVvZiBvYmo7
CisgICAgfSwKKworICAgIC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0
CisgICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUgKSB7CisgICAgICAgIHZhciBzY3JpcHQs
CisgICAgICAgICAgICBpbmRpcmVjdCA9IGV2YWw7CisKKyAgICAgICAgY29kZSA9IGpRdWVyeS50
cmltKCBjb2RlICk7CisKKyAgICAgICAgaWYgKCBjb2RlICkgeworCisgICAgICAgICAgICAvLyBJ
ZiB0aGUgY29kZSBpbmNsdWRlcyBhIHZhbGlkLCBwcm9sb2d1ZSBwb3NpdGlvbgorICAgICAgICAg
ICAgLy8gc3RyaWN0IG1vZGUgcHJhZ21hLCBleGVjdXRlIGNvZGUgYnkgaW5qZWN0aW5nIGEKKyAg
ICAgICAgICAgIC8vIHNjcmlwdCB0YWcgaW50byB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICBp
ZiAoIGNvZGUuaW5kZXhPZiggInVzZSBzdHJpY3QiICkgPT09IDEgKSB7CisgICAgICAgICAgICAg
ICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlwdCIgKTsKKyAgICAgICAg
ICAgICAgICBzY3JpcHQudGV4dCA9IGNvZGU7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVh
ZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7
CisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBh
dm9pZCB0aGUgRE9NIG5vZGUgY3JlYXRpb24sIGluc2VydGlvbgorICAgICAgICAgICAgICAgIC8v
IGFuZCByZW1vdmFsIGJ5IHVzaW5nIGFuIGluZGlyZWN0IGdsb2JhbCBldmFsCisKKyAgICAgICAg
ICAgICAgICBpbmRpcmVjdCggY29kZSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fSwKKworICAgIC8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3Nz
IGFuZCBkYXRhIG1vZHVsZXMKKyAgICAvLyBTdXBwb3J0OiBJRTktMTErCisgICAgLy8gTWljcm9z
b2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKQorICAgIGNhbWVs
Q2FzZTogZnVuY3Rpb24oIHN0cmluZyApIHsKKyAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNl
KCBybXNQcmVmaXgsICJtcy0iICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApOwor
ICAgIH0sCisKKyAgICBub2RlTmFtZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAg
IHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0g
bmFtZS50b0xvd2VyQ2FzZSgpOworICAgIH0sCisKKyAgICBlYWNoOiBmdW5jdGlvbiggb2JqLCBj
YWxsYmFjayApIHsKKyAgICAgICAgdmFyIGxlbmd0aCwgaSA9IDA7CisKKyAgICAgICAgaWYgKCBp
c0FycmF5TGlrZSggb2JqICkgKSB7CisgICAgICAgICAgICBsZW5ndGggPSBvYmoubGVuZ3RoOwor
ICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAg
aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoIGkgaW4gb2JqICkgewor
ICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBd
ICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gb2JqOwor
ICAgIH0sCisKKyAgICAvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMQorICAgIHRyaW06IGZ1bmN0aW9u
KCB0ZXh0ICkgeworICAgICAgICByZXR1cm4gdGV4dCA9PSBudWxsID8KKyAgICAgICAgICAgICIi
IDoKKyAgICAgICAgICAgICggdGV4dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7CisgICAg
fSwKKworICAgIC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKKyAgICBtYWtl
QXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7CisgICAgICAgIHZhciByZXQgPSByZXN1
bHRzIHx8IFtdOworCisgICAgICAgIGlmICggYXJyICE9IG51bGwgKSB7CisgICAgICAgICAgICBp
ZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7CisgICAgICAgICAgICAgICAgalF1
ZXJ5Lm1lcmdlKCByZXQsCisgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBhcnIgPT09ICJzdHJp
bmciID8KKyAgICAgICAgICAgICAgICAgICAgWyBhcnIgXSA6IGFycgorICAgICAgICAgICAgICAg
ICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2guY2FsbCggcmV0
LCBhcnIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7
CisgICAgfSwKKworICAgIGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7CisgICAg
ICAgIHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkg
KTsKKyAgICB9LAorCisgICAgbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgeworICAg
ICAgICB2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsCisgICAgICAgICAgICBqID0gMCwKKyAgICAg
ICAgICAgIGkgPSBmaXJzdC5sZW5ndGg7CisKKyAgICAgICAgZm9yICggOyBqIDwgbGVuOyBqKysg
KSB7CisgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTsKKyAgICAgICAgfQor
CisgICAgICAgIGZpcnN0Lmxlbmd0aCA9IGk7CisKKyAgICAgICAgcmV0dXJuIGZpcnN0OworICAg
IH0sCisKKyAgICBncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7Cisg
ICAgICAgIHZhciBjYWxsYmFja0ludmVyc2UsCisgICAgICAgICAgICBtYXRjaGVzID0gW10sCisg
ICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKKyAg
ICAgICAgICAgIGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDsKKworICAgICAgICAvLyBHbyB0aHJv
dWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zCisgICAgICAgIC8vIHRoYXQgcGFz
cyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCisgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsr
ICkgeworICAgICAgICAgICAgY2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBd
LCBpICk7CisgICAgICAgICAgICBpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBl
Y3QgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICB9LAor
CisgICAgLy8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CisgICAgbWFwOiBmdW5jdGlv
biggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7CisgICAgICAgIHZhciBsZW5ndGgsIHZhbHVlLAor
ICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICByZXQgPSBbXTsKKworICAgICAgICAvLyBH
byB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhl
aXIgbmV3IHZhbHVlcworICAgICAgICBpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkgeworICAg
ICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOworICAgICAgICAgICAgZm9yICggOyBpIDwg
bGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNb
IGkgXSwgaSwgYXJnICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICE9IG51bGwgKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCB2YWx1ZSApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0
aGUgb2JqZWN0LAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICggaSBpbiBlbGVt
cyApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBh
cmcgKTsKKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0LnB1c2goIHZhbHVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5
cworICAgICAgICByZXR1cm4gY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7CisgICAgfSwKKworICAg
IC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0cworICAgIGd1aWQ6IDEsCisKKyAg
ICAvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBh
cHBseWluZyBhbnkKKyAgICAvLyBhcmd1bWVudHMuCisgICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwg
Y29udGV4dCApIHsKKyAgICAgICAgdmFyIHRtcCwgYXJncywgcHJveHk7CisKKyAgICAgICAgaWYg
KCB0eXBlb2YgY29udGV4dCA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICB0bXAgPSBmblsg
Y29udGV4dCBdOworICAgICAgICAgICAgY29udGV4dCA9IGZuOworICAgICAgICAgICAgZm4gPSB0
bXA7CisgICAgICAgIH0KKworICAgICAgICAvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYg
dGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYworICAgICAgICAvLyB0aGlzIHRocm93cyBh
IFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLgorICAgICAgICBp
ZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHsKKyAgICAgICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW11bGF0ZWQgYmluZAorICAgICAgICBh
cmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7CisgICAgICAgIHByb3h5ID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJn
cy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTsKKyAgICAgICAgfTsKKworICAg
ICAgICAvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3Jp
Z2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWQKKyAgICAgICAgcHJveHkuZ3VpZCA9
IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7CisKKyAgICAgICAgcmV0dXJuIHBy
b3h5OworICAgIH0sCisKKyAgICBub3c6IERhdGUubm93LAorCisgICAgLy8galF1ZXJ5LnN1cHBv
cnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyCisg
ICAgLy8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC4KKyAgICBzdXBwb3J0
OiBzdXBwb3J0Cit9ICk7CisKKy8vIEpTSGludCB3b3VsZCBlcnJvciBvbiB0aGlzIGNvZGUgZHVl
IHRvIHRoZSBTeW1ib2wgbm90IGJlaW5nIGRlZmluZWQgaW4gRVM1LgorLy8gRGVmaW5pbmcgdGhp
cyBnbG9iYWwgaW4gLmpzaGludHJjIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUg
Z2xvYmFsCisvLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8g
anVzdCBkaXNhYmxlIEpTSGludCBmb3IgdGhlc2UKKy8vIHRocmVlIGxpbmVzLgorLyoganNoaW50
IGlnbm9yZTogc3RhcnQgKi8KK2lmICggdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiApIHsK
KyAgICBqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3Ig
XTsKK30KKy8qIGpzaGludCBpZ25vcmU6IGVuZCAqLworCisvLyBQb3B1bGF0ZSB0aGUgY2xhc3My
dHlwZSBtYXAKK2pRdWVyeS5lYWNoKCAiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFy
cmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCAiICIgKSwKK2Z1bmN0
aW9uKCBpLCBuYW1lICkgeworICAgIGNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBuYW1lICsgIl0i
IF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7Cit9ICk7CisKK2Z1bmN0aW9uIGlzQXJyYXlMaWtlKCBv
YmogKSB7CisKKyAgICAvLyBTdXBwb3J0OiBpT1MgOC4yIChub3QgcmVwcm9kdWNpYmxlIGluIHNp
bXVsYXRvcikKKyAgICAvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdo
LTIxNDUpCisgICAgLy8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRp
dmVzCisgICAgLy8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRQorICAgIHZhciBsZW5n
dGggPSAhIW9iaiAmJiAibGVuZ3RoIiBpbiBvYmogJiYgb2JqLmxlbmd0aCwKKyAgICAgICAgdHlw
ZSA9IGpRdWVyeS50eXBlKCBvYmogKTsKKworICAgIGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiB8
fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHR5cGUgPT09ICJhcnJheSIgfHwgbGVuZ3RoID09PSAwIHx8CisgICAg
ICAgIHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGgg
LSAxICkgaW4gb2JqOworfQordmFyIFNpenpsZSA9CisvKiEKKyAqIFNpenpsZSBDU1MgU2VsZWN0
b3IgRW5naW5lIHYyLjIuMQorICogaHR0cDovL3NpenpsZWpzLmNvbS8KKyAqCisgKiBDb3B5cmln
aHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVsZWFzZWQg
dW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgor
ICogRGF0ZTogMjAxNS0xMC0xNworICovCisoZnVuY3Rpb24oIHdpbmRvdyApIHsKKwordmFyIGks
CisgICAgc3VwcG9ydCwKKyAgICBFeHByLAorICAgIGdldFRleHQsCisgICAgaXNYTUwsCisgICAg
dG9rZW5pemUsCisgICAgY29tcGlsZSwKKyAgICBzZWxlY3QsCisgICAgb3V0ZXJtb3N0Q29udGV4
dCwKKyAgICBzb3J0SW5wdXQsCisgICAgaGFzRHVwbGljYXRlLAorCisgICAgLy8gTG9jYWwgZG9j
dW1lbnQgdmFycworICAgIHNldERvY3VtZW50LAorICAgIGRvY3VtZW50LAorICAgIGRvY0VsZW0s
CisgICAgZG9jdW1lbnRJc0hUTUwsCisgICAgcmJ1Z2d5UVNBLAorICAgIHJidWdneU1hdGNoZXMs
CisgICAgbWF0Y2hlcywKKyAgICBjb250YWlucywKKworICAgIC8vIEluc3RhbmNlLXNwZWNpZmlj
IGRhdGEKKyAgICBleHBhbmRvID0gInNpenpsZSIgKyAxICogbmV3IERhdGUoKSwKKyAgICBwcmVm
ZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsCisgICAgZGlycnVucyA9IDAsCisgICAgZG9uZSA9
IDAsCisgICAgY2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgdG9rZW5DYWNoZSA9IGNy
ZWF0ZUNhY2hlKCksCisgICAgY29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgc29y
dE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgIGlmICggYSA9PT0gYiApIHsKKyAg
ICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfSwKKworICAgIC8vIEdlbmVyYWwtcHVycG9zZSBjb25zdGFudHMKKyAgICBNQVhf
TkVHQVRJVkUgPSAxIDw8IDMxLAorCisgICAgLy8gSW5zdGFuY2UgbWV0aG9kcworICAgIGhhc093
biA9ICh7fSkuaGFzT3duUHJvcGVydHksCisgICAgYXJyID0gW10sCisgICAgcG9wID0gYXJyLnBv
cCwKKyAgICBwdXNoX25hdGl2ZSA9IGFyci5wdXNoLAorICAgIHB1c2ggPSBhcnIucHVzaCwKKyAg
ICBzbGljZSA9IGFyci5zbGljZSwKKyAgICAvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2Yg
YXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmUKKyAgICAvLyBodHRwOi8vanNwZXJmLmNvbS90aG9y
LWluZGV4b2YtdnMtZm9yLzUKKyAgICBpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7
CisgICAgICAgIHZhciBpID0gMCwKKyAgICAgICAgICAgIGxlbiA9IGxpc3QubGVuZ3RoOworICAg
ICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggbGlzdFtpXSA9
PT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfSwKKworICAgIGJvb2xlYW5zID0gImNo
ZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRp
c2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8
c2NvcGVkIiwKKworICAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMKKworICAgIC8vIGh0dHA6Ly93
d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlCisgICAgd2hpdGVzcGFjZSA9
ICJbXFx4MjBcXHRcXHJcXG5cXGZdIiwKKworICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NT
UzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllcgorICAgIGlkZW50aWZpZXIgPSAi
KD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLAorCisgICAgLy8gQXR0cmlidXRlIHNl
bGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0
b3JzCisgICAgYXR0cmlidXRlcyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBpZGVudGlm
aWVyICsgIikoPzoiICsgd2hpdGVzcGFjZSArCisgICAgICAgIC8vIE9wZXJhdG9yIChjYXB0dXJl
IDIpCisgICAgICAgICIqKFsqXiR8IX5dPz0pIiArIHdoaXRlc3BhY2UgKworICAgICAgICAvLyAi
QXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBz
dHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XSIKKyAgICAgICAgIiooPzonKCg/OlxcXFwu
fFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIiArIGlkZW50aWZpZXIg
KyAiKSl8KSIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgIipcXF0iLAorCisgICAgcHNldWRvcyA9
ICI6KCIgKyBpZGVudGlmaWVyICsgIikoPzpcXCgoIiArCisgICAgICAgIC8vIFRvIHJlZHVjZSB0
aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIs
IHByZWZlciBhcmd1bWVudHM6CisgICAgICAgIC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0
dXJlIDQgb3IgY2FwdHVyZSA1KQorICAgICAgICAiKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwi
KCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwiICsKKyAgICAgICAgLy8gMi4gc2ltcGxlIChjYXB0
dXJlIDYpCisgICAgICAgICIoKD86XFxcXC58W15cXFxcKClbXFxdXXwiICsgYXR0cmlidXRlcyAr
ICIpKil8IiArCisgICAgICAgIC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMikKKyAgICAg
ICAgIi4qIiArCisgICAgICAgICIpXFwpfCkiLAorCisgICAgLy8gTGVhZGluZyBhbmQgbm9uLWVz
Y2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2Ug
Y2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlcgorICAgIHJ3aGl0ZXNwYWNlID0gbmV3IFJl
Z0V4cCggd2hpdGVzcGFjZSArICIrIiwgImciICksCisgICAgcnRyaW0gPSBuZXcgUmVnRXhwKCAi
XiIgKyB3aGl0ZXNwYWNlICsgIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIgKyB3aGl0ZXNw
YWNlICsgIiskIiwgImciICksCisKKyAgICByY29tbWEgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0
ZXNwYWNlICsgIiosIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwKKyAgICByY29tYmluYXRvcnMgPSBu
ZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiooWz4rfl18IiArIHdoaXRlc3BhY2UgKyAi
KSIgKyB3aGl0ZXNwYWNlICsgIioiICksCisKKyAgICByYXR0cmlidXRlUXVvdGVzID0gbmV3IFJl
Z0V4cCggIj0iICsgd2hpdGVzcGFjZSArICIqKFteXFxdJ1wiXSo/KSIgKyB3aGl0ZXNwYWNlICsg
IipcXF0iLCAiZyIgKSwKKworICAgIHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksCisg
ICAgcmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCAiXiIgKyBpZGVudGlmaWVyICsgIiQiICksCisK
KyAgICBtYXRjaEV4cHIgPSB7CisgICAgICAgICJJRCI6IG5ldyBSZWdFeHAoICJeIygiICsgaWRl
bnRpZmllciArICIpIiApLAorICAgICAgICAiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxcLigiICsg
aWRlbnRpZmllciArICIpIiApLAorICAgICAgICAiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGlk
ZW50aWZpZXIgKyAifFsqXSkiICksCisgICAgICAgICJBVFRSIjogbmV3IFJlZ0V4cCggIl4iICsg
YXR0cmlidXRlcyApLAorICAgICAgICAiUFNFVURPIjogbmV3IFJlZ0V4cCggIl4iICsgcHNldWRv
cyApLAorICAgICAgICAiQ0hJTEQiOiBuZXcgUmVnRXhwKCAiXjoob25seXxmaXJzdHxsYXN0fG50
aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIiArIHdoaXRlc3BhY2UgKworICAgICAg
ICAgICAgIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiICsgd2hpdGVzcGFjZSArICIqKD86
KFsrLV18KSIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgICAgICIqKFxcZCspfCkpIiArIHdoaXRl
c3BhY2UgKyAiKlxcKXwpIiwgImkiICksCisgICAgICAgICJib29sIjogbmV3IFJlZ0V4cCggIl4o
PzoiICsgYm9vbGVhbnMgKyAiKSQiLCAiaSIgKSwKKyAgICAgICAgLy8gRm9yIHVzZSBpbiBsaWJy
YXJpZXMgaW1wbGVtZW50aW5nIC5pcygpCisgICAgICAgIC8vIFdlIHVzZSB0aGlzIGZvciBQT1Mg
bWF0Y2hpbmcgaW4gYHNlbGVjdGAKKyAgICAgICAgIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAo
ICJeIiArIHdoaXRlc3BhY2UgKyAiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0
fGxhc3QpKD86XFwoIiArCisgICAgICAgICAgICB3aGl0ZXNwYWNlICsgIiooKD86LVxcZCk/XFxk
KikiICsgd2hpdGVzcGFjZSArICIqXFwpfCkoPz1bXi1dfCQpIiwgImkiICkKKyAgICB9LAorCisg
ICAgcmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCisgICAg
cmhlYWRlciA9IC9eaFxkJC9pLAorCisgICAgcm5hdGl2ZSA9IC9eW157XStce1xzKlxbbmF0aXZl
IFx3LywKKworICAgIC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9y
IENMQVNTIHNlbGVjdG9ycworICAgIHJxdWlja0V4cHIgPSAvXig/OiMoW1x3LV0rKXwoXHcrKXxc
LihbXHctXSspKSQvLAorCisgICAgcnNpYmxpbmcgPSAvWyt+XS8sCisgICAgcmVzY2FwZSA9IC8n
fFxcL2csCisKKyAgICAvLyBDU1MgZXNjYXBlcyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9z
eW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzCisgICAgcnVuZXNjYXBlID0gbmV3IFJlZ0V4
cCggIlxcXFwoW1xcZGEtZl17MSw2fSIgKyB3aGl0ZXNwYWNlICsgIj98KCIgKyB3aGl0ZXNwYWNl
ICsgIil8LikiLCAiaWciICksCisgICAgZnVuZXNjYXBlID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQs
IGVzY2FwZWRXaGl0ZXNwYWNlICkgeworICAgICAgICB2YXIgaGlnaCA9ICIweCIgKyBlc2NhcGVk
IC0gMHgxMDAwMDsKKyAgICAgICAgLy8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnQKKyAgICAgICAg
Ly8gU3VwcG9ydDogRmlyZWZveDwyNAorICAgICAgICAvLyBXb3JrYXJvdW5kIGVycm9uZW91cyBu
dW1lcmljIGludGVycHJldGF0aW9uIG9mICsiMHgiCisgICAgICAgIHJldHVybiBoaWdoICE9PSBo
aWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID8KKyAgICAgICAgICAgIGVzY2FwZWQgOgorICAgICAg
ICAgICAgaGlnaCA8IDAgPworICAgICAgICAgICAgICAgIC8vIEJNUCBjb2RlcG9pbnQKKyAgICAg
ICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDoKKyAgICAg
ICAgICAgICAgICAvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFp
cikKKyAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhE
ODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTsKKyAgICB9LAorCisgICAgLy8gVXNlZCBmb3Ig
aWZyYW1lcworICAgIC8vIFNlZSBzZXREb2N1bWVudCgpCisgICAgLy8gUmVtb3ZpbmcgdGhlIGZ1
bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgIlBlcm1pc3Npb24gRGVuaWVkIgorICAgIC8vIGVycm9y
IGluIElFCisgICAgdW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBzZXREb2N1
bWVudCgpOworICAgIH07CisKKy8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlz
dCApCit0cnkgeworICAgIHB1c2guYXBwbHkoCisgICAgICAgIChhcnIgPSBzbGljZS5jYWxsKCBw
cmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSwKKyAgICAgICAgcHJlZmVycmVkRG9jLmNoaWxkTm9k
ZXMKKyAgICApOworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wCisgICAgLy8gRGV0ZWN0IHNp
bGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseQorICAgIGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9k
ZXMubGVuZ3RoIF0ubm9kZVR5cGU7Cit9IGNhdGNoICggZSApIHsKKyAgICBwdXNoID0geyBhcHBs
eTogYXJyLmxlbmd0aCA/CisKKyAgICAgICAgLy8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGUK
KyAgICAgICAgZnVuY3Rpb24oIHRhcmdldCwgZWxzICkgeworICAgICAgICAgICAgcHVzaF9uYXRp
dmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMpICk7CisgICAgICAgIH0gOgorCisgICAg
ICAgIC8vIFN1cHBvcnQ6IElFPDkKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3Rs
eQorICAgICAgICBmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7CisgICAgICAgICAgICB2YXIgaiA9
IHRhcmdldC5sZW5ndGgsCisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAvLyBD
YW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGgKKyAgICAgICAgICAgIHdoaWxlICggKHRhcmdldFtq
KytdID0gZWxzW2krK10pICkge30KKyAgICAgICAgICAgIHRhcmdldC5sZW5ndGggPSBqIC0gMTsK
KyAgICAgICAgfQorICAgIH07Cit9CisKK2Z1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRl
eHQsIHJlc3VsdHMsIHNlZWQgKSB7CisgICAgdmFyIG0sIGksIGVsZW0sIG5pZCwgbmlkc2VsZWN0
LCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3RvciwKKyAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRl
eHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LAorCisgICAgICAgIC8vIG5vZGVUeXBlIGRlZmF1
bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnQKKyAgICAgICAgbm9k
ZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7CisKKyAgICByZXN1bHRzID0g
cmVzdWx0cyB8fCBbXTsKKworICAgIC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52
YWxpZCBzZWxlY3RvciBvciBjb250ZXh0CisgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJz
dHJpbmciIHx8ICFzZWxlY3RvciB8fAorICAgICAgICBub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlw
ZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7
CisgICAgfQorCisgICAgLy8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bw
b3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50cworICAgIGlmICggIXNlZWQgKSB7CisK
KyAgICAgICAgaWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4
dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgICAgIHNldERvY3Vt
ZW50KCBjb250ZXh0ICk7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwg
ZG9jdW1lbnQ7CisKKyAgICAgICAgaWYgKCBkb2N1bWVudElzSFRNTCApIHsKKworICAgICAgICAg
ICAgLy8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBh
ICJnZXQqQnkqIiBET00gbWV0aG9kCisgICAgICAgICAgICAvLyAoZXhjZXB0aW5nIERvY3VtZW50
RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpCisgICAgICAg
ICAgICBpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNl
bGVjdG9yICkpICkgeworCisgICAgICAgICAgICAgICAgLy8gSUQgc2VsZWN0b3IKKyAgICAgICAg
ICAgICAgICBpZiAoIChtID0gbWF0Y2hbMV0pICkgeworCisgICAgICAgICAgICAgICAgICAgIC8v
IERvY3VtZW50IGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlVHlwZSA9PT0g
OSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBjb250ZXh0LmdldEVs
ZW1lbnRCeUlkKCBtICkpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydDogSUUsIE9wZXJhLCBXZWJraXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
T0RPOiBpZGVudGlmeSB2ZXJzaW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdl
dEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgPT09IG0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIEVsZW1lbnQgY29udGV4dAorICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0
OiBJRSwgT3BlcmEsIFdlYmtpdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogaWRl
bnRpZnkgdmVyc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldEVsZW1lbnRCeUlk
IGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbmV3Q29udGV4dCAmJiAoZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVu
dEJ5SWQoIG0gKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyggY29u
dGV4dCwgZWxlbSApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5pZCA9PT0g
bSApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBUeXBlIHNlbGVjdG9yCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2hbMl0g
KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdHM7CisKKyAgICAgICAgICAgICAgICAvLyBDbGFzcyBzZWxlY3RvcgorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSAmJgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0
cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsCisgICAg
ICAgICAgICBpZiAoIHN1cHBvcnQucXNhICYmCisgICAgICAgICAgICAgICAgIWNvbXBpbGVyQ2Fj
aGVbIHNlbGVjdG9yICsgIiAiIF0gJiYKKyAgICAgICAgICAgICAgICAoIXJidWdneVFTQSB8fCAh
cmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICkgeworCisgICAgICAgICAgICAgICAgaWYgKCBu
b2RlVHlwZSAhPT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRl
eHQ7CisgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7CisKKyAgICAg
ICAgICAgICAgICAvLyBxU0EgbG9va3Mgb3V0c2lkZSBFbGVtZW50IGNvbnRleHQsIHdoaWNoIGlz
IG5vdCB3aGF0IHdlIHdhbnQKKyAgICAgICAgICAgICAgICAvLyBUaGFua3MgdG8gQW5kcmV3IER1
cG9udCBmb3IgdGhpcyB3b3JrYXJvdW5kIHRlY2huaXF1ZQorICAgICAgICAgICAgICAgIC8vIFN1
cHBvcnQ6IElFIDw9OAorICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRz
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpICE9PSAib2JqZWN0IiApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBDYXB0dXJlIHRo
ZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAg
ICAgICAgICBpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggImlkIiApKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5pZCA9IG5pZC5yZXBsYWNlKCByZXNjYXBlLCAiXFwkJiIg
KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuc2V0QXR0cmlidXRlKCAiaWQiLCAobmlkID0gZXhwYW5kbykgKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFByZWZpeCBldmVyeSBzZWxl
Y3RvciBpbiB0aGUgbGlzdAorICAgICAgICAgICAgICAgICAgICBncm91cHMgPSB0b2tlbml6ZSgg
c2VsZWN0b3IgKTsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGdyb3Vwcy5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgICAgIG5pZHNlbGVjdCA9IHJpZGVudGlmaWVyLnRlc3QoIG5pZCApID8gIiMi
ICsgbmlkIDogIltpZD0nIiArIG5pZCArICInXSI7CisgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW2ldID0gbmlkc2VsZWN0
ICsgIiAiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggIiwiICk7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0
b3JzCisgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxl
Y3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoIG5ld1NlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yICkK
KyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoIHFzYUVycm9yICkgewor
ICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZW1vdmVBdHRyaWJ1dGUoICJpZCIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFsbCBvdGhlcnMKKyAgICByZXR1cm4gc2VsZWN0
KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVk
ICk7Cit9CisKKy8qKgorICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXpl
CisgKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmpl
Y3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoCisgKiAgcHJvcGVydHkgbmFt
ZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2Vy
IHRoYW4gRXhwci5jYWNoZUxlbmd0aCkKKyAqICBkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5Cisg
Ki8KK2Z1bmN0aW9uIGNyZWF0ZUNhY2hlKCkgeworICAgIHZhciBrZXlzID0gW107CisKKyAgICBm
dW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHsKKyAgICAgICAgLy8gVXNlIChrZXkgKyAiICIp
IHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2Vl
IElzc3VlICMxNTcpCisgICAgICAgIGlmICgga2V5cy5wdXNoKCBrZXkgKyAiICIgKSA+IEV4cHIu
Y2FjaGVMZW5ndGggKSB7CisgICAgICAgICAgICAvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50
IGVudHJpZXMKKyAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIChjYWNoZVsga2V5ICsgIiAiIF0gPSB2YWx1ZSk7CisgICAg
fQorICAgIHJldHVybiBjYWNoZTsKK30KKworLyoqCisgKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNw
ZWNpYWwgdXNlIGJ5IFNpenpsZQorICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9u
IHRvIG1hcmsKKyAqLworZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHsKKyAgICBmblsgZXhw
YW5kbyBdID0gdHJ1ZTsKKyAgICByZXR1cm4gZm47Cit9CisKKy8qKgorICogU3VwcG9ydCB0ZXN0
aW5nIHVzaW5nIGFuIGVsZW1lbnQKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUg
Y3JlYXRlZCBkaXYgYW5kIGV4cGVjdHMgYSBib29sZWFuIHJlc3VsdAorICovCitmdW5jdGlvbiBh
c3NlcnQoIGZuICkgeworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKworICAgIHRyeSB7CisgICAgICAgIHJldHVybiAhIWZuKCBkaXYgKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgICAv
LyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHQKKyAgICAgICAgaWYgKCBkaXYucGFy
ZW50Tm9kZSApIHsKKyAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBkaXYg
KTsKKyAgICAgICAgfQorICAgICAgICAvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQorICAgICAgICBk
aXYgPSBudWxsOworICAgIH0KK30KKworLyoqCisgKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9y
IGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzCisgKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlw
ZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5k
bGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWQKKyAqLworZnVuY3Rpb24gYWRkSGFu
ZGxlKCBhdHRycywgaGFuZGxlciApIHsKKyAgICB2YXIgYXJyID0gYXR0cnMuc3BsaXQoInwiKSwK
KyAgICAgICAgaSA9IGFyci5sZW5ndGg7CisKKyAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAg
RXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRsZXI7CisgICAgfQorfQorCisvKioKKyAq
IENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3MKKyAqIEBwYXJhbSB7RWxlbWVu
dH0gYQorICogQHBhcmFtIHtFbGVtZW50fSBiCisgKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5z
IGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dz
IGIKKyAqLworZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkgeworICAgIHZhciBjdXIgPSBi
ICYmIGEsCisgICAgICAgIGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVU
eXBlID09PSAxICYmCisgICAgICAgICAgICAoIH5iLnNvdXJjZUluZGV4IHx8IE1BWF9ORUdBVElW
RSApIC0KKyAgICAgICAgICAgICggfmEuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICk7CisK
KyAgICAvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMKKyAg
ICBpZiAoIGRpZmYgKSB7CisgICAgICAgIHJldHVybiBkaWZmOworICAgIH0KKworICAgIC8vIENo
ZWNrIGlmIGIgZm9sbG93cyBhCisgICAgaWYgKCBjdXIgKSB7CisgICAgICAgIHdoaWxlICggKGN1
ciA9IGN1ci5uZXh0U2libGluZykgKSB7CisgICAgICAgICAgICBpZiAoIGN1ciA9PT0gYiApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gYSA/IDEgOiAtMTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVu
Y3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzCisgKiBAcGFyYW0ge1N0cmlu
Z30gdHlwZQorICovCitmdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpOworICAgICAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVt
LnR5cGUgPT09IHR5cGU7CisgICAgfTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgZnVuY3Rpb24g
dG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlCisg
Ki8KK2Z1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHsKKyAgICByZXR1cm4gZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpOworICAgICAgICByZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1
dHRvbiIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKKyAgICB9OworfQorCisvKioKKyAqIFJldHVy
bnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHMKKyAqIEBwYXJh
bSB7RnVuY3Rpb259IGZuCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZu
ICkgeworICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgeworICAg
ICAgICBhcmd1bWVudCA9ICthcmd1bWVudDsKKyAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihm
dW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKKyAgICAgICAgICAgIHZhciBqLAorICAgICAgICAg
ICAgICAgIG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCisg
ICAgICAgICAgICAgICAgaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7CisKKyAgICAgICAgICAgIC8v
IE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcworICAgICAgICAg
ICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNo
SW5kZXhlc1tpXSkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2VlZFtqXSA9ICEobWF0Y2hl
c1tqXSA9IHNlZWRbal0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKKy8qKgorICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkg
YXMgYSBTaXp6bGUgY29udGV4dAorICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHQK
KyAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBh
Y2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZQorICovCitmdW5jdGlvbiB0ZXN0Q29u
dGV4dCggY29udGV4dCApIHsKKyAgICByZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgY29udGV4dDsKK30KKworLy8g
RXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2UKK3N1cHBvcnQgPSBTaXp6bGUuc3Vw
cG9ydCA9IHt9OworCisvKioKKyAqIERldGVjdHMgWE1MIG5vZGVzCisgKiBAcGFyYW0ge0VsZW1l
bnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudAorICogQHJldHVybnMge0Jv
b2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZQorICovCitpc1hNTCA9
IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgIC8vIGRvY3VtZW50RWxlbWVu
dCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKKyAgICAv
LyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykKKyAgICB2YXIgZG9jdW1l
bnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50
RWxlbWVudDsKKyAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5v
ZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKK307CisKKy8qKgorICogU2V0cyBkb2N1bWVudC1y
ZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50CisgKiBA
cGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVj
dCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudAorICogQHJldHVybnMge09iamVjdH0gUmV0dXJu
cyB0aGUgY3VycmVudCBkb2N1bWVudAorICovCitzZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1
bWVudCA9IGZ1bmN0aW9uKCBub2RlICkgeworICAgIHZhciBoYXNDb21wYXJlLCBwYXJlbnQsCisg
ICAgICAgIGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJl
ZERvYzsKKworICAgIC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5
IHNlbGVjdGVkCisgICAgaWYgKCBkb2MgPT09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0g
OSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50Owor
ICAgIH0KKworICAgIC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzCisgICAgZG9jdW1lbnQgPSBk
b2M7CisgICAgZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICBkb2N1bWVu
dElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTsKKworICAgIC8vIFN1cHBvcnQ6IElFIDktMTEs
IEVkZ2UKKyAgICAvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhy
b3dzICJwZXJtaXNzaW9uIGRlbmllZCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KQorICAgIGlmICgg
KHBhcmVudCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBwYXJlbnQudG9wICE9PSBwYXJlbnQg
KSB7CisgICAgICAgIC8vIFN1cHBvcnQ6IElFIDExCisgICAgICAgIGlmICggcGFyZW50LmFkZEV2
ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lciggInVu
bG9hZCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUUg
OSAtIDEwIG9ubHkKKyAgICAgICAgfSBlbHNlIGlmICggcGFyZW50LmF0dGFjaEV2ZW50ICkgewor
ICAgICAgICAgICAgcGFyZW50LmF0dGFjaEV2ZW50KCAib251bmxvYWQiLCB1bmxvYWRIYW5kbGVy
ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBdHRyaWJ1dGVzCisgICAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworCisgICAgLy8gU3VwcG9ydDogSUU8OAorICAgIC8vIFZlcmlmeSB0aGF0IGdldEF0
dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllcworICAg
IC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKQorICAgIHN1cHBvcnQuYXR0cmlidXRlcyA9IGFz
c2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICBkaXYuY2xhc3NOYW1lID0gImkiOworICAg
ICAgICByZXR1cm4gIWRpdi5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpOworICAgIH0pOworCisg
ICAgLyogZ2V0RWxlbWVudChzKUJ5KgorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworICAgIC8vIENo
ZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzCisg
ICAgc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkg
eworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7
CisgICAgICAgIHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoOwor
ICAgIH0pOworCisgICAgLy8gU3VwcG9ydDogSUU8OQorICAgIHN1cHBvcnQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSApOworCisgICAgLy8gU3VwcG9ydDogSUU8MTAKKyAgICAvLyBDaGVjayBpZiBnZXRFbGVtZW50
QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUKKyAgICAvLyBUaGUgYnJva2VuIGdldEVsZW1l
bnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtYXRpY2FsbHktc2V0IG5hbWVzLAor
ICAgIC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdAorICAgIHN1
cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICBkb2NFbGVt
LmFwcGVuZENoaWxkKCBkaXYgKS5pZCA9IGV4cGFuZG87CisgICAgICAgIHJldHVybiAhZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBh
bmRvICkubGVuZ3RoOworICAgIH0pOworCisgICAgLy8gSUQgZmluZCBhbmQgZmlsdGVyCisgICAg
aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7CisgICAgICAgIEV4cHIuZmluZFsiSUQiXSA9IGZ1bmN0
aW9uKCBpZCwgY29udGV4dCApIHsKKyAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0
RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworICAgICAg
ICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbSA/IFsgbSBdIDogW107CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIEV4cHIuZmlsdGVyWyJJRCJdID0gZnVuY3Rpb24oIGlkICkgeworICAgICAgICAg
ICAgdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBhdHRySWQ7CisgICAgICAgICAgICB9OworICAg
ICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFN1cHBvcnQ6IElFNi83CisgICAgICAg
IC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXQKKyAg
ICAgICAgZGVsZXRlIEV4cHIuZmluZFsiSUQiXTsKKworICAgICAgICBFeHByLmZpbHRlclsiSUQi
XSA9ICBmdW5jdGlvbiggaWQgKSB7CisgICAgICAgICAgICB2YXIgYXR0cklkID0gaWQucmVwbGFj
ZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJp
YnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmCisgICAgICAgICAgICAgICAgICAgIGVsZW0uZ2V0
QXR0cmlidXRlTm9kZSgiaWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZSAmJiBub2Rl
LnZhbHVlID09PSBhdHRySWQ7CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH0KKwor
ICAgIC8vIFRhZworICAgIEV4cHIuZmluZFsiVEFHIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlU
YWdOYW1lID8KKyAgICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAgICAgICAgICAg
IGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQi
ICkgeworICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCB0YWcgKTsKKworICAgICAgICAgICAgLy8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBo
YXZlIGdFQlROCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSA6CisKKyAgICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCAp
IHsKKyAgICAgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAgIHRtcCA9IFtdLAorICAg
ICAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgICAgIC8vIEJ5IGhhcHB5IGNvaW5jaWRl
bmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0
b28KKyAgICAgICAgICAgICAgICByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSggdGFnICk7CisKKyAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMK
KyAgICAgICAgICAgIGlmICggdGFnID09PSAiKiIgKSB7CisgICAgICAgICAgICAgICAgd2hpbGUg
KCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZWxl
bS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNoKCBl
bGVtICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdG1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7CisgICAgICAgIH07CisKKyAgICAvLyBDbGFzcworICAgIEV4cHIuZmluZFsiQ0xB
U1MiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NO
YW1lLCBjb250ZXh0ICkgeworICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUgIT09ICJ1bmRlZmluZWQiICYmIGRvY3VtZW50SXNIVE1MICkgeworICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyogUVNBL21hdGNoZXNTZWxlY3RvcgorICAgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KKworICAgIC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnQK
KworICAgIC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1
ZSAoSUU5L09wZXJhIDExLjUpCisgICAgcmJ1Z2d5TWF0Y2hlcyA9IFtdOworCisgICAgLy8gcVNh
KDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSkKKyAgICAvLyBXZSBh
bGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3IK
KyAgICAvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24g
YW4gaWZyYW1lCisgICAgLy8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNB
IGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3IKKyAgICAvLyBTZWUgaHR0cDovL2J1
Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzgKKyAgICByYnVnZ3lRU0EgPSBbXTsKKworICAgIGlm
ICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
ICkpICkgeworICAgICAgICAvLyBCdWlsZCBRU0EgcmVnZXgKKyAgICAgICAgLy8gUmVnZXggc3Ry
YXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaQorICAgICAgICBhc3NlcnQoZnVuY3Rpb24o
IGRpdiApIHsKKyAgICAgICAgICAgIC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9u
IHB1cnBvc2UKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBv
ZiBub3QgZXhwbGljaXRseQorICAgICAgICAgICAgLy8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVu
dCBhdHRyaWJ1dGUsCisgICAgICAgICAgICAvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJl
IGVub3VnaAorICAgICAgICAgICAgLy8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIz
NTkKKyAgICAgICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlubmVySFRNTCA9ICI8
YSBpZD0nIiArIGV4cGFuZG8gKyAiJz48L2E+IiArCisgICAgICAgICAgICAgICAgIjxzZWxlY3Qg
aWQ9JyIgKyBleHBhbmRvICsgIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz4iICsKKyAgICAgICAg
ICAgICAgICAiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOworCisgICAg
ICAgICAgICAvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2CisgICAgICAgICAgICAvLyBO
b3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9y
ICQ9IG9yICo9CisgICAgICAgICAgICAvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtu
b3duIGluIE9wZXJhIGJ1dCAic2FmZSIgZm9yIFdpblJUCisgICAgICAgICAgICAvLyBodHRwOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1
dGVfc2VjdGlvbgorICAgICAgICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW21zYWxs
b3djYXB0dXJlXj0nJ10iKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1
c2goICJbKl4kXT0iICsgd2hpdGVzcGFjZSArICIqKD86Jyd8XCJcIikiICk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOAorICAgICAgICAgICAgLy8gQm9vbGVh
biBhdHRyaWJ1dGVzIGFuZCAidmFsdWUiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkKKyAgICAg
ICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoICkg
eworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAi
Kig/OnZhbHVlfCIgKyBib29sZWFucyArICIpIiApOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9T
PDcuMCssIFBoYW50b21KUzwxLjkuOCsKKyAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVj
dG9yQWxsKCAiW2lkfj0iICsgZXhwYW5kbyArICItXSIgKS5sZW5ndGggKSB7CisgICAgICAgICAg
ICAgICAgcmJ1Z2d5UVNBLnB1c2goIn49Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9u
IGVsZW1lbnRzCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1j
c3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorICAgICAgICAgICAgLy8gSUU4IHRocm93
cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHMKKyAgICAgICAgICAgIGlm
ICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgICAgICByYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCsKKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTEKKyAgICAgICAgICAg
IC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWls
cworICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoICJhIyIgKyBleHBhbmRv
ICsgIisqIiApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgiLiMu
K1srfl0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgYXNzZXJ0KGZ1
bmN0aW9uKCBkaXYgKSB7CisgICAgICAgICAgICAvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZl
IEFwcHMKKyAgICAgICAgICAgIC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJl
c3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudAorICAgICAgICAgICAgdmFyIGlu
cHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICAgICAgICAgIGlucHV0
LnNldEF0dHJpYnV0ZSggInR5cGUiLCAiaGlkZGVuIiApOworICAgICAgICAgICAgZGl2LmFwcGVu
ZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggIm5hbWUiLCAiRCIgKTsKKworICAgICAgICAg
ICAgLy8gU3VwcG9ydDogSUU4CisgICAgICAgICAgICAvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZp
dHkgb2YgbmFtZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgIGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JB
bGwoIltuYW1lPWRdIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNo
KCAibmFtZSIgKyB3aGl0ZXNwYWNlICsgIipbKl4kfCF+XT89IiApOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBl
bGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKQorICAgICAgICAgICAg
Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHMKKyAg
ICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCAp
IHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIjplbmFibGVkIiwgIjpkaXNhYmxl
ZCIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3BlcmEgMTAtMTEgZG9lcyBu
b3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3MKKyAgICAgICAgICAgIGRpdi5x
dWVyeVNlbGVjdG9yQWxsKCIqLDp4Iik7CisgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgiLC4q
OiIpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxl
Y3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHwKKyAgICAg
ICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgZG9jRWxlbS5tb3pN
YXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8Cisg
ICAgICAgIGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IpICkpICkgeworCisgICAgICAgIGFzc2Vy
dChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3Mg
cG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yCisgICAgICAgICAgICAvLyBvbiBhIGRpc2Nv
bm5lY3RlZCBub2RlIChJRSA5KQorICAgICAgICAgICAgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRj
aCA9IG1hdGNoZXMuY2FsbCggZGl2LCAiZGl2IiApOworCisgICAgICAgICAgICAvLyBUaGlzIHNo
b3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAvLyBHZWNrbyBkb2VzIG5v
dCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCisgICAgICAgICAgICBtYXRjaGVzLmNhbGwo
IGRpdiwgIltzIT0nJ106eCIgKTsKKyAgICAgICAgICAgIHJidWdneU1hdGNoZXMucHVzaCggIiE9
IiwgcHNldWRvcyApOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByYnVnZ3lRU0EgPSByYnVn
Z3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCJ8IikgKTsKKyAgICBy
YnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5
TWF0Y2hlcy5qb2luKCJ8IikgKTsKKworICAgIC8qIENvbnRhaW5zCisgICAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLworICAgIGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24gKTsKKworICAgIC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlcgorICAgIC8v
IFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZQorICAgIC8vIEFzIGluLCBhbiBlbGVtZW50IGRv
ZXMgbm90IGNvbnRhaW4gaXRzZWxmCisgICAgY29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRp
dmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID8KKyAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7
CisgICAgICAgICAgICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVs
ZW1lbnQgOiBhLAorICAgICAgICAgICAgICAgIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlOworICAg
ICAgICAgICAgcmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0g
MSAmJiAoCisgICAgICAgICAgICAgICAgYWRvd24uY29udGFpbnMgPworICAgICAgICAgICAgICAg
ICAgICBhZG93bi5jb250YWlucyggYnVwICkgOgorICAgICAgICAgICAgICAgICAgICBhLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYg
MTYKKyAgICAgICAgICAgICkpOworICAgICAgICB9IDoKKyAgICAgICAgZnVuY3Rpb24oIGEsIGIg
KSB7CisgICAgICAgICAgICBpZiAoIGIgKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoYiA9
IGIucGFyZW50Tm9kZSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggYiA9PT0gYSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9OworCisgICAgLyogU29ydGluZworICAgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KKworICAgIC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmcKKyAgICBzb3J0T3JkZXIgPSBoYXND
b21wYXJlID8KKyAgICBmdW5jdGlvbiggYSwgYiApIHsKKworICAgICAgICAvLyBGbGFnIGZvciBk
dXBsaWNhdGUgcmVtb3ZhbAorICAgICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBo
YXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFz
IGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uCisgICAgICAgIHZhciBjb21wYXJlID0gIWEuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjsKKyAgICAgICAg
aWYgKCBjb21wYXJlICkgeworICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRv
IHRoZSBzYW1lIGRvY3VtZW50CisgICAgICAgIGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8
fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/CisgICAgICAgICAgICBhLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOgorCisgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2Ug
a25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWQKKyAgICAgICAgICAgIDE7CisKKyAgICAgICAgLy8g
RGlzY29ubmVjdGVkIG5vZGVzCisgICAgICAgIGlmICggY29tcGFyZSAmIDEgfHwKKyAgICAgICAg
ICAgICghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbigg
YSApID09PSBjb21wYXJlKSApIHsKKworICAgICAgICAgICAgLy8gQ2hvb3NlIHRoZSBmaXJzdCBl
bGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50CisgICAgICAg
ICAgICBpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PT0gcHJlZmVycmVk
RG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBiID09PSBkb2N1bWVudCB8
fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWRE
b2MsIGIpICkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlcgorICAgICAgICAgICAgcmV0dXJu
IHNvcnRJbnB1dCA/CisgICAgICAgICAgICAgICAgKCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAt
IGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOgorICAgICAgICAgICAgICAgIDA7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7CisgICAgfSA6CisgICAg
ZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgIC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFy
ZSBpZGVudGljYWwKKyAgICAgICAgaWYgKCBhID09PSBiICkgeworICAgICAgICAgICAgaGFzRHVw
bGljYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIGN1ciwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgYXVwID0gYS5wYXJl
bnROb2RlLAorICAgICAgICAgICAgYnVwID0gYi5wYXJlbnROb2RlLAorICAgICAgICAgICAgYXAg
PSBbIGEgXSwKKyAgICAgICAgICAgIGJwID0gWyBiIF07CisKKyAgICAgICAgLy8gUGFyZW50bGVz
cyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWQKKyAgICAgICAgaWYg
KCAhYXVwIHx8ICFidXAgKSB7CisgICAgICAgICAgICByZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAt
MSA6CisgICAgICAgICAgICAgICAgYiA9PT0gZG9jdW1lbnQgPyAxIDoKKyAgICAgICAgICAgICAg
ICBhdXAgPyAtMSA6CisgICAgICAgICAgICAgICAgYnVwID8gMSA6CisgICAgICAgICAgICAgICAg
c29ydElucHV0ID8KKyAgICAgICAgICAgICAgICAoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0g
aW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6CisgICAgICAgICAgICAgICAgMDsKKworICAgICAg
ICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVjawor
ICAgICAgICB9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHsKKyAgICAgICAgICAgIHJldHVybiBz
aWJsaW5nQ2hlY2soIGEsIGIgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE90aGVyd2lzZSB3
ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uCisgICAg
ICAgIGN1ciA9IGE7CisgICAgICAgIHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHsK
KyAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOworICAgICAgICB9CisgICAgICAgIGN1ciA9
IGI7CisgICAgICAgIHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHsKKyAgICAgICAg
ICAgIGJwLnVuc2hpZnQoIGN1ciApOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2FsayBkb3du
IHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3kKKyAgICAgICAgd2hpbGUgKCBhcFtp
XSA9PT0gYnBbaV0gKSB7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gaSA/CisgICAgICAgICAgICAvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVz
IGhhdmUgYSBjb21tb24gYW5jZXN0b3IKKyAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0s
IGJwW2ldICkgOgorCisgICAgICAgICAgICAvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3Vt
ZW50IHNvcnQgZmlyc3QKKyAgICAgICAgICAgIGFwW2ldID09PSBwcmVmZXJyZWREb2MgPyAtMSA6
CisgICAgICAgICAgICBicFtpXSA9PT0gcHJlZmVycmVkRG9jID8gMSA6CisgICAgICAgICAgICAw
OworICAgIH07CisKKyAgICByZXR1cm4gZG9jdW1lbnQ7Cit9OworCitTaXp6bGUubWF0Y2hlcyA9
IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHsKKyAgICByZXR1cm4gU2l6emxlKCBleHByLCBu
dWxsLCBudWxsLCBlbGVtZW50cyApOworfTsKKworU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1
bmN0aW9uKCBlbGVtLCBleHByICkgeworICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRl
ZAorICAgIGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCAp
IHsKKyAgICAgICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1
cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWQKKyAgICBleHByID0gZXhwci5y
ZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSddIiApOworCisgICAgaWYgKCBzdXBwb3J0
Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJgorICAgICAgICAhY29tcGlsZXJD
YWNoZVsgZXhwciArICIgIiBdICYmCisgICAgICAgICggIXJidWdneU1hdGNoZXMgfHwgIXJidWdn
eU1hdGNoZXMudGVzdCggZXhwciApICkgJiYKKyAgICAgICAgKCAhcmJ1Z2d5UVNBICAgICB8fCAh
cmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkgeworCisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICB2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7CisKKyAgICAgICAgICAgIC8v
IElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9k
ZXMKKyAgICAgICAgICAgIGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHwK
KyAgICAgICAgICAgICAgICAgICAgLy8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBz
YWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQg
aW4gSUUgOQorICAgICAgICAgICAgICAgICAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1l
bnQubm9kZVR5cGUgIT09IDExICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgfQorCisgICAgcmV0dXJuIFNp
enpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsKK307CisK
K1NpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkgeworICAgIC8vIFNl
dCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAorICAgIGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1l
bnQgfHwgY29udGV4dCApICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgc2V0RG9jdW1lbnQoIGNv
bnRleHQgKTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7Cit9
OworCitTaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgIC8vIFNldCBk
b2N1bWVudCB2YXJzIGlmIG5lZWRlZAorICAgIGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwg
ZWxlbSApICE9PSBkb2N1bWVudCApIHsKKyAgICAgICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsKKyAg
ICB9CisKKyAgICB2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBd
LAorICAgICAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVy
dGllcyAoalF1ZXJ5ICMxMzgwNykKKyAgICAgICAgdmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4
cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgPworICAgICAgICAgICAgZm4oIGVs
ZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDoKKyAgICAgICAgICAgIHVuZGVmaW5lZDsKKwor
ICAgIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/CisgICAgICAgIHZhbCA6CisgICAgICAgIHN1
cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgPworICAgICAgICAgICAgZWxlbS5n
ZXRBdHRyaWJ1dGUoIG5hbWUgKSA6CisgICAgICAgICAgICAodmFsID0gZWxlbS5nZXRBdHRyaWJ1
dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID8KKyAgICAgICAgICAgICAgICB2YWwudmFs
dWUgOgorICAgICAgICAgICAgICAgIG51bGw7Cit9OworCitTaXp6bGUuZXJyb3IgPSBmdW5jdGlv
biggbXNnICkgeworICAgIHRocm93IG5ldyBFcnJvciggIlN5bnRheCBlcnJvciwgdW5yZWNvZ25p
emVkIGV4cHJlc3Npb246ICIgKyBtc2cgKTsKK307CisKKy8qKgorICogRG9jdW1lbnQgc29ydGlu
ZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcworICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHMK
KyAqLworU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHsKKyAgICB2YXIg
ZWxlbSwKKyAgICAgICAgZHVwbGljYXRlcyA9IFtdLAorICAgICAgICBqID0gMCwKKyAgICAgICAg
aSA9IDA7CisKKyAgICAvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRl
cywgYXNzdW1lIHRoZWlyIHByZXNlbmNlCisgICAgaGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0
ZWN0RHVwbGljYXRlczsKKyAgICBzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJl
c3VsdHMuc2xpY2UoIDAgKTsKKyAgICByZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApOworCisgICAg
aWYgKCBoYXNEdXBsaWNhdGUgKSB7CisgICAgICAgIHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2kr
K10pICkgeworICAgICAgICAgICAgaWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7CisgICAg
ICAgICAgICAgICAgaiA9IGR1cGxpY2F0ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHdoaWxlICggai0tICkgeworICAgICAgICAgICAgcmVzdWx0cy5zcGxp
Y2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xl
YXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHMKKyAgICAvLyBTZWUgaHR0
cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjUKKyAgICBzb3J0SW5wdXQgPSBu
dWxsOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9OworCisvKioKKyAqIFV0aWxpdHkgZnVuY3Rp
b24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVz
CisgKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW0KKyAqLworZ2V0VGV4dCA9IFNpenpsZS5n
ZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgdmFyIG5vZGUsCisgICAgICAgIHJldCA9
ICIiLAorICAgICAgICBpID0gMCwKKyAgICAgICAgbm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlOwor
CisgICAgaWYgKCAhbm9kZVR5cGUgKSB7CisgICAgICAgIC8vIElmIG5vIG5vZGVUeXBlLCB0aGlz
IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5CisgICAgICAgIHdoaWxlICggKG5vZGUgPSBlbGVt
W2krK10pICkgeworICAgICAgICAgICAgLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXMK
KyAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBub2RlICk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0g
MTEgKSB7CisgICAgICAgIC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHMKKyAgICAgICAg
Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAo
alF1ZXJ5ICMxMTE1MykKKyAgICAgICAgaWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0g
InN0cmluZyIgKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS50ZXh0Q29udGVudDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlbgorICAgICAg
ICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4
dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgcmV0ICs9IGdldFRleHQoIGVsZW0gKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8
IG5vZGVUeXBlID09PSA0ICkgeworICAgICAgICByZXR1cm4gZWxlbS5ub2RlVmFsdWU7CisgICAg
fQorICAgIC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlv
biBub2RlcworCisgICAgcmV0dXJuIHJldDsKK307CisKK0V4cHIgPSBTaXp6bGUuc2VsZWN0b3Jz
ID0geworCisgICAgLy8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyCisgICAgY2FjaGVMZW5n
dGg6IDUwLAorCisgICAgY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sCisKKyAgICBtYXRjaDog
bWF0Y2hFeHByLAorCisgICAgYXR0ckhhbmRsZToge30sCisKKyAgICBmaW5kOiB7fSwKKworICAg
IHJlbGF0aXZlOiB7CisgICAgICAgICI+IjogeyBkaXI6ICJwYXJlbnROb2RlIiwgZmlyc3Q6IHRy
dWUgfSwKKyAgICAgICAgIiAiOiB7IGRpcjogInBhcmVudE5vZGUiIH0sCisgICAgICAgICIrIjog
eyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDogdHJ1ZSB9LAorICAgICAgICAifiI6IHsg
ZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9CisgICAgfSwKKworICAgIHByZUZpbHRlcjogeworICAg
ICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKKyAgICAgICAgICAgIG1hdGNoWzFdID0g
bWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKKworICAgICAgICAgICAg
Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5x
dW90ZWQKKyAgICAgICAgICAgIG1hdGNoWzNdID0gKCBtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBt
YXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7CisKKyAgICAg
ICAgICAgIGlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hb
M10gPSAiICIgKyBtYXRjaFszXSArICIgIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7CisgICAgICAgIH0sCisKKyAgICAgICAgIkNISUxE
IjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAgICAgICAgLyogbWF0Y2hlcyBmcm9tIG1hdGNo
RXhwclsiQ0hJTEQiXQorICAgICAgICAgICAgICAgIDEgdHlwZSAob25seXxudGh8Li4uKQorICAg
ICAgICAgICAgICAgIDIgd2hhdCAoY2hpbGR8b2YtdHlwZSkKKyAgICAgICAgICAgICAgICAzIGFy
Z3VtZW50IChldmVufG9kZHxcZCp8XGQqbihbKy1dXGQrKT98Li4uKQorICAgICAgICAgICAgICAg
IDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XGQqbnwpCisgICAgICAgICAg
ICAgICAgNSBzaWduIG9mIHhuLWNvbXBvbmVudAorICAgICAgICAgICAgICAgIDYgeCBvZiB4bi1j
b21wb25lbnQKKyAgICAgICAgICAgICAgICA3IHNpZ24gb2YgeS1jb21wb25lbnQKKyAgICAgICAg
ICAgICAgICA4IHkgb2YgeS1jb21wb25lbnQKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBt
YXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgICAgIGlmICggbWF0
Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gIm50aCIgKSB7CisgICAgICAgICAgICAgICAgLy8gbnRo
LSogcmVxdWlyZXMgYXJndW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoICFtYXRjaFszXSApIHsK
KyAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJz
IGZvciBFeHByLmZpbHRlci5DSElMRAorICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQg
ZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKKyAgICAgICAgICAgICAgICBtYXRj
aFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0gKyAobWF0Y2hbNl0gfHwgMSkgOiAyICogKCBt
YXRjaFszXSA9PT0gImV2ZW4iIHx8IG1hdGNoWzNdID09PSAib2RkIiApICk7CisgICAgICAgICAg
ICAgICAgbWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsgbWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9
PT0gIm9kZCIgKTsKKworICAgICAgICAgICAgLy8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1l
bnRzCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFszXSApIHsKKyAgICAgICAgICAgICAg
ICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiBtYXRjaDsKKyAgICAgICAgfSwKKworICAgICAgICAiUFNFVURPIjogZnVuY3Rpb24o
IG1hdGNoICkgeworICAgICAgICAgICAgdmFyIGV4Y2VzcywKKyAgICAgICAgICAgICAgICB1bnF1
b3RlZCA9ICFtYXRjaFs2XSAmJiBtYXRjaFsyXTsKKworICAgICAgICAgICAgaWYgKCBtYXRjaEV4
cHJbIkNISUxEIl0udGVzdCggbWF0Y2hbMF0gKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWNjZXB0IHF1b3RlZCBhcmd1
bWVudHMgYXMtaXMKKyAgICAgICAgICAgIGlmICggbWF0Y2hbM10gKSB7CisgICAgICAgICAgICAg
ICAgbWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIjsKKworICAgICAgICAgICAg
Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHMKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAm
JgorICAgICAgICAgICAgICAgIC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZl
bHkpCisgICAgICAgICAgICAgICAgKGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSAp
KSAmJgorICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJl
bnRoZXNpcworICAgICAgICAgICAgICAgIChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCAiKSIs
IHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHsKKworICAg
ICAgICAgICAgICAgIC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4CisgICAgICAgICAgICAg
ICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7CisgICAgICAgICAgICAg
ICAgbWF0Y2hbMl0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNl
dWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQorICAgICAgICAgICAgcmV0dXJu
IG1hdGNoLnNsaWNlKCAwLCAzICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZmlsdGVyOiB7
CisKKyAgICAgICAgIlRBRyI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkgeworICAgICAg
ICAgICAgdmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUs
IGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZU5hbWVT
ZWxlY3RvciA9PT0gIioiID8KKyAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRy
dWU7IH0gOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkgPT09IG5vZGVOYW1lOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgIkNMQVNTIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHsKKyAgICAgICAgICAgIHZhciBwYXR0
ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgIiAiIF07CisKKyAgICAgICAgICAgIHJldHVy
biBwYXR0ZXJuIHx8CisgICAgICAgICAgICAgICAgKHBhdHRlcm4gPSBuZXcgUmVnRXhwKCAiKF58
IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3aGl0ZXNwYWNlICsgInwk
KSIgKSkgJiYKKyAgICAgICAgICAgICAgICBjbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBl
b2YgZWxlbS5jbGFzc05hbWUgPT09ICJzdHJpbmciICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVv
ZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gInVuZGVmaW5lZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGUo
ImNsYXNzIikgfHwgIiIgKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAg
ICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7CisgICAgICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3Vs
dCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHJl
c3VsdCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09
ICIhPSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggIW9wZXJhdG9y
ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiI7CisKKyAgICAgICAgICAgICAgICByZXR1
cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3VsdCA9PT0gY2hlY2sgOgorICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAhPT0gY2hlY2sgOgorICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRvciA9PT0gIl49IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVj
ayApID09PSAwIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICIqPSIgPyBjaGVj
ayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoKKyAgICAgICAgICAgICAgICAgICAg
b3BlcmF0b3IgPT09ICIkPSIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGgg
KSA9PT0gY2hlY2sgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIn49IiA/ICgg
IiAiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCAiICIgKSArICIgIiApLmluZGV4T2Yo
IGNoZWNrICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAifD0iID8g
cmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9
PT0gY2hlY2sgKyAiLSIgOgorICAgICAgICAgICAgICAgICAgICBmYWxzZTsKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0sCisKKyAgICAgICAgIkNISUxEIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQs
IGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHsKKyAgICAgICAgICAgIHZhciBzaW1wbGUgPSB0eXBl
LnNsaWNlKCAwLCAzICkgIT09ICJudGgiLAorICAgICAgICAgICAgICAgIGZvcndhcmQgPSB0eXBl
LnNsaWNlKCAtNCApICE9PSAibGFzdCIsCisgICAgICAgICAgICAgICAgb2ZUeXBlID0gd2hhdCA9
PT0gIm9mLXR5cGUiOworCisgICAgICAgICAgICByZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9
PT0gMCA/CisKKyAgICAgICAgICAgICAgICAvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAhIWVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgICAgICAgICB9IDoKKworICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3Rh
cnQsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyAi
bmV4dFNpYmxpbmciIDogInByZXZpb3VzU2libGluZyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
ID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgZGlmZiA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50ICkg
eworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxk
fG9mLXR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNpbXBsZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRpciApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG9mVHlwZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVUeXBlID09PSAx
ICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNv
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGRpciA9IHR5cGUgPT09
ICJvbmx5IiAmJiAhc3RhcnQgJiYgIm5leHRTaWJsaW5nIjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0g
WyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBj
YWNoZSBkYXRhIG9uIGBwYXJlbnRgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZvcndh
cmQgJiYgdXNlQ2FjaGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWVr
IGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXgKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlID0gcGFyZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9w
ZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlx
dWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8
IFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGNhY2hlWyAwIF0g
PT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXgg
JiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQu
cG9wKCkpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gZm91
bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9k
ZSA9PT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1
ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNl
IHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB1c2VDYWNoZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0g
e30pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw5
IG9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3Qg
Y2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0ZXJDYWNoZVsgbm9kZS51
bmlxdWVJRCBdID0ge30pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hl
ID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gbm9kZUluZGV4OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHhtbCA6bnRoLWNoaWxkKC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciA6
bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaWZmID09PSBmYWxzZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2Vl
ayBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWZmID0gbm9kZUluZGV4ID0gMCkg
fHwgc3RhcnQucG9wKCkpICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICggb2ZUeXBlID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrZGlmZiApIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNo
IGVuY291bnRlcmVkIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHVzZUNhY2hlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRv
IF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU3VwcG9ydDogSUUgPDkgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkg
Z2gtMTcwOSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p
cXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRlckNhY2hlWyBub2RlLnVuaXF1
ZUlEIF0gPSB7fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggbm9kZSA9PT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3lj
bGUgc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiAtPSBsYXN0OworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09
PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgICJQU0VVRE8iOiBmdW5jdGlvbigg
cHNldWRvLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIC8vIHBzZXVkby1jbGFzcyBuYW1lcyBh
cmUgY2FzZS1pbnNlbnNpdGl2ZQorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
c2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3NlcworICAgICAgICAgICAgLy8gUHJpb3JpdGl6ZSBieSBj
YXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBw
ZXJjYXNlIGxldHRlcnMKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBp
bmhlcml0cyBmcm9tIHBzZXVkb3MKKyAgICAgICAgICAgIHZhciBhcmdzLAorICAgICAgICAgICAg
ICAgIGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVk
by50b0xvd2VyQ2FzZSgpIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCAi
dW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgcHNldWRvICk7CisKKyAgICAgICAgICAgIC8vIFRoZSB1
c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXQKKyAgICAgICAgICAgIC8v
IGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uCisgICAg
ICAgICAgICAvLyBqdXN0IGFzIFNpenpsZSBkb2VzCisgICAgICAgICAgICBpZiAoIGZuWyBleHBh
bmRvIF0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBhcmd1bWVudCApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNp
Z25hdHVyZXMKKyAgICAgICAgICAgIGlmICggZm4ubGVuZ3RoID4gMSApIHsKKyAgICAgICAgICAg
ICAgICBhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgIiIsIGFyZ3VtZW50IF07CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93
ZXJDYXNlKCkgKSA/CisgICAgICAgICAgICAgICAgICAgIG1hcmtGdW5jdGlvbihmdW5jdGlvbigg
c2VlZCwgbWF0Y2hlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZHgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtYXRjaGVkLmxlbmd0aDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbaV0gKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KSA6Cisg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmbjsKKyAgICAgICAgfQorICAg
IH0sCisKKyAgICBwc2V1ZG9zOiB7CisgICAgICAgIC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNl
dWRvcworICAgICAgICAibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsK
KyAgICAgICAgICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlCisgICAg
ICAgICAgICAvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZworICAgICAg
ICAgICAgLy8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzCisgICAgICAgICAgICB2YXIgaW5wdXQgPSBb
XSwKKyAgICAgICAgICAgICAgICByZXN1bHRzID0gW10sCisgICAgICAgICAgICAgICAgbWF0Y2hl
ciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICkgKTsKKworICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/CisgICAgICAgICAgICAgICAgbWFya0Z1
bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVk
ID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaSA9IHNlZWQubGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1l
bnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmAKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBp
LS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ld
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkW2ldID0gIShtYXRjaGVzW2ld
ID0gZWxlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0s
IGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRbMF0gPSBlbGVtOwor
ICAgICAgICAgICAgICAgICAgICBtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7
CisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMy
OTkpCisgICAgICAgICAgICAgICAgICAgIGlucHV0WzBdID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICFyZXN1bHRzLnBvcCgpOworICAgICAgICAgICAgICAgIH07CisgICAgICAg
IH0pLAorCisgICAgICAgICJoYXMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkg
eworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDsKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0pLAorCisgICAgICAgICJjb250YWlucyI6IG1hcmtGdW5jdGlvbihmdW5j
dGlvbiggdGV4dCApIHsKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2Fw
ZSwgZnVuZXNjYXBlICk7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4
dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0pLAorCisgICAgICAgIC8vICJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVw
cmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yCisgICAgICAgIC8vIGlzIGJhc2VkIHNvbGVs
eSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlCisgICAgICAgIC8vIGJlaW5nIGVxdWFs
IHRvIHRoZSBpZGVudGlmaWVyIEMsCisgICAgICAgIC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBp
ZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgIi0iLgorICAgICAgICAvLyBUaGUg
bWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVy
Zm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS4KKyAgICAgICAgLy8gVGhlIGlkZW50aWZpZXIgQyBk
b2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS4iCisgICAgICAgIC8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG8KKyAgICAgICAgImxhbmci
OiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkgeworICAgICAgICAgICAgLy8gbGFuZyB2
YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllcgorICAgICAgICAgICAgaWYgKCAhcmlkZW50
aWZpZXIudGVzdChsYW5nIHx8ICIiKSApIHsKKyAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3Io
ICJ1bnN1cHBvcnRlZCBsYW5nOiAiICsgbGFuZyApOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2Fz
ZSgpOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
ICAgIHZhciBlbGVtTGFuZzsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgPworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbS5sYW5nIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uZ2V0QXR0cmli
dXRlKCJ4bWw6bGFuZyIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJsYW5nIikpICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxh
bmcuaW5kZXhPZiggbGFuZyArICItIiApID09PSAwOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVt
Lm5vZGVUeXBlID09PSAxICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAgLy8gTWlzY2VsbGFuZW91cworICAgICAg
ICAidGFyZ2V0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgaGFzaCA9IHdp
bmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHJldHVy
biBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDsKKyAgICAgICAgfSwKKworICAg
ICAgICAicm9vdCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0g
PT09IGRvY0VsZW07CisgICAgICAgIH0sCisKKyAgICAgICAgImZvY3VzIjogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVs
ZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpOworICAgICAgICB9LAorCisg
ICAgICAgIC8vIEJvb2xlYW4gcHJvcGVydGllcworICAgICAgICAiZW5hYmxlZCI6IGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlOwor
ICAgICAgICB9LAorCisgICAgICAgICJkaXNhYmxlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7CisgICAgICAgIH0sCisKKyAg
ICAgICAgImNoZWNrZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIC8vIEluIENT
UzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVt
ZW50cworICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1z
ZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKKyAgICAgICAgICAgIHZhciBub2RlTmFtZSA9IGVs
ZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAobm9kZU5hbWUg
PT09ICJpbnB1dCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2RlTmFtZSA9PT0gIm9wdGlvbiIg
JiYgISFlbGVtLnNlbGVjdGVkKTsKKyAgICAgICAgfSwKKworICAgICAgICAic2VsZWN0ZWQiOiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5
IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHQKKyAgICAgICAgICAgIC8vIG9wdGlvbnMgaW4gU2Fm
YXJpIHdvcmsgcHJvcGVybHkKKyAgICAgICAgICAgIGlmICggZWxlbS5wYXJlbnROb2RlICkgewor
ICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKKyAgICAg
ICAgfSwKKworICAgICAgICAvLyBDb250ZW50cworICAgICAgICAiZW1wdHkiOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8j
ZW1wdHktcHNldWRvCisgICAgICAgICAgICAvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50
ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSks
CisgICAgICAgICAgICAvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNz
aW5nIGluc3RydWN0aW9uOiA3OyBldGMuKQorICAgICAgICAgICAgLy8gbm9kZVR5cGUgPCA2IHdv
cmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlbgorICAg
ICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0u
bmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlIDwgNiAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorCisg
ICAgICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiAh
RXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
RWxlbWVudC9pbnB1dCB0eXBlcworICAgICAgICAiaGVhZGVyIjogZnVuY3Rpb24oIGVsZW0gKSB7
CisgICAgICAgICAgICByZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisgICAg
ICAgIH0sCisKKyAgICAgICAgImlucHV0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgImJ1dHRvbiI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIG5hbWUg
PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICByZXR1cm4gbmFtZSA9
PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8IG5hbWUgPT09ICJidXR0b24i
OworICAgICAgICB9LAorCisgICAgICAgICJ0ZXh0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICB2YXIgYXR0cjsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKKyAgICAgICAgICAgICAgICBlbGVtLnR5cGUgPT09ICJ0
ZXh0IiAmJgorCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU8OAorICAgICAgICAgICAg
ICAgIC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCAic2VhcmNoIikgYXBwZWFy
IHdpdGggZWxlbS50eXBlID09PSAidGV4dCIKKyAgICAgICAgICAgICAgICAoIChhdHRyID0gZWxl
bS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09
ICJ0ZXh0IiApOworICAgICAgICB9LAorCisgICAgICAgIC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rp
b24KKyAgICAgICAgImZpcnN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHJldHVybiBbIDAgXTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImxhc3Qi
OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCAp
IHsKKyAgICAgICAgICAgIHJldHVybiBbIGxlbmd0aCAtIDEgXTsKKyAgICAgICAgfSksCisKKyAg
ICAgICAgImVxIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVz
LCBsZW5ndGgsIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgcmV0dXJuIFsgYXJndW1lbnQgPCAw
ID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdOworICAgICAgICB9KSwKKworICAgICAg
ICAiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywg
bGVuZ3RoICkgeworICAgICAgICAgICAgdmFyIGkgPSAwOworICAgICAgICAgICAgZm9yICggOyBp
IDwgbGVuZ3RoOyBpICs9IDIgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2go
IGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7Cisg
ICAgICAgIH0pLAorCisgICAgICAgICJvZGQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0
aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKKyAgICAgICAgICAgIHZhciBpID0gMTsKKyAg
ICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkgeworICAgICAgICAgICAgICAg
IG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwKKworICAgICAgICAibHQiOiBjcmVhdGVQb3Np
dGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7
CisgICAgICAgICAgICB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDog
YXJndW1lbnQ7CisgICAgICAgICAgICBmb3IgKCA7IC0taSA+PSAwOyApIHsKKyAgICAgICAgICAg
ICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSksCisKKyAgICAgICAgImd0IjogY3JlYXRl
UG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50
ICkgeworICAgICAgICAgICAgdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0
aCA6IGFyZ3VtZW50OworICAgICAgICAgICAgZm9yICggOyArK2kgPCBsZW5ndGg7ICkgeworICAg
ICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KQorICAgIH0KK307CisKK0V4
cHIucHNldWRvc1sibnRoIl0gPSBFeHByLnBzZXVkb3NbImVxIl07CisKKy8vIEFkZCBidXR0b24v
aW5wdXQgdHlwZSBwc2V1ZG9zCitmb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0
cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHsKKyAgICBF
eHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7Cit9Citmb3IgKCBpIGlu
IHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkgeworICAgIEV4cHIucHNldWRvc1sgaSBd
ID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7Cit9CisKKy8vIEVhc3kgQVBJIGZvciBjcmVhdGlu
ZyBuZXcgc2V0RmlsdGVycworZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9CitzZXRGaWx0ZXJzLnBy
b3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvczsKK0V4cHIuc2V0RmlsdGVycyA9
IG5ldyBzZXRGaWx0ZXJzKCk7CisKK3Rva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rp
b24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7CisgICAgdmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tl
bnMsIHR5cGUsCisgICAgICAgIHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsCisgICAgICAgIGNh
Y2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF07CisKKyAgICBpZiAoIGNhY2hlZCAp
IHsKKyAgICAgICAgcmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKKyAg
ICB9CisKKyAgICBzb0ZhciA9IHNlbGVjdG9yOworICAgIGdyb3VwcyA9IFtdOworICAgIHByZUZp
bHRlcnMgPSBFeHByLnByZUZpbHRlcjsKKworICAgIHdoaWxlICggc29GYXIgKSB7CisKKyAgICAg
ICAgLy8gQ29tbWEgYW5kIGZpcnN0IHJ1bgorICAgICAgICBpZiAoICFtYXRjaGVkIHx8IChtYXRj
aCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHsKKyAgICAgICAgICAgIGlmICggbWF0Y2ggKSB7
CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFs
aWQKKyAgICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGgg
KSB8fCBzb0ZhcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyb3Vwcy5wdXNoKCAodG9r
ZW5zID0gW10pICk7CisgICAgICAgIH0KKworICAgICAgICBtYXRjaGVkID0gZmFsc2U7CisKKyAg
ICAgICAgLy8gQ29tYmluYXRvcnMKKyAgICAgICAgaWYgKCAobWF0Y2ggPSByY29tYmluYXRvcnMu
ZXhlYyggc29GYXIgKSkgKSB7CisgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsK
KyAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICB2YWx1ZTogbWF0Y2hl
ZCwKKyAgICAgICAgICAgICAgICAvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3Bh
Y2UKKyAgICAgICAgICAgICAgICB0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgIiAiICkK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hl
ZC5sZW5ndGggKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbHRlcnMKKyAgICAgICAgZm9y
ICggdHlwZSBpbiBFeHByLmZpbHRlciApIHsKKyAgICAgICAgICAgIGlmICggKG1hdGNoID0gbWF0
Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwK
KyAgICAgICAgICAgICAgICAobWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSAp
IHsKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKKyAgICAgICAgICAg
ICAgICB0b2tlbnMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXRjaGVkLAor
ICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgICAgICBtYXRj
aGVzOiBtYXRjaAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHNvRmFyID0g
c29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoICFtYXRjaGVkICkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNl
c3MKKyAgICAvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmcKKyAgICAvLyBPdGhlcndpc2UsIHRocm93
IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnMKKyAgICByZXR1cm4gcGFyc2VPbmx5ID8KKyAgICAg
ICAgc29GYXIubGVuZ3RoIDoKKyAgICAgICAgc29GYXIgPworICAgICAgICAgICAgU2l6emxlLmVy
cm9yKCBzZWxlY3RvciApIDoKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSB0b2tlbnMKKyAgICAg
ICAgICAgIHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOworfTsKKwor
ZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAg
bGVuID0gdG9rZW5zLmxlbmd0aCwKKyAgICAgICAgc2VsZWN0b3IgPSAiIjsKKyAgICBmb3IgKCA7
IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgc2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlOwor
ICAgIH0KKyAgICByZXR1cm4gc2VsZWN0b3I7Cit9CisKK2Z1bmN0aW9uIGFkZENvbWJpbmF0b3Io
IG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7CisgICAgdmFyIGRpciA9IGNvbWJpbmF0b3Iu
ZGlyLAorICAgICAgICBjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBkaXIgPT09ICJwYXJlbnRO
b2RlIiwKKyAgICAgICAgZG9uZU5hbWUgPSBkb25lKys7CisKKyAgICByZXR1cm4gY29tYmluYXRv
ci5maXJzdCA/CisgICAgICAgIC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVj
ZWRpbmcgZWxlbWVudAorICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewor
ICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSA6CisKKyAgICAgICAg
Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzCisgICAgICAg
IGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB2YXIgb2xkQ2Fj
aGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLAorICAgICAgICAgICAgICAgIG5ld0NhY2hlID0g
WyBkaXJydW5zLCBkb25lTmFtZSBdOworCisgICAgICAgICAgICAvLyBXZSBjYW4ndCBzZXQgYXJi
aXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21i
aW5hdG9yIGNhY2hpbmcKKyAgICAgICAgICAgIGlmICggeG1sICkgeworICAgICAgICAgICAgICAg
IHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRp
ciBdKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8
IGNoZWNrTm9uRWxlbWVudHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hl
ID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0x
NzA5KQorICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBl
bGVtLnVuaXF1ZUlEIF0gfHwgKG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9KTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAob2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsgZGly
IF0pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2FjaGVbIDAgXSA9PT0gZGly
cnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFn
YXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldXNlIG5ld2Nh
Y2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZVsgZGlyIF0gPSBuZXdDYWNoZTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsg
YSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4
bWwgKSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKK30KKworZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgewor
ICAgIHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID8KKyAgICAgICAgZnVuY3Rpb24oIGVsZW0s
IGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOwor
ICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hl
cnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0gOgorICAgICAgICBtYXRjaGVyc1swXTsKK30KKworZnVu
Y3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgewor
ICAgIHZhciBpID0gMCwKKyAgICAgICAgbGVuID0gY29udGV4dHMubGVuZ3RoOworICAgIGZvciAo
IDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tp
XSwgcmVzdWx0cyApOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24g
Y29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKKyAgICB2
YXIgZWxlbSwKKyAgICAgICAgbmV3VW5tYXRjaGVkID0gW10sCisgICAgICAgIGkgPSAwLAorICAg
ICAgICBsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAorICAgICAgICBtYXBwZWQgPSBtYXAgIT0gbnVs
bDsKKworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICBpZiAoIChlbGVtID0g
dW5tYXRjaGVkW2ldKSApIHsKKyAgICAgICAgICAgIGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVs
ZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgIG5ld1VubWF0Y2hlZC5wdXNo
KCBlbGVtICk7CisgICAgICAgICAgICAgICAgaWYgKCBtYXBwZWQgKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1hcC5wdXNoKCBpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVuY3Rp
b24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwg
cG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkgeworICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9z
dEZpbHRlclsgZXhwYW5kbyBdICkgeworICAgICAgICBwb3N0RmlsdGVyID0gc2V0TWF0Y2hlcigg
cG9zdEZpbHRlciApOworICAgIH0KKyAgICBpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJb
IGV4cGFuZG8gXSApIHsKKyAgICAgICAgcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5k
ZXIsIHBvc3RTZWxlY3RvciApOworICAgIH0KKyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0
aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgIHZhciB0ZW1wLCBp
LCBlbGVtLAorICAgICAgICAgICAgcHJlTWFwID0gW10sCisgICAgICAgICAgICBwb3N0TWFwID0g
W10sCisgICAgICAgICAgICBwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAorCisgICAgICAg
ICAgICAvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAorICAgICAg
ICAgICAgZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwg
Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSwKKworICAgICAg
ICAgICAgLy8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFw
IGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uCisgICAgICAgICAgICBtYXRjaGVySW4g
PSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICBj
b25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisgICAg
ICAgICAgICAgICAgZWxlbXMsCisKKyAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8K
KyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQg
c2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAorICAg
ICAgICAgICAgICAgIHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3Rp
bmcgfHwgcG9zdEZpbHRlciApID8KKworICAgICAgICAgICAgICAgICAgICAvLyAuLi5pbnRlcm1l
ZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgW10gOgor
CisgICAgICAgICAgICAgICAgICAgIC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3Rs
eQorICAgICAgICAgICAgICAgICAgICByZXN1bHRzIDoKKyAgICAgICAgICAgICAgICBtYXRjaGVy
SW47CisKKyAgICAgICAgLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKKyAgICAgICAgaWYgKCBtYXRj
aGVyICkgeworICAgICAgICAgICAgbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250
ZXh0LCB4bWwgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKKyAg
ICAgICAgaWYgKCBwb3N0RmlsdGVyICkgeworICAgICAgICAgICAgdGVtcCA9IGNvbmRlbnNlKCBt
YXRjaGVyT3V0LCBwb3N0TWFwICk7CisgICAgICAgICAgICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwg
Y29udGV4dCwgeG1sICk7CisKKyAgICAgICAgICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVu
dHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KKyAgICAgICAgICAgIGkgPSB0ZW1w
Lmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIGlm
ICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dFsg
cG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2Vl
ZCApIHsKKyAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgeworICAgICAgICAgICAgICAgICAgICAvLyBH
ZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBp
bnRvIHBvc3RGaW5kZXIgY29udGV4dHMKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFtdOwor
ICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxl
bSA9IG1hdGNoZXJPdXRbaV0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJl
c3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVt
cCwgeG1sICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTW92ZSBt
YXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJv
bml6ZWQKKyAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBt
YXRjaGVyT3V0W2ldKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0Rmlu
ZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWVkW3RlbXBdID0gIShyZXN1bHRzW3RlbXBdID0gZWxlbSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRl
ciBpZiBkZWZpbmVkCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYXRjaGVyT3V0ID0g
Y29uZGVuc2UoCisgICAgICAgICAgICAgICAgbWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/CisgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91
dC5sZW5ndGggKSA6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQKKyAgICAgICAgICAg
ICk7CisgICAgICAgICAgICBpZiAoIHBvc3RGaW5kZXIgKSB7CisgICAgICAgICAgICAgICAgcG9z
dEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQg
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworfQorCitmdW5jdGlvbiBtYXRj
aGVyRnJvbVRva2VucyggdG9rZW5zICkgeworICAgIHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIs
IGosCisgICAgICAgIGxlbiA9IHRva2Vucy5sZW5ndGgsCisgICAgICAgIGxlYWRpbmdSZWxhdGl2
ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sCisgICAgICAgIGltcGxpY2l0UmVs
YXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsiICJdLAorICAgICAgICBp
ID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsCisKKyAgICAgICAgLy8gVGhlIGZvdW5kYXRpb25h
bCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxl
dmVsIGNvbnRleHQocykKKyAgICAgICAgbWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0
OworICAgICAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCisgICAgICAgIG1hdGNoQW55
Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAg
cmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7CisgICAgICAgIH0sIGlt
cGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKyAgICAgICAgbWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBl
bGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB2YXIgcmV0ID0gKCAhbGVhZGluZ1Jl
bGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgK
KyAgICAgICAgICAgICAgICAoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPworICAg
ICAgICAgICAgICAgICAgICBtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDoKKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSAp
OworICAgICAgICAgICAgLy8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkp
CisgICAgICAgICAgICBjaGVja0NvbnRleHQgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIHJl
dDsKKyAgICAgICAgfSBdOworCisgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAg
IGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSApIHsKKyAg
ICAgICAgICAgIG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRj
aGVycyApLCBtYXRjaGVyKSBdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF0Y2hl
ciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0u
bWF0Y2hlcyApOworCisgICAgICAgICAgICAvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBh
IHBvc2l0aW9uYWwgbWF0Y2hlcgorICAgICAgICAgICAgaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0g
KSB7CisgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAo
aWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nCisgICAgICAgICAgICAgICAgaiA9ICsraTsKKyAg
ICAgICAgICAgICAgICBmb3IgKCA7IGogPCBsZW47IGorKyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0udHlwZSBdICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHNldE1hdGNoZXIoCisgICAgICAgICAgICAgICAg
ICAgIGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLAorICAgICAgICAgICAgICAg
ICAgICBpID4gMSAmJiB0b1NlbGVjdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBh
biBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmAKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
cy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUg
PT09ICIgIiA/ICIqIiA6ICIiIH0pCisgICAgICAgICAgICAgICAgICAgICkucmVwbGFjZSggcnRy
aW0sICIkMSIgKSwKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlciwKKyAgICAgICAgICAgICAg
ICAgICAgaSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICks
CisgICAgICAgICAgICAgICAgICAgIGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tl
bnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSwKKyAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAm
JiB0b1NlbGVjdG9yKCB0b2tlbnMgKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7Cit9CisKK2Z1bmN0aW9u
IG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyAp
IHsKKyAgICB2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAorICAgICAgICBieUVs
ZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKKyAgICAgICAgc3VwZXJNYXRjaGVy
ID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkgewor
ICAgICAgICAgICAgdmFyIGVsZW0sIGosIG1hdGNoZXIsCisgICAgICAgICAgICAgICAgbWF0Y2hl
ZENvdW50ID0gMCwKKyAgICAgICAgICAgICAgICBpID0gIjAiLAorICAgICAgICAgICAgICAgIHVu
bWF0Y2hlZCA9IHNlZWQgJiYgW10sCisgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IFtdLAor
ICAgICAgICAgICAgICAgIGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LAorICAgICAg
ICAgICAgICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Ig
b3V0ZXJtb3N0IGNvbnRleHQKKyAgICAgICAgICAgICAgICBlbGVtcyA9IHNlZWQgfHwgYnlFbGVt
ZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIqIiwgb3V0ZXJtb3N0ICksCisgICAgICAgICAgICAg
ICAgLy8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNo
ZXIKKyAgICAgICAgICAgICAgICBkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJh
Y2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKSwKKyAgICAgICAgICAgICAg
ICBsZW4gPSBlbGVtcy5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICkgewor
ICAgICAgICAgICAgICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8
fCBjb250ZXh0IHx8IG91dGVybW9zdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
QWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHMK
KyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaQorICAgICAgICAgICAgLy8gVG9s
ZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6ICJsZW5ndGgiOyBTYWZhcmk6IDxudW1iZXI+
KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZAorICAgICAgICAgICAgZm9yICggOyBpICE9PSBsZW4g
JiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlm
ICggYnlFbGVtZW50ICYmIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIGogPSAwOworICAg
ICAgICAgICAgICAgICAgICBpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPT0g
ZG9jdW1lbnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXREb2N1bWVudCggZWxlbSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0gIWRvY3VtZW50SXNIVE1MOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG1hdGNoZXIgPSBl
bGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1h
dGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRyYWNrIHVu
bWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnMKKyAgICAgICAgICAgICAgICBpZiAoIGJ5
U2V0ICkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91
Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzCisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0g
PSAhbWF0Y2hlciAmJiBlbGVtKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRD
b3VudC0tOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
TGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdAorICAg
ICAgICAgICAgICAgICAgICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1
bm1hdGNoZWQucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBgaWAgaXMgbm93IHRoZSBj
b3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVk
Q291bnRgCisgICAgICAgICAgICAvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLgorICAg
ICAgICAgICAgbWF0Y2hlZENvdW50ICs9IGk7CisKKyAgICAgICAgICAgIC8vIEFwcGx5IHNldCBm
aWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cworICAgICAgICAgICAgLy8gTk9URTogVGhpcyBj
YW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBg
bWF0Y2hlZENvdW50YAorICAgICAgICAgICAgLy8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRu
J3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZl
CisgICAgICAgICAgICAvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLgorICAgICAg
ICAgICAgLy8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgIjAiIGBpYCBhbGxvd3Mg
YGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXQKKyAgICAgICAgICAgIC8vIGNhc2Us
IHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgIjAwIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMg
ZnJvbSBgaWAgYnV0IGlzIGFsc28KKyAgICAgICAgICAgIC8vIG51bWVyaWNhbGx5IHplcm8uCisg
ICAgICAgICAgICBpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHsKKyAgICAgICAg
ICAgICAgICBqID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0
Y2hlcnNbaisrXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXIoIHVubWF0Y2hlZCwg
c2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKCBzZWVkICkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZWludGVncmF0
ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nCisgICAg
ICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlZENvdW50ID4gMCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgaW5k
ZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzCisgICAgICAg
ICAgICAgICAgICAgIHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHMK
KyAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7CisKKyAg
ICAgICAgICAgICAgICAvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxl
IHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmcKKyAgICAgICAgICAgICAgICBp
ZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYKKyAgICAg
ICAgICAgICAgICAgICAgKCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEg
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgU2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE92ZXJy
aWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVycworICAgICAgICAg
ICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNV
bmlxdWU7CisgICAgICAgICAgICAgICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB1bm1hdGNoZWQ7CisgICAgICAg
IH07CisKKyAgICByZXR1cm4gYnlTZXQgPworICAgICAgICBtYXJrRnVuY3Rpb24oIHN1cGVyTWF0
Y2hlciApIDoKKyAgICAgICAgc3VwZXJNYXRjaGVyOworfQorCitjb21waWxlID0gU2l6emxlLmNv
bXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICov
ICkgeworICAgIHZhciBpLAorICAgICAgICBzZXRNYXRjaGVycyA9IFtdLAorICAgICAgICBlbGVt
ZW50TWF0Y2hlcnMgPSBbXSwKKyAgICAgICAgY2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0
b3IgKyAiICIgXTsKKworICAgIGlmICggIWNhY2hlZCApIHsKKyAgICAgICAgLy8gR2VuZXJhdGUg
YSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hl
Y2sgZWFjaCBlbGVtZW50CisgICAgICAgIGlmICggIW1hdGNoICkgeworICAgICAgICAgICAgbWF0
Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKyAgICAgICAgfQorICAgICAgICBpID0gbWF0Y2gu
bGVuZ3RoOworICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgIGNhY2hlZCA9IG1h
dGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApOworICAgICAgICAgICAgaWYgKCBjYWNoZWRbIGV4
cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudE1hdGNoZXJzLnB1
c2goIGNhY2hlZCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2Fj
aGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uCisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUo
IHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0
TWF0Y2hlcnMgKSApOworCisgICAgICAgIC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlv
bgorICAgICAgICBjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3RvcjsKKyAgICB9CisgICAgcmV0dXJu
IGNhY2hlZDsKK307CisKKy8qKgorICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRo
YXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZAorICogIHNlbGVjdG9yIGZ1bmN0aW9ucwor
ICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUt
Y29tcGlsZWQKKyAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxl
CisgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHQKKyAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRz
XQorICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFn
YWluc3QKKyAqLworc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
Y29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsKKyAgICB2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlw
ZSwgZmluZCwKKyAgICAgICAgY29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlv
biIgJiYgc2VsZWN0b3IsCisgICAgICAgIG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxl
Y3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApOworCisgICAgcmVzdWx0cyA9
IHJlc3VsdHMgfHwgW107CisKKyAgICAvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0
aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZAorICAgIC8v
ICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dCkKKyAgICBpZiAoIG1h
dGNoLmxlbmd0aCA9PT0gMSApIHsKKworICAgICAgICAvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUg
bGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRAorICAgICAgICB0b2tlbnMgPSBtYXRj
aFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7CisgICAgICAgIGlmICggdG9rZW5zLmxlbmd0aCA+
IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSAiSUQiICYmCisgICAgICAgICAgICAg
ICAgc3VwcG9ydC5nZXRCeUlkICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJ
c0hUTUwgJiYKKyAgICAgICAgICAgICAgICBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBd
ICkgeworCisgICAgICAgICAgICBjb250ZXh0ID0gKCBFeHByLmZpbmRbIklEIl0oIHRva2VuLm1h
dGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSAp
WzBdOworICAgICAgICAgICAgaWYgKCAhY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0czsKKworICAgICAgICAgICAgLy8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBz
dGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbAorICAgICAgICAgICAgfSBl
bHNlIGlmICggY29tcGlsZWQgKSB7CisgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQu
cGFyZW50Tm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxl
Y3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCisg
ICAgICAgIGkgPSBtYXRjaEV4cHJbIm5lZWRzQ29udGV4dCJdLnRlc3QoIHNlbGVjdG9yICkgPyAw
IDogdG9rZW5zLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICB0
b2tlbiA9IHRva2Vuc1tpXTsKKworICAgICAgICAgICAgLy8gQWJvcnQgaWYgd2UgaGl0IGEgY29t
YmluYXRvcgorICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5
cGUpIF0gKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkgeworICAgICAgICAgICAgICAg
IC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5h
dG9ycworICAgICAgICAgICAgICAgIGlmICggKHNlZWQgPSBmaW5kKAorICAgICAgICAgICAgICAg
ICAgICB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksCisg
ICAgICAgICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBlICkgJiYgdGVz
dENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQKKyAgICAgICAgICAgICAg
ICApKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5v
IHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHkKKyAgICAgICAgICAgICAgICAgICAg
dG9rZW5zLnNwbGljZSggaSwgMSApOworICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNl
ZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApOworICAgICAgICAgICAgICAgICAgICBp
ZiAoICFzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJl
c3VsdHMsIHNlZWQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
Q29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHBy
b3ZpZGVkCisgICAgLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlm
IHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQorICAgICggY29tcGlsZWQgfHwgY29tcGls
ZSggc2VsZWN0b3IsIG1hdGNoICkgKSgKKyAgICAgICAgc2VlZCwKKyAgICAgICAgY29udGV4dCwK
KyAgICAgICAgIWRvY3VtZW50SXNIVE1MLAorICAgICAgICByZXN1bHRzLAorICAgICAgICAhY29u
dGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0
LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0CisgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0czsKK307
CisKKy8vIE9uZS10aW1lIGFzc2lnbm1lbnRzCisKKy8vIFNvcnQgc3RhYmlsaXR5CitzdXBwb3J0
LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCIiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCIi
KSA9PT0gZXhwYW5kbzsKKworLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1KworLy8gQWx3YXlzIGFz
c3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBm
dW5jdGlvbgorc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7CisKKy8v
IEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudAorc2V0RG9jdW1lbnQoKTsK
KworLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZp
eGVkIGluIENocm9tZSAyNykKKy8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93
ICplYWNoIG90aGVyKgorc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRp
djEgKSB7CisgICAgLy8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcp
CisgICAgcmV0dXJuIGRpdjEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpICkgJiAxOworfSk7CisKKy8vIFN1cHBvcnQ6IElFPDgKKy8vIFByZXZl
bnQgYXR0cmlidXRlL3Byb3BlcnR5ICJpbnRlcnBvbGF0aW9uIgorLy8gaHR0cDovL21zZG4ubWlj
cm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweAoraWYgKCAh
YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgZGl2LmlubmVySFRNTCA9ICI8YSBocmVmPScj
Jz48L2E+IjsKKyAgICByZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikg
PT09ICIjIiA7Cit9KSApIHsKKyAgICBhZGRIYW5kbGUoICJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRo
IiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgeworICAgICAgICBpZiAoICFpc1hNTCAp
IHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xv
d2VyQ2FzZSgpID09PSAidHlwZSIgPyAxIDogMiApOworICAgICAgICB9CisgICAgfSk7Cit9CisK
Ky8vIFN1cHBvcnQ6IElFPDkKKy8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0
cmlidXRlKCJ2YWx1ZSIpCitpZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5j
dGlvbiggZGl2ICkgeworICAgIGRpdi5pbm5lckhUTUwgPSAiPGlucHV0Lz4iOworICAgIGRpdi5m
aXJzdENoaWxkLnNldEF0dHJpYnV0ZSggInZhbHVlIiwgIiIgKTsKKyAgICByZXR1cm4gZGl2LmZp
cnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCAidmFsdWUiICkgPT09ICIiOworfSkgKSB7CisgICAgYWRk
SGFuZGxlKCAidmFsdWUiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7CisgICAgICAg
IGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAp
IHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTsKKyAgICAgICAgfQorICAg
IH0pOworfQorCisvLyBTdXBwb3J0OiBJRTw5CisvLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBm
ZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzCitpZiAoICFhc3NlcnQoZnVuY3Rp
b24oIGRpdiApIHsKKyAgICByZXR1cm4gZGl2LmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSA9PSBu
dWxsOworfSkgKSB7CisgICAgYWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5h
bWUsIGlzWE1MICkgeworICAgICAgICB2YXIgdmFsOworICAgICAgICBpZiAoICFpc1hNTCApIHsK
KyAgICAgICAgICAgIHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJD
YXNlKCkgOgorICAgICAgICAgICAgICAgICAgICAodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2Rl
KCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgPworICAgICAgICAgICAgICAgICAgICB2YWwudmFs
dWUgOgorICAgICAgICAgICAgICAgIG51bGw7CisgICAgICAgIH0KKyAgICB9KTsKK30KKworcmV0
dXJuIFNpenpsZTsKKworfSkoIHdpbmRvdyApOworCisKKworalF1ZXJ5LmZpbmQgPSBTaXp6bGU7
CitqUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7CitqUXVlcnkuZXhwclsgIjoiIF0gPSBq
UXVlcnkuZXhwci5wc2V1ZG9zOworalF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0g
U2l6emxlLnVuaXF1ZVNvcnQ7CitqUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OworalF1ZXJ5
LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MOworalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRh
aW5zOworCisKKwordmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkgeworICAg
IHZhciBtYXRjaGVkID0gW10sCisgICAgICAgIHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5l
ZDsKKworICAgIHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBl
ICE9PSA5ICkgeworICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAg
ICAgICBpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hlZC5w
dXNoKCBlbGVtICk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1hdGNoZWQ7Cit9Owor
CisKK3ZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkgeworICAgIHZhciBtYXRjaGVk
ID0gW107CisKKyAgICBmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgeworICAgICAgICBp
ZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHsKKyAgICAgICAgICAgIG1hdGNo
ZWQucHVzaCggbiApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1hdGNoZWQ7Cit9
OworCisKK3ZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0
OworCit2YXIgcnNpbmdsZVRhZyA9ICggL148KFtcdy1dKylccypcLz8+KD86PFwvXDE+fCkkLyAp
OworCisKKwordmFyIHJpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC87CisKKy8vIEltcGxlbWVu
dCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90CitmdW5jdGlv
biB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHsKKyAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBl
bGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgICAgICAvKiBqc2hpbnQgLVcw
MTggKi8KKyAgICAgICAgICAgIHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVt
ICkgIT09IG5vdDsKKyAgICAgICAgfSApOworCisgICAgfQorCisgICAgaWYgKCBxdWFsaWZpZXIu
bm9kZVR5cGUgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkg
IT09IG5vdDsKKyAgICAgICAgfSApOworCisgICAgfQorCisgICAgaWYgKCB0eXBlb2YgcXVhbGlm
aWVyID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgaWYgKCByaXNTaW1wbGUudGVzdCggcXVhbGlm
aWVyICkgKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBl
bGVtZW50cywgbm90ICk7CisgICAgICAgIH0KKworICAgICAgICBxdWFsaWZpZXIgPSBqUXVlcnku
ZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzICk7CisgICAgfQorCisgICAgcmV0dXJuIGpRdWVy
eS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiAoIGlu
ZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7CisgICAgfSApOwor
fQorCitqUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7CisgICAg
dmFyIGVsZW0gPSBlbGVtc1sgMCBdOworCisgICAgaWYgKCBub3QgKSB7CisgICAgICAgIGV4cHIg
PSAiOm5vdCgiICsgZXhwciArICIpIjsKKyAgICB9CisKKyAgICByZXR1cm4gZWxlbXMubGVuZ3Ro
ID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgPworICAgICAgICBqUXVlcnkuZmluZC5tYXRj
aGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW10gOgorICAgICAgICBqUXVl
cnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7CisgICAgICAgIH0g
KSApOworfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxl
Y3RvciApIHsKKyAgICAgICAgdmFyIGksCisgICAgICAgICAgICBsZW4gPSB0aGlzLmxlbmd0aCwK
KyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgc2VsZiA9IHRoaXM7CisKKyAgICAg
ICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKSApOworICAgICAgICB9CisK
KyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgIGpRdWVy
eS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIE5lZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBjb250ZXh0ICkgYmVjb21lcyAkKCBjb250
ZXh0ICkuZmluZCggc2VsZWN0b3IgKQorICAgICAgICByZXQgPSB0aGlzLnB1c2hTdGFjayggbGVu
ID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0ICk7CisgICAgICAgIHJldC5zZWxlY3Rv
ciA9IHRoaXMuc2VsZWN0b3IgPyB0aGlzLnNlbGVjdG9yICsgIiAiICsgc2VsZWN0b3IgOiBzZWxl
Y3RvcjsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorICAgIGZpbHRlcjogZnVuY3Rpb24o
IHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhp
cywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTsKKyAgICB9LAorICAgIG5vdDogZnVuY3Rpb24o
IHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhp
cywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApOworICAgIH0sCisgICAgaXM6IGZ1bmN0aW9uKCBz
ZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJuICEhd2lubm93KAorICAgICAgICAgICAgdGhpcywK
KworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0
b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldAorICAgICAgICAgICAgLy8g
c28gJCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mg
d2l0aCB0d28gInAiLgorICAgICAgICAgICAgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiAm
JiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgPworICAgICAgICAgICAgICAgIGpRdWVy
eSggc2VsZWN0b3IgKSA6CisgICAgICAgICAgICAgICAgc2VsZWN0b3IgfHwgW10sCisgICAgICAg
ICAgICBmYWxzZQorICAgICAgICApLmxlbmd0aDsKKyAgICB9Cit9ICk7CisKKworLy8gSW5pdGlh
bGl6ZSBhIGpRdWVyeSBvYmplY3QKKworCisvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSBy
b290IGpRdWVyeShkb2N1bWVudCkKK3ZhciByb290alF1ZXJ5LAorCisgICAgLy8gQSBzaW1wbGUg
d2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3MKKyAgICAvLyBQcmlvcml0aXplICNpZCBvdmVy
IDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCisgICAgLy8gU3Ry
aWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpCisgICAgcnF1
aWNrRXhwciA9IC9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sCisKKyAgICBp
bml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3Qg
KSB7CisgICAgICAgIHZhciBtYXRjaCwgZWxlbTsKKworICAgICAgICAvLyBIQU5ETEU6ICQoIiIp
LCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpCisgICAgICAgIGlmICggIXNlbGVjdG9y
ICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvLyBN
ZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnkKKyAgICAgICAgLy8g
c28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKQorICAgICAgICByb290
ID0gcm9vdCB8fCByb290alF1ZXJ5OworCisgICAgICAgIC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MK
KyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworICAgICAgICAg
ICAgaWYgKCBzZWxlY3RvclsgMCBdID09PSAiPCIgJiYKKyAgICAgICAgICAgICAgICBzZWxlY3Rv
clsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSAiPiIgJiYKKyAgICAgICAgICAgICAgICBzZWxl
Y3Rvci5sZW5ndGggPj0gMyApIHsKKworICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHN0
cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJl
Z2V4IGNoZWNrCisgICAgICAgICAgICAgICAgbWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxs
IF07CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBycXVp
Y2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWQK
KyAgICAgICAgICAgIGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7
CisKKyAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSkKKyAgICAg
ICAgICAgICAgICBpZiAoIG1hdGNoWyAxIF0gKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDsK
KworICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBm
b3IgYmFjay1jb21wYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gSW50ZW50aW9uYWxseSBsZXQg
dGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnQKKyAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hbIDEgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250
ZXh0IDogZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAg
ICAgICAgICAgICkgKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoaHRtbCwg
cHJvcHMpCisgICAgICAgICAgICAgICAgICAgIGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsg
MSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRo
b2RzIGlmIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworCisg
ICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKCNpZCkKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1h
dGNoWyAyIF0gKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBCbGFja2JlcnJ5
IDQuNgorICAgICAgICAgICAgICAgICAgICAvLyBnRUJJRCByZXR1cm5zIG5vZGVzIG5vIGxvbmdl
ciBpbiB0aGUgZG9jdW1lbnQgKCM2OTYzKQorICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0g
JiYgZWxlbS5wYXJlbnROb2RlICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmpl
Y3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpc1sgMCBdID0gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dCA9IGRvY3VtZW50OworICAgICAgICAgICAgICAgICAgICB0aGlz
LnNlbGVjdG9yID0gc2VsZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSEFORExFOiAkKGV4cHIsICQoLi4u
KSkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkg
eworICAgICAgICAgICAgICAgIHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVj
dG9yICk7CisKKyAgICAgICAgICAgIC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQorICAgICAg
ICAgICAgLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4
cHIpCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNv
bnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAvLyBIQU5ETEU6ICQoRE9NRWxlbWVudCkKKyAgICAgICAgfSBlbHNlIGlmICggc2Vs
ZWN0b3Iubm9kZVR5cGUgKSB7CisgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzWyAwIF0g
PSBzZWxlY3RvcjsKKyAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzOworCisgICAgICAgIC8vIEhBTkRMRTogJChmdW5jdGlvbikKKyAgICAgICAgLy8g
U2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5CisgICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCBzZWxlY3RvciApICkgeworICAgICAgICAgICAgcmV0dXJuIHJvb3QucmVhZHkg
IT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgcm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6
CisKKyAgICAgICAgICAgICAgICAvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5v
dCBwcmVzZW50CisgICAgICAgICAgICAgICAgc2VsZWN0b3IoIGpRdWVyeSApOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkgeworICAg
ICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yOworICAgICAgICAgICAg
dGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApOworICAgIH07CisKKy8vIEdp
dmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3Rh
bnRpYXRpb24KK2luaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOworCisvLyBJbml0aWFsaXplIGNl
bnRyYWwgcmVmZXJlbmNlCityb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApOworCisKK3Zh
ciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKKworICAg
IC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0
aW5nIGZyb20gYSB1bmlxdWUgc2V0CisgICAgZ3VhcmFudGVlZFVuaXF1ZSA9IHsKKyAgICAgICAg
Y2hpbGRyZW46IHRydWUsCisgICAgICAgIGNvbnRlbnRzOiB0cnVlLAorICAgICAgICBuZXh0OiB0
cnVlLAorICAgICAgICBwcmV2OiB0cnVlCisgICAgfTsKKworalF1ZXJ5LmZuLmV4dGVuZCggewor
ICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKKyAgICAgICAgdmFyIHRhcmdldHMgPSBqUXVl
cnkoIHRhcmdldCwgdGhpcyApLAorICAgICAgICAgICAgbCA9IHRhcmdldHMubGVuZ3RoOworCisg
ICAgICAgIHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIg
aSA9IDA7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgY2xvc2VzdDogZnVuY3Rpb24oIHNlbGVj
dG9ycywgY29udGV4dCApIHsKKyAgICAgICAgdmFyIGN1ciwKKyAgICAgICAgICAgIGkgPSAwLAor
ICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoLAorICAgICAgICAgICAgbWF0Y2hlZCA9IFtdLAor
ICAgICAgICAgICAgcG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBl
b2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxl
Y3RvcnMsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOgorICAgICAgICAgICAgICAgIDA7CisK
KyAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgZm9yICggY3VyID0g
dGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSAp
IHsKKworICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50cwor
ICAgICAgICAgICAgICAgIGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCBwb3MgPworICAgICAg
ICAgICAgICAgICAgICBwb3MuaW5kZXgoIGN1ciApID4gLTEgOgorCisgICAgICAgICAgICAgICAg
ICAgIC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZQorICAgICAgICAgICAgICAg
ICAgICBjdXIubm9kZVR5cGUgPT09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkgeworCisgICAgICAg
ICAgICAgICAgICAgIG1hdGNoZWQucHVzaCggY3VyICk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVu
aXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTsKKyAgICB9LAorCisgICAgLy8gRGV0ZXJt
aW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0CisgICAgaW5kZXg6
IGZ1bmN0aW9uKCBlbGVtICkgeworCisgICAgICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5k
ZXggaW4gcGFyZW50CisgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4g
KCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2
QWxsKCkubGVuZ3RoIDogLTE7CisgICAgICAgIH0KKworICAgICAgICAvLyBJbmRleCBpbiBzZWxl
Y3RvcgorICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKKyAgICAgICAg
ICAgIHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQg
ZWxlbWVudAorICAgICAgICByZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLAorCisgICAgICAgICAg
ICAvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlz
IHVzZWQKKyAgICAgICAgICAgIGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbQorICAgICAg
ICApOworICAgIH0sCisKKyAgICBhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKAorICAgICAgICAgICAgalF1ZXJ5LnVuaXF1
ZVNvcnQoCisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnko
IHNlbGVjdG9yLCBjb250ZXh0ICkgKQorICAgICAgICAgICAgKQorICAgICAgICApOworICAgIH0s
CisKKyAgICBhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiB0
aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/CisgICAgICAgICAgICB0aGlzLnByZXZPYmplY3Qg
OiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApCisgICAgICAgICk7CisgICAgfQor
fSApOworCitmdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHsKKyAgICB3aGlsZSAoICggY3Vy
ID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9CisgICAgcmV0dXJuIGN1
cjsKK30KKworalF1ZXJ5LmVhY2goIHsKKyAgICBwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICByZXR1cm4gcGFy
ZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOworICAgIH0sCisg
ICAgcGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVsZW0s
ICJwYXJlbnROb2RlIiApOworICAgIH0sCisgICAgcGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxl
bSwgaSwgdW50aWwgKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJwYXJlbnROb2RlIiwg
dW50aWwgKTsKKyAgICB9LAorICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICBy
ZXR1cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOworICAgIH0sCisgICAgcHJldjog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlv
dXNTaWJsaW5nIiApOworICAgIH0sCisgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKKyAgICB9LAorICAgIHBy
ZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gZGlyKCBlbGVtLCAicHJl
dmlvdXNTaWJsaW5nIiApOworICAgIH0sCisgICAgbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwg
aSwgdW50aWwgKSB7CisgICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJuZXh0U2libGluZyIsIHVu
dGlsICk7CisgICAgfSwKKyAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCAp
IHsKKyAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIsIHVudGlsICk7
CisgICAgfSwKKyAgICBzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVy
biBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7
CisgICAgfSwKKyAgICBjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVy
biBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7CisgICAgfSwKKyAgICBjb250ZW50czogZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBq
UXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKKyAgICB9Cit9LCBmdW5jdGlvbigg
bmFtZSwgZm4gKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNl
bGVjdG9yICkgeworICAgICAgICB2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1
bnRpbCApOworCisgICAgICAgIGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gIlVudGlsIiApIHsK
KyAgICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAg
ICBtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggdGhpcy5sZW5ndGggPiAxICkgeworCisgICAgICAgICAgICAvLyBS
ZW1vdmUgZHVwbGljYXRlcworICAgICAgICAgICAgaWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFt
ZSBdICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMq
IGFuZCBwcmV2LWRlcml2YXRpdmVzCisgICAgICAgICAgICBpZiAoIHJwYXJlbnRzcHJldi50ZXN0
KCBuYW1lICkgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hlZC5yZXZlcnNlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNo
ZWQgKTsKKyAgICB9OworfSApOwordmFyIHJub3R3aGl0ZSA9ICggL1xTKy9nICk7CisKKworCisv
LyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQg
b25lcworZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHsKKyAgICB2YXIgb2JqZWN0
ID0ge307CisgICAgalF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtd
LCBmdW5jdGlvbiggXywgZmxhZyApIHsKKyAgICAgICAgb2JqZWN0WyBmbGFnIF0gPSB0cnVlOwor
ICAgIH0gKTsKKyAgICByZXR1cm4gb2JqZWN0OworfQorCisvKgorICogQ3JlYXRlIGEgY2FsbGJh
Y2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisgKgorICogIG9wdGlvbnM6
IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNo
YW5nZSBob3cKKyAqICAgICAgICAgIHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3Jl
IHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3QKKyAqCisgKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sg
bGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZQorICog
ImZpcmVkIiBtdWx0aXBsZSB0aW1lcy4KKyAqCisgKiBQb3NzaWJsZSBvcHRpb25zOgorICoKKyAq
ICBvbmNlOiAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkg
YmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQorICoKKyAqICBtZW1vcnk6ICAgICAgICAg
d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxs
YmFjayBhZGRlZAorICogICAgICAgICAgICAgICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBm
aXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCAibWVtb3JpemVkIgorICogICAgICAgICAg
ICAgICAgICB2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZCkKKyAqCisgKiAgdW5pcXVlOiAgICAgICAg
IHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGlj
YXRlIGluIHRoZSBsaXN0KQorICoKKyAqICBzdG9wT25GYWxzZTogICAgaW50ZXJydXB0IGNhbGxp
bmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlCisgKgorICovCitqUXVlcnkuQ2FsbGJh
Y2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisKKyAgICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJv
bSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkCisgICAgLy8g
KHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KQorICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9
PT0gInN0cmluZyIgPworICAgICAgICBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOgorICAgICAg
ICBqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApOworCisgICAgdmFyIC8vIEZsYWcgdG8ga25v
dyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKKyAgICAgICAgZmlyaW5nLAorCisgICAgICAg
IC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzCisgICAgICAgIG1l
bW9yeSwKKworICAgICAgICAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJl
ZAorICAgICAgICBmaXJlZCwKKworICAgICAgICAvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nCisg
ICAgICAgIGxvY2tlZCwKKworICAgICAgICAvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAorICAgICAg
ICBsaXN0ID0gW10sCisKKyAgICAgICAgLy8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJl
cGVhdGFibGUgbGlzdHMKKyAgICAgICAgcXVldWUgPSBbXSwKKworICAgICAgICAvLyBJbmRleCBv
ZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5l
ZWRlZCkKKyAgICAgICAgZmlyaW5nSW5kZXggPSAtMSwKKworICAgICAgICAvLyBGaXJlIGNhbGxi
YWNrcworICAgICAgICBmaXJlID0gZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgIC8vIEVuZm9y
Y2Ugc2luZ2xlLWZpcmluZworICAgICAgICAgICAgbG9ja2VkID0gb3B0aW9ucy5vbmNlOworCisg
ICAgICAgICAgICAvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9u
cywKKyAgICAgICAgICAgIC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBy
dW50aW1lIGNoYW5nZXMKKyAgICAgICAgICAgIGZpcmVkID0gZmlyaW5nID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkgeworICAgICAg
ICAgICAgICAgIG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgd2hpbGUg
KCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb24KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwg
bWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bnMuc3RvcE9uRmFsc2UgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1bXAgdG8g
ZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtZW1vcnkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRm9yZ2V0IHRoZSBk
YXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdAorICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy5tZW1v
cnkgKSB7CisgICAgICAgICAgICAgICAgbWVtb3J5ID0gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZpcmluZyA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBDbGVhbiB1cCBp
ZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZAorICAgICAgICAgICAgaWYgKCBsb2NrZWQgKSB7
CisKKyAgICAgICAgICAgICAgICAvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRh
IGZvciBmdXR1cmUgYWRkIGNhbGxzCisgICAgICAgICAgICAgICAgaWYgKCBtZW1vcnkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbXTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVy
d2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnQKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBsaXN0ID0gIiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9LAorCisgICAgICAgIC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0Cisg
ICAgICAgIHNlbGYgPSB7CisKKyAgICAgICAgICAgIC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29s
bGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3QKKyAgICAgICAgICAgIGFkZDogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBsaXN0ICkgeworCisgICAgICAgICAgICAgICAg
ICAgIC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUg
YWZ0ZXIgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgIGlmICggbWVtb3J5ICYmICFmaXJpbmcg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0g
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2goIG1lbW9yeSApOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgKCBmdW5jdGlvbiBhZGQoIGFy
Z3MgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rp
b24oIF8sIGFyZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCBhcmcgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaCggYXJnICk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCBhcmcgJiYgYXJnLmxlbmd0aCAmJiBqUXVlcnkudHlwZSggYXJnICkgIT09ICJzdHJpbmciICkg
eworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc3BlY3QgcmVjdXJzaXZl
bHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKCBhcmcgKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9ICk7CisgICAg
ICAgICAgICAgICAgICAgIH0gKSggYXJndW1lbnRzICk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUo
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8vIFJlbW92
ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3QKKyAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8s
IGFyZyApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCAp
ICkgPiAtMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKCBpbmRleCwg
MSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXMK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nSW5kZXgtLTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgIC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuCisgICAgICAg
ICAgICAvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxp
c3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC4KKyAgICAgICAgICAgIGhhczogZnVuY3Rpb24oIGZu
ICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmbiA/CisgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOgorICAgICAgICAgICAgICAgICAgICBsaXN0
Lmxlbmd0aCA+IDA7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBSZW1vdmUgYWxs
IGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0CisgICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgaWYgKCBsaXN0ICkgeworICAgICAgICAgICAgICAgICAgICBsaXN0
ID0gW107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwor
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZAor
ICAgICAgICAgICAgLy8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zCisgICAg
ICAgICAgICAvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXMKKyAgICAgICAgICAgIGRp
c2FibGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGxvY2tlZCA9IHF1ZXVlID0gW107
CisgICAgICAgICAgICAgICAgbGlzdCA9IG1lbW9yeSA9ICIiOworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWxpc3Q7CisgICAgICAgICAgICB9LAorCisg
ICAgICAgICAgICAvLyBEaXNhYmxlIC5maXJlCisgICAgICAgICAgICAvLyBBbHNvIGRpc2FibGUg
LmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0
KQorICAgICAgICAgICAgLy8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9ucworICAgICAgICAg
ICAgbG9jazogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgbG9ja2VkID0gcXVldWUgPSBb
XTsKKyAgICAgICAgICAgICAgICBpZiAoICFtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAg
IGxpc3QgPSBtZW1vcnkgPSAiIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgbG9ja2VkOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFsb2NrZWQ7CisgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4
dCBhbmQgYXJndW1lbnRzCisgICAgICAgICAgICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQs
IGFyZ3MgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhbG9ja2VkICkgeworICAgICAgICAgICAg
ICAgICAgICBhcmdzID0gYXJncyB8fCBbXTsKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFsg
Y29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKKyAgICAgICAgICAg
ICAgICAgICAgcXVldWUucHVzaCggYXJncyApOworICAgICAgICAgICAgICAgICAgICBpZiAoICFm
aXJpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJlKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tz
IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cworICAgICAgICAgICAgZmlyZTogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgc2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAv
LyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxl
YXN0IG9uY2UKKyAgICAgICAgICAgIGZpcmVkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gISFmaXJlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgIHJldHVy
biBzZWxmOworfTsKKworCitqUXVlcnkuZXh0ZW5kKCB7CisKKyAgICBEZWZlcnJlZDogZnVuY3Rp
b24oIGZ1bmMgKSB7CisgICAgICAgIHZhciB0dXBsZXMgPSBbCisKKyAgICAgICAgICAgICAgICAv
LyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgbGlzdGVuZXIgbGlzdCwgZmluYWwgc3RhdGUKKyAgICAg
ICAgICAgICAgICBbICJyZXNvbHZlIiwgImRvbmUiLCBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBt
ZW1vcnkiICksICJyZXNvbHZlZCIgXSwKKyAgICAgICAgICAgICAgICBbICJyZWplY3QiLCAiZmFp
bCIsIGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwgInJlamVjdGVkIiBdLAorICAg
ICAgICAgICAgICAgIFsgIm5vdGlmeSIsICJwcm9ncmVzcyIsIGpRdWVyeS5DYWxsYmFja3MoICJt
ZW1vcnkiICkgXQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHN0YXRlID0gInBlbmRpbmci
LAorICAgICAgICAgICAgcHJvbWlzZSA9IHsKKyAgICAgICAgICAgICAgICBzdGF0ZTogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTsKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIGFsd2F5czogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIHRoZW46IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAq
LyApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50czsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24o
IGksIHR1cGxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IGpRdWVy
eS5pc0Z1bmN0aW9uKCBmbnNbIGkgXSApICYmIGZuc1sgaSBdOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZGVmZXJyZWRbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9y
d2FyZGluZyBhY3Rpb25zIHRvIG5ld0RlZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVu
dHMgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXR1cm5lZCAmJiBq
UXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQucHJvbWlzZSgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kb25lKCBuZXdEZWZlci5yZXNv
bHZlICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmFpbCggbmV3
RGVmZXIucmVqZWN0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlclsgdHVwbGVbIDAg
XSArICJXaXRoIiBdKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMgPT09IHByb21pc2UgPyBuZXdEZWZlci5wcm9taXNlKCkgOiB0aGlzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgICAgICAgICAgZm5zID0g
bnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfSApLnByb21pc2UoKTsKKyAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgLy8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJl
ZAorICAgICAgICAgICAgICAgIC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNw
ZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKKyAgICAgICAgICAgICAgICBwcm9taXNlOiBmdW5j
dGlvbiggb2JqICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgPyBq
UXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRlZmVycmVkID0ge307CisKKyAgICAgICAg
Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdAorICAgICAgICBwcm9taXNlLnBpcGUgPSBwcm9t
aXNlLnRoZW47CisKKyAgICAgICAgLy8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kcworICAgICAg
ICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7CisgICAgICAgICAg
ICB2YXIgbGlzdCA9IHR1cGxlWyAyIF0sCisgICAgICAgICAgICAgICAgc3RhdGVTdHJpbmcgPSB0
dXBsZVsgMyBdOworCisgICAgICAgICAgICAvLyBwcm9taXNlWyBkb25lIHwgZmFpbCB8IHByb2dy
ZXNzIF0gPSBsaXN0LmFkZAorICAgICAgICAgICAgcHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlz
dC5hZGQ7CisKKyAgICAgICAgICAgIC8vIEhhbmRsZSBzdGF0ZQorICAgICAgICAgICAgaWYgKCBz
dGF0ZVN0cmluZyApIHsKKyAgICAgICAgICAgICAgICBsaXN0LmFkZCggZnVuY3Rpb24oKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgPSBbIHJlc29sdmVkIHwgcmVqZWN0ZWQgXQor
ICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlU3RyaW5nOworCisgICAgICAgICAgICAg
ICAgLy8gWyByZWplY3RfbGlzdCB8IHJlc29sdmVfbGlzdCBdLmRpc2FibGU7IHByb2dyZXNzX2xp
c3QubG9jaworICAgICAgICAgICAgICAgIH0sIHR1cGxlc1sgaSBeIDEgXVsgMiBdLmRpc2FibGUs
IHR1cGxlc1sgMiBdWyAyIF0ubG9jayApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5vdGlmeSBdCisgICAgICAgICAgICBkZWZl
cnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGVmZXJy
ZWRbIHR1cGxlWyAwIF0gKyAiV2l0aCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyBwcm9taXNlIDog
dGhpcywgYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyAiV2l0aCIgXSA9IGxp
c3QuZmlyZVdpdGg7CisgICAgICAgIH0gKTsKKworICAgICAgICAvLyBNYWtlIHRoZSBkZWZlcnJl
ZCBhIHByb21pc2UKKyAgICAgICAgcHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApOworCisgICAg
ICAgIC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKKyAgICAgICAgaWYgKCBmdW5jICkgeworICAg
ICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEFsbCBkb25lIQorICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CisgICAgfSwKKwor
ICAgIC8vIERlZmVycmVkIGhlbHBlcgorICAgIHdoZW46IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAv
KiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkgeworICAgICAgICB2YXIgaSA9IDAsCisgICAgICAg
ICAgICByZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksCisgICAgICAgICAg
ICBsZW5ndGggPSByZXNvbHZlVmFsdWVzLmxlbmd0aCwKKworICAgICAgICAgICAgLy8gdGhlIGNv
dW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlcworICAgICAgICAgICAgcmVtYWluaW5nID0g
bGVuZ3RoICE9PSAxIHx8CisgICAgICAgICAgICAgICAgKCBzdWJvcmRpbmF0ZSAmJiBqUXVlcnku
aXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAwLAorCisgICAg
ICAgICAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkLgorICAgICAgICAgICAgLy8gSWYgcmVzb2x2
ZVZhbHVlcyBjb25zaXN0IG9mIG9ubHkgYSBzaW5nbGUgRGVmZXJyZWQsIGp1c3QgdXNlIHRoYXQu
CisgICAgICAgICAgICBkZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDog
alF1ZXJ5LkRlZmVycmVkKCksCisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3Ig
Ym90aCByZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXMKKyAgICAgICAgICAgIHVwZGF0ZUZ1bmMg
PSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0c1sgaSBd
ID0gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVu
Z3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
fSwKKworICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29s
dmVDb250ZXh0czsKKworICAgICAgICAvLyBBZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9y
ZGluYXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCisgICAgICAgIGlmICggbGVuZ3RoID4g
MSApIHsKKyAgICAgICAgICAgIHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsK
KyAgICAgICAgICAgIHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworICAg
ICAgICAgICAgcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAgICAgICAg
ICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggcmVz
b2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0u
cHJvbWlzZSApICkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0ucHJv
bWlzZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGks
IHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKQorICAgICAgICAgICAgICAgICAg
ICAgICAgLmRvbmUoIHVwZGF0ZUZ1bmMoIGksIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVl
cyApICkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mYWlsKCBkZWZlcnJlZC5yZWplY3QgKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmlu
ZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVy
CisgICAgICAgIGlmICggIXJlbWFpbmluZyApIHsKKyAgICAgICAgICAgIGRlZmVycmVkLnJlc29s
dmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CisgICAgfQorfSApOworCisKKy8vIFRo
ZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQordmFyIHJlYWR5TGlzdDsKKworalF1ZXJ5LmZu
LnJlYWR5ID0gZnVuY3Rpb24oIGZuICkgeworCisgICAgLy8gQWRkIHRoZSBjYWxsYmFjaworICAg
IGpRdWVyeS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTsKKworICAgIHJldHVybiB0aGlzOwor
fTsKKworalF1ZXJ5LmV4dGVuZCggeworCisgICAgLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1
c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4KKyAgICBpc1JlYWR5OiBmYWxzZSwKKwor
ICAgIC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZv
cmUKKyAgICAvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MQorICAgIHJlYWR5V2Fp
dDogMSwKKworICAgIC8vIEhvbGQgKG9yIHJlbGVhc2UpIHRoZSByZWFkeSBldmVudAorICAgIGhv
bGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7CisgICAgICAgIGlmICggaG9sZCApIHsKKyAgICAg
ICAgICAgIGpRdWVyeS5yZWFkeVdhaXQrKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGpRdWVyeS5yZWFkeSggdHJ1ZSApOworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIEhhbmRs
ZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKKyAgICByZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7CisK
KyAgICAgICAgLy8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxy
ZWFkeSByZWFkeQorICAgICAgICBpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdh
aXQgOiBqUXVlcnkuaXNSZWFkeSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeQorICAgICAgICBqUXVl
cnkuaXNSZWFkeSA9IHRydWU7CisKKyAgICAgICAgLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2
ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmUKKyAgICAgICAgaWYgKCB3
YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJv
dW5kLCB0byBleGVjdXRlCisgICAgICAgIHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQs
IFsgalF1ZXJ5IF0gKTsKKworICAgICAgICAvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVu
dHMKKyAgICAgICAgaWYgKCBqUXVlcnkuZm4udHJpZ2dlckhhbmRsZXIgKSB7CisgICAgICAgICAg
ICBqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlckhhbmRsZXIoICJyZWFkeSIgKTsKKyAgICAgICAg
ICAgIGpRdWVyeSggZG9jdW1lbnQgKS5vZmYoICJyZWFkeSIgKTsKKyAgICAgICAgfQorICAgIH0K
K30gKTsKKworLyoqCisgKiBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVw
IG1ldGhvZAorICovCitmdW5jdGlvbiBjb21wbGV0ZWQoKSB7CisgICAgZG9jdW1lbnQucmVtb3Zl
RXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQgKTsKKyAgICB3aW5k
b3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggImxvYWQiLCBjb21wbGV0ZWQgKTsKKyAgICBqUXVlcnku
cmVhZHkoKTsKK30KKworalF1ZXJ5LnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiggb2JqICkgewor
ICAgIGlmICggIXJlYWR5TGlzdCApIHsKKworICAgICAgICByZWFkeUxpc3QgPSBqUXVlcnkuRGVm
ZXJyZWQoKTsKKworICAgICAgICAvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFk
eSgpIGlzIGNhbGxlZAorICAgICAgICAvLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxy
ZWFkeSBvY2N1cnJlZC4KKyAgICAgICAgLy8gU3VwcG9ydDogSUU5LTEwIG9ubHkKKyAgICAgICAg
Ly8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgImludGVyYWN0aXZlIiB0b28gc29vbgorICAg
ICAgICBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgfHwKKyAgICAgICAg
ICAgICggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxvYWRpbmciICYmICFkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHsKKworICAgICAgICAgICAgLy8gSGFuZGxlIGl0IGFz
eW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJl
YWR5CisgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7CisKKyAg
ICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxs
YmFjaworICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRM
b2FkZWQiLCBjb21wbGV0ZWQgKTsKKworICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3aW5k
b3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKKyAgICAgICAgICAgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCAibG9hZCIsIGNvbXBsZXRlZCApOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2JqICk7Cit9OworCisvLyBLaWNrIG9mZiB0aGUg
RE9NIHJlYWR5IGNoZWNrIGV2ZW4gaWYgdGhlIHVzZXIgZG9lcyBub3QKK2pRdWVyeS5yZWFkeS5w
cm9taXNlKCk7CisKKworCisKKy8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBz
ZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvbgorLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkg
YmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCit2YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVs
ZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkgeworICAgIHZh
ciBpID0gMCwKKyAgICAgICAgbGVuID0gZWxlbXMubGVuZ3RoLAorICAgICAgICBidWxrID0ga2V5
ID09IG51bGw7CisKKyAgICAvLyBTZXRzIG1hbnkgdmFsdWVzCisgICAgaWYgKCBqUXVlcnkudHlw
ZSgga2V5ICkgPT09ICJvYmplY3QiICkgeworICAgICAgICBjaGFpbmFibGUgPSB0cnVlOworICAg
ICAgICBmb3IgKCBpIGluIGtleSApIHsKKyAgICAgICAgICAgIGFjY2VzcyggZWxlbXMsIGZuLCBp
LCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApOworICAgICAgICB9CisKKyAgICAvLyBT
ZXRzIG9uZSB2YWx1ZQorICAgIH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7Cisg
ICAgICAgIGNoYWluYWJsZSA9IHRydWU7CisKKyAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rp
b24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICByYXcgPSB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCBidWxrICkgeworCisgICAgICAgICAgICAvLyBCdWxrIG9wZXJhdGlvbnMgcnVu
IGFnYWluc3QgdGhlIGVudGlyZSBzZXQKKyAgICAgICAgICAgIGlmICggcmF3ICkgeworICAgICAg
ICAgICAgICAgIGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApOworICAgICAgICAgICAgICAgIGZuID0g
bnVsbDsKKworICAgICAgICAgICAgLy8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9u
IHZhbHVlcworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWxrID0gZm47
CisgICAgICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZWxlbSwga2V5LCB2YWx1ZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVl
ICk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmICggZm4gKSB7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICBmbigKKyAgICAgICAgICAgICAgICAgICAgZWxlbXNbIGkgXSwga2V5LCBy
YXcgPworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA6CisgICAgICAgICAgICAgICAgICAgIHZh
bHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApCisgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBjaGFpbmFibGUgPworICAgICAgICBlbGVtcyA6CisKKyAgICAgICAgLy8gR2V0cworICAgICAg
ICBidWxrID8KKyAgICAgICAgICAgIGZuLmNhbGwoIGVsZW1zICkgOgorICAgICAgICAgICAgbGVu
ID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7Cit9OwordmFyIGFjY2VwdERhdGEg
PSBmdW5jdGlvbiggb3duZXIgKSB7CisKKyAgICAvLyBBY2NlcHRzIG9ubHk6CisgICAgLy8gIC0g
Tm9kZQorICAgIC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREUKKyAgICAvLyAgICAtIE5vZGUuRE9D
VU1FTlRfTk9ERQorICAgIC8vICAtIE9iamVjdAorICAgIC8vICAgIC0gQW55CisgICAgLyoganNo
aW50IC1XMDE4ICovCisgICAgcmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5v
ZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApOworfTsKKworCisKKworZnVuY3Rp
b24gRGF0YSgpIHsKKyAgICB0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlk
Kys7Cit9CisKK0RhdGEudWlkID0gMTsKKworRGF0YS5wcm90b3R5cGUgPSB7CisKKyAgICByZWdp
c3RlcjogZnVuY3Rpb24oIG93bmVyLCBpbml0aWFsICkgeworICAgICAgICB2YXIgdmFsdWUgPSBp
bml0aWFsIHx8IHt9OworCisgICAgICAgIC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBi
ZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXIKKyAgICAgICAgLy8gdXNlIHBsYWluIGFzc2ln
bm1lbnQKKyAgICAgICAgaWYgKCBvd25lci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgIG93bmVy
WyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlOworCisgICAgICAgIC8vIE90aGVyd2lzZSBzZWN1cmUg
aXQgaW4gYSBub24tZW51bWVyYWJsZSwgbm9uLXdyaXRhYmxlIHByb3BlcnR5CisgICAgICAgIC8v
IGNvbmZpZ3VyYWJpbGl0eSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJl
CisgICAgICAgIC8vIGRlbGV0ZWQgd2l0aCB0aGUgZGVsZXRlIG9wZXJhdG9yCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4
cGFuZG8sIHsKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAg
d3JpdGFibGU6IHRydWUsCisgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCisgICAg
ICAgICAgICB9ICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG93bmVyWyB0aGlzLmV4cGFu
ZG8gXTsKKyAgICB9LAorICAgIGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7CisKKyAgICAgICAg
Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJv
d3NlcnMsCisgICAgICAgIC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuCisgICAgICAg
IC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LgorICAgICAgICBpZiAoICFhY2NlcHRE
YXRhKCBvd25lciApICkgeworICAgICAgICAgICAgcmV0dXJuIHt9OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlCisg
ICAgICAgIHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKKworICAgICAgICAvLyBJ
ZiBub3QsIGNyZWF0ZSBvbmUKKyAgICAgICAgaWYgKCAhdmFsdWUgKSB7CisgICAgICAgICAgICB2
YWx1ZSA9IHt9OworCisgICAgICAgICAgICAvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1l
bGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2VycywKKyAgICAgICAgICAgIC8vIGJ1dCB3ZSBz
aG91bGQgbm90LCBzZWUgIzgzMzUuCisgICAgICAgICAgICAvLyBBbHdheXMgcmV0dXJuIGFuIGVt
cHR5IG9iamVjdC4KKyAgICAgICAgICAgIGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHsKKwor
ICAgICAgICAgICAgICAgIC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdp
ZnktZWQgb3IgbG9vcGVkIG92ZXIKKyAgICAgICAgICAgICAgICAvLyB1c2UgcGxhaW4gYXNzaWdu
bWVudAorICAgICAgICAgICAgICAgIGlmICggb3duZXIubm9kZVR5cGUgKSB7CisgICAgICAgICAg
ICAgICAgICAgIG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlOworCisgICAgICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5Cisg
ICAgICAgICAgICAgICAgLy8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUg
cHJvcGVydHkgdG8gYmUKKyAgICAgICAgICAgICAgICAvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyBy
ZW1vdmVkCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1
cmFibGU6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgfSApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
LAorICAgIHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHsKKyAgICAgICAgdmFy
IHByb3AsCisgICAgICAgICAgICBjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7CisKKyAgICAg
ICAgLy8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJncworICAgICAgICBpZiAoIHR5
cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGNhY2hlWyBkYXRhIF0gPSB2
YWx1ZTsKKworICAgICAgICAvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJn
cworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVz
IG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdAorICAgICAgICAgICAgZm9yICggcHJvcCBp
biBkYXRhICkgeworICAgICAgICAgICAgICAgIGNhY2hlWyBwcm9wIF0gPSBkYXRhWyBwcm9wIF07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNhY2hlOworICAgIH0s
CisgICAgZ2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHsKKyAgICAgICAgcmV0dXJuIGtleSA9
PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgIHRoaXMuY2FjaGUoIG93bmVyICkgOgorICAgICAg
ICAgICAgb3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsga2V5
IF07CisgICAgfSwKKyAgICBhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHsK
KyAgICAgICAgdmFyIHN0b3JlZDsKKworICAgICAgICAvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6
CisgICAgICAgIC8vCisgICAgICAgIC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWQKKyAgICAg
ICAgLy8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3Zp
ZGVkCisgICAgICAgIC8vCisgICAgICAgIC8vIFRha2UgdGhlICJyZWFkIiBwYXRoIGFuZCBhbGxv
dyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmUKKyAgICAgICAgLy8gd2hpY2ggdmFsdWUgdG8g
cmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOgorICAgICAgICAvLworICAgICAgICAvLyAgIDEu
IFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0CisgICAgICAgIC8vICAgMi4gVGhlIGRhdGEgc3RvcmVk
IGF0IHRoZSBrZXkKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8
fAorICAgICAgICAgICAgICAgICggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gInN0cmluZyIgKSAm
JiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7CisKKyAgICAgICAgICAgIHN0b3JlZCA9IHRoaXMu
Z2V0KCBvd25lciwga2V5ICk7CisKKyAgICAgICAgICAgIHJldHVybiBzdG9yZWQgIT09IHVuZGVm
aW5lZCA/CisgICAgICAgICAgICAgICAgc3RvcmVkIDogdGhpcy5nZXQoIG93bmVyLCBqUXVlcnku
Y2FtZWxDYXNlKCBrZXkgKSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2hlbiB0aGUga2V5
IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWUKKyAgICAgICAgLy8gYXJl
IHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6
CisgICAgICAgIC8vCisgICAgICAgIC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXMKKyAg
ICAgICAgLy8gICAyLiBBIGtleSBhbmQgdmFsdWUKKyAgICAgICAgLy8KKyAgICAgICAgdGhpcy5z
ZXQoIG93bmVyLCBrZXksIHZhbHVlICk7CisKKyAgICAgICAgLy8gU2luY2UgdGhlICJzZXQiIHBh
dGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50cworICAgICAgICAvLyByZXR1cm4g
dGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl0KKyAgICAg
ICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTsKKyAgICB9LAorICAg
IHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7CisgICAgICAgIHZhciBpLCBuYW1lLCBj
YW1lbCwKKyAgICAgICAgICAgIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworCisgICAg
ICAgIGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICB0aGlzLnJlZ2lzdGVyKCBvd25lciApOworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAg
ICAgIC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzCisg
ICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBrZXkgKSApIHsKKworICAgICAgICAgICAg
ICAgIC8vIElmICJuYW1lIiBpcyBhbiBhcnJheSBvZiBrZXlzLi4uCisgICAgICAgICAgICAgICAg
Ly8gV2hlbiBkYXRhIGlzIGluaXRpYWxseSBjcmVhdGVkLCB2aWEgKCJrZXkiLCAidmFsIikgc2ln
bmF0dXJlLAorICAgICAgICAgICAgICAgIC8vIGtleXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gY2Ft
ZWxDYXNlLgorICAgICAgICAgICAgICAgIC8vIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxs
IF9ob3dfIGEga2V5IHdhcyBhZGRlZCwgcmVtb3ZlCisgICAgICAgICAgICAgICAgLy8gYm90aCBw
bGFpbiBrZXkgYW5kIGNhbWVsQ2FzZSBrZXkuICMxMjc4NgorICAgICAgICAgICAgICAgIC8vIFRo
aXMgd2lsbCBvbmx5IHBlbmFsaXplIHRoZSBhcnJheSBhcmd1bWVudCBwYXRoLgorICAgICAgICAg
ICAgICAgIG5hbWUgPSBrZXkuY29uY2F0KCBrZXkubWFwKCBqUXVlcnkuY2FtZWxDYXNlICkgKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2FtZWwgPSBqUXVlcnkuY2Ft
ZWxDYXNlKCBrZXkgKTsKKworICAgICAgICAgICAgICAgIC8vIFRyeSB0aGUgc3RyaW5nIGFzIGEg
a2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCisgICAgICAgICAgICAgICAgaWYgKCBrZXkgaW4g
Y2FjaGUgKSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBbIGtleSwgY2FtZWwgXTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIGEga2V5
IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2UKKyAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsOworICAgICAgICAgICAgICAgICAgICBuYW1l
ID0gbmFtZSBpbiBjYWNoZSA/CisgICAgICAgICAgICAgICAgICAgICAgICBbIG5hbWUgXSA6ICgg
bmFtZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW10gKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGkgPSBuYW1lLmxlbmd0aDsKKworICAgICAgICAgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBuYW1lWyBpIF0g
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhw
YW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YQorICAgICAgICBpZiAoIGtleSA9PT0gdW5kZWZp
bmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkgeworCisgICAgICAgICAgICAv
LyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUtNDUrCisgICAgICAgICAgICAvLyBXZWJraXQgJiBCbGlu
ayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllcworICAgICAgICAg
ICAgLy8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZAorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWls
P2lkPTM3ODYwNworICAgICAgICAgICAgaWYgKCBvd25lci5ub2RlVHlwZSApIHsKKyAgICAgICAg
ICAgICAgICBvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorICAgIGhhc0RhdGE6IGZ1bmN0aW9uKCBv
d25lciApIHsKKyAgICAgICAgdmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdOworICAg
ICAgICByZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3Qo
IGNhY2hlICk7CisgICAgfQorfTsKK3ZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7CisKK3ZhciBk
YXRhVXNlciA9IG5ldyBEYXRhKCk7CisKKworCisvLyAgSW1wbGVtZW50YXRpb24gU3VtbWFyeQor
Ly8KKy8vICAxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5
IHdpdGggMS45LnggYnJhbmNoCisvLyAgMi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5h
YmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlCisvLyAgICAgIHBhdGhzIHRvIGEgc2luZ2xl
IG1lY2hhbmlzbS4KKy8vICAzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBw
b3J0ICJwcml2YXRlIiBhbmQgInVzZXIiIGRhdGEuCisvLyAgNC4gX05ldmVyXyBleHBvc2UgInBy
aXZhdGUiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSkK
Ky8vICA1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2Jq
ZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcykKKy8vICA2LiBQcm92aWRlIGEgY2xlYXIgcGF0
aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTQKKwordmFyIHJi
cmFjZSA9IC9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sCisgICAgcm11bHRpRGFzaCA9
IC9bQS1aXS9nOworCitmdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkgeworICAg
IHZhciBuYW1lOworCisgICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5
IHRvIGZldGNoIGFueQorICAgIC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0
ZQorICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7
CisgICAgICAgIG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJCYi
ICkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1l
ICk7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgKSB7CisgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAidHJ1ZSIgPyB0cnVl
IDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YSA9PT0gIm51bGwiID8gbnVsbCA6CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRo
ZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgK2RhdGEgKyAiIiA9PT0gZGF0YSA/ICtkYXRh
IDoKKyAgICAgICAgICAgICAgICAgICAgcmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJz
ZUpTT04oIGRhdGEgKSA6CisgICAgICAgICAgICAgICAgICAgIGRhdGE7CisgICAgICAgICAgICB9
IGNhdGNoICggZSApIHt9CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRh
dGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgorICAgICAgICAgICAgZGF0YVVzZXIuc2V0KCBl
bGVtLCBrZXksIGRhdGEgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEgPSB1
bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK2pRdWVy
eS5leHRlbmQoIHsKKyAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0
dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7
CisgICAgfSwKKworICAgIGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgeworICAg
ICAgICByZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7CisgICAgfSwK
KworICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAgICBkYXRh
VXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTsKKyAgICB9LAorCisgICAgLy8gVE9ETzogTm93IHRo
YXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWQK
KyAgICAvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4g
YmUgZGVwcmVjYXRlZC4KKyAgICBfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7
CisgICAgICAgIHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTsKKyAg
ICB9LAorCisgICAgX3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAg
ICBkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTsKKyAgICB9Cit9ICk7CisKK2pRdWVyeS5m
bi5leHRlbmQoIHsKKyAgICBkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKKyAgICAgICAg
dmFyIGksIG5hbWUsIGRhdGEsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdLAorICAgICAg
ICAgICAgYXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlczsKKworICAgICAgICAvLyBHZXRz
IGFsbCB2YWx1ZXMKKyAgICAgICAgaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAg
ICAgIGlmICggdGhpcy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2Vy
LmdldCggZWxlbSApOworCisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAx
ICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sICJoYXNEYXRhQXR0cnMiICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGkgPSBhdHRycy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgg
aS0tICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTExKworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgj
MTQ4OTQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGF0dHJzWyBpIF0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJzWyBpIF0ubmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUuaW5kZXhPZiggImRhdGEtIiApID09PSAwICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2Fz
ZSggbmFtZS5zbGljZSggNSApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYuc2V0KCBlbGVtLCAiaGFzRGF0YUF0dHJz
IiwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIGRhdGE7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXRzIG11bHRpcGxlIHZh
bHVlcworICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGF0YVVz
ZXIuc2V0KCB0aGlzLCBrZXkgKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAg
IHZhciBkYXRhLCBjYW1lbEtleTsKKworICAgICAgICAgICAgLy8gVGhlIGNhbGxpbmcgalF1ZXJ5
IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHkKKyAgICAgICAgICAgIC8vIChh
bmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhl
CisgICAgICAgICAgICAvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4g
ZW1wdHkgalF1ZXJ5IG9iamVjdAorICAgICAgICAgICAgLy8gd2lsbCByZXN1bHQgaW4gYHVuZGVm
aW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbAorICAgICAgICAgICAgLy8gdGhy
b3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFk
ZS4KKyAgICAgICAgICAgIGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgeworCisg
ICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZQorICAg
ICAgICAgICAgICAgIC8vIHdpdGggdGhlIGtleSBhcy1pcworICAgICAgICAgICAgICAgIGRhdGEg
PSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApIHx8CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
VHJ5IHRvIGZpbmQgZGFzaGVkIGtleSBpZiBpdCBleGlzdHMgKGdoLTI3NzkpCisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIDIuMi54IG9ubHkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0kJiIgKS50b0xv
d2VyQ2FzZSgpICk7CisKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgY2FtZWxLZXkgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTsKKwor
ICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGUKKyAg
ICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBrZXkgY2FtZWxpemVkCisgICAgICAgICAgICAgICAg
ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwgY2FtZWxLZXkgKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRh
dGE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byAi
ZGlzY292ZXIiIHRoZSBkYXRhIGluCisgICAgICAgICAgICAgICAgLy8gSFRNTDUgY3VzdG9tIGRh
dGEtKiBhdHRycworICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhQXR0ciggZWxlbSwgY2FtZWxL
ZXksIHVuZGVmaW5lZCApOworICAgICAgICAgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRh
IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBTZXQgdGhlIGRhdGEuLi4KKyAgICAgICAgICAgIGNhbWVsS2V5ID0g
alF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7CisgICAgICAgICAgICB0aGlzLmVhY2goIGZ1bmN0aW9u
KCkgeworCisgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGF0dGVtcHQgdG8gc3RvcmUgYSBjb3B5
IG9yIHJlZmVyZW5jZSBvZiBhbnkKKyAgICAgICAgICAgICAgICAvLyBkYXRhIHRoYXQgbWlnaHQn
dmUgYmVlbiBzdG9yZSB3aXRoIGEgY2FtZWxDYXNlZCBrZXkuCisgICAgICAgICAgICAgICAgdmFy
IGRhdGEgPSBkYXRhVXNlci5nZXQoIHRoaXMsIGNhbWVsS2V5ICk7CisKKyAgICAgICAgICAgICAg
ICAvLyBGb3IgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZSBpbnRlcm9wLCB3ZSBoYXZlIHRvCisgICAg
ICAgICAgICAgICAgLy8gc3RvcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBkYXNoZXMgaW4gYSBjYW1l
bENhc2UgZm9ybS4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IG5vdCBhcHBseSB0byBh
bGwgcHJvcGVydGllcy4uLioKKyAgICAgICAgICAgICAgICBkYXRhVXNlci5zZXQoIHRoaXMsIGNh
bWVsS2V5LCB2YWx1ZSApOworCisgICAgICAgICAgICAgICAgLy8gKi4uLiBJbiB0aGUgY2FzZSBv
ZiBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgX2FjdHVhbGx5XworICAgICAgICAgICAgICAgIC8vIGhh
dmUgZGFzaGVzLCB3ZSBuZWVkIHRvIGFsc28gc3RvcmUgYSBjb3B5IG9mIHRoYXQKKyAgICAgICAg
ICAgICAgICAvLyB1bmNoYW5nZWQgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgaWYgKCBrZXku
aW5kZXhPZiggIi0iICkgPiAtMSAmJiBkYXRhICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50
cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7CisgICAgfSwKKworICAgIHJlbW92ZURhdGE6IGZ1
bmN0aW9uKCBrZXkgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTsKKyAgICAgICAgfSApOwor
ICAgIH0KK30gKTsKKworCitqUXVlcnkuZXh0ZW5kKCB7CisgICAgcXVldWU6IGZ1bmN0aW9uKCBl
bGVtLCB0eXBlLCBkYXRhICkgeworICAgICAgICB2YXIgcXVldWU7CisKKyAgICAgICAgaWYgKCBl
bGVtICkgeworICAgICAgICAgICAgdHlwZSA9ICggdHlwZSB8fCAiZngiICkgKyAicXVldWUiOwor
ICAgICAgICAgICAgcXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTsKKworICAgICAg
ICAgICAgLy8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMg
aXMganVzdCBhIGxvb2t1cAorICAgICAgICAgICAgaWYgKCBkYXRhICkgeworICAgICAgICAgICAg
ICAgIGlmICggIXF1ZXVlIHx8IGpRdWVyeS5pc0FycmF5KCBkYXRhICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFr
ZUFycmF5KCBkYXRhICkgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBxdWV1ZS5wdXNoKCBkYXRhICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHF1ZXVlIHx8IFtdOworICAgICAgICB9CisgICAgfSwK
KworICAgIGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworICAgICAgICB0eXBlID0g
dHlwZSB8fCAiZngiOworCisgICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwg
dHlwZSApLAorICAgICAgICAgICAgc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCisgICAgICAg
ICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCksCisgICAgICAgICAgICBob29rcyA9IGpRdWVyeS5fcXVl
dWVIb29rcyggZWxlbSwgdHlwZSApLAorICAgICAgICAgICAgbmV4dCA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7CisgICAgICAgICAg
ICB9OworCisgICAgICAgIC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJl
bW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWwKKyAgICAgICAgaWYgKCBmbiA9PT0gImlucHJvZ3Jl
c3MiICkgeworICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpOworICAgICAgICAgICAgc3Rh
cnRMZW5ndGgtLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZm4gKSB7CisKKyAgICAgICAg
ICAgIC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZy
b20gYmVpbmcKKyAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWQKKyAgICAgICAg
ICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsKKyAgICAgICAgICAgICAgICBxdWV1ZS51bnNoaWZ0
KCAiaW5wcm9ncmVzcyIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2xlYXIg
dXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvbgorICAgICAgICAgICAgZGVsZXRlIGhvb2tz
LnN0b3A7CisgICAgICAgICAgICBmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7CisgICAgICAgICAg
ICBob29rcy5lbXB0eS5maXJlKCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gTm90IHB1
YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVu
dCBvbmUKKyAgICBfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CisgICAgICAg
IHZhciBrZXkgPSB0eXBlICsgInF1ZXVlSG9va3MiOworICAgICAgICByZXR1cm4gZGF0YVByaXYu
Z2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwgeworICAgICAg
ICAgICAgZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKS5hZGQoIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsg
InF1ZXVlIiwga2V5IF0gKTsKKyAgICAgICAgICAgIH0gKQorICAgICAgICB9ICk7CisgICAgfQor
fSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBk
YXRhICkgeworICAgICAgICB2YXIgc2V0dGVyID0gMjsKKworICAgICAgICBpZiAoIHR5cGVvZiB0
eXBlICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGRhdGEgPSB0eXBlOworICAgICAgICAg
ICAgdHlwZSA9ICJmeCI7CisgICAgICAgICAgICBzZXR0ZXItLTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHsKKyAgICAgICAgICAgIHJldHVy
biBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICB0aGlzIDoKKyAgICAgICAg
ICAgIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0g
alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7CisKKyAgICAgICAgICAgICAgICAvLyBF
bnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZQorICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVl
dWVIb29rcyggdGhpcywgdHlwZSApOworCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAi
ZngiICYmIHF1ZXVlWyAwIF0gIT09ICJpbnByb2dyZXNzIiApIHsKKyAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9ICk7CisgICAgfSwKKyAgICBkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnku
ZGVxdWV1ZSggdGhpcywgdHlwZSApOworICAgICAgICB9ICk7CisgICAgfSwKKyAgICBjbGVhclF1
ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUg
fHwgImZ4IiwgW10gKTsKKyAgICB9LAorCisgICAgLy8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3
aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQorICAgIC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0
aGUgdHlwZSBieSBkZWZhdWx0KQorICAgIHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7
CisgICAgICAgIHZhciB0bXAsCisgICAgICAgICAgICBjb3VudCA9IDEsCisgICAgICAgICAgICBk
ZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAorICAgICAgICAgICAgZWxlbWVudHMgPSB0aGlzLAor
ICAgICAgICAgICAgaSA9IHRoaXMubGVuZ3RoLAorICAgICAgICAgICAgcmVzb2x2ZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggISggLS1jb3VudCApICkgeworICAgICAgICAg
ICAgICAgICAgICBkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgaWYgKCB0eXBlb2Yg
dHlwZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBvYmogPSB0eXBlOworICAgICAgICAg
ICAgdHlwZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICB0eXBlID0gdHlwZSB8fCAi
ZngiOworCisgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgdG1wID0gZGF0YVBy
aXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1ZXVlSG9va3MiICk7CisgICAgICAgICAg
ICBpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgICAgICAgICB0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICByZXR1cm4gZGVmZXIucHJvbWlz
ZSggb2JqICk7CisgICAgfQorfSApOwordmFyIHBudW0gPSAoIC9bKy1dPyg/OlxkKlwufClcZCso
PzpbZUVdWystXT9cZCt8KS8gKS5zb3VyY2U7CisKK3ZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCgg
Il4oPzooWystXSk9fCkoIiArIHBudW0gKyAiKShbYS16JV0qKSQiLCAiaSIgKTsKKworCit2YXIg
Y3NzRXhwYW5kID0gWyAiVG9wIiwgIlJpZ2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdOworCit2YXIg
aXNIaWRkZW4gPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7CisKKyAgICAgICAgLy8gaXNIaWRkZW4g
bWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjsKKyAgICAgICAgLy8g
aW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50CisgICAgICAgIGVs
ZW0gPSBlbCB8fCBlbGVtOworICAgICAgICByZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgImRpc3Bs
YXkiICkgPT09ICJub25lIiB8fAorICAgICAgICAgICAgIWpRdWVyeS5jb250YWlucyggZWxlbS5v
d25lckRvY3VtZW50LCBlbGVtICk7CisgICAgfTsKKworCisKK2Z1bmN0aW9uIGFkanVzdENTUygg
ZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7CisgICAgdmFyIGFkanVzdGVkLAorICAg
ICAgICBzY2FsZSA9IDEsCisgICAgICAgIG1heEl0ZXJhdGlvbnMgPSAyMCwKKyAgICAgICAgY3Vy
cmVudFZhbHVlID0gdHdlZW4gPworICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiB0d2Vl
bi5jdXIoKTsgfSA6CisgICAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuIGpRdWVyeS5jc3Mo
IGVsZW0sIHByb3AsICIiICk7IH0sCisgICAgICAgIGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSwK
KyAgICAgICAgdW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5
LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICksCisKKyAgICAgICAgLy8gU3RhcnRpbmcg
dmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNo
ZXMKKyAgICAgICAgaW5pdGlhbEluVW5pdCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8
IHVuaXQgIT09ICJweCIgJiYgK2luaXRpYWwgKSAmJgorICAgICAgICAgICAgcmNzc051bS5leGVj
KCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTsKKworICAgIGlmICggaW5pdGlhbEluVW5pdCAm
JiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7CisKKyAgICAgICAgLy8gVHJ1c3QgdW5p
dHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzcworICAgICAgICB1bml0ID0gdW5pdCB8fCBpbml0aWFs
SW5Vbml0WyAzIF07CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4g
cHJvcGVydGllcyBsYXRlciBvbgorICAgICAgICB2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBb
XTsKKworICAgICAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBz
dGFydGluZyBwb2ludAorICAgICAgICBpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTsKKwor
ICAgICAgICBkbyB7CisKKyAgICAgICAgICAgIC8vIElmIHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJv
ZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21ldGhpbmcqLgorICAgICAgICAgICAgLy8g
VXNlIHN0cmluZyBmb3IgZG91Ymxpbmcgc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2Fs
ZSBhcyB1bmNoYW5nZWQgYmVsb3cKKyAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgfHwgIi41IjsK
KworICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBseQorICAgICAgICAgICAgaW5pdGlhbElu
VW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTsKKyAgICAgICAgICAgIGpRdWVyeS5zdHlsZSgg
ZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTsKKworICAgICAgICAvLyBVcGRhdGUg
c2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJvbSB0d2Vlbi5jdXIoKQorICAgICAgICAv
LyBCcmVhayB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNoYW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYg
d2UndmUganVzdCBoYWQgZW5vdWdoLgorICAgICAgICB9IHdoaWxlICgKKyAgICAgICAgICAgIHNj
YWxlICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsICkgJiYgc2NhbGUgIT09
IDEgJiYgLS1tYXhJdGVyYXRpb25zCisgICAgICAgICk7CisgICAgfQorCisgICAgaWYgKCB2YWx1
ZVBhcnRzICkgeworICAgICAgICBpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2lu
aXRpYWwgfHwgMDsKKworICAgICAgICAvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBp
ZiBzcGVjaWZpZWQKKyAgICAgICAgYWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gPworICAgICAg
ICAgICAgaW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0
c1sgMiBdIDoKKyAgICAgICAgICAgICt2YWx1ZVBhcnRzWyAyIF07CisgICAgICAgIGlmICggdHdl
ZW4gKSB7CisgICAgICAgICAgICB0d2Vlbi51bml0ID0gdW5pdDsKKyAgICAgICAgICAgIHR3ZWVu
LnN0YXJ0ID0gaW5pdGlhbEluVW5pdDsKKyAgICAgICAgICAgIHR3ZWVuLmVuZCA9IGFkanVzdGVk
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhZGp1c3RlZDsKK30KK3ZhciByY2hlY2th
YmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTsKKwordmFyIHJ0YWdOYW1lID0g
KCAvPChbXHc6LV0rKS8gKTsKKwordmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8XC8oPzpqYXZhfGVj
bWEpc2NyaXB0L2kgKTsKKworCisKKy8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBz
dXBwb3J0IFhIVE1MICgjMTMyMDApCit2YXIgd3JhcE1hcCA9IHsKKworICAgIC8vIFN1cHBvcnQ6
IElFOQorICAgIG9wdGlvbjogWyAxLCAiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8
L3NlbGVjdD4iIF0sCisKKyAgICAvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5z
ZXJ0IGVsZW1lbnRzIGluIHRoZQorICAgIC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2Vy
cyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW4KKyAgICAvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9k
eT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuCisgICAgdGhlYWQ6IFsgMSwgIjx0YWJsZT4i
LCAiPC90YWJsZT4iIF0sCisgICAgY29sOiBbIDIsICI8dGFibGU+PGNvbGdyb3VwPiIsICI8L2Nv
bGdyb3VwPjwvdGFibGU+IiBdLAorICAgIHRyOiBbIDIsICI8dGFibGU+PHRib2R5PiIsICI8L3Ri
b2R5PjwvdGFibGU+IiBdLAorICAgIHRkOiBbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90
cj48L3Rib2R5PjwvdGFibGU+IiBdLAorCisgICAgX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KK307
CisKKy8vIFN1cHBvcnQ6IElFOQord3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOwor
Cit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFw
TWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7CisK
KworZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7CisKKyAgICAvLyBTdXBwb3J0OiBJ
RTktMTErCisgICAgLy8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBp
bnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKQorICAgIHZhciByZXQgPSB0eXBlb2Yg
Y29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgPworICAgICAgICAg
ICAgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8ICIqIiApIDoKKyAgICAgICAg
ICAgIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiID8KKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCAiKiIgKSA6Cisg
ICAgICAgICAgICBbXTsKKworICAgIHJldHVybiB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYg
alF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSA/CisgICAgICAgIGpRdWVyeS5tZXJnZSgg
WyBjb250ZXh0IF0sIHJldCApIDoKKyAgICAgICAgcmV0OworfQorCisKKy8vIE1hcmsgc2NyaXB0
cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZAorZnVuY3Rpb24gc2V0R2xvYmFsRXZh
bCggZWxlbXMsIHJlZkVsZW1lbnRzICkgeworICAgIHZhciBpID0gMCwKKyAgICAgICAgbCA9IGVs
ZW1zLmxlbmd0aDsKKworICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgZGF0YVBy
aXYuc2V0KAorICAgICAgICAgICAgZWxlbXNbIGkgXSwKKyAgICAgICAgICAgICJnbG9iYWxFdmFs
IiwKKyAgICAgICAgICAgICFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRz
WyBpIF0sICJnbG9iYWxFdmFsIiApCisgICAgICAgICk7CisgICAgfQorfQorCisKK3ZhciByaHRt
bCA9IC88fCYjP1x3KzsvOworCitmdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4
dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkgeworICAgIHZhciBlbGVtLCB0bXAsIHRh
Zywgd3JhcCwgY29udGFpbnMsIGosCisgICAgICAgIGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVE
b2N1bWVudEZyYWdtZW50KCksCisgICAgICAgIG5vZGVzID0gW10sCisgICAgICAgIGkgPSAwLAor
ICAgICAgICBsID0gZWxlbXMubGVuZ3RoOworCisgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewor
ICAgICAgICBlbGVtID0gZWxlbXNbIGkgXTsKKworICAgICAgICBpZiAoIGVsZW0gfHwgZWxlbSA9
PT0gMCApIHsKKworICAgICAgICAgICAgLy8gQWRkIG5vZGVzIGRpcmVjdGx5CisgICAgICAgICAg
ICBpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09ICJvYmplY3QiICkgeworCisgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBoYW50b21KUzwyCisgICAgICAgICAgICAg
ICAgLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAor
ICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVs
ZW0gXSA6IGVsZW0gKTsKKworICAgICAgICAgICAgLy8gQ29udmVydCBub24taHRtbCBpbnRvIGEg
dGV4dCBub2RlCisgICAgICAgICAgICB9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkg
eworICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVs
ZW0gKSApOworCisgICAgICAgICAgICAvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXMKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG1wID0gdG1wIHx8IGZyYWdtZW50
LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoICJkaXYiICkgKTsKKworICAgICAg
ICAgICAgICAgIC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb24KKyAgICAg
ICAgICAgICAgICB0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbICIiLCAiIiBdIClb
IDEgXS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcg
XSB8fCB3cmFwTWFwLl9kZWZhdWx0OworICAgICAgICAgICAgICAgIHRtcC5pbm5lckhUTUwgPSB3
cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdOworCisg
ICAgICAgICAgICAgICAgLy8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBj
b250ZW50CisgICAgICAgICAgICAgICAgaiA9IHdyYXBbIDAgXTsKKyAgICAgICAgICAgICAgICB3
aGlsZSAoIGotLSApIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wLmxhc3RDaGlsZDsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lk
PDQuMSwgUGhhbnRvbUpTPDIKKyAgICAgICAgICAgICAgICAvLyBwdXNoLmFwcGx5KF8sIGFycmF5
bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1l
cmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbWVt
YmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyCisgICAgICAgICAgICAgICAgdG1wID0gZnJhZ21l
bnQuZmlyc3RDaGlsZDsKKworICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBu
b2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5MikKKyAgICAgICAgICAgICAgICB0bXAudGV4dENvbnRl
bnQgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJlbW92
ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnQKKyAgICBmcmFnbWVudC50ZXh0Q29udGVudCA9ICIiOwor
CisgICAgaSA9IDA7CisgICAgd2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHsKKwor
ICAgICAgICAvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlv
biAodHJhYy00MDg3KQorICAgICAgICBpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSgg
ZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHsKKyAgICAgICAgICAgIGlmICggaWdub3JlZCApIHsK
KyAgICAgICAgICAgICAgICBpZ25vcmVkLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgY29udGFpbnMgPSBqUXVl
cnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworCisgICAgICAgIC8vIEFw
cGVuZCB0byBmcmFnbWVudAorICAgICAgICB0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENo
aWxkKCBlbGVtICksICJzY3JpcHQiICk7CisKKyAgICAgICAgLy8gUHJlc2VydmUgc2NyaXB0IGV2
YWx1YXRpb24gaGlzdG9yeQorICAgICAgICBpZiAoIGNvbnRhaW5zICkgeworICAgICAgICAgICAg
c2V0R2xvYmFsRXZhbCggdG1wICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBDYXB0dXJlIGV4
ZWN1dGFibGVzCisgICAgICAgIGlmICggc2NyaXB0cyApIHsKKyAgICAgICAgICAgIGogPSAwOwor
ICAgICAgICAgICAgd2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgIiIgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2NyaXB0cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZyYWdtZW50Owor
fQorCisKKyggZnVuY3Rpb24oKSB7CisgICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpLAorICAgICAgICBkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCgg
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSApLAorICAgICAgICBpbnB1dCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsKKworICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQg
NC4wLTQuMywgU2FmYXJpPD01LjEKKyAgICAvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1l
IGlzIHNldCAoIzExMjE3KQorICAgIC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSkK
KyAgICAvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0Eg
KCMxNDkwMSkKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOworICAg
IGlucHV0LnNldEF0dHJpYnV0ZSggImNoZWNrZWQiLCAiY2hlY2tlZCIgKTsKKyAgICBpbnB1dC5z
ZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7CisKKyAgICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0
ICk7CisKKyAgICAvLyBTdXBwb3J0OiBTYWZhcmk8PTUuMSwgQW5kcm9pZDw0LjIKKyAgICAvLyBP
bGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFn
bWVudHMKKyAgICBzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xv
bmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7CisKKyAgICAvLyBTdXBwb3J0OiBJRTw9
MTErCisgICAgLy8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1
ZSBpcyBwcm9wZXJseSBjbG9uZWQKKyAgICBkaXYuaW5uZXJIVE1MID0gIjx0ZXh0YXJlYT54PC90
ZXh0YXJlYT4iOworICAgIHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUo
IHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlOworfSApKCk7CisKKwordmFyCisgICAgcmtl
eUV2ZW50ID0gL15rZXkvLAorICAgIHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNv
bnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLAorICAgIHJ0eXBlbmFtZXNwYWNlID0gL14oW14u
XSopKD86XC4oLispfCkvOworCitmdW5jdGlvbiByZXR1cm5UcnVlKCkgeworICAgIHJldHVybiB0
cnVlOworfQorCitmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKKy8vIFN1cHBvcnQ6IElFOQorLy8gU2VlICMxMzM5MyBmb3IgbW9yZSBpbmZvCitmdW5jdGlv
biBzYWZlQWN0aXZlRWxlbWVudCgpIHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gZG9jdW1l
bnQuYWN0aXZlRWxlbWVudDsKKyAgICB9IGNhdGNoICggZXJyICkgeyB9Cit9CisKK2Z1bmN0aW9u
IG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7CisgICAgdmFyIG9y
aWdGbiwgdHlwZTsKKworICAgIC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVy
cworICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKworICAgICAgICAvLyAo
IHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKQorICAgICAgICBpZiAoIHR5cGVvZiBzZWxl
Y3RvciAhPT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAgIC8vICggdHlwZXMtT2JqZWN0LCBk
YXRhICkKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOworICAgICAgICAgICAg
c2VsZWN0b3IgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAgZm9yICggdHlwZSBpbiB0
eXBlcyApIHsKKyAgICAgICAgICAgIG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlw
ZXNbIHR5cGUgXSwgb25lICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVsZW07CisgICAg
fQorCisgICAgaWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHsKKworICAgICAgICAv
LyAoIHR5cGVzLCBmbiApCisgICAgICAgIGZuID0gc2VsZWN0b3I7CisgICAgICAgIGRhdGEgPSBz
ZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgeworICAg
ICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAg
IC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCisgICAgICAgICAgICBmbiA9IGRhdGE7CisgICAg
ICAgICAgICBkYXRhID0gdW5kZWZpbmVkOworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAg
ICAvLyAoIHR5cGVzLCBkYXRhLCBmbiApCisgICAgICAgICAgICBmbiA9IGRhdGE7CisgICAgICAg
ICAgICBkYXRhID0gc2VsZWN0b3I7CisgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIGZuID09PSBmYWxzZSApIHsKKyAgICAgICAgZm4g
PSByZXR1cm5GYWxzZTsKKyAgICB9IGVsc2UgaWYgKCAhZm4gKSB7CisgICAgICAgIHJldHVybiBl
bGVtOworICAgIH0KKworICAgIGlmICggb25lID09PSAxICkgeworICAgICAgICBvcmlnRm4gPSBm
bjsKKyAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7CisKKyAgICAgICAgICAgIC8vIENh
biB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mbworICAgICAg
ICAgICAgalF1ZXJ5KCkub2ZmKCBldmVudCApOworICAgICAgICAgICAgcmV0dXJuIG9yaWdGbi5h
cHBseSggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gVXNlIHNh
bWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm4KKyAgICAgICAgZm4uZ3Vp
ZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7CisgICAg
fQorICAgIHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICBqUXVlcnkuZXZl
bnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7CisgICAgfSApOworfQor
CisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0
IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgorICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRF
dmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KKyAqLworalF1ZXJ5LmV2ZW50ID0g
eworCisgICAgZ2xvYmFsOiB7fSwKKworICAgIGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBo
YW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsKKworICAgICAgICB2YXIgaGFuZGxlT2JqSW4sIGV2
ZW50SGFuZGxlLCB0bXAsCisgICAgICAgICAgICBldmVudHMsIHQsIGhhbmRsZU9iaiwKKyAgICAg
ICAgICAgIHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSwKKyAg
ICAgICAgICAgIGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7CisKKyAgICAgICAgLy8g
RG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQg
YWxsb3cgcGxhaW4gb2JqZWN0cykKKyAgICAgICAgaWYgKCAhZWxlbURhdGEgKSB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4g
YW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKKyAgICAgICAg
aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7CisgICAgICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRs
ZXI7CisgICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKKyAgICAgICAg
ICAgIHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8g
ZmluZC9yZW1vdmUgaXQgbGF0ZXIKKyAgICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkgeworICAg
ICAgICAgICAgaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKzsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxl
ciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QKKyAgICAgICAgaWYgKCAhKCBldmVudHMgPSBlbGVtRGF0
YS5ldmVudHMgKSApIHsKKyAgICAgICAgICAgIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9
OworICAgICAgICB9CisgICAgICAgIGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5k
bGUgKSApIHsKKyAgICAgICAgICAgIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVu
Y3Rpb24oIGUgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZl
bnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZAorICAgICAgICAgICAgICAgIC8vIHdo
ZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIgJiYgalF1ZXJ5LmV2
ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2
ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDsKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRz
IHNlcGFyYXRlZCBieSBhIHNwYWNlCisgICAgICAgIHR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1h
dGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07CisgICAgICAgIHQgPSB0eXBlcy5sZW5ndGg7Cisg
ICAgICAgIHdoaWxlICggdC0tICkgeworICAgICAgICAgICAgdG1wID0gcnR5cGVuYW1lc3BhY2Uu
ZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdOworICAgICAgICAgICAgdHlwZSA9IG9yaWdUeXBlID0g
dG1wWyAxIF07CisgICAgICAgICAgICBuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCAiIiApLnNw
bGl0KCAiLiIgKS5zb3J0KCk7CisKKyAgICAgICAgICAgIC8vIFRoZXJlICptdXN0KiBiZSBhIHR5
cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVycworICAgICAgICAgICAgaWYg
KCAhdHlwZSApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFs
IGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlCisgICAgICAgICAgICBzcGVjaWFs
ID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKworICAgICAgICAgICAgLy8g
SWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90
aGVyd2lzZSBnaXZlbiB0eXBlCisgICAgICAgICAgICB0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNp
YWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7CisKKyAgICAgICAg
ICAgIC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGUKKyAgICAgICAg
ICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCisgICAg
ICAgICAgICAvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVycworICAg
ICAgICAgICAgaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCggeworICAgICAgICAgICAgICAgIHR5
cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgb3JpZ1R5cGU6IG9yaWdUeXBlLAorICAgICAgICAg
ICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlciwKKyAg
ICAgICAgICAgICAgICBndWlkOiBoYW5kbGVyLmd1aWQsCisgICAgICAgICAgICAgICAgc2VsZWN0
b3I6IHNlbGVjdG9yLAorICAgICAgICAgICAgICAgIG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYg
alF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksCisgICAgICAg
ICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oICIuIiApCisgICAgICAgICAgICB9
LCBoYW5kbGVPYmpJbiApOworCisgICAgICAgICAgICAvLyBJbml0IHRoZSBldmVudCBoYW5kbGVy
IHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdAorICAgICAgICAgICAgaWYgKCAhKCBoYW5kbGVycyA9
IGV2ZW50c1sgdHlwZSBdICkgKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNb
IHR5cGUgXSA9IFtdOworICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAw
OworCisgICAgICAgICAgICAgICAgLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUg
c3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCisgICAgICAgICAgICAgICAgaWYg
KCAhc3BlY2lhbC5zZXR1cCB8fAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnNldHVwLmNh
bGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgewor
CisgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhh
bmRsZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHNwZWNpYWwuYWRkICkgeworICAgICAgICAgICAg
ICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCisgICAgICAgICAgICAg
ICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhh
bmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250CisgICAgICAgICAgICBpZiAoIHNlbGVjdG9y
ICkgeworICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVD
b3VudCsrLCAwLCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQs
IGZvciBldmVudCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9iYWxb
IHR5cGUgXSA9IHRydWU7CisgICAgICAgIH0KKworICAgIH0sCisKKyAgICAvLyBEZXRhY2ggYW4g
ZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKKyAgICByZW1vdmU6IGZ1bmN0
aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgeworCisg
ICAgICAgIHZhciBqLCBvcmlnQ291bnQsIHRtcCwKKyAgICAgICAgICAgIGV2ZW50cywgdCwgaGFu
ZGxlT2JqLAorICAgICAgICAgICAgc3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMs
IG9yaWdUeXBlLAorICAgICAgICAgICAgZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVt
ICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7CisKKyAgICAgICAgaWYgKCAhZWxlbURhdGEgfHwg
ISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5
cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkCisgICAgICAgIHR5cGVzID0gKCB0eXBlcyB8fCAiIiAp
Lm1hdGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07CisgICAgICAgIHQgPSB0eXBlcy5sZW5ndGg7
CisgICAgICAgIHdoaWxlICggdC0tICkgeworICAgICAgICAgICAgdG1wID0gcnR5cGVuYW1lc3Bh
Y2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdOworICAgICAgICAgICAgdHlwZSA9IG9yaWdUeXBl
ID0gdG1wWyAxIF07CisgICAgICAgICAgICBuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCAiIiAp
LnNwbGl0KCAiLiIgKS5zb3J0KCk7CisKKyAgICAgICAgICAgIC8vIFVuYmluZCBhbGwgZXZlbnRz
IChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudAorICAgICAg
ICAgICAgaWYgKCAhdHlwZSApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50
cyApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlw
ZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKKyAgICAg
ICAgICAgIHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFs
LmJpbmRUeXBlICkgfHwgdHlwZTsKKyAgICAgICAgICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBl
IF0gfHwgW107CisgICAgICAgICAgICB0bXAgPSB0bXBbIDIgXSAmJgorICAgICAgICAgICAgICAg
IG5ldyBSZWdFeHAoICIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbiggIlxcLig/Oi4qXFwufCki
ICkgKyAiKFxcLnwkKSIgKTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50
cworICAgICAgICAgICAgb3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDsKKyAgICAgICAg
ICAgIHdoaWxlICggai0tICkgeworICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJz
WyBqIF07CisKKyAgICAgICAgICAgICAgICBpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUg
PT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmCisgICAgICAgICAgICAgICAgICAgICggIWhhbmRs
ZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmCisgICAgICAgICAgICAg
ICAgICAgICggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgKCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5z
ZWxlY3RvciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPT09ICIqKiIgJiYg
aGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNw
bGljZSggaiwgMSApOworCisgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlT2JqLnNlbGVj
dG9yICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudC0t
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lh
bC5yZW1vdmUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsLnJlbW92ZS5jYWxs
KCBlbGVtLCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVtb3ZlIGdlbmVyaWMgZXZl
bnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBl
eGlzdAorICAgICAgICAgICAgLy8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJz
aW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpCisgICAgICAgICAg
ICBpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkgeworICAgICAgICAgICAgICAg
IGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC50
ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFs
c2UgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0
eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBkZWxldGUgZXZlbnRzWyB0eXBlIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIg
dXNlZAorICAgICAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHsKKyAg
ICAgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgImhhbmRsZSBldmVudHMiICk7CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKworICAg
ICAgICAvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVu
dCBvYmplY3QKKyAgICAgICAgZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApOworCisg
ICAgICAgIHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwKKyAgICAgICAgICAgIGhh
bmRsZXJRdWV1ZSA9IFtdLAorICAgICAgICAgICAgYXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50
cyApLAorICAgICAgICAgICAgaGFuZGxlcnMgPSAoIGRhdGFQcml2LmdldCggdGhpcywgImV2ZW50
cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sCisgICAgICAgICAgICBzcGVjaWFsID0g
alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTsKKworICAgICAgICAvLyBV
c2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5h
dGl2ZSBldmVudAorICAgICAgICBhcmdzWyAwIF0gPSBldmVudDsKKyAgICAgICAgZXZlbnQuZGVs
ZWdhdGVUYXJnZXQgPSB0aGlzOworCisgICAgICAgIC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhv
b2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWQKKyAgICAg
ICAgaWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCgg
dGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBEZXRlcm1pbmUgaGFuZGxlcnMKKyAgICAgICAgaGFuZGxlclF1ZXVl
ID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApOwor
CisgICAgICAgIC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBw
cm9wYWdhdGlvbiBiZW5lYXRoIHVzCisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoICgg
bWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0
b3BwZWQoKSApIHsKKyAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVs
ZW07CisKKyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgd2hpbGUgKCAoIGhhbmRsZU9i
aiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiYKKyAgICAgICAgICAgICAgICAhZXZlbnQu
aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKKworICAgICAgICAgICAgICAgIC8v
IFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikg
aGF2ZSBuYW1lc3BhY2UocykKKyAgICAgICAgICAgICAgICAvLyBhIHN1YnNldCBvciBlcXVhbCB0
byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4K
KyAgICAgICAgICAgICAgICBpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3Bh
Y2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgeworCisgICAgICAgICAgICAgICAgICAg
IGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQu
ZGF0YSA9IGhhbmRsZU9iai5kYXRhOworCisgICAgICAgICAgICAgICAgICAgIHJldCA9ICggKCBq
UXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1h
dGNoZWQuZWxlbSwgYXJncyApOworCisgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ICE9PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggZXZlbnQucmVzdWx0
ID0gcmV0ICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBl
CisgICAgICAgIGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7CisgICAgICAgICAgICBzcGVj
aWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKKyAgICB9LAorCisgICAgaGFuZGxlcnM6IGZ1bmN0aW9u
KCBldmVudCwgaGFuZGxlcnMgKSB7CisgICAgICAgIHZhciBpLCBtYXRjaGVzLCBzZWwsIGhhbmRs
ZU9iaiwKKyAgICAgICAgICAgIGhhbmRsZXJRdWV1ZSA9IFtdLAorICAgICAgICAgICAgZGVsZWdh
dGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsCisgICAgICAgICAgICBjdXIgPSBldmVu
dC50YXJnZXQ7CisKKyAgICAgICAgLy8gU3VwcG9ydCAoYXQgbGVhc3QpOiBDaHJvbWUsIElFOQor
ICAgICAgICAvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzCisgICAgICAgIC8vIEJsYWNrLWhvbGUg
U1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICgjMTMxODApCisgICAgICAgIC8vCisgICAgICAgIC8v
IFN1cHBvcnQ6IEZpcmVmb3g8PTQyKworICAgICAgICAvLyBBdm9pZCBub24tbGVmdC1jbGljayBp
biBGRiBidXQgZG9uJ3QgYmxvY2sgSUUgcmFkaW8gZXZlbnRzICgjMzg2MSwgZ2gtMjM0MykKKyAg
ICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYmIGN1ci5ub2RlVHlwZSAmJgorICAgICAgICAgICAg
KCBldmVudC50eXBlICE9PSAiY2xpY2siIHx8IGlzTmFOKCBldmVudC5idXR0b24gKSB8fCBldmVu
dC5idXR0b24gPCAxICkgKSB7CisKKyAgICAgICAgICAgIGZvciAoIDsgY3VyICE9PSB0aGlzOyBj
dXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkgeworCisgICAgICAgICAgICAgICAgLy8gRG9u
J3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpCisgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
cHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgy
LCAjMTE3NjQpCisgICAgICAgICAgICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgKCBj
dXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlwZSAhPT0gImNsaWNrIiApICkgeworICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVzID0gW107CisgICAgICAgICAgICAgICAgICAgIGZvciAo
IGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIw
MykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArICIg
IjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVzWyBzZWwgXSA9PT0gdW5k
ZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXNbIHNlbCBdID0g
aGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICku
bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCBtYXRjaGVzWyBzZWwgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaGVzLnB1c2goIGhhbmRsZU9iaiApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlcy5sZW5n
dGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCggeyBlbGVt
OiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVzIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFk
ZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnMKKyAgICAgICAgaWYgKCBk
ZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkgeworICAgICAgICAgICAgaGFuZGxlclF1
ZXVlLnB1c2goIHsgZWxlbTogdGhpcywgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0
ZUNvdW50ICkgfSApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGhhbmRsZXJRdWV1ZTsK
KyAgICB9LAorCisgICAgLy8gSW5jbHVkZXMgc29tZSBldmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5
RXZlbnQgYW5kIE1vdXNlRXZlbnQKKyAgICBwcm9wczogKCAiYWx0S2V5IGJ1YmJsZXMgY2FuY2Vs
YWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWlsIGV2ZW50UGhhc2UgIiArCisgICAgICAg
ICJtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdo
aWNoIiApLnNwbGl0KCAiICIgKSwKKworICAgIGZpeEhvb2tzOiB7fSwKKworICAgIGtleUhvb2tz
OiB7CisgICAgICAgIHByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoICIg
IiApLAorICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7CisKKyAg
ICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cworICAgICAgICAgICAgaWYgKCBl
dmVudC53aGljaCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gb3Jp
Z2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5
Q29kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAg
ICB9CisgICAgfSwKKworICAgIG1vdXNlSG9va3M6IHsKKyAgICAgICAgcHJvcHM6ICggImJ1dHRv
biBidXR0b25zIGNsaWVudFggY2xpZW50WSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgIiAr
CisgICAgICAgICAgICAic2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIgKS5zcGxpdCggIiAiICks
CisgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKKyAgICAgICAg
ICAgIHZhciBldmVudERvYywgZG9jLCBib2R5LAorICAgICAgICAgICAgICAgIGJ1dHRvbiA9IG9y
aWdpbmFsLmJ1dHRvbjsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlz
c2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQorICAgICAgICAgICAgaWYgKCBldmVudC5wYWdl
WCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHsKKyAgICAgICAgICAgICAg
ICBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OworICAg
ICAgICAgICAgICAgIGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAgICAgICAg
ICAgICBib2R5ID0gZXZlbnREb2MuYm9keTsKKworICAgICAgICAgICAgICAgIGV2ZW50LnBhZ2VY
ID0gb3JpZ2luYWwuY2xpZW50WCArCisgICAgICAgICAgICAgICAgICAgICggZG9jICYmIGRvYy5z
Y3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtCisgICAgICAgICAg
ICAgICAgICAgICggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJvZHkgJiYgYm9keS5jbGllbnRM
ZWZ0IHx8IDAgKTsKKyAgICAgICAgICAgICAgICBldmVudC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVu
dFkgKworICAgICAgICAgICAgICAgICAgICAoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5
ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLQorICAgICAgICAgICAgICAgICAgICAoIGRvYyAm
JiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxl
ZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKKyAgICAgICAgICAgIC8vIE5vdGU6IGJ1dHRv
biBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0CisgICAgICAgICAgICBpZiAoICFl
dmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBl
dmVudC53aGljaCA9ICggYnV0dG9uICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0
b24gJiA0ID8gMiA6IDAgKSApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBldmVudDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBmaXg6IGZ1bmN0aW9uKCBldmVudCAp
IHsKKyAgICAgICAgaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKKyAgICAgICAgICAg
IHJldHVybiBldmVudDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENyZWF0ZSBhIHdyaXRhYmxl
IGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllcwor
ICAgICAgICB2YXIgaSwgcHJvcCwgY29weSwKKyAgICAgICAgICAgIHR5cGUgPSBldmVudC50eXBl
LAorICAgICAgICAgICAgb3JpZ2luYWxFdmVudCA9IGV2ZW50LAorICAgICAgICAgICAgZml4SG9v
ayA9IHRoaXMuZml4SG9va3NbIHR5cGUgXTsKKworICAgICAgICBpZiAoICFmaXhIb29rICkgewor
ICAgICAgICAgICAgdGhpcy5maXhIb29rc1sgdHlwZSBdID0gZml4SG9vayA9CisgICAgICAgICAg
ICAgICAgcm1vdXNlRXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5tb3VzZUhvb2tzIDoKKyAgICAg
ICAgICAgICAgICBya2V5RXZlbnQudGVzdCggdHlwZSApID8gdGhpcy5rZXlIb29rcyA6CisgICAg
ICAgICAgICAgICAge307CisgICAgICAgIH0KKyAgICAgICAgY29weSA9IGZpeEhvb2sucHJvcHMg
PyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyApIDogdGhpcy5wcm9wczsKKworICAg
ICAgICBldmVudCA9IG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKKworICAgICAg
ICBpID0gY29weS5sZW5ndGg7CisgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAg
cHJvcCA9IGNvcHlbIGkgXTsKKyAgICAgICAgICAgIGV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2
ZW50WyBwcm9wIF07CisgICAgICAgIH0KKworICAgICAgICAvLyBTdXBwb3J0OiBDb3Jkb3ZhIDIu
NSAoV2ViS2l0KSAoIzEzMjU1KQorICAgICAgICAvLyBBbGwgZXZlbnRzIHNob3VsZCBoYXZlIGEg
dGFyZ2V0OyBDb3Jkb3ZhIGRldmljZXJlYWR5IGRvZXNuJ3QKKyAgICAgICAgaWYgKCAhZXZlbnQu
dGFyZ2V0ICkgeworICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZG9jdW1lbnQ7CisgICAgICAg
IH0KKworICAgICAgICAvLyBTdXBwb3J0OiBTYWZhcmkgNi4wKywgQ2hyb21lPDI4CisgICAgICAg
IC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpCisgICAg
ICAgIGlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgeworICAgICAgICAgICAgZXZl
bnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZml4SG9vay5maWx0ZXIgPyBmaXhIb29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFs
RXZlbnQgKSA6IGV2ZW50OworICAgIH0sCisKKyAgICBzcGVjaWFsOiB7CisgICAgICAgIGxvYWQ6
IHsKKworICAgICAgICAgICAgLy8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMg
ZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZAorICAgICAgICAgICAgbm9CdWJibGU6IHRydWUK
KyAgICAgICAgfSwKKyAgICAgICAgZm9jdXM6IHsKKworICAgICAgICAgICAgLy8gRmlyZSBuYXRp
dmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0Cisg
ICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRo
aXMgIT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5mb2N1cyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5mb2N1cygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRlbGVnYXRl
VHlwZTogImZvY3VzaW4iCisgICAgICAgIH0sCisgICAgICAgIGJsdXI6IHsKKyAgICAgICAgICAg
IHRyaWdnZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggdGhpcyA9PT0gc2Fm
ZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmJsdXIgKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuYmx1cigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogImZvY3Vz
b3V0IgorICAgICAgICB9LAorICAgICAgICBjbGljazogeworCisgICAgICAgICAgICAvLyBGb3Ig
Y2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdo
dAorICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYg
KCB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgJiYgdGhpcy5jbGljayAmJiBqUXVlcnkubm9kZU5h
bWUoIHRoaXMsICJpbnB1dCIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGljaygp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLy8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lz
dGVuY3ksIGRvbid0IGZpcmUgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzCisgICAgICAgICAgICBf
ZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqUXVl
cnkubm9kZU5hbWUoIGV2ZW50LnRhcmdldCwgImEiICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisKKyAgICAgICAgYmVmb3JldW5sb2FkOiB7CisgICAgICAgICAgICBwb3N0RGlzcGF0Y2g6
IGZ1bmN0aW9uKCBldmVudCApIHsKKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVm
b3ggMjArCisgICAgICAgICAgICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSBy
ZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LgorICAgICAgICAgICAgICAgIGlmICggZXZlbnQu
cmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3Vs
dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
OworCitqUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkg
eworCisgICAgLy8gVGhpcyAiaWYiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0cworICAgIGlm
ICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkgeworICAgICAgICBlbGVtLnJlbW92ZUV2ZW50
TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApOworICAgIH0KK307CisKK2pRdWVyeS5FdmVudCA9IGZ1
bmN0aW9uKCBzcmMsIHByb3BzICkgeworCisgICAgLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRo
b3V0IHRoZSAnbmV3JyBrZXl3b3JkCisgICAgaWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5
LkV2ZW50ICkgKSB7CisgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3Bz
ICk7CisgICAgfQorCisgICAgLy8gRXZlbnQgb2JqZWN0CisgICAgaWYgKCBzcmMgJiYgc3JjLnR5
cGUgKSB7CisgICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKKyAgICAgICAgdGhpcy50
eXBlID0gc3JjLnR5cGU7CisKKyAgICAgICAgLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1
bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWQKKyAgICAgICAgLy8gYnkgYSBo
YW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCisg
ICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwK
KyAgICAgICAgICAgICAgICBzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmCisK
KyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMAorICAgICAgICAgICAgICAg
IHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgPworICAgICAgICAgICAgcmV0dXJuVHJ1ZSA6Cisg
ICAgICAgICAgICByZXR1cm5GYWxzZTsKKworICAgIC8vIEV2ZW50IHR5cGUKKyAgICB9IGVsc2Ug
eworICAgICAgICB0aGlzLnR5cGUgPSBzcmM7CisgICAgfQorCisgICAgLy8gUHV0IGV4cGxpY2l0
bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QKKyAgICBpZiAoIHBy
b3BzICkgeworICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOworICAgIH0KKwor
ICAgIC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUg
b25lCisgICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnku
bm93KCk7CisKKyAgICAvLyBNYXJrIGl0IGFzIGZpeGVkCisgICAgdGhpc1sgalF1ZXJ5LmV4cGFu
ZG8gXSA9IHRydWU7Cit9OworCisvLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVu
dHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKKy8vIGh0
dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2Vj
bWEtc2NyaXB0LWJpbmRpbmcuaHRtbAoralF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKKyAgICBj
b25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LAorICAgIGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJu
RmFsc2UsCisgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAorICAgIGlzSW1t
ZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc1NpbXVsYXRlZDog
ZmFsc2UsCisKKyAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBl
ID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVk
ID0gcmV0dXJuVHJ1ZTsKKworICAgICAgICBpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7
CisgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIH0KKyAgICB9LAorICAg
IHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlID0gdGhpcy5vcmln
aW5hbEV2ZW50OworCisgICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5U
cnVlOworCisgICAgICAgIGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKKyAgICAgICAg
ICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKyAgICB9LAorICAgIHN0b3BJbW1l
ZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBlID0gdGhpcy5vcmln
aW5hbEV2ZW50OworCisgICAgICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQg
PSByZXR1cm5UcnVlOworCisgICAgICAgIGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHsK
KyAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKwor
ICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0KK307CisKKy8vIENyZWF0ZSBt
b3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1l
IGNoZWNrcworLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS4KKy8v
IERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zl
ci9wb2ludGVyb3V0CisvLworLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seQorLy8gU2FmYXJpIHNl
bmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6CisvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNv
bS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4CisvLyBmb3IgdGhlIGRlc2NyaXB0
aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdl
bGwpLgoralF1ZXJ5LmVhY2goIHsKKyAgICBtb3VzZWVudGVyOiAibW91c2VvdmVyIiwKKyAgICBt
b3VzZWxlYXZlOiAibW91c2VvdXQiLAorICAgIHBvaW50ZXJlbnRlcjogInBvaW50ZXJvdmVyIiwK
KyAgICBwb2ludGVybGVhdmU6ICJwb2ludGVyb3V0IgorfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCAp
IHsKKyAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0geworICAgICAgICBkZWxlZ2F0
ZVR5cGU6IGZpeCwKKyAgICAgICAgYmluZFR5cGU6IGZpeCwKKworICAgICAgICBoYW5kbGU6IGZ1
bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgIHZhciByZXQsCisgICAgICAgICAgICAgICAg
dGFyZ2V0ID0gdGhpcywKKyAgICAgICAgICAgICAgICByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRh
cmdldCwKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7CisKKyAg
ICAgICAgICAgIC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVs
YXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRl
ZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdworICAg
ICAgICAgICAgaWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5
LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkgeworICAgICAgICAgICAgICAgIGV2ZW50
LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7CisgICAgICAgICAgICAgICAgcmV0ID0gaGFuZGxl
T2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgIGV2
ZW50LnR5cGUgPSBmaXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmV0Owor
ICAgICAgICB9CisgICAgfTsKK30gKTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIG9uOiBm
dW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIG9u
KCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7CisgICAgfSwKKyAgICBvbmU6IGZ1
bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4gb24o
IHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTsKKyAgICB9LAorICAgIG9mZjog
ZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7CisgICAgICAgIHZhciBoYW5kbGVPYmos
IHR5cGU7CisgICAgICAgIGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlw
ZXMuaGFuZGxlT2JqICkgeworCisgICAgICAgICAgICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQg
alF1ZXJ5LkV2ZW50CisgICAgICAgICAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7Cisg
ICAgICAgICAgICBqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAorICAgICAgICAg
ICAgICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPworICAgICAgICAgICAgICAgICAgICBoYW5kbGVP
Ymoub3JpZ1R5cGUgKyAiLiIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDoKKyAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlT2JqLm9yaWdUeXBlLAorICAgICAgICAgICAgICAgIGhhbmRsZU9iai5zZWxl
Y3RvciwKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlcgorICAgICAgICAgICAgKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICggdHlwZW9m
IHR5cGVzID09PSAib2JqZWN0IiApIHsKKworICAgICAgICAgICAgLy8gKCB0eXBlcy1vYmplY3Qg
Wywgc2VsZWN0b3JdICkKKyAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlv
biIgKSB7CisKKyAgICAgICAgICAgIC8vICggdHlwZXMgWywgZm5dICkKKyAgICAgICAgICAgIGZu
ID0gc2VsZWN0b3I7CisgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIGZuID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgIGZuID0gcmV0dXJu
RmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVj
dG9yICk7CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7CisKKwordmFyCisgICAgcnhodG1sVGFn
ID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgo
W1x3Oi1dKylbXj5dKilcLz4vZ2ksCisKKyAgICAvLyBTdXBwb3J0OiBJRSAxMC0xMSwgRWRnZSAx
MDI0MCsKKyAgICAvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBz
ZXZlcmUgc2xvd2Rvd25zLgorICAgIC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNv
bS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvCisgICAgcm5vSW5uZXJodG1sID0gLzxzY3Jp
cHR8PHN0eWxlfDxsaW5rL2ksCisKKyAgICAvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2Vk
CisgICAgcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKKyAg
ICByc2NyaXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVwvKC4qKS8sCisgICAgcmNsZWFuU2NyaXB0ID0g
L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nOworCisvLyBNYW5pcHVs
YXRpbmcgdGFibGVzIHJlcXVpcmVzIGEgdGJvZHkKK2Z1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdl
dCggZWxlbSwgY29udGVudCApIHsKKyAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAi
dGFibGUiICkgJiYKKyAgICAgICAgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9
PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsICJ0ciIgKSA/CisKKyAgICAgICAg
ZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggInRib2R5IiApWyAwIF0gfHwKKyAgICAgICAgICAg
IGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCAidGJv
ZHkiICkgKSA6CisgICAgICAgIGVsZW07Cit9CisKKy8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlw
ZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb24K
K2Z1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7CisgICAgZWxlbS50eXBlID0gKCBlbGVt
LmdldEF0dHJpYnV0ZSggInR5cGUiICkgIT09IG51bGwgKSArICIvIiArIGVsZW0udHlwZTsKKyAg
ICByZXR1cm4gZWxlbTsKK30KK2Z1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7CisgICAg
dmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7CisKKyAgICBp
ZiAoIG1hdGNoICkgeworICAgICAgICBlbGVtLnR5cGUgPSBtYXRjaFsgMSBdOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCAidHlwZSIgKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZWxlbTsKK30KKworZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCAp
IHsKKyAgICB2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRh
dGFDdXIsIGV2ZW50czsKKworICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMs
IGhhbmRsZXJzLCBldGMuCisgICAgaWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHsKKyAg
ICAgICAgcGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3MoIHNyYyApOworICAgICAgICBwZGF0YUN1
ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTsKKyAgICAgICAgZXZlbnRzID0gcGRh
dGFPbGQuZXZlbnRzOworCisgICAgICAgIGlmICggZXZlbnRzICkgeworICAgICAgICAgICAgZGVs
ZXRlIHBkYXRhQ3VyLmhhbmRsZTsKKyAgICAgICAgICAgIHBkYXRhQ3VyLmV2ZW50cyA9IHt9Owor
CisgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICBm
b3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0
eXBlIF1bIGkgXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIDIuIENvcHkgdXNlciBkYXRhCisgICAgaWYgKCBkYXRhVXNlci5o
YXNEYXRhKCBzcmMgKSApIHsKKyAgICAgICAgdWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNy
YyApOworICAgICAgICB1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApOwor
CisgICAgICAgIGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTsKKyAgICB9Cit9CisKKy8v
IEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0cworZnVuY3Rpb24gZml4SW5wdXQoIHNyYywg
ZGVzdCApIHsKKyAgICB2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7
CisKKyAgICAvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVk
IGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi4KKyAgICBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQi
ICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7CisgICAgICAgIGRlc3QuY2hl
Y2tlZCA9IHNyYy5jaGVja2VkOworCisgICAgLy8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3Rl
ZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlv
bnMKKyAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0g
InRleHRhcmVhIiApIHsKKyAgICAgICAgZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZh
bHVlOworICAgIH0KK30KKworZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNh
bGxiYWNrLCBpZ25vcmVkICkgeworCisgICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwor
ICAgIGFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7CisKKyAgICB2YXIgZnJhZ21lbnQs
IGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsCisgICAgICAgIGkgPSAwLAor
ICAgICAgICBsID0gY29sbGVjdGlvbi5sZW5ndGgsCisgICAgICAgIGlOb0Nsb25lID0gbCAtIDEs
CisgICAgICAgIHZhbHVlID0gYXJnc1sgMCBdLAorICAgICAgICBpc0Z1bmN0aW9uID0galF1ZXJ5
LmlzRnVuY3Rpb24oIHZhbHVlICk7CisKKyAgICAvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21l
bnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXQKKyAgICBpZiAoIGlzRnVuY3Rpb24g
fHwKKyAgICAgICAgICAgICggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJgor
ICAgICAgICAgICAgICAgICFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFs
dWUgKSApICkgeworICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5k
ZXggKSB7CisgICAgICAgICAgICB2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7Cisg
ICAgICAgICAgICBpZiAoIGlzRnVuY3Rpb24gKSB7CisgICAgICAgICAgICAgICAgYXJnc1sgMCBd
ID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTsK
KyAgICAgICAgfSApOworICAgIH0KKworICAgIGlmICggbCApIHsKKyAgICAgICAgZnJhZ21lbnQg
PSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFs
c2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTsKKyAgICAgICAgZmlyc3QgPSBmcmFnbWVudC5maXJz
dENoaWxkOworCisgICAgICAgIGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEg
KSB7CisgICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0OworICAgICAgICB9CisKKyAgICAgICAg
Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBl
bGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrCisgICAgICAgIGlmICggZmlyc3QgfHwgaWdu
b3JlZCApIHsKKyAgICAgICAgICAgIHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdt
ZW50LCAic2NyaXB0IiApLCBkaXNhYmxlU2NyaXB0ICk7CisgICAgICAgICAgICBoYXNTY3JpcHRz
ID0gc2NyaXB0cy5sZW5ndGg7CisKKyAgICAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJh
Z21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0KKyAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgdGhlIGZp
cnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAorICAgICAgICAgICAgLy8gYmVpbmcgZW1wdGllZCBp
bmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS4KKyAgICAgICAgICAgIGZv
ciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBub2RlID0gZnJhZ21lbnQ7CisK
KyAgICAgICAgICAgICAgICBpZiAoIGkgIT09IGlOb0Nsb25lICkgeworICAgICAgICAgICAgICAg
ICAgICBub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRl
ciByZXN0b3JhdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAoIGhhc1NjcmlwdHMgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9t
SlM8MgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2Up
IHRocm93cyBvbiBhbmNpZW50IFdlYktpdAorICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsICJzY3JpcHQiICkgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhbGxiYWNr
LmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIGhhc1NjcmlwdHMgKSB7CisgICAgICAgICAgICAgICAgZG9jID0gc2NyaXB0
c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDsKKworICAgICAgICAgICAgICAg
IC8vIFJlZW5hYmxlIHNjcmlwdHMKKyAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCBzY3JpcHRz
LCByZXN0b3JlU2NyaXB0ICk7CisKKyAgICAgICAgICAgICAgICAvLyBFdmFsdWF0ZSBleGVjdXRh
YmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uCisgICAgICAgICAgICAgICAg
Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAg
IG5vZGUgPSBzY3JpcHRzWyBpIF07CisgICAgICAgICAgICAgICAgICAgIGlmICggcnNjcmlwdFR5
cGUudGVzdCggbm9kZS50eXBlIHx8ICIiICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICFk
YXRhUHJpdi5hY2Nlc3MoIG5vZGUsICJnbG9iYWxFdmFsIiApICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkgeworCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG5vZGUuc3JjICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYg
bm90IHByZXNlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5fZXZh
bFVybCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9ldmFsVXJs
KCBub2RlLnNyYyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
Lmdsb2JhbEV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiIiAp
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gY29sbGVjdGlvbjsKK30KKworZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwg
a2VlcERhdGEgKSB7CisgICAgdmFyIG5vZGUsCisgICAgICAgIG5vZGVzID0gc2VsZWN0b3IgPyBq
UXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSwKKyAgICAgICAgaSA9IDA7CisK
KyAgICBmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CisgICAg
ICAgIGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAg
ICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCBub2RlLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICBpZiAoIGtlZXBEYXRhICYm
IGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3VtZW50LCBub2RlICkgKSB7CisgICAgICAg
ICAgICAgICAgc2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCAic2NyaXB0IiApICk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUg
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbGVtOworfQorCitqUXVlcnkuZXh0
ZW5kKCB7CisgICAgaHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHJl
dHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKKyAgICB9LAorCisg
ICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50
cyApIHsKKyAgICAgICAgdmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsCisgICAg
ICAgICAgICBjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksCisgICAgICAgICAgICBpblBh
Z2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworCisgICAg
ICAgIC8vIEZpeCBJRSBjbG9uaW5nIGlzc3VlcworICAgICAgICBpZiAoICFzdXBwb3J0Lm5vQ2xv
bmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAx
MSApICYmCisgICAgICAgICAgICAgICAgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgeworCisg
ICAgICAgICAgICAvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNv
bnM6IGh0dHA6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMgorICAgICAgICAgICAgZGVz
dEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOworICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBn
ZXRBbGwoIGVsZW0gKTsKKworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50
cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgZml4SW5wdXQoIHNyY0Vs
ZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhl
IGNsb25lCisgICAgICAgIGlmICggZGF0YUFuZEV2ZW50cyApIHsKKyAgICAgICAgICAgIGlmICgg
ZGVlcERhdGFBbmRFdmVudHMgKSB7CisgICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBzcmNF
bGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMg
PSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApOworCisgICAgICAgICAgICAgICAgZm9y
ICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVu
dHNbIGkgXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0
b3J5CisgICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsICJzY3JpcHQiICk7Cisg
ICAgICAgIGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7CisgICAgICAgICAgICBzZXRH
bG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCAic2NyaXB0
IiApICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQKKyAg
ICAgICAgcmV0dXJuIGNsb25lOworICAgIH0sCisKKyAgICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBl
bGVtcyApIHsKKyAgICAgICAgdmFyIGRhdGEsIGVsZW0sIHR5cGUsCisgICAgICAgICAgICBzcGVj
aWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsCisgICAgICAgICAgICBpID0gMDsKKworICAgICAg
ICBmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7Cisg
ICAgICAgICAgICBpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIGRhdGEuZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHNwZWNpYWxbIHR5cGUgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1v
dmUncyBvdmVyaGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlw
ZSwgZGF0YS5oYW5kbGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUtNDUrCisgICAgICAgICAgICAgICAgICAg
IC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3Jl
bW92ZQorICAgICAgICAgICAgICAgICAgICBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRl
ZmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggZWxlbVsgZGF0
YVVzZXIuZXhwYW5kbyBdICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IENo
cm9tZSA8PSAzNS00NSsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIHVuZGVmaW5lZCBp
bnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlCisgICAgICAgICAgICAgICAg
ICAgIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ICk7CisKK2pRdWVyeS5mbi5l
eHRlbmQoIHsKKworICAgIC8vIEtlZXAgZG9tTWFuaXAgZXhwb3NlZCB1bnRpbCAzLjAgKGdoLTIy
MjUpCisgICAgZG9tTWFuaXA6IGRvbU1hbmlwLAorCisgICAgZGV0YWNoOiBmdW5jdGlvbiggc2Vs
ZWN0b3IgKSB7CisgICAgICAgIHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7
CisgICAgfSwKKworICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICBy
ZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApOworICAgIH0sCisKKyAgICB0ZXh0OiBmdW5j
dGlvbiggdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2
YWx1ZSApIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KKyAgICAg
ICAgICAgICAgICBqUXVlcnkudGV4dCggdGhpcyApIDoKKyAgICAgICAgICAgICAgICB0aGlzLmVt
cHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5u
b2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09
PSA5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSApOworICAgICAgICB9
LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH0sCisKKyAgICBhcHBlbmQ6
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywg
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEg
fHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAg
ICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7
CisgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgcHJlcGVuZDogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBl
ID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgeworICAgICAgICAgICAgICAgIHZhciB0
YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTsKKyAgICAgICAgICAgICAg
ICB0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApOworICAgICAg
ICAgICAgfQorICAgICAgICB9ICk7CisgICAgfSwKKworICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxl
bSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5wYXJlbnROb2RlICkgeworICAgICAgICAgICAg
ICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBhZnRlcjogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgIGlmICggdGhpcy5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAg
IHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICBlbXB0eTogZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgaSA9IDA7CisKKyAgICAgICAg
Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAg
ICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBQcmV2
ZW50IG1lbW9yeSBsZWFrcworICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGdldEFs
bCggZWxlbSwgZmFsc2UgKSApOworCisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1h
aW5pbmcgbm9kZXMKKyAgICAgICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gIiI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisg
ICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsK
KyAgICAgICAgZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDog
ZGF0YUFuZEV2ZW50czsKKyAgICAgICAgZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2
ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzOworCisgICAg
ICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4galF1
ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApOworICAg
ICAgICB9ICk7CisgICAgfSwKKworICAgIGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAg
ICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAg
dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAg
ICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoOworCisgICAgICAgICAgICBpZiAoIHZhbHVlID09
PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZWxlbS5pbm5lckhUTUw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNl
ZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKKyAgICAg
ICAgICAgIGlmICggdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiAhcm5vSW5uZXJodG1sLnRl
c3QoIHZhbHVlICkgJiYKKyAgICAgICAgICAgICAgICAhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVj
KCB2YWx1ZSApIHx8IFsgIiIsICIiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHsKKworICAg
ICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7CisKKyAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBsOyBp
KysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBdIHx8IHt9Owor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJl
dmVudCBtZW1vcnkgbGVha3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5E
YXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbGVtLmlubmVySFRNTCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IDA7CisKKyAg
ICAgICAgICAgICAgICAvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwg
dXNlIHRoZSBmYWxsYmFjayBtZXRob2QKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHt9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOworICAgICAgICAgICAgfQorICAgICAg
ICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH0sCisKKyAgICByZXBs
YWNlV2l0aDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZ25vcmVkID0gW107CisKKyAgICAg
ICAgLy8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4
dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50CisgICAgICAgIHJldHVybiBkb21NYW5pcCgg
dGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBwYXJl
bnQgPSB0aGlzLnBhcmVudE5vZGU7CisKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmluQXJyYXko
IHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0
YSggZ2V0QWxsKCB0aGlzICkgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBjYWxsYmFj
ayBpbnZvY2F0aW9uCisgICAgICAgIH0sIGlnbm9yZWQgKTsKKyAgICB9Cit9ICk7CisKK2pRdWVy
eS5lYWNoKCB7CisgICAgYXBwZW5kVG86ICJhcHBlbmQiLAorICAgIHByZXBlbmRUbzogInByZXBl
bmQiLAorICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIsCisgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRl
ciIsCisgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRoIgorfSwgZnVuY3Rpb24oIG5hbWUsIG9y
aWdpbmFsICkgeworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkg
eworICAgICAgICB2YXIgZWxlbXMsCisgICAgICAgICAgICByZXQgPSBbXSwKKyAgICAgICAgICAg
IGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKKyAgICAgICAgICAgIGxhc3QgPSBpbnNlcnQu
bGVuZ3RoIC0gMSwKKyAgICAgICAgICAgIGkgPSAwOworCisgICAgICAgIGZvciAoIDsgaSA8PSBs
YXN0OyBpKysgKSB7CisgICAgICAgICAgICBlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhp
cy5jbG9uZSggdHJ1ZSApOworICAgICAgICAgICAgalF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmln
aW5hbCBdKCBlbGVtcyApOworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBRdFdlYktpdAorICAg
ICAgICAgICAgLy8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93
cworICAgICAgICAgICAgcHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTsKKyAgICB9OworfSApOwor
CisKK3ZhciBpZnJhbWUsCisgICAgZWxlbWRpc3BsYXkgPSB7CisKKyAgICAgICAgLy8gU3VwcG9y
dDogRmlyZWZveAorICAgICAgICAvLyBXZSBoYXZlIHRvIHByZS1kZWZpbmUgdGhlc2UgdmFsdWVz
IGZvciBGRiAoIzEwMjI3KQorICAgICAgICBIVE1MOiAiYmxvY2siLAorICAgICAgICBCT0RZOiAi
YmxvY2siCisgICAgfTsKKworLyoqCisgKiBSZXRyaWV2ZSB0aGUgYWN0dWFsIGRpc3BsYXkgb2Yg
YSBlbGVtZW50CisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBub2RlTmFtZSBvZiB0aGUgZWxlbWVu
dAorICogQHBhcmFtIHtPYmplY3R9IGRvYyBEb2N1bWVudCBvYmplY3QKKyAqLworCisvLyBDYWxs
ZWQgb25seSBmcm9tIHdpdGhpbiBkZWZhdWx0RGlzcGxheQorZnVuY3Rpb24gYWN0dWFsRGlzcGxh
eSggbmFtZSwgZG9jICkgeworICAgIHZhciBlbGVtID0galF1ZXJ5KCBkb2MuY3JlYXRlRWxlbWVu
dCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICksCisKKyAgICAgICAgZGlzcGxheSA9IGpR
dWVyeS5jc3MoIGVsZW1bIDAgXSwgImRpc3BsYXkiICk7CisKKyAgICAvLyBXZSBkb24ndCBoYXZl
IGFueSBkYXRhIHN0b3JlZCBvbiB0aGUgZWxlbWVudCwKKyAgICAvLyBzbyB1c2UgImRldGFjaCIg
bWV0aG9kIGFzIGZhc3Qgd2F5IHRvIGdldCByaWQgb2YgdGhlIGVsZW1lbnQKKyAgICBlbGVtLmRl
dGFjaCgpOworCisgICAgcmV0dXJuIGRpc3BsYXk7Cit9CisKKy8qKgorICogVHJ5IHRvIGRldGVy
bWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQKKyAqIEBwYXJhbSB7
U3RyaW5nfSBub2RlTmFtZQorICovCitmdW5jdGlvbiBkZWZhdWx0RGlzcGxheSggbm9kZU5hbWUg
KSB7CisgICAgdmFyIGRvYyA9IGRvY3VtZW50LAorICAgICAgICBkaXNwbGF5ID0gZWxlbWRpc3Bs
YXlbIG5vZGVOYW1lIF07CisKKyAgICBpZiAoICFkaXNwbGF5ICkgeworICAgICAgICBkaXNwbGF5
ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApOworCisgICAgICAgIC8vIElmIHRoZSBz
aW1wbGUgd2F5IGZhaWxzLCByZWFkIGZyb20gaW5zaWRlIGFuIGlmcmFtZQorICAgICAgICBpZiAo
IGRpc3BsYXkgPT09ICJub25lIiB8fCAhZGlzcGxheSApIHsKKworICAgICAgICAgICAgLy8gVXNl
IHRoZSBhbHJlYWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxlCisgICAgICAgICAgICBpZnJh
bWUgPSAoIGlmcmFtZSB8fCBqUXVlcnkoICI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0n
MCcgaGVpZ2h0PScwJy8+IiApICkKKyAgICAgICAgICAgICAgICAuYXBwZW5kVG8oIGRvYy5kb2N1
bWVudEVsZW1lbnQgKTsKKworICAgICAgICAgICAgLy8gQWx3YXlzIHdyaXRlIGEgbmV3IEhUTUwg
c2tlbGV0b24gc28gV2Via2l0IGFuZCBGaXJlZm94IGRvbid0IGNob2tlIG9uIHJldXNlCisgICAg
ICAgICAgICBkb2MgPSBpZnJhbWVbIDAgXS5jb250ZW50RG9jdW1lbnQ7CisKKyAgICAgICAgICAg
IC8vIFN1cHBvcnQ6IElFCisgICAgICAgICAgICBkb2Mud3JpdGUoKTsKKyAgICAgICAgICAgIGRv
Yy5jbG9zZSgpOworCisgICAgICAgICAgICBkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5h
bWUsIGRvYyApOworICAgICAgICAgICAgaWZyYW1lLmRldGFjaCgpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5CisgICAgICAgIGVsZW1k
aXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzcGxh
eTsKK30KK3ZhciBybWFyZ2luID0gKCAvXm1hcmdpbi8gKTsKKwordmFyIHJudW1ub25weCA9IG5l
dyBSZWdFeHAoICJeKCIgKyBwbnVtICsgIikoPyFweClbYS16JV0rJCIsICJpIiApOworCit2YXIg
Z2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUU8
PTExKywgRmlyZWZveDw9MzArICgjMTUwOTgsICMxNDE1MCkKKyAgICAgICAgLy8gSUUgdGhyb3dz
IG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzCisgICAgICAgIC8vIEZGIG1lYW53aGlsZSB0
aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCAiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRT
dHlsZSIKKyAgICAgICAgdmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7
CisKKyAgICAgICAgaWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7CisgICAgICAgICAgICB2
aWV3ID0gd2luZG93OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZpZXcuZ2V0Q29tcHV0
ZWRTdHlsZSggZWxlbSApOworICAgIH07CisKK3ZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9w
dGlvbnMsIGNhbGxiYWNrLCBhcmdzICkgeworICAgIHZhciByZXQsIG5hbWUsCisgICAgICAgIG9s
ZCA9IHt9OworCisgICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhl
IG5ldyBvbmVzCisgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworICAgICAgICBvbGRbIG5h
bWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0g
b3B0aW9uc1sgbmFtZSBdOworICAgIH0KKworICAgIHJldCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVt
LCBhcmdzIHx8IFtdICk7CisKKyAgICAvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKKyAgICBmb3Ig
KCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsg
bmFtZSBdOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9OworCisKK3ZhciBkb2N1bWVudEVs
ZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisKKworCisoIGZ1bmN0aW9uKCkgewor
ICAgIHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgcGl4ZWxNYXJn
aW5SaWdodFZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLAorICAgICAgICBjb250YWluZXIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLAorICAgICAgICBkaXYgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCAiZGl2IiApOworCisgICAgLy8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQg
KG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHMKKyAgICBpZiAoICFkaXYuc3R5bGUgKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTdXBwb3J0OiBJRTktMTErCisgICAgLy8gU3R5
bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4
KQorICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICJjb250ZW50LWJveCI7CisgICAgZGl2
LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gIiI7CisgICAgc3VwcG9y
dC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09ICJjb250ZW50
LWJveCI7CisKKyAgICBjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9ICJib3JkZXI6MDt3aWR0aDo4
cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4OyIgKworICAgICAgICAicGFkZGluZzowO21h
cmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlIjsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQoIGRpdiApOworCisgICAgLy8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNp
emluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0CisgICAgLy8gc28gdGhl
eSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRh
dGlvbi4KKyAgICBmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHsKKyAgICAgICAgZGl2LnN0
eWxlLmNzc1RleHQgPQorCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBGaXJlZm94PDI5LCBBbmRy
b2lkIDIuMworICAgICAgICAgICAgLy8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nCisgICAgICAg
ICAgICAiLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRl
ci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94OyIgKworICAgICAgICAgICAgInBvc2l0aW9uOnJl
bGF0aXZlO2Rpc3BsYXk6YmxvY2s7IiArCisgICAgICAgICAgICAibWFyZ2luOmF1dG87Ym9yZGVy
OjFweDtwYWRkaW5nOjFweDsiICsKKyAgICAgICAgICAgICJ0b3A6MSU7d2lkdGg6NTAlIjsKKyAg
ICAgICAgZGl2LmlubmVySFRNTCA9ICIiOworICAgICAgICBkb2N1bWVudEVsZW1lbnQuYXBwZW5k
Q2hpbGQoIGNvbnRhaW5lciApOworCisgICAgICAgIHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlKCBkaXYgKTsKKyAgICAgICAgcGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxl
LnRvcCAhPT0gIjElIjsKKyAgICAgICAgcmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gZGl2U3R5bGUu
bWFyZ2luTGVmdCA9PT0gIjJweCI7CisgICAgICAgIGJveFNpemluZ1JlbGlhYmxlVmFsID0gZGl2
U3R5bGUud2lkdGggPT09ICI0cHgiOworCisgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4w
IC0gNC4zIG9ubHkKKyAgICAgICAgLy8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2Vu
dGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0CisgICAgICAgIGRpdi5zdHls
ZS5tYXJnaW5SaWdodCA9ICI1MCUiOworICAgICAgICBwaXhlbE1hcmdpblJpZ2h0VmFsID0gZGl2
U3R5bGUubWFyZ2luUmlnaHQgPT09ICI0cHgiOworCisgICAgICAgIGRvY3VtZW50RWxlbWVudC5y
ZW1vdmVDaGlsZCggY29udGFpbmVyICk7CisgICAgfQorCisgICAgalF1ZXJ5LmV4dGVuZCggc3Vw
cG9ydCwgeworICAgICAgICBwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKKworICAgICAgICAg
ICAgLy8gVGhpcyB0ZXN0IGlzIGV4ZWN1dGVkIG9ubHkgb25jZSBidXQgd2Ugc3RpbGwgZG8gbWVt
b2l6aW5nCisgICAgICAgICAgICAvLyBzaW5jZSB3ZSBjYW4gdXNlIHRoZSBib3hTaXppbmdSZWxp
YWJsZSBwcmUtY29tcHV0aW5nLgorICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBpZiB0
aGUgdGVzdCB3YXMgYWxyZWFkeSBwZXJmb3JtZWQsIHRob3VnaC4KKyAgICAgICAgICAgIGNvbXB1
dGVTdHlsZVRlc3RzKCk7CisgICAgICAgICAgICByZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDsKKyAg
ICAgICAgfSwKKyAgICAgICAgYm94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgaWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkgeworICAgICAgICAgICAg
ICAgIGNvbXB1dGVTdHlsZVRlc3RzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7CisgICAgICAgIH0sCisgICAgICAgIHBpeGVsTWFyZ2lu
UmlnaHQ6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkIDQu
MC00LjMKKyAgICAgICAgICAgIC8vIFdlJ3JlIGNoZWNraW5nIGZvciBib3hTaXppbmdSZWxpYWJs
ZVZhbCBoZXJlIGluc3RlYWQgb2YgcGl4ZWxNYXJnaW5SaWdodFZhbAorICAgICAgICAgICAgLy8g
c2luY2UgdGhhdCBjb21wcmVzc2VzIGJldHRlciBhbmQgdGhleSdyZSBjb21wdXRlZCB0b2dldGhl
ciBhbnl3YXkuCisgICAgICAgICAgICBpZiAoIGJveFNpemluZ1JlbGlhYmxlVmFsID09IG51bGwg
KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBwaXhlbE1hcmdpblJpZ2h0VmFsOworICAgICAgICB9LAorICAg
ICAgICByZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAvLyBT
dXBwb3J0OiBJRSA8PTggb25seSwgQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMg
LSAzNworICAgICAgICAgICAgaWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkgewor
ICAgICAgICAgICAgICAgIGNvbXB1dGVTdHlsZVRlc3RzKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsOworICAgICAgICB9LAorICAgICAg
ICByZWxpYWJsZU1hcmdpblJpZ2h0OiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gU3Vw
cG9ydDogQW5kcm9pZCAyLjMKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxp
Y2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5jb3JyZWN0bHkKKyAgICAgICAgICAgIC8v
IGdldHMgY29tcHV0ZWQgbWFyZ2luLXJpZ2h0IGJhc2VkIG9uIHdpZHRoIG9mIGNvbnRhaW5lci4g
KCMzMzMzKQorICAgICAgICAgICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5
bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAgICAgICAvLyBU
aGlzIHN1cHBvcnQgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBvbmNlIHNvIG5vIG1lbW9pemlu
ZyBpcyBuZWVkZWQuCisgICAgICAgICAgICB2YXIgcmV0LAorICAgICAgICAgICAgICAgIG1hcmdp
bkRpdiA9IGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSAp
OworCisgICAgICAgICAgICAvLyBSZXNldCBDU1M6IGJveC1zaXppbmc7IGRpc3BsYXk7IG1hcmdp
bjsgYm9yZGVyOyBwYWRkaW5nCisgICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9
IGRpdi5zdHlsZS5jc3NUZXh0ID0KKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJv
aWQgMi4zCisgICAgICAgICAgICAgICAgLy8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nCisgICAg
ICAgICAgICAgICAgIi13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNv
bnRlbnQtYm94OyIgKworICAgICAgICAgICAgICAgICJkaXNwbGF5OmJsb2NrO21hcmdpbjowO2Jv
cmRlcjowO3BhZGRpbmc6MCI7CisgICAgICAgICAgICBtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmln
aHQgPSBtYXJnaW5EaXYuc3R5bGUud2lkdGggPSAiMCI7CisgICAgICAgICAgICBkaXYuc3R5bGUu
d2lkdGggPSAiMXB4IjsKKyAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCgg
Y29udGFpbmVyICk7CisKKyAgICAgICAgICAgIHJldCA9ICFwYXJzZUZsb2F0KCB3aW5kb3cuZ2V0
Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2ICkubWFyZ2luUmlnaHQgKTsKKworICAgICAgICAgICAg
ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTsKKyAgICAgICAgICAgIGRp
di5yZW1vdmVDaGlsZCggbWFyZ2luRGl2ICk7CisKKyAgICAgICAgICAgIHJldHVybiByZXQ7Cisg
ICAgICAgIH0KKyAgICB9ICk7Cit9ICkoKTsKKworCitmdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5h
bWUsIGNvbXB1dGVkICkgeworICAgIHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQs
CisgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKKworICAgIGNvbXB1dGVkID0gY29tcHV0ZWQg
fHwgZ2V0U3R5bGVzKCBlbGVtICk7CisgICAgcmV0ID0gY29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQ
cm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXSA6IHVuZGVmaW5lZDsKKwor
ICAgIC8vIFN1cHBvcnQ6IE9wZXJhIDEyLjF4IG9ubHkKKyAgICAvLyBGYWxsIGJhY2sgdG8gc3R5
bGUgZXZlbiB3aXRob3V0IGNvbXB1dGVkCisgICAgLy8gY29tcHV0ZWQgaXMgdW5kZWZpbmVkIGZv
ciBlbGVtcyBvbiBkb2N1bWVudCBmcmFnbWVudHMKKyAgICBpZiAoICggcmV0ID09PSAiIiB8fCBy
ZXQgPT09IHVuZGVmaW5lZCApICYmICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVu
dCwgZWxlbSApICkgeworICAgICAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsK
KyAgICB9CisKKyAgICAvLyBTdXBwb3J0OiBJRTkKKyAgICAvLyBnZXRQcm9wZXJ0eVZhbHVlIGlz
IG9ubHkgbmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSAoIzEyNTM3KQorICAgIGlmICggY29tcHV0
ZWQgKSB7CisKKyAgICAgICAgLy8gQSB0cmlidXRlIHRvIHRoZSAiYXdlc29tZSBoYWNrIGJ5IERl
YW4gRWR3YXJkcyIKKyAgICAgICAgLy8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFn
ZSBmb3Igc29tZSB2YWx1ZXMsCisgICAgICAgIC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxp
YWJseSBwaXhlbHMuCisgICAgICAgIC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQg
c3BlYzoKKyAgICAgICAgLy8gaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3Jlc29sdmVk
LXZhbHVlcworICAgICAgICBpZiAoICFzdXBwb3J0LnBpeGVsTWFyZ2luUmlnaHQoKSAmJiBybnVt
bm9ucHgudGVzdCggcmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CisKKyAgICAgICAg
ICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKyAgICAgICAgICAgIHdpZHRoID0g
c3R5bGUud2lkdGg7CisgICAgICAgICAgICBtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoOworICAg
ICAgICAgICAgbWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDsKKworICAgICAgICAgICAgLy8gUHV0
IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAorICAgICAgICAg
ICAgc3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0Owor
ICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7CisKKyAgICAgICAgICAgIC8vIFJldmVy
dCB0aGUgY2hhbmdlZCB2YWx1ZXMKKyAgICAgICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGg7Cisg
ICAgICAgICAgICBzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoOworICAgICAgICAgICAgc3R5bGUu
bWF4V2lkdGggPSBtYXhXaWR0aDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXQg
IT09IHVuZGVmaW5lZCA/CisKKyAgICAgICAgLy8gU3VwcG9ydDogSUU5LTExKworICAgICAgICAv
LyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLgorICAgICAgICByZXQgKyAi
IiA6CisgICAgICAgIHJldDsKK30KKworCitmdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlv
bkZuLCBob29rRm4gKSB7CisKKyAgICAvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9u
IHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLgorICAgIHJldHVybiB7CisgICAg
ICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIGNvbmRpdGlvbkZuKCkgKSB7
CisKKyAgICAgICAgICAgICAgICAvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3Np
YmxlIHRvIHVzZSBpdCBkdWUKKyAgICAgICAgICAgICAgICAvLyB0byBtaXNzaW5nIGRlcGVuZGVu
Y3kpLCByZW1vdmUgaXQuCisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZ2V0OworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSG9vayBu
ZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0
ZWQgYWdhaW4uCisgICAgICAgICAgICByZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5
KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKKwordmFyCisKKyAg
ICAvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlCisg
ICAgLy8gZXhjZXB0ICJ0YWJsZSIsICJ0YWJsZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCisg
ICAgLy8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3pp
bGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5CisgICAgcmRpc3BsYXlzd2FwID0gL14obm9u
ZXx0YWJsZSg/IS1jW2VhXSkuKykvLAorCisgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJhYnNv
bHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCisgICAgY3Nz
Tm9ybWFsVHJhbnNmb3JtID0geworICAgICAgICBsZXR0ZXJTcGFjaW5nOiAiMCIsCisgICAgICAg
IGZvbnRXZWlnaHQ6ICI0MDAiCisgICAgfSwKKworICAgIGNzc1ByZWZpeGVzID0gWyAiV2Via2l0
IiwgIk8iLCAiTW96IiwgIm1zIiBdLAorICAgIGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCAiZGl2IiApLnN0eWxlOworCisvLyBSZXR1cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVk
IHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5CitmdW5jdGlvbiB2ZW5k
b3JQcm9wTmFtZSggbmFtZSApIHsKKworICAgIC8vIFNob3J0Y3V0IGZvciBuYW1lcyB0aGF0IGFy
ZSBub3QgdmVuZG9yIHByZWZpeGVkCisgICAgaWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7Cisg
ICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIC8vIENoZWNrIGZvciB2ZW5kb3IgcHJl
Zml4ZWQgbmFtZXMKKyAgICB2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsg
bmFtZS5zbGljZSggMSApLAorICAgICAgICBpID0gY3NzUHJlZml4ZXMubGVuZ3RoOworCisgICAg
d2hpbGUgKCBpLS0gKSB7CisgICAgICAgIG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFt
ZTsKKyAgICAgICAgaWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7CisgICAgICAgICAgICByZXR1
cm4gbmFtZTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1i
ZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKKworICAgIC8vIEFueSByZWxhdGl2ZSAoKy8t
KSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9p
bnQKKyAgICB2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTsKKyAgICByZXR1cm4g
bWF0Y2hlcyA/CisKKyAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgInN1YnRyYWN0
IiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzCisgICAgICAgIE1hdGgubWF4KCAwLCBt
YXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgInB4
IiApIDoKKyAgICAgICAgdmFsdWU7Cit9CisKK2Z1bmN0aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0
KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3gsIHN0eWxlcyApIHsKKyAgICB2YXIgaSA9
IGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSA/CisKKyAg
ICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQg
YXVnbWVudGF0aW9uCisgICAgICAgIDQgOgorCisgICAgICAgIC8vIE90aGVyd2lzZSBpbml0aWFs
aXplIGZvciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXMKKyAgICAgICAgbmFtZSA9
PT0gIndpZHRoIiA/IDEgOiAwLAorCisgICAgICAgIHZhbCA9IDA7CisKKyAgICBmb3IgKCA7IGkg
PCA0OyBpICs9IDIgKSB7CisKKyAgICAgICAgLy8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFy
Z2luLCBzbyBhZGQgaXQgaWYgd2Ugd2FudCBpdAorICAgICAgICBpZiAoIGV4dHJhID09PSAibWFy
Z2luIiApIHsKKyAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNz
c0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgg
aXNCb3JkZXJCb3ggKSB7CisKKyAgICAgICAgICAgIC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFk
ZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29udGVudAorICAgICAgICAgICAgaWYgKCBl
eHRyYSA9PT0gImNvbnRlbnQiICkgeworICAgICAgICAgICAgICAgIHZhbCAtPSBqUXVlcnkuY3Nz
KCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGJv
cmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVyCisgICAgICAgICAgICBpZiAoIGV4dHJh
ICE9PSAibWFyZ2luIiApIHsKKyAgICAgICAgICAgICAgICB2YWwgLT0galF1ZXJ5LmNzcyggZWxl
bSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIsIHRydWUsIHN0eWxlcyApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBBdCB0aGlz
IHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBhZGQgcGFkZGluZworICAgICAgICAgICAg
dmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVl
LCBzdHlsZXMgKTsKKworICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3Qg
Y29udGVudCBub3IgcGFkZGluZywgc28gYWRkIGJvcmRlcgorICAgICAgICAgICAgaWYgKCBleHRy
YSAhPT0gInBhZGRpbmciICkgeworICAgICAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBl
bGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsgIldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQor
CitmdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHsKKworICAg
IC8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRo
ZSBib3JkZXItYm94IHZhbHVlCisgICAgdmFyIHZhbHVlSXNCb3JkZXJCb3ggPSB0cnVlLAorICAg
ICAgICB2YWwgPSBuYW1lID09PSAid2lkdGgiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zm
c2V0SGVpZ2h0LAorICAgICAgICBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSwKKyAgICAgICAg
aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiwgZmFsc2UsIHN0eWxl
cyApID09PSAiYm9yZGVyLWJveCI7CisKKyAgICAvLyBTb21lIG5vbi1odG1sIGVsZW1lbnRzIHJl
dHVybiB1bmRlZmluZWQgZm9yIG9mZnNldFdpZHRoLCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmlu
ZWQKKyAgICAvLyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNn
aT9pZD02NDkyODUKKyAgICAvLyBNYXRoTUwgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3Jn
L3Nob3dfYnVnLmNnaT9pZD00OTE2NjgKKyAgICBpZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxs
ICkgeworCisgICAgICAgIC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQg
Y3NzIGlmIG5lY2Vzc2FyeQorICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxl
cyApOworICAgICAgICBpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7CisgICAgICAgICAg
ICB2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF07CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21w
dXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVyZSBhbmQgcmV0dXJuLgorICAgICAgICBp
ZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB2YWw7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBmb3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIg
d2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlcworICAgICAgICAvLyBmb3IgZ2V0Q29tcHV0
ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlCisg
ICAgICAgIHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJgorICAgICAgICAgICAgKCBz
dXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0g
KTsKKworICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRy
YQorICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOworICAgIH0KKworICAgIC8v
IFVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZh
bnQgc3R5bGVzCisgICAgcmV0dXJuICggdmFsICsKKyAgICAgICAgYXVnbWVudFdpZHRoT3JIZWln
aHQoCisgICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIGV4
dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorICAgICAgICAg
ICAgdmFsdWVJc0JvcmRlckJveCwKKyAgICAgICAgICAgIHN0eWxlcworICAgICAgICApCisgICAg
KSArICJweCI7Cit9CisKK2Z1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKKyAg
ICB2YXIgZGlzcGxheSwgZWxlbSwgaGlkZGVuLAorICAgICAgICB2YWx1ZXMgPSBbXSwKKyAgICAg
ICAgaW5kZXggPSAwLAorICAgICAgICBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CisKKyAgICBm
b3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICBlbGVtID0gZWxlbWVu
dHNbIGluZGV4IF07CisgICAgICAgIGlmICggIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2
LmdldCggZWxlbSwgIm9sZGRpc3BsYXkiICk7CisgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxl
LmRpc3BsYXk7CisgICAgICAgIGlmICggc2hvdyApIHsKKworICAgICAgICAgICAgLy8gUmVzZXQg
dGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVudCB0byBsZWFybiBpZiBpdCBpcworICAg
ICAgICAgICAgLy8gYmVpbmcgaGlkZGVuIGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdAorICAgICAg
ICAgICAgaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRpc3BsYXkgPT09ICJub25lIiApIHsKKyAg
ICAgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdp
dGggZGlzcGxheTogbm9uZQorICAgICAgICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRl
dmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKKyAgICAgICAgICAgIC8vIGZvciBzdWNo
IGFuIGVsZW1lbnQKKyAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAm
JiBpc0hpZGRlbiggZWxlbSApICkgeworICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9
IGRhdGFQcml2LmFjY2VzcygKKyAgICAgICAgICAgICAgICAgICAgZWxlbSwKKyAgICAgICAgICAg
ICAgICAgICAgIm9sZGRpc3BsYXkiLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RGlzcGxh
eSggZWxlbS5ub2RlTmFtZSApCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhpZGRlbiA9IGlzSGlkZGVuKCBlbGVtICk7CisK
KyAgICAgICAgICAgIGlmICggZGlzcGxheSAhPT0gIm5vbmUiIHx8ICFoaWRkZW4gKSB7CisgICAg
ICAgICAgICAgICAgZGF0YVByaXYuc2V0KAorICAgICAgICAgICAgICAgICAgICBlbGVtLAorICAg
ICAgICAgICAgICAgICAgICAib2xkZGlzcGxheSIsCisgICAgICAgICAgICAgICAgICAgIGhpZGRl
biA/IGRpc3BsYXkgOiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKQorICAgICAgICAgICAg
ICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhl
IGRpc3BsYXkgb2YgbW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAorICAgIC8v
IHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3cKKyAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4
IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07
CisgICAgICAgIGlmICggIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5v
bmUiIHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgKSB7CisgICAgICAgICAgICBlbGVtLnN0
eWxlLmRpc3BsYXkgPSBzaG93ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVsZW1lbnRzOworfQorCitqUXVlcnkuZXh0ZW5k
KCB7CisKKyAgICAvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcg
dGhlIGRlZmF1bHQKKyAgICAvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5
bGUgcHJvcGVydHkKKyAgICBjc3NIb29rczogeworICAgICAgICBvcGFjaXR5OiB7CisgICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIGNvbXB1dGVkICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5CisgICAgICAgICAgICAgICAgICAgIHZh
ciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiApOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gRG9uJ3QgYXV0b21hdGljYWxseSBh
ZGQgInB4IiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzCisgICAgY3NzTnVt
YmVyOiB7CisgICAgICAgICJhbmltYXRpb25JdGVyYXRpb25Db3VudCI6IHRydWUsCisgICAgICAg
ICJjb2x1bW5Db3VudCI6IHRydWUsCisgICAgICAgICJmaWxsT3BhY2l0eSI6IHRydWUsCisgICAg
ICAgICJmbGV4R3JvdyI6IHRydWUsCisgICAgICAgICJmbGV4U2hyaW5rIjogdHJ1ZSwKKyAgICAg
ICAgImZvbnRXZWlnaHQiOiB0cnVlLAorICAgICAgICAibGluZUhlaWdodCI6IHRydWUsCisgICAg
ICAgICJvcGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgIm9yZGVyIjogdHJ1ZSwKKyAgICAgICAgIm9y
cGhhbnMiOiB0cnVlLAorICAgICAgICAid2lkb3dzIjogdHJ1ZSwKKyAgICAgICAgInpJbmRleCI6
IHRydWUsCisgICAgICAgICJ6b29tIjogdHJ1ZQorICAgIH0sCisKKyAgICAvLyBBZGQgaW4gcHJv
cGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCisgICAgLy8gc2V0dGlu
ZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQorICAgIGNzc1Byb3BzOiB7CisgICAgICAgICJmbG9hdCI6
ICJjc3NGbG9hdCIKKyAgICB9LAorCisgICAgLy8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3Bl
cnR5IG9uIGEgRE9NIE5vZGUKKyAgICBzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVl
LCBleHRyYSApIHsKKworICAgICAgICAvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNv
bW1lbnQgbm9kZXMKKyAgICAgICAgaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5n
IHdpdGggdGhlIHJpZ2h0IG5hbWUKKyAgICAgICAgdmFyIHJldCwgdHlwZSwgaG9va3MsCisgICAg
ICAgICAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKKyAgICAgICAgICAg
IHN0eWxlID0gZWxlbS5zdHlsZTsKKworICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBv
cmlnTmFtZSBdIHx8CisgICAgICAgICAgICAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9
IHZlbmRvclByb3BOYW1lKCBvcmlnTmFtZSApIHx8IG9yaWdOYW1lICk7CisKKyAgICAgICAgLy8g
R2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNp
b24KKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3Nz
SG9va3NbIG9yaWdOYW1lIF07CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBh
IHZhbHVlCisgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
IHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgIis9IiBvciAi
LT0iIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KQorICAgICAgICAgICAgaWYgKCB0eXBlID09
PSAic3RyaW5nIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBd
ICkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQg
KTsKKworICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1ZyAjOTIzNworICAgICAgICAgICAgICAg
IHR5cGUgPSAibnVtYmVyIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNikKKyAgICAgICAg
ICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBhIG51bWJl
ciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJv
cGVydGllcykKKyAgICAgICAgICAgIGlmICggdHlwZSA9PT0gIm51bWJlciIgKSB7CisgICAgICAg
ICAgICAgICAgdmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsg
b3JpZ05hbWUgXSA/ICIiIDogInB4IiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBTdXBwb3J0OiBJRTktMTErCisgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZm
ZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzCisgICAgICAgICAgICBpZiAoICFzdXBwb3J0LmNs
ZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gIiIgJiYgbmFtZS5pbmRleE9mKCAiYmFja2dyb3Vu
ZCIgKSA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gImluaGVyaXQi
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVk
LCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUK
KyAgICAgICAgICAgIGlmICggIWhvb2tzIHx8ICEoICJzZXQiIGluIGhvb2tzICkgfHwKKyAgICAg
ICAgICAgICAgICAoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9
PSB1bmRlZmluZWQgKSB7CisKKyAgICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgLy8gSWYg
YSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJl
CisgICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmCisgICAgICAgICAg
ICAgICAgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVm
aW5lZCApIHsKKworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5
bGUgb2JqZWN0CisgICAgICAgICAgICByZXR1cm4gc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICBjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkg
eworICAgICAgICB2YXIgdmFsLCBudW0sIGhvb2tzLAorICAgICAgICAgICAgb3JpZ05hbWUgPSBq
UXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Un
cmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisgICAgICAgIG5hbWUgPSBqUXVlcnkuY3Nz
UHJvcHNbIG9yaWdOYW1lIF0gfHwKKyAgICAgICAgICAgICggalF1ZXJ5LmNzc1Byb3BzWyBvcmln
TmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1lICkgfHwgb3JpZ05hbWUgKTsKKworICAg
ICAgICAvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1l
CisgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hv
b2tzWyBvcmlnTmFtZSBdOworCisgICAgICAgIC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0
IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisgICAgICAgIGlmICggaG9va3MgJiYgImdl
dCIgaW4gaG9va3MgKSB7CisgICAgICAgICAgICB2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUs
IGV4dHJhICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRv
IGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdAorICAgICAgICBpZiAoIHZh
bCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1l
LCBzdHlsZXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbnZlcnQgIm5vcm1hbCIgdG8g
Y29tcHV0ZWQgdmFsdWUKKyAgICAgICAgaWYgKCB2YWwgPT09ICJub3JtYWwiICYmIG5hbWUgaW4g
Y3NzTm9ybWFsVHJhbnNmb3JtICkgeworICAgICAgICAgICAgdmFsID0gY3NzTm9ybWFsVHJhbnNm
b3JtWyBuYW1lIF07CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIG51bWVyaWMgaWYgZm9y
Y2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWMKKyAg
ICAgICAgaWYgKCBleHRyYSA9PT0gIiIgfHwgZXh0cmEgKSB7CisgICAgICAgICAgICBudW0gPSBw
YXJzZUZsb2F0KCB2YWwgKTsKKyAgICAgICAgICAgIHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBp
c0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdmFsOworICAgIH0KK30gKTsKKworalF1ZXJ5LmVhY2goIFsgImhlaWdodCIsICJ3aWR0aCIg
XSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgalF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7
CisgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHsKKyAgICAg
ICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBDZXJ0YWluIGVs
ZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW0K
KyAgICAgICAgICAgICAgICAvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0
eWxlIHRoYXQgd291bGQgYmVuZWZpdAorICAgICAgICAgICAgICAgIHJldHVybiByZGlzcGxheXN3
YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgKSAmJgorICAgICAgICAgICAg
ICAgICAgICBlbGVtLm9mZnNldFdpZHRoID09PSAwID8KKyAgICAgICAgICAgICAgICAgICAgICAg
IHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldFdp
ZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkgeworICAg
ICAgICAgICAgdmFyIG1hdGNoZXMsCisgICAgICAgICAgICAgICAgc3R5bGVzID0gZXh0cmEgJiYg
Z2V0U3R5bGVzKCBlbGVtICksCisgICAgICAgICAgICAgICAgc3VidHJhY3QgPSBleHRyYSAmJiBh
dWdtZW50V2lkdGhPckhlaWdodCgKKyAgICAgICAgICAgICAgICAgICAgZWxlbSwKKyAgICAgICAg
ICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEsCisgICAgICAgICAg
ICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sICJib3hTaXppbmciLCBmYWxzZSwgc3R5bGVzICkg
PT09ICJib3JkZXItYm94IiwKKyAgICAgICAgICAgICAgICAgICAgc3R5bGVzCisgICAgICAgICAg
ICAgICAgKTsKKworICAgICAgICAgICAgLy8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRq
dXN0bWVudCBpcyBuZWVkZWQKKyAgICAgICAgICAgIGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVz
ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYKKyAgICAgICAgICAgICAgICAoIG1hdGNoZXNb
IDMgXSB8fCAicHgiICkgIT09ICJweCIgKSB7CisKKyAgICAgICAgICAgICAgICBlbGVtLnN0eWxl
WyBuYW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5jc3MoIGVs
ZW0sIG5hbWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHNldFBvc2l0
aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTsKKyAgICAgICAgfQorICAgIH07Cit9
ICk7CisKK2pRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0
LnJlbGlhYmxlTWFyZ2luTGVmdCwKKyAgICBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Cisg
ICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisgICAgICAgICAgICByZXR1cm4gKCBwYXJzZUZsb2F0
KCBjdXJDU1MoIGVsZW0sICJtYXJnaW5MZWZ0IiApICkgfHwKKyAgICAgICAgICAgICAgICBlbGVt
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLQorICAgICAgICAgICAgICAgICAgICBzd2Fw
KCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OworICAgICAg
ICAgICAgICAgICAgICB9ICkKKyAgICAgICAgICAgICAgICApICsgInB4IjsKKyAgICAgICAgfQor
ICAgIH0KKyk7CisKKy8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCitqUXVlcnkuY3NzSG9va3MubWFy
Z2luUmlnaHQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCwKKyAg
ICBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgIGlmICggY29tcHV0ZWQgKSB7
CisgICAgICAgICAgICByZXR1cm4gc3dhcCggZWxlbSwgeyAiZGlzcGxheSI6ICJpbmxpbmUtYmxv
Y2siIH0sCisgICAgICAgICAgICAgICAgY3VyQ1NTLCBbIGVsZW0sICJtYXJnaW5SaWdodCIgXSAp
OworICAgICAgICB9CisgICAgfQorKTsKKworLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5p
bWF0ZSB0byBleHBhbmQgcHJvcGVydGllcworalF1ZXJ5LmVhY2goIHsKKyAgICBtYXJnaW46ICIi
LAorICAgIHBhZGRpbmc6ICIiLAorICAgIGJvcmRlcjogIldpZHRoIgorfSwgZnVuY3Rpb24oIHBy
ZWZpeCwgc3VmZml4ICkgeworICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0g
PSB7CisgICAgICAgIGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgdmFy
IGkgPSAwLAorICAgICAgICAgICAgICAgIGV4cGFuZGVkID0ge30sCisKKyAgICAgICAgICAgICAg
ICAvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmcKKyAgICAgICAgICAg
ICAgICBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZS5zcGxpdCggIiAi
ICkgOiBbIHZhbHVlIF07CisKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IDQ7IGkrKyApIHsKKyAg
ICAgICAgICAgICAgICBleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXgg
XSA9CisgICAgICAgICAgICAgICAgICAgIHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwg
cGFydHNbIDAgXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cGFuZGVk
OworICAgICAgICB9CisgICAgfTsKKworICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkg
KSB7CisgICAgICAgIGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0
UG9zaXRpdmVOdW1iZXI7CisgICAgfQorfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAg
Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBhY2Nlc3MoIHRo
aXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBzdHls
ZXMsIGxlbiwKKyAgICAgICAgICAgICAgICBtYXAgPSB7fSwKKyAgICAgICAgICAgICAgICBpID0g
MDsKKworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggbmFtZSApICkgeworICAgICAg
ICAgICAgICAgIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApOworICAgICAgICAgICAgICAgIGxl
biA9IG5hbWUubGVuZ3RoOworCisgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysg
KSB7CisgICAgICAgICAgICAgICAgICAgIG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBl
bGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWFwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxl
KCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoKKyAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVt
LCBuYW1lICk7CisgICAgICAgIH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSAp
OworICAgIH0sCisgICAgc2hvdzogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBzaG93SGlk
ZSggdGhpcywgdHJ1ZSApOworICAgIH0sCisgICAgaGlkZTogZnVuY3Rpb24oKSB7CisgICAgICAg
IHJldHVybiBzaG93SGlkZSggdGhpcyApOworICAgIH0sCisgICAgdG9nZ2xlOiBmdW5jdGlvbigg
c3RhdGUgKSB7CisgICAgICAgIGlmICggdHlwZW9mIHN0YXRlID09PSAiYm9vbGVhbiIgKSB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBpZiAoIGlzSGlkZGVuKCB0aGlzICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0
aGlzICkuc2hvdygpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkoIHRoaXMgKS5oaWRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9Cit9
ICk7CisKKworZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5n
ICkgeworICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMs
IHByb3AsIGVuZCwgZWFzaW5nICk7Cit9CitqUXVlcnkuVHdlZW4gPSBUd2VlbjsKKworVHdlZW4u
cHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBUd2VlbiwKKyAgICBpbml0OiBmdW5jdGlv
biggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7CisgICAgICAgIHRo
aXMuZWxlbSA9IGVsZW07CisgICAgICAgIHRoaXMucHJvcCA9IHByb3A7CisgICAgICAgIHRoaXMu
ZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7CisgICAgICAgIHRoaXMu
b3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMu
Y3VyKCk7CisgICAgICAgIHRoaXMuZW5kID0gZW5kOworICAgICAgICB0aGlzLnVuaXQgPSB1bml0
IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7CisgICAgfSwKKyAg
ICBjdXI6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3Nb
IHRoaXMucHJvcCBdOworCisgICAgICAgIHJldHVybiBob29rcyAmJiBob29rcy5nZXQgPworICAg
ICAgICAgICAgaG9va3MuZ2V0KCB0aGlzICkgOgorICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tz
Ll9kZWZhdWx0LmdldCggdGhpcyApOworICAgIH0sCisgICAgcnVuOiBmdW5jdGlvbiggcGVyY2Vu
dCApIHsKKyAgICAgICAgdmFyIGVhc2VkLAorICAgICAgICAgICAgaG9va3MgPSBUd2Vlbi5wcm9w
SG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9u
ICkgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMu
ZWFzaW5nIF0oCisgICAgICAgICAgICAgICAgcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9u
ICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCisgICAgICAgICAgICApOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCAp
ICogZWFzZWQgKyB0aGlzLnN0YXJ0OworCisgICAgICAgIGlmICggdGhpcy5vcHRpb25zLnN0ZXAg
KSB7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMu
bm93LCB0aGlzICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tzICYmIGhvb2tzLnNl
dCApIHsKKyAgICAgICAgICAgIGhvb2tzLnNldCggdGhpcyApOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK307CisKK1R3ZWVuLnByb3RvdHlwZS5p
bml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKKworVHdlZW4ucHJvcEhvb2tzID0gewor
ICAgIF9kZWZhdWx0OiB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIHR3ZWVuICkgeworICAgICAg
ICAgICAgdmFyIHJlc3VsdDsKKworICAgICAgICAgICAgLy8gVXNlIGEgcHJvcGVydHkgb24gdGhl
IGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCwKKyAgICAgICAg
ICAgIC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBl
eGlzdHMuCisgICAgICAgICAgICBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHwKKyAg
ICAgICAgICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5l
bGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3
aWxsIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgIC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFu
ZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuCisgICAgICAgICAgICAv
LyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7CisgICAg
ICAgICAgICAvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1
cm5lZCBhcy1pcy4KKyAgICAgICAgICAgIHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0s
IHR3ZWVuLnByb3AsICIiICk7CisKKyAgICAgICAgICAgIC8vIEVtcHR5IHN0cmluZ3MsIG51bGws
IHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMC4KKyAgICAgICAgICAgIHJl
dHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6IHJlc3VsdDsKKyAgICAgICAg
fSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CisKKyAgICAgICAgICAgIC8vIFVz
ZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LgorICAgICAgICAgICAgLy8gVXNlIGNzc0hvb2sg
aWYgaXRzIHRoZXJlLgorICAgICAgICAgICAgLy8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5k
IHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIGlmICgg
alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnku
Znguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOworICAgICAgICAgICAgfSBlbHNlIGlmICgg
dHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAgICAgICggdHdlZW4uZWxl
bS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8CisgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7CisgICAg
ICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5u
b3cgKyB0d2Vlbi51bml0ICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK307CisKKy8vIFN1cHBvcnQ6IElFOQorLy8gUGFuaWMgYmFzZWQgYXBw
cm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzCitUd2Vlbi5wcm9w
SG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7CisgICAgc2V0
OiBmdW5jdGlvbiggdHdlZW4gKSB7CisgICAgICAgIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAm
JiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vl
bi5wcm9wIF0gPSB0d2Vlbi5ub3c7CisgICAgICAgIH0KKyAgICB9Cit9OworCitqUXVlcnkuZWFz
aW5nID0geworICAgIGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7CisgICAgICAgIHJldHVybiBwOwor
ICAgIH0sCisgICAgc3dpbmc6IGZ1bmN0aW9uKCBwICkgeworICAgICAgICByZXR1cm4gMC41IC0g
TWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyOworICAgIH0sCisgICAgX2RlZmF1bHQ6ICJzd2lu
ZyIKK307CisKK2pRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OworCisvLyBCYWNrIENv
bXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludAoralF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKKworCisKKwor
dmFyCisgICAgZnhOb3csIHRpbWVySWQsCisgICAgcmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93
fGhpZGUpJC8sCisgICAgcnJ1biA9IC9xdWV1ZUhvb2tzJC87CisKKy8vIEFuaW1hdGlvbnMgY3Jl
YXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9uIGNyZWF0
ZUZ4Tm93KCkgeworICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ZnhOb3cgPSB1bmRlZmluZWQ7CisgICAgfSApOworICAgIHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5
Lm5vdygpICk7Cit9CisKKy8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRh
cmQgYW5pbWF0aW9uCitmdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgeworICAg
IHZhciB3aGljaCwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5
cGUgfTsKKworICAgIC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBk
byBhbGwgY3NzRXhwYW5kIHZhbHVlcywKKyAgICAvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAy
IHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodAorICAgIGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVX
aWR0aCA/IDEgOiAwOworICAgIGZvciAoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRlV2lkdGgg
KSB7CisgICAgICAgIHdoaWNoID0gY3NzRXhwYW5kWyBpIF07CisgICAgICAgIGF0dHJzWyAibWFy
Z2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7CisgICAg
fQorCisgICAgaWYgKCBpbmNsdWRlV2lkdGggKSB7CisgICAgICAgIGF0dHJzLm9wYWNpdHkgPSBh
dHRycy53aWR0aCA9IHR5cGU7CisgICAgfQorCisgICAgcmV0dXJuIGF0dHJzOworfQorCitmdW5j
dGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHsKKyAgICB2YXIgdHdl
ZW4sCisgICAgICAgIGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8
IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbICIqIiBdICksCisgICAgICAgIGluZGV4
ID0gMCwKKyAgICAgICAgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7CisgICAgZm9yICggOyBp
bmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgaWYgKCAoIHR3ZWVuID0gY29sbGVj
dGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHsKKworICAg
ICAgICAgICAgLy8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHkKKyAgICAgICAgICAgIHJl
dHVybiB0d2VlbjsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gZGVmYXVsdFByZWZp
bHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7CisgICAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1
ZSAqLworICAgIHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCB0d2VlbiwgaG9va3MsIG9sZGZpcmUs
IGRpc3BsYXksIGNoZWNrRGlzcGxheSwKKyAgICAgICAgYW5pbSA9IHRoaXMsCisgICAgICAgIG9y
aWcgPSB7fSwKKyAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlLAorICAgICAgICBoaWRkZW4gPSBl
bGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICksCisgICAgICAgIGRhdGFTaG93ID0gZGF0
YVByaXYuZ2V0KCBlbGVtLCAiZnhzaG93IiApOworCisgICAgLy8gSGFuZGxlIHF1ZXVlOiBmYWxz
ZSBwcm9taXNlcworICAgIGlmICggIW9wdHMucXVldWUgKSB7CisgICAgICAgIGhvb2tzID0galF1
ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCAiZngiICk7CisgICAgICAgIGlmICggaG9va3MudW5xdWV1
ZWQgPT0gbnVsbCApIHsKKyAgICAgICAgICAgIGhvb2tzLnVucXVldWVkID0gMDsKKyAgICAgICAg
ICAgIG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlOworICAgICAgICAgICAgaG9va3MuZW1wdHku
ZmlyZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggIWhvb2tzLnVucXVldWVk
ICkgeworICAgICAgICAgICAgICAgICAgICBvbGRmaXJlKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBob29rcy51bnF1ZXVlZCsrOworCisg
ICAgICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gRW5zdXJl
IHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXMKKyAg
ICAgICAgICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBob29r
cy51bnF1ZXVlZC0tOworICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwg
ImZ4IiApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfSApOworICAg
IH0KKworICAgIC8vIEhlaWdodC93aWR0aCBvdmVyZmxvdyBwYXNzCisgICAgaWYgKCBlbGVtLm5v
ZGVUeXBlID09PSAxICYmICggImhlaWdodCIgaW4gcHJvcHMgfHwgIndpZHRoIiBpbiBwcm9wcyAp
ICkgeworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgc25lYWtzIG91dAorICAg
ICAgICAvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFOS0xMCBk
byBub3QKKyAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVy
Zmxvd1ggYW5kCisgICAgICAgIC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVl
CisgICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxv
d1gsIHN0eWxlLm92ZXJmbG93WSBdOworCisgICAgICAgIC8vIFNldCBkaXNwbGF5IHByb3BlcnR5
IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCisgICAgICAgIC8vIGFuaW1hdGlvbnMg
b24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQK
KyAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApOworCisgICAg
ICAgIC8vIFRlc3QgZGVmYXVsdCBkaXNwbGF5IGlmIGRpc3BsYXkgaXMgY3VycmVudGx5ICJub25l
IgorICAgICAgICBjaGVja0Rpc3BsYXkgPSBkaXNwbGF5ID09PSAibm9uZSIgPworICAgICAgICAg
ICAgZGF0YVByaXYuZ2V0KCBlbGVtLCAib2xkZGlzcGxheSIgKSB8fCBkZWZhdWx0RGlzcGxheSgg
ZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheTsKKworICAgICAgICBpZiAoIGNoZWNrRGlzcGxheSA9
PT0gImlubGluZSIgJiYgalF1ZXJ5LmNzcyggZWxlbSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7
CisgICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIG9wdHMub3ZlcmZsb3cgKSB7CisgICAgICAgIHN0eWxlLm92ZXJm
bG93ID0gImhpZGRlbiI7CisgICAgICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdOworICAgICAgICAgICAg
c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdOworICAgICAgICAgICAgc3R5bGUu
b3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdOworICAgICAgICB9ICk7CisgICAgfQorCisg
ICAgLy8gc2hvdy9oaWRlIHBhc3MKKyAgICBmb3IgKCBwcm9wIGluIHByb3BzICkgeworICAgICAg
ICB2YWx1ZSA9IHByb3BzWyBwcm9wIF07CisgICAgICAgIGlmICggcmZ4dHlwZXMuZXhlYyggdmFs
dWUgKSApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgcHJvcCBdOworICAgICAgICAgICAg
dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKKyAgICAgICAgICAgIGlmICgg
dmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7CisKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhU2hvdyBsZWZ0IG92ZXIgZnJvbSBhIHN0b3BwZWQgaGlk
ZSBvciBzaG93CisgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGFyZSBnb2luZyB0byBwcm9jZWVk
IHdpdGggc2hvdywgd2Ugc2hvdWxkIHByZXRlbmQgdG8gYmUgaGlkZGVuCisgICAgICAgICAgICAg
ICAgaWYgKCB2YWx1ZSA9PT0gInNob3ciICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0g
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgaGlkZGVuID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcmlnWyBwcm9wIF0g
PSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJv
cCApOworCisgICAgICAgIC8vIEFueSBub24tZnggdmFsdWUgc3RvcHMgdXMgZnJvbSByZXN0b3Jp
bmcgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGRpc3BsYXkgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoICFq
UXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkgeworICAgICAgICBpZiAoIGRhdGFTaG93ICkg
eworICAgICAgICAgICAgaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKKyAgICAgICAgICAg
ICAgICBoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgImZ4
c2hvdyIsIHt9ICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdG9yZSBzdGF0ZSBpZiBpdHMg
dG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgpLnRvZ2dsZSgpIHRvICJyZXZlcnNlIgorICAgICAgICBp
ZiAoIHRvZ2dsZSApIHsKKyAgICAgICAgICAgIGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCBoaWRkZW4gKSB7CisgICAgICAgICAgICBqUXVlcnkoIGVs
ZW0gKS5zaG93KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbmltLmRvbmUoIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggZWxlbSApLmhpZGUoKTsKKyAgICAg
ICAgICAgIH0gKTsKKyAgICAgICAgfQorICAgICAgICBhbmltLmRvbmUoIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgdmFyIHByb3A7CisKKyAgICAgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxl
bSwgImZ4c2hvdyIgKTsKKyAgICAgICAgICAgIGZvciAoIHByb3AgaW4gb3JpZyApIHsKKyAgICAg
ICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOworICAg
ICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgICAgIGZvciAoIHByb3AgaW4gb3JpZyApIHsK
KyAgICAgICAgICAgIHR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9w
IF0gOiAwLCBwcm9wLCBhbmltICk7CisKKyAgICAgICAgICAgIGlmICggISggcHJvcCBpbiBkYXRh
U2hvdyApICkgeworICAgICAgICAgICAgICAgIGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFy
dDsKKyAgICAgICAgICAgICAgICBpZiAoIGhpZGRlbiApIHsKKyAgICAgICAgICAgICAgICAgICAg
dHdlZW4uZW5kID0gdHdlZW4uc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0
ID0gcHJvcCA9PT0gIndpZHRoIiB8fCBwcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgLy8gSWYgdGhpcyBp
cyBhIG5vb3AgbGlrZSAuaGlkZSgpLmhpZGUoKSwgcmVzdG9yZSBhbiBvdmVyd3JpdHRlbiBkaXNw
bGF5IHZhbHVlCisgICAgfSBlbHNlIGlmICggKCBkaXNwbGF5ID09PSAibm9uZSIgPyBkZWZhdWx0
RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheSApID09PSAiaW5saW5lIiApIHsKKyAg
ICAgICAgc3R5bGUuZGlzcGxheSA9IGRpc3BsYXk7CisgICAgfQorfQorCitmdW5jdGlvbiBwcm9w
RmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHsKKyAgICB2YXIgaW5kZXgsIG5hbWUsIGVh
c2luZywgdmFsdWUsIGhvb2tzOworCisgICAgLy8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFu
ZCBleHBhbmQgY3NzSG9vayBwYXNzCisgICAgZm9yICggaW5kZXggaW4gcHJvcHMgKSB7CisgICAg
ICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApOworICAgICAgICBlYXNpbmcgPSBz
cGVjaWFsRWFzaW5nWyBuYW1lIF07CisgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF07Cisg
ICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisgICAgICAgICAgICBlYXNp
bmcgPSB2YWx1ZVsgMSBdOworICAgICAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZh
bHVlWyAwIF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGluZGV4ICE9PSBuYW1lICkgewor
ICAgICAgICAgICAgcHJvcHNbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgZGVsZXRlIHBy
b3BzWyBpbmRleCBdOworICAgICAgICB9CisKKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9v
a3NbIG5hbWUgXTsKKyAgICAgICAgaWYgKCBob29rcyAmJiAiZXhwYW5kIiBpbiBob29rcyApIHsK
KyAgICAgICAgICAgIHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApOworICAgICAgICAgICAg
ZGVsZXRlIHByb3BzWyBuYW1lIF07CisKKyAgICAgICAgICAgIC8vIE5vdCBxdWl0ZSAkLmV4dGVu
ZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy4KKyAgICAgICAgICAgIC8vIFJl
dXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgIm5hbWUiCisgICAgICAg
ICAgICBmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoICEoIGlu
ZGV4IGluIHByb3BzICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHByb3BzWyBpbmRleCBdID0g
dmFsdWVbIGluZGV4IF07CisgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIGluZGV4
IF0gPSBlYXNpbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgc3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nOworICAg
ICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMs
IG9wdGlvbnMgKSB7CisgICAgdmFyIHJlc3VsdCwKKyAgICAgICAgc3RvcHBlZCwKKyAgICAgICAg
aW5kZXggPSAwLAorICAgICAgICBsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgs
CisgICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigp
IHsKKworICAgICAgICAgICAgLy8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNl
bGVjdG9yCisgICAgICAgICAgICBkZWxldGUgdGljay5lbGVtOworICAgICAgICB9ICksCisgICAg
ICAgIHRpY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICggc3RvcHBlZCApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAgICAg
IHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9u
LmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6
IEFuZHJvaWQgMi4zCisgICAgICAgICAgICAgICAgLy8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3Qg
YWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KQorICAgICAgICAgICAg
ICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCwKKyAgICAgICAg
ICAgICAgICBwZXJjZW50ID0gMSAtIHRlbXAsCisgICAgICAgICAgICAgICAgaW5kZXggPSAwLAor
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoOworCisgICAg
ICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAg
ICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlv
biwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTsKKworICAgICAgICAgICAgaWYgKCBwZXJjZW50IDwg
MSAmJiBsZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmluZzsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVs
ZW0sIFsgYW5pbWF0aW9uIF0gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21p
c2UoIHsKKyAgICAgICAgICAgIGVsZW06IGVsZW0sCisgICAgICAgICAgICBwcm9wczogalF1ZXJ5
LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSwKKyAgICAgICAgICAgIG9wdHM6IGpRdWVyeS5leHRl
bmQoIHRydWUsIHsKKyAgICAgICAgICAgICAgICBzcGVjaWFsRWFzaW5nOiB7fSwKKyAgICAgICAg
ICAgICAgICBlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQKKyAgICAgICAgICAgIH0sIG9w
dGlvbnMgKSwKKyAgICAgICAgICAgIG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKyAg
ICAgICAgICAgIG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgICAgIHN0YXJ0VGlt
ZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKKyAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25z
LmR1cmF0aW9uLAorICAgICAgICAgICAgdHdlZW5zOiBbXSwKKyAgICAgICAgICAgIGNyZWF0ZVR3
ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkgeworICAgICAgICAgICAgICAgIHZhciB0d2VlbiA9
IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBh
bmltYXRpb24ub3B0cy5lYXNpbmcgKTsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5z
LnB1c2goIHR3ZWVuICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkgeworICAgICAgICAg
ICAgICAgIHZhciBpbmRleCA9IDAsCisKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJl
IGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCisgICAgICAg
ICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAorICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOwor
ICAgICAgICAgICAgICAgIGlmICggc3RvcHBlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0b3BwZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkg
eworICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSAp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJlc29sdmUgd2hlbiB3
ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0CisgICAgICAgICAgICAg
ICAgaWYgKCBnb3RvRW5kICkgeworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlX
aXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVqZWN0
V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAp
LAorICAgICAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKKworICAgIHByb3BGaWx0ZXIoIHBy
b3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CisKKyAgICBmb3IgKCA7IGluZGV4
IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgcmVzdWx0ID0gQW5pbWF0aW9uLnByZWZp
bHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9w
dHMgKTsKKyAgICAgICAgaWYgKCByZXN1bHQgKSB7CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVl
dWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9Cisg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5wcm94eSggcmVzdWx0LnN0b3AsIHJlc3VsdCApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7CisK
KyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkgewor
ICAgICAgICBhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKKyAg
ICB9CisKKyAgICBqUXVlcnkuZngudGltZXIoCisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRpY2ss
IHsKKyAgICAgICAgICAgIGVsZW06IGVsZW0sCisgICAgICAgICAgICBhbmltOiBhbmltYXRpb24s
CisgICAgICAgICAgICBxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWUKKyAgICAgICAgfSApCisg
ICAgKTsKKworICAgIC8vIGF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCisgICAgcmV0dXJu
IGFuaW1hdGlvbi5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKQorICAgICAgICAu
ZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKQorICAg
ICAgICAuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCisgICAgICAgIC5hbHdheXMoIGFuaW1h
dGlvbi5vcHRzLmFsd2F5cyApOworfQorCitqUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVu
ZCggQW5pbWF0aW9uLCB7CisgICAgdHdlZW5lcnM6IHsKKyAgICAgICAgIioiOiBbIGZ1bmN0aW9u
KCBwcm9wLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdl
ZW4oIHByb3AsIHZhbHVlICk7CisgICAgICAgICAgICBhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHBy
b3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTsKKyAgICAgICAgICAgIHJldHVybiB0
d2VlbjsKKyAgICAgICAgfSBdCisgICAgfSwKKworICAgIHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9w
cywgY2FsbGJhY2sgKSB7CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkg
KSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb3BzOworICAgICAgICAgICAgcHJvcHMgPSBb
ICIqIiBdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJvcHMgPSBwcm9wcy5tYXRj
aCggcm5vdHdoaXRlICk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgcHJvcCwKKyAgICAgICAg
ICAgIGluZGV4ID0gMCwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKKworICAg
ICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgIHBy
b3AgPSBwcm9wc1sgaW5kZXggXTsKKyAgICAgICAgICAgIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJv
cCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107CisgICAgICAgICAgICBBbmlt
YXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOworICAgICAgICB9Cisg
ICAgfSwKKworICAgIHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLAorCisgICAgcHJl
ZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7CisgICAgICAgIGlmICggcHJl
cGVuZCApIHsKKyAgICAgICAgICAgIEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxi
YWNrICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBbmltYXRpb24ucHJlZmlsdGVy
cy5wdXNoKCBjYWxsYmFjayApOworICAgICAgICB9CisgICAgfQorfSApOworCitqUXVlcnkuc3Bl
ZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7CisgICAgdmFyIG9wdCA9IHNwZWVk
ICYmIHR5cGVvZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQg
KSA6IHsKKyAgICAgICAgY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKKyAgICAgICAg
ICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAorICAgICAgICBkdXJhdGlv
bjogc3BlZWQsCisgICAgICAgIGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1
ZXJ5LmlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZworICAgIH07CisKKyAgICBvcHQuZHVy
YXRpb24gPSBqUXVlcnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1i
ZXIiID8KKyAgICAgICAgb3B0LmR1cmF0aW9uIDogb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5z
cGVlZHMgPworICAgICAgICAgICAgalF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBq
UXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0OworCisgICAgLy8gTm9ybWFsaXplIG9wdC5xdWV1ZSAt
IHRydWUvdW5kZWZpbmVkL251bGwgLT4gImZ4IgorICAgIGlmICggb3B0LnF1ZXVlID09IG51bGwg
fHwgb3B0LnF1ZXVlID09PSB0cnVlICkgeworICAgICAgICBvcHQucXVldWUgPSAiZngiOworICAg
IH0KKworICAgIC8vIFF1ZXVlaW5nCisgICAgb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKKworICAg
IG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCBvcHQub2xkICkgKSB7CisgICAgICAgICAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggb3B0LnF1ZXVlICkgeworICAgICAgICAgICAgalF1ZXJ5
LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApOworICAgICAgICB9CisgICAgfTsKKworICAgIHJl
dHVybiBvcHQ7Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgZmFkZVRvOiBmdW5jdGlv
biggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCisgICAgICAgIC8vIFNob3cgYW55
IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAorICAgICAgICByZXR1
cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3NzKCAib3BhY2l0eSIsIDAgKS5zaG93KCkKKwor
ICAgICAgICAgICAgLy8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkCisgICAgICAgICAg
ICAuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFj
ayApOworICAgIH0sCisgICAgYW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcs
IGNhbGxiYWNrICkgeworICAgICAgICB2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCgg
cHJvcCApLAorICAgICAgICAgICAgb3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5n
LCBjYWxsYmFjayApLAorICAgICAgICAgICAgZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHsKKwor
ICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3Bl
cnR5IGVhc2luZyB3b24ndCBiZSBsb3N0CisgICAgICAgICAgICAgICAgdmFyIGFuaW0gPSBBbmlt
YXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOworCisgICAg
ICAgICAgICAgICAgLy8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGlt
bWVkaWF0ZWx5CisgICAgICAgICAgICAgICAgaWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRo
aXMsICJmaW5pc2giICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGFuaW0uc3RvcCggdHJ1ZSAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkb0FuaW1h
dGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjsKKworICAgICAgICByZXR1cm4gZW1wdHkgfHwgb3B0
YWxsLnF1ZXVlID09PSBmYWxzZSA/CisgICAgICAgICAgICB0aGlzLmVhY2goIGRvQW5pbWF0aW9u
ICkgOgorICAgICAgICAgICAgdGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiAp
OworICAgIH0sCisgICAgc3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQg
KSB7CisgICAgICAgIHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7CisgICAgICAg
ICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0b3A7CisgICAgICAgICAgICBkZWxldGUgaG9va3Muc3Rv
cDsKKyAgICAgICAgICAgIHN0b3AoIGdvdG9FbmQgKTsKKyAgICAgICAgfTsKKworICAgICAgICBp
ZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGdvdG9FbmQgPSBj
bGVhclF1ZXVlOworICAgICAgICAgICAgY2xlYXJRdWV1ZSA9IHR5cGU7CisgICAgICAgICAgICB0
eXBlID0gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICAgIGlmICggY2xlYXJRdWV1ZSAmJiB0
eXBlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4Iiwg
W10gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgdmFyIGRlcXVldWUgPSB0cnVlLAorICAgICAgICAgICAgICAgIGluZGV4
ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyAicXVldWVIb29rcyIsCisgICAgICAgICAgICAgICAg
dGltZXJzID0galF1ZXJ5LnRpbWVycywKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVByaXYu
Z2V0KCB0aGlzICk7CisKKyAgICAgICAgICAgIGlmICggaW5kZXggKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBpbmRleCBpbiBk
YXRhICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsg
aW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKCBp
bmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkgeworICAgICAgICAgICAgICAgIGlmICgg
dGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYKKyAgICAgICAgICAgICAgICAgICAgKCB0
eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApOwor
ICAgICAgICAgICAgICAgICAgICBkZXF1ZXVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhl
IGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLgorICAgICAgICAgICAgLy8gVGltZXJzIGN1cnJlbnRs
eSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaAorICAgICAgICAgICAg
Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLgorICAgICAgICAg
ICAgaWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5k
ZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9
LAorICAgIGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgIGlmICggdHlwZSAhPT0g
ZmFsc2UgKSB7CisgICAgICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGlu
ZGV4LAorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSwKKyAgICAg
ICAgICAgICAgICBxdWV1ZSA9IGRhdGFbIHR5cGUgKyAicXVldWUiIF0sCisgICAgICAgICAgICAg
ICAgaG9va3MgPSBkYXRhWyB0eXBlICsgInF1ZXVlSG9va3MiIF0sCisgICAgICAgICAgICAgICAg
dGltZXJzID0galF1ZXJ5LnRpbWVycywKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBxdWV1ZSA/
IHF1ZXVlLmxlbmd0aCA6IDA7CisKKyAgICAgICAgICAgIC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxh
ZyBvbiBwcml2YXRlIGRhdGEKKyAgICAgICAgICAgIGRhdGEuZmluaXNoID0gdHJ1ZTsKKworICAg
ICAgICAgICAgLy8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0CisgICAgICAgICAgICBqUXVlcnkucXVl
dWUoIHRoaXMsIHR5cGUsIFtdICk7CisKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgaG9va3Mu
c3RvcCApIHsKKyAgICAgICAgICAgICAgICBob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmlt
YXRpb25zLCBhbmQgZmluaXNoIHRoZW0KKyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJz
Lmxlbmd0aDsgaW5kZXgtLTsgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4
IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIExvb2sgZm9yIGFueSBhbmlt
YXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtCisgICAgICAgICAgICBmb3Ig
KCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICAgICAgICAg
IGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkgeworICAgICAg
ICAgICAgICAgICAgICBxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiBvZmYgZmlu
aXNoaW5nIGZsYWcKKyAgICAgICAgICAgIGRlbGV0ZSBkYXRhLmZpbmlzaDsKKyAgICAgICAgfSAp
OworICAgIH0KK30gKTsKKworalF1ZXJ5LmVhY2goIFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUi
IF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFt
ZSBdOworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICkgeworICAgICAgICByZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQg
PT09ICJib29sZWFuIiA/CisgICAgICAgICAgICBjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRz
ICkgOgorICAgICAgICAgICAgdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVl
ZCwgZWFzaW5nLCBjYWxsYmFjayApOworICAgIH07Cit9ICk7CisKKy8vIEdlbmVyYXRlIHNob3J0
Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKK2pRdWVyeS5lYWNoKCB7CisgICAgc2xpZGVEb3du
OiBnZW5GeCggInNob3ciICksCisgICAgc2xpZGVVcDogZ2VuRngoICJoaWRlIiApLAorICAgIHNs
aWRlVG9nZ2xlOiBnZW5GeCggInRvZ2dsZSIgKSwKKyAgICBmYWRlSW46IHsgb3BhY2l0eTogInNo
b3ciIH0sCisgICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKKyAgICBmYWRlVG9nZ2xl
OiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKKyAg
ICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayAp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICk7CisgICAgfTsKK30gKTsKKworalF1ZXJ5LnRpbWVycyA9IFtdOworalF1ZXJ5LmZ4
LnRpY2sgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdGltZXIsCisgICAgICAgIGkgPSAwLAorICAg
ICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzOworCisgICAgZnhOb3cgPSBqUXVlcnkubm93KCk7
CisKKyAgICBmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgIHRpbWVy
ID0gdGltZXJzWyBpIF07CisKKyAgICAgICAgLy8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFs
cmVhZHkgYmVlbiByZW1vdmVkCisgICAgICAgIGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0g
PT09IHRpbWVyICkgeworICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaS0tLCAxICk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoICF0aW1lcnMubGVuZ3RoICkgeworICAgICAgICBqUXVl
cnkuZnguc3RvcCgpOworICAgIH0KKyAgICBmeE5vdyA9IHVuZGVmaW5lZDsKK307CisKK2pRdWVy
eS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHsKKyAgICBqUXVlcnkudGltZXJzLnB1c2go
IHRpbWVyICk7CisgICAgaWYgKCB0aW1lcigpICkgeworICAgICAgICBqUXVlcnkuZnguc3RhcnQo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBqUXVlcnkudGltZXJzLnBvcCgpOworICAgIH0KK307
CisKK2pRdWVyeS5meC5pbnRlcnZhbCA9IDEzOworalF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24o
KSB7CisgICAgaWYgKCAhdGltZXJJZCApIHsKKyAgICAgICAgdGltZXJJZCA9IHdpbmRvdy5zZXRJ
bnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZhbCApOworICAgIH0KK307
CisKK2pRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7CisgICAgd2luZG93LmNsZWFySW50ZXJ2
YWwoIHRpbWVySWQgKTsKKworICAgIHRpbWVySWQgPSBudWxsOworfTsKKworalF1ZXJ5LmZ4LnNw
ZWVkcyA9IHsKKyAgICBzbG93OiA2MDAsCisgICAgZmFzdDogMjAwLAorCisgICAgLy8gRGVmYXVs
dCBzcGVlZAorICAgIF9kZWZhdWx0OiA0MDAKK307CisKKworLy8gQmFzZWQgb2ZmIG9mIHRoZSBw
bHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgorLy8gaHR0cDovL3dlYi5h
cmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5k
ZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LworalF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24o
IHRpbWUsIHR5cGUgKSB7CisgICAgdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNb
IHRpbWUgXSB8fCB0aW1lIDogdGltZTsKKyAgICB0eXBlID0gdHlwZSB8fCAiZngiOworCisgICAg
cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHsKKyAgICAg
ICAgdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApOworICAgICAg
ICBob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1l
b3V0KCB0aW1lb3V0ICk7CisgICAgICAgIH07CisgICAgfSApOworfTsKKworCisoIGZ1bmN0aW9u
KCkgeworICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKSwK
KyAgICAgICAgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNlbGVjdCIgKSwKKyAg
ICAgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAi
b3B0aW9uIiApICk7CisKKyAgICBpbnB1dC50eXBlID0gImNoZWNrYm94IjsKKworICAgIC8vIFN1
cHBvcnQ6IGlPUzw9NS4xLCBBbmRyb2lkPD00LjIrCisgICAgLy8gRGVmYXVsdCB2YWx1ZSBmb3Ig
YSBjaGVja2JveCBzaG91bGQgYmUgIm9uIgorICAgIHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZh
bHVlICE9PSAiIjsKKworICAgIC8vIFN1cHBvcnQ6IElFPD0xMSsKKyAgICAvLyBNdXN0IGFjY2Vz
cyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdAorICAgIHN1cHBv
cnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7CisKKyAgICAvLyBTdXBwb3J0OiBBbmRyb2lk
PD0yLjMKKyAgICAvLyBPcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZSBpbmNvcnJl
Y3RseSBtYXJrZWQgYXMgZGlzYWJsZWQKKyAgICBzZWxlY3QuZGlzYWJsZWQgPSB0cnVlOworICAg
IHN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRpc2FibGVkOworCisgICAgLy8gU3VwcG9ydDog
SUU8PTExKworICAgIC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBh
IHJhZGlvCisgICAgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiaW5wdXQiICk7Cisg
ICAgaW5wdXQudmFsdWUgPSAidCI7CisgICAgaW5wdXQudHlwZSA9ICJyYWRpbyI7CisgICAgc3Vw
cG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsKK30gKSgpOworCisKK3ZhciBi
b29sSG9vaywKKyAgICBhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTsKKworalF1
ZXJ5LmZuLmV4dGVuZCggeworICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAg
ICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1
bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisKKyAgICByZW1vdmVBdHRyOiBmdW5jdGlvbigg
bmFtZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOworICAgICAgICB9ICk7CisgICAg
fQorfSApOworCitqUXVlcnkuZXh0ZW5kKCB7CisgICAgYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5h
bWUsIHZhbHVlICkgeworICAgICAgICB2YXIgcmV0LCBob29rcywKKyAgICAgICAgICAgIG5UeXBl
ID0gZWxlbS5ub2RlVHlwZTsKKworICAgICAgICAvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMg
b24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisgICAgICAgIGlmICggblR5cGUg
PT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmli
dXRlcyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJp
YnV0ZSA9PT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnByb3Ao
IGVsZW0sIG5hbWUsIHZhbHVlICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGwgYXR0cmli
dXRlcyBhcmUgbG93ZXJjYXNlCisgICAgICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25l
IGlzIGRlZmluZWQKKyAgICAgICAgaWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9j
KCBlbGVtICkgKSB7CisgICAgICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAg
ICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gfHwKKyAgICAgICAgICAg
ICAgICAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1
bmRlZmluZWQgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7CisgICAgICAgICAgICAg
ICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgInNldCIgaW4g
aG9va3MgJiYKKyAgICAgICAgICAgICAgICAoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUs
IG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZh
bHVlICsgIiIgKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVs
ZW0sIG5hbWUgKSApICE9PSBudWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTsKKwor
ICAgICAgICAvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFs
aXplIHRvIHVuZGVmaW5lZAorICAgICAgICByZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQg
OiByZXQ7CisgICAgfSwKKworICAgIGF0dHJIb29rczogeworICAgICAgICB0eXBlOiB7CisgICAg
ICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRpbyIgJiYKKyAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLnZhbHVlOworICAgICAgICAgICAgICAgICAgICBl
bGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIHZhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWw7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAg
ICByZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBuYW1l
LCBwcm9wTmFtZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgYXR0ck5hbWVzID0g
dmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApOworCisgICAgICAgIGlmICggYXR0ck5h
bWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICB3aGlsZSAoICggbmFt
ZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHsKKyAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IGpR
dWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKKworICAgICAgICAgICAgICAgIC8vIEJvb2xl
YW4gYXR0cmlidXRlcyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgKCMxMDg3MCkKKyAgICAgICAgICAg
ICAgICBpZiAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApICkgeworCisgICAg
ICAgICAgICAgICAgICAgIC8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlCisg
ICAgICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSApOworCisvLyBIb29rcyBmb3IgYm9v
bGVhbiBhdHRyaWJ1dGVzCitib29sSG9vayA9IHsKKyAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2
YWx1ZSwgbmFtZSApIHsKKyAgICAgICAgaWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7CisKKyAgICAg
ICAgICAgIC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2UKKyAg
ICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KK307CitqUXVlcnkuZWFjaCggalF1ZXJ5
LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cdysvZyApLCBmdW5jdGlvbiggaSwgbmFt
ZSApIHsKKyAgICB2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5k
LmF0dHI7CisKKyAgICBhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwg
aXNYTUwgKSB7CisgICAgICAgIHZhciByZXQsIGhhbmRsZTsKKyAgICAgICAgaWYgKCAhaXNYTUwg
KSB7CisKKyAgICAgICAgICAgIC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJp
bHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXIKKyAgICAgICAgICAgIGhh
bmRsZSA9IGF0dHJIYW5kbGVbIG5hbWUgXTsKKyAgICAgICAgICAgIGF0dHJIYW5kbGVbIG5hbWUg
XSA9IHJldDsKKyAgICAgICAgICAgIHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAh
PSBudWxsID8KKyAgICAgICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkgOgorICAgICAgICAg
ICAgICAgIG51bGw7CisgICAgICAgICAgICBhdHRySGFuZGxlWyBuYW1lIF0gPSBoYW5kbGU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9OworfSApOworCisKKworCit2YXIg
cmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksCisgICAg
cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAg
IHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGFjY2Vzcygg
dGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwor
ICAgIH0sCisKKyAgICByZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpc1sgalF1
ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07CisgICAgICAgIH0gKTsKKyAgICB9Cit9ICk7
CisKK2pRdWVyeS5leHRlbmQoIHsKKyAgICBwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFs
dWUgKSB7CisgICAgICAgIHZhciByZXQsIGhvb2tzLAorICAgICAgICAgICAgblR5cGUgPSBlbGVt
Lm5vZGVUeXBlOworCisgICAgICAgIC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0
LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKKyAgICAgICAgaWYgKCBuVHlwZSA9PT0gMyB8
fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYygg
ZWxlbSApICkgeworCisgICAgICAgICAgICAvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzCisg
ICAgICAgICAgICBuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworICAgICAg
ICAgICAgaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICBpZiAoIGhvb2tz
ICYmICJzZXQiIGluIGhvb2tzICYmCisgICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5zZXQo
IGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoIGVsZW1b
IG5hbWUgXSA9IHZhbHVlICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tzICYmICJn
ZXQiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVs
bCApIHsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZWxlbVsgbmFtZSBdOworICAgIH0sCisKKyAgICBwcm9wSG9va3M6IHsKKyAgICAgICAgdGFi
SW5kZXg6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisKKyAgICAgICAg
ICAgICAgICAvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUKKyAgICAg
ICAgICAgICAgICAvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRs
eSBzZXQKKyAgICAgICAgICAgICAgICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIw
MDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0
aC1qYXZhc2NyaXB0LworICAgICAgICAgICAgICAgIC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJl
dHJpZXZhbCgjMTIwNzIpCisgICAgICAgICAgICAgICAgdmFyIHRhYmluZGV4ID0galF1ZXJ5LmZp
bmQuYXR0ciggZWxlbSwgInRhYmluZGV4IiApOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRh
YmluZGV4ID8KKyAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApIDoK
KyAgICAgICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSAp
ICYmIGVsZW0uaHJlZiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgcHJvcEZpeDogeworICAgICAgICAiZm9yIjogImh0bWxGb3IiLAorICAgICAgICAi
Y2xhc3MiOiAiY2xhc3NOYW1lIgorICAgIH0KK30gKTsKKworLy8gU3VwcG9ydDogSUUgPD0xMSBv
bmx5CisvLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHkKKy8vIGZvcmNlcyB0
aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWQKKy8vIG9uIHRoZSBvcHRpb24K
Ky8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkCisvLyB3
aGVuIGluIGFuIG9wdGdyb3VwCitpZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkgeworICAgIGpR
dWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOworICAgICAgICAg
ICAgaWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAg
cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAg
ICAgIGlmICggcGFyZW50ICkgeworICAgICAgICAgICAgICAgIHBhcmVudC5zZWxlY3RlZEluZGV4
OworCisgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfQorCitqUXVlcnkuZWFj
aCggWworICAgICJ0YWJJbmRleCIsCisgICAgInJlYWRPbmx5IiwKKyAgICAibWF4TGVuZ3RoIiwK
KyAgICAiY2VsbFNwYWNpbmciLAorICAgICJjZWxsUGFkZGluZyIsCisgICAgInJvd1NwYW4iLAor
ICAgICJjb2xTcGFuIiwKKyAgICAidXNlTWFwIiwKKyAgICAiZnJhbWVCb3JkZXIiLAorICAgICJj
b250ZW50RWRpdGFibGUiCitdLCBmdW5jdGlvbigpIHsKKyAgICBqUXVlcnkucHJvcEZpeFsgdGhp
cy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzOworfSApOworCisKKworCit2YXIgcmNsYXNzID0gL1tc
dFxyXG5cZl0vZzsKKworZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7CisgICAgcmV0dXJuIGVs
ZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCAiY2xhc3MiICkgfHwgIiI7Cit9
CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkg
eworICAgICAgICB2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZp
bmFsVmFsdWUsCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1
bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rp
b24oIGogKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVl
LmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApOworICAgICAgICAgICAgfSApOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZh
bHVlICkgeworICAgICAgICAgICAgY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8
fCBbXTsKKworICAgICAgICAgICAgd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgewor
ICAgICAgICAgICAgICAgIGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKKyAgICAgICAgICAg
ICAgICBjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmCisgICAgICAgICAgICAgICAgICAgICgg
IiAiICsgY3VyVmFsdWUgKyAiICIgKS5yZXBsYWNlKCByY2xhc3MsICIgIiApOworCisgICAgICAg
ICAgICAgICAgaWYgKCBjdXIgKSB7CisgICAgICAgICAgICAgICAgICAgIGogPSAwOworICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAiICIg
KSA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyICs9IGNsYXp6ICsgIiAi
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVu
bmVlZGVkIHJlbmRlcmluZy4KKyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IGpRdWVy
eS50cmltKCBjdXIgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXJWYWx1ZSAhPT0gZmlu
YWxWYWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCAi
Y2xhc3MiLCBmaW5hbFZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9LAorCisgICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAg
dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLAor
ICAgICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFs
dWUgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkgewor
ICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0
aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5hdHRyKCAiY2xhc3MiLCAiIiApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0
eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgeworICAgICAgICAgICAgY2xhc3Nl
cyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworICAgICAgICAgICAgd2hpbGUg
KCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgeworICAgICAgICAgICAgICAgIGN1clZhbHVlID0g
Z2V0Q2xhc3MoIGVsZW0gKTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgZXhwcmVzc2lvbiBp
cyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpCisgICAgICAg
ICAgICAgICAgY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgorICAgICAgICAgICAgICAgICAg
ICAoICIgIiArIGN1clZhbHVlICsgIiAiICkucmVwbGFjZSggcmNsYXNzLCAiICIgKTsKKworICAg
ICAgICAgICAgICAgIGlmICggY3VyICkgeworICAgICAgICAgICAgICAgICAgICBqID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlICphbGwqIGluc3RhbmNlcworICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIuaW5kZXhPZiggIiAiICsgY2xhenogKyAi
ICIgKSA+IC0xICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5yZXBs
YWNlKCAiICIgKyBjbGF6eiArICIgIiwgIiAiICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGFz
c2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLgorICAgICAgICAg
ICAgICAgICAgICBmaW5hbFZhbHVlID0galF1ZXJ5LnRyaW0oIGN1ciApOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsIGZpbmFsVmFsdWUgKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICB0b2dnbGVDbGFzczog
ZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKKyAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Yg
dmFsdWU7CisKKyAgICAgICAgaWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIiAmJiB0
eXBlID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0ZVZhbCA/IHRoaXMu
YWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgIGpR
dWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKAorICAgICAgICAgICAgICAgICAgICB2YWx1ZS5jYWxs
KCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLAorICAgICAgICAgICAgICAg
ICAgICBzdGF0ZVZhbAorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9ICk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7CisKKyAgICAgICAgICAgIGlm
ICggdHlwZSA9PT0gInN0cmluZyIgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBUb2dnbGUgaW5k
aXZpZHVhbCBjbGFzcyBuYW1lcworICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAg
ICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKKyAgICAgICAgICAgICAgICBjbGFzc05hbWVzID0g
dmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdOworCisgICAgICAgICAgICAgICAgd2hpbGUg
KCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0
CisgICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZQorICAg
ICAgICAgICAgfSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSAiYm9v
bGVhbiIgKSB7CisgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTsK
KyAgICAgICAgICAgICAgICBpZiAoIGNsYXNzTmFtZSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0CisgICAgICAgICAgICAgICAgICAgIGRhdGFQcml2
LnNldCggdGhpcywgIl9fY2xhc3NOYW1lX18iLCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1l
IG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLAorICAgICAgICAgICAgICAgIC8vIHRoZW4gcmVt
b3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZl
ZCBpdCkuCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIg
d2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSwKKyAgICAgICAgICAgICAgICAvLyBm
YWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuCisg
ICAgICAgICAgICAgICAgaWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoICJjbGFzcyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICIiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcml2LmdldCggdGhpcywgIl9fY2xh
c3NOYW1lX18iICkgfHwgIiIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgaGFzQ2xhc3M6
IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgdmFyIGNsYXNzTmFtZSwgZWxlbSwKKyAg
ICAgICAgICAgIGkgPSAwOworCisgICAgICAgIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsg
IiAiOworICAgICAgICB3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7CisgICAgICAg
ICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYKKyAgICAgICAgICAgICAgICAoICIgIiAr
IGdldENsYXNzKCBlbGVtICkgKyAiICIgKS5yZXBsYWNlKCByY2xhc3MsICIgIiApCisgICAgICAg
ICAgICAgICAgICAgIC5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xCisgICAgICAgICAgICApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9ICk7CisKKworCisKK3ZhciBycmV0dXJu
ID0gL1xyL2csCisgICAgcnNwYWNlcyA9IC9bXHgyMFx0XHJcblxmXSsvZzsKKworalF1ZXJ5LmZu
LmV4dGVuZCggeworICAgIHZhbDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICB2YXIgaG9v
a3MsIHJldCwgaXNGdW5jdGlvbiwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlzWyAwIF07CisKKyAg
ICAgICAgaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIGlmICggZWxlbSAp
IHsKKyAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0g
fHwKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYKKyAgICAgICAg
ICAgICAgICAgICAgImdldCIgaW4gaG9va3MgJiYKKyAgICAgICAgICAgICAgICAgICAgKCByZXQg
PSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSApICE9PSB1bmRlZmluZWQKKyAgICAgICAgICAg
ICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICByZXQgPSBlbGVtLnZhbHVlOworCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHR5cGVvZiByZXQgPT09ICJzdHJpbmciID8KKworICAgICAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCisgICAgICAgICAgICAgICAgICAg
IHJldC5yZXBsYWNlKCBycmV0dXJuLCAiIiApIDoKKworICAgICAgICAgICAgICAgICAgICAvLyBI
YW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXIKKyAgICAgICAg
ICAgICAgICAgICAgcmV0ID09IG51bGwgPyAiIiA6IHJldDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaXNGdW5jdGlvbiA9IGpRdWVy
eS5pc0Z1bmN0aW9uKCB2YWx1ZSApOworCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0
aW9uKCBpICkgeworICAgICAgICAgICAgdmFyIHZhbDsKKworICAgICAgICAgICAgaWYgKCB0aGlz
Lm5vZGVUeXBlICE9PSAxICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCBpc0Z1bmN0aW9uICkgeworICAgICAgICAgICAgICAgIHZh
bCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBu
dW1iZXJzIHRvIHN0cmluZworICAgICAgICAgICAgaWYgKCB2YWwgPT0gbnVsbCApIHsKKyAgICAg
ICAgICAgICAgICB2YWwgPSAiIjsKKworICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHZh
bCA9PT0gIm51bWJlciIgKSB7CisgICAgICAgICAgICAgICAgdmFsICs9ICIiOworCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7CisgICAgICAgICAgICAg
ICAgdmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOworICAgICAg
ICAgICAgICAgIH0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaG9va3MgPSBqUXVl
cnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpIF07CisKKyAgICAgICAgICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVm
aW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nCisgICAgICAgICAgICBpZiAoICFob29r
cyB8fCAhKCAic2V0IiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCAidmFsdWUi
ICkgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsOwor
ICAgICAgICAgICAgfQorICAgICAgICB9ICk7CisgICAgfQorfSApOworCitqUXVlcnkuZXh0ZW5k
KCB7CisgICAgdmFsSG9va3M6IHsKKyAgICAgICAgb3B0aW9uOiB7CisgICAgICAgICAgICBnZXQ6
IGZ1bmN0aW9uKCBlbGVtICkgeworCisgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGpRdWVyeS5m
aW5kLmF0dHIoIGVsZW0sICJ2YWx1ZSIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsICE9
IG51bGwgPworICAgICAgICAgICAgICAgICAgICB2YWwgOgorCisgICAgICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQ6IElFMTAtMTErCisgICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbi50ZXh0
IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OCkKKyAgICAgICAgICAgICAgICAgICAg
Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3Bh
Y2UKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnRyaW0oIGpRdWVyeS50ZXh0KCBlbGVtICkg
KS5yZXBsYWNlKCByc3BhY2VzLCAiICIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgc2VsZWN0OiB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgICAgIHZhciB2YWx1ZSwgb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICBvcHRp
b25zID0gZWxlbS5vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGVsZW0uc2Vs
ZWN0ZWRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgb25lID0gZWxlbS50eXBlID09PSAic2Vs
ZWN0LW9uZSIgfHwgaW5kZXggPCAwLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBvbmUg
PyBudWxsIDogW10sCisgICAgICAgICAgICAgICAgICAgIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6
IG9wdGlvbnMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBpID0gaW5kZXggPCAwID8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1heCA6CisgICAgICAgICAgICAgICAgICAgICAgICBvbmUg
PyBpbmRleCA6IDA7CisKKyAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBz
ZWxlY3RlZCBvcHRpb25zCisgICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbWF4OyBpKysgKSB7
CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJl
c2V0ICgjMjU1MSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8
fCBpID09PSBpbmRleCApICYmCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24n
dCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdy
b3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzdXBwb3J0Lm9wdERpc2FibGVkID8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlv
bi5nZXRBdHRyaWJ1dGUoICJkaXNhYmxlZCIgKSA9PT0gbnVsbCApICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5v
ZGUsICJvcHRncm91cCIgKSApICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQg
dGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uCisgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIG9uZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMucHVzaCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsK
KyAgICAgICAgICAgICAgICB2YXIgb3B0aW9uU2V0LCBvcHRpb24sCisgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9
IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksCisgICAgICAgICAgICAgICAgICAgIGkgPSBvcHRp
b25zLmxlbmd0aDsKKworICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAg
ICAgICAgICAgICBvcHRpb24gPSBvcHRpb25zWyBpIF07CisgICAgICAgICAgICAgICAgICAgIGlm
ICggb3B0aW9uLnNlbGVjdGVkID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pbkFy
cmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTEK
KyAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25T
ZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3
aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXQKKyAgICAgICAgICAgICAgICBpZiAoICFvcHRp
b25TZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfSApOworCisvLyBSYWRpb3MgYW5kIGNoZWNrYm94
ZXMgZ2V0dGVyL3NldHRlcgoralF1ZXJ5LmVhY2goIFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBm
dW5jdGlvbigpIHsKKyAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKKyAgICAgICAgc2V0
OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Fy
cmF5KCB2YWx1ZSApICkgeworICAgICAgICAgICAgICAgIHJldHVybiAoIGVsZW0uY2hlY2tlZCA9
IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIGlmICggIXN1cHBvcnQuY2hlY2tP
biApIHsKKyAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9
PT0gbnVsbCA/ICJvbiIgOiBlbGVtLnZhbHVlOworICAgICAgICB9OworICAgIH0KK30gKTsKKwor
CisKKworLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvbgorCisK
K3ZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLzsKKwor
alF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7CisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbigg
ZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHsKKworICAgICAgICB2YXIgaSwgY3Vy
LCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLAorICAgICAgICAgICAg
ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sCisgICAgICAgICAgICB0eXBlID0gaGFz
T3duLmNhbGwoIGV2ZW50LCAidHlwZSIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCwKKyAgICAgICAg
ICAgIG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsICJuYW1lc3BhY2UiICkgPyBldmVu
dC5uYW1lc3BhY2Uuc3BsaXQoICIuIiApIDogW107CisKKyAgICAgICAgY3VyID0gdG1wID0gZWxl
bSA9IGVsZW0gfHwgZG9jdW1lbnQ7CisKKyAgICAgICAgLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRl
eHQgYW5kIGNvbW1lbnQgbm9kZXMKKyAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdl
J3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKKyAgICAgICAgaWYgKCByZm9jdXNNb3JwaC50
ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0eXBlLmluZGV4T2YoICIuIiApID4gLTEg
KSB7CisKKyAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhw
IHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKKyAgICAgICAgICAgIG5hbWVzcGFjZXMg
PSB0eXBlLnNwbGl0KCAiLiIgKTsKKyAgICAgICAgICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0
KCk7CisgICAgICAgICAgICBuYW1lc3BhY2VzLnNvcnQoKTsKKyAgICAgICAgfQorICAgICAgICBv
bnR5cGUgPSB0eXBlLmluZGV4T2YoICI6IiApIDwgMCAmJiAib24iICsgdHlwZTsKKworICAgICAg
ICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9y
IGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKKyAgICAgICAgZXZlbnQgPSBldmVudFsgalF1ZXJ5
LmV4cGFuZG8gXSA/CisgICAgICAgICAgICBldmVudCA6CisgICAgICAgICAgICBuZXcgalF1ZXJ5
LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiICYmIGV2ZW50ICk7CisKKyAg
ICAgICAgLy8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZv
ciBqUXVlcnkgKGFsd2F5cyB0cnVlKQorICAgICAgICBldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFu
ZGxlcnMgPyAyIDogMzsKKyAgICAgICAgZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2lu
KCAiLiIgKTsKKyAgICAgICAgZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/Cisg
ICAgICAgICAgICBuZXcgUmVnRXhwKCAiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oICJcXC4o
PzouKlxcLnwpIiApICsgIihcXC58JCkiICkgOgorICAgICAgICAgICAgbnVsbDsKKworICAgICAg
ICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWQKKyAgICAg
ICAgZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOworICAgICAgICBpZiAoICFldmVudC50YXJnZXQg
KSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBlbGVtOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVh
dGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAorICAgICAgICBkYXRhID0gZGF0YSA9PSBudWxsID8K
KyAgICAgICAgICAgIFsgZXZlbnQgXSA6CisgICAgICAgICAgICBqUXVlcnkubWFrZUFycmF5KCBk
YXRhLCBbIGV2ZW50IF0gKTsKKworICAgICAgICAvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBk
cmF3IG91dHNpZGUgdGhlIGxpbmVzCisgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3Bl
Y2lhbFsgdHlwZSBdIHx8IHt9OworICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lh
bC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxz
ZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVy
bWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNw
ZWMgKCM5OTUxKQorICAgICAgICAvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2lu
ZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KQorICAgICAg
ICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dp
bmRvdyggZWxlbSApICkgeworCisgICAgICAgICAgICBidWJibGVUeXBlID0gc3BlY2lhbC5kZWxl
Z2F0ZVR5cGUgfHwgdHlwZTsKKyAgICAgICAgICAgIGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1
YmJsZVR5cGUgKyB0eXBlICkgKSB7CisgICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5v
ZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBh
cmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgZXZlbnRQYXRoLnB1c2goIGN1ciApOworICAg
ICAgICAgICAgICAgIHRtcCA9IGN1cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
T25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9i
aiBvciBkZXRhY2hlZCBET00pCisgICAgICAgICAgICBpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVy
RG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHsKKyAgICAgICAgICAgICAgICBldmVudFBhdGgucHVz
aCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBl
dmVudCBwYXRoCisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoICggY3VyID0gZXZlbnRQ
YXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworCisgICAg
ICAgICAgICBldmVudC50eXBlID0gaSA+IDEgPworICAgICAgICAgICAgICAgIGJ1YmJsZVR5cGUg
OgorICAgICAgICAgICAgICAgIHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTsKKworICAgICAgICAg
ICAgLy8galF1ZXJ5IGhhbmRsZXIKKyAgICAgICAgICAgIGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0
KCBjdXIsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmCisgICAgICAgICAgICAg
ICAgZGF0YVByaXYuZ2V0KCBjdXIsICJoYW5kbGUiICk7CisgICAgICAgICAgICBpZiAoIGhhbmRs
ZSApIHsKKyAgICAgICAgICAgICAgICBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBOYXRpdmUgaGFuZGxlcgorICAgICAgICAgICAgaGFu
ZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07CisgICAgICAgICAgICBpZiAoIGhhbmRsZSAm
JiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7CisgICAgICAgICAgICAgICAg
ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGV2ZW50LnR5cGUgPSB0eXBlOworCisgICAgICAgIC8vIElmIG5v
Ym9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cKKyAgICAgICAgaWYg
KCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKKworICAg
ICAgICAgICAgaWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8CisgICAgICAgICAgICAgICAgc3Bl
Y2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkg
JiYKKyAgICAgICAgICAgICAgICBhY2NlcHREYXRhKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAg
ICAgICAvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBz
YW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQuCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8g
ZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMg
YmUgKCM2MTcwKQorICAgICAgICAgICAgICAgIGlmICggb250eXBlICYmIGpRdWVyeS5pc0Z1bmN0
aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVu
IHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICB0bXAgPSBlbGVt
WyBvbnR5cGUgXTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHRtcCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0
aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlCisgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOworICAgICAgICAgICAg
ICAgICAgICBlbGVtWyB0eXBlIF0oKTsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHRtcCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0gdG1wOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKKyAgICB9LAorCisgICAgLy8gUGln
Z3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lCisgICAg
Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHMKKyAgICBzaW11bGF0ZTog
ZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkgeworICAgICAgICB2YXIgZSA9IGpRdWVyeS5l
eHRlbmQoCisgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCksCisgICAgICAgICAgICBldmVu
dCwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAg
ICAgICAgIGlzU2ltdWxhdGVkOiB0cnVlCisgICAgICAgICAgICB9CisgICAgICAgICk7CisKKyAg
ICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTsKKyAgICB9CisKK30g
KTsKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisgICAgdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUs
IGRhdGEgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKKyAgICAgICAg
fSApOworICAgIH0sCisgICAgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkg
eworICAgICAgICB2YXIgZWxlbSA9IHRoaXNbIDAgXTsKKyAgICAgICAgaWYgKCBlbGVtICkgewor
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVt
LCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9Cit9ICk7CisKKworalF1ZXJ5LmVhY2goICggImJs
dXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNr
IGRibGNsaWNrICIgKworICAgICJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVy
IG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKKyAgICAiY2hhbmdlIHNlbGVjdCBz
dWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIgKS5zcGxpdCgg
IiAiICksCisgICAgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisKKyAgICAvLyBIYW5kbGUgZXZlbnQg
YmluZGluZworICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgewor
ICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgPworICAgICAgICAgICAgdGhpcy5v
biggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6CisgICAgICAgICAgICB0aGlzLnRyaWdnZXIoIG5h
bWUgKTsKKyAgICB9OworfSApOworCitqUXVlcnkuZm4uZXh0ZW5kKCB7CisgICAgaG92ZXI6IGZ1
bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgeworICAgICAgICByZXR1cm4gdGhpcy5tb3VzZWVudGVy
KCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsKKyAgICB9Cit9ICk7CisK
KworCisKK3N1cHBvcnQuZm9jdXNpbiA9ICJvbmZvY3VzaW4iIGluIHdpbmRvdzsKKworCisvLyBT
dXBwb3J0OiBGaXJlZm94CisvLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkg
ZXZlbnRzCisvLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcv
c2hvd19idWcuY2dpP2lkPTY4Nzc4NworLy8KKy8vIFN1cHBvcnQ6IENocm9tZSwgU2FmYXJpCisv
LyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cywK
Ky8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxl
dmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlcgorLy8gUmVsYXRlZCB0
aWNrZXQgLSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/
aWQ9NDQ5ODU3CitpZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7CisgICAgalF1ZXJ5LmVhY2goIHsg
Zm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4
ICkgeworCisgICAgICAgIC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0
aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0CisgICAgICAg
IHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgalF1ZXJ5LmV2
ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQg
KSApOworICAgICAgICB9OworCisgICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9
IHsKKyAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIg
ZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsCisgICAgICAgICAgICAgICAgICAgIGF0
dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApOworCisgICAgICAgICAgICAgICAg
aWYgKCAhYXR0YWNoZXMgKSB7CisgICAgICAgICAgICAgICAgICAgIGRvYy5hZGRFdmVudExpc3Rl
bmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSAp
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMsCisgICAg
ICAgICAgICAgICAgICAgIGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0g
MTsKKworICAgICAgICAgICAgICAgIGlmICggIWF0dGFjaGVzICkgeworICAgICAgICAgICAgICAg
ICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworICAg
ICAgICAgICAgICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7CisKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkYXRhUHJpdi5hY2Nlc3MoIGRv
YywgZml4LCBhdHRhY2hlcyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICB9ICk7Cit9Cit2YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247CisK
K3ZhciBub25jZSA9IGpRdWVyeS5ub3coKTsKKwordmFyIHJxdWVyeSA9ICggL1w/LyApOworCisK
KworLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKKy8vIFdvcmthcm91bmQgZmFpbHVyZSB0byBzdHJp
bmctY2FzdCBudWxsIGlucHV0CitqUXVlcnkucGFyc2VKU09OID0gZnVuY3Rpb24oIGRhdGEgKSB7
CisgICAgcmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKyAiIiApOworfTsKKworCisvLyBDcm9zcy1i
cm93c2VyIHhtbCBwYXJzaW5nCitqUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHsK
KyAgICB2YXIgeG1sOworICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmci
ICkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvLyBTdXBwb3J0OiBJRTkK
KyAgICB0cnkgeworICAgICAgICB4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJz
ZUZyb21TdHJpbmcoIGRhdGEsICJ0ZXh0L3htbCIgKTsKKyAgICB9IGNhdGNoICggZSApIHsKKyAg
ICAgICAgeG1sID0gdW5kZWZpbmVkOworICAgIH0KKworICAgIGlmICggIXhtbCB8fCB4bWwuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoICJwYXJzZXJlcnJvciIgKS5sZW5ndGggKSB7CisgICAgICAgIGpR
dWVyeS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOworICAgIH0KKyAgICByZXR1cm4g
eG1sOworfTsKKworCit2YXIKKyAgICByaGFzaCA9IC8jLiokLywKKyAgICBydHMgPSAvKFs/Jl0p
Xz1bXiZdKi8sCisgICAgcmhlYWRlcnMgPSAvXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL21nLAor
CisgICAgLy8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uCisg
ICAgcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNp
b258ZmlsZXxyZXN8d2lkZ2V0KTokLywKKyAgICBybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkk
LywKKyAgICBycHJvdG9jb2wgPSAvXlwvXC8vLAorCisgICAgLyogUHJlZmlsdGVycworICAgICAq
IDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFq
YXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpCisgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoK
KyAgICAgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CisgICAgICogICAgLSBB
RlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNz
RGF0YSBpcyB0cnVlKQorICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKKyAgICAgKiA0KSB0
aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAorICAgICAqIDUpIGV4ZWN1dGlvbiB3
aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24g
dG8gIioiIGlmIG5lZWRlZAorICAgICAqLworICAgIHByZWZpbHRlcnMgPSB7fSwKKworICAgIC8q
IFRyYW5zcG9ydHMgYmluZGluZ3MKKyAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAg
ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAgKiAzKSBzZWxl
Y3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAi
KiIgaWYgbmVlZGVkCisgICAgICovCisgICAgdHJhbnNwb3J0cyA9IHt9LAorCisgICAgLy8gQXZv
aWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxp
bnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uCisgICAgYWxsVHlwZXMgPSAiKi8iLmNvbmNhdCggIioi
ICksCisKKyAgICAvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW4K
KyAgICBvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKKyAgICBv
cmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7CisKKy8vIEJhc2UgImNvbnN0cnVjdG9y
IiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CitmdW5j
dGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKKworICAgIC8v
IGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCisgICAg
cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKyAgICAgICAg
aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAg
ICAgIGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247CisgICAgICAgICAgICBkYXRhVHlwZUV4cHJl
c3Npb24gPSAiKiI7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZGF0YVR5cGUsCisgICAgICAg
ICAgICBpID0gMCwKKyAgICAgICAgICAgIGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50
b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKKworICAgICAgICBpZiAoIGpR
dWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIGRh
dGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24KKyAgICAgICAgICAgIHdoaWxlICggKCBk
YXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHsKKworICAgICAgICAgICAgICAgIC8vIFBy
ZXBlbmQgaWYgcmVxdWVzdGVkCisgICAgICAgICAgICAgICAgaWYgKCBkYXRhVHlwZVsgMCBdID09
PSAiKyIgKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2Uo
IDEgKSB8fCAiKiI7CisgICAgICAgICAgICAgICAgICAgICggc3RydWN0dXJlWyBkYXRhVHlwZSBd
ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApOworCisgICAg
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGFwcGVuZAorICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJl
WyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9CisKKy8vIEJhc2UgaW5zcGVjdGlvbiBm
dW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cworZnVuY3Rpb24gaW5zcGVjdFBy
ZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25z
LCBqcVhIUiApIHsKKworICAgIHZhciBpbnNwZWN0ZWQgPSB7fSwKKyAgICAgICAgc2Vla2luZ1Ry
YW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7CisKKyAgICBmdW5jdGlvbiBp
bnNwZWN0KCBkYXRhVHlwZSApIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkOworICAgICAgICBpbnNw
ZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlOworICAgICAgICBqUXVlcnkuZWFjaCggc3RydWN0dXJl
WyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkgewor
ICAgICAgICAgICAgdmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3Rvcnko
IG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKKyAgICAgICAgICAgIGlmICggdHlw
ZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09ICJzdHJpbmciICYmCisgICAgICAgICAgICAgICAg
IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkg
eworCisgICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVP
clRyYW5zcG9ydCApOworICAgICAgICAgICAgICAgIGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3Bv
cnQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCBzZWVraW5nVHJhbnNwb3J0ICkgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCBzZWxl
Y3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAp
OworICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7CisgICAgfQorCisgICAgcmV0dXJuIGluc3BlY3Qo
IG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyAiKiIgXSAmJiBpbnNwZWN0
KCAiKiIgKTsKK30KKworLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCisvLyB0
aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZCkKKy8vIEZp
eGVzICM5ODg3CitmdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHsKKyAgICB2YXIg
a2V5LCBkZWVwLAorICAgICAgICBmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxh
dE9wdGlvbnMgfHwge307CisKKyAgICBmb3IgKCBrZXkgaW4gc3JjICkgeworICAgICAgICBpZiAo
IHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICggZmxhdE9wdGlvbnNb
IGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNy
Y1sga2V5IF07CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCBkZWVwICkgeworICAgICAgICBq
UXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dGFyZ2V0OworfQorCisvKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6Cisg
KiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5
cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQorICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5n
IHJlc3BvbnNlCisgKi8KK2Z1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCBy
ZXNwb25zZXMgKSB7CisKKyAgICB2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0
YVR5cGUsCisgICAgICAgIGNvbnRlbnRzID0gcy5jb250ZW50cywKKyAgICAgICAgZGF0YVR5cGVz
ID0gcy5kYXRhVHlwZXM7CisKKyAgICAvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNv
bnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcworICAgIHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09
ICIqIiApIHsKKyAgICAgICAgZGF0YVR5cGVzLnNoaWZ0KCk7CisgICAgICAgIGlmICggY3QgPT09
IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRS
ZXNwb25zZUhlYWRlciggIkNvbnRlbnQtVHlwZSIgKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZQorICAg
IGlmICggY3QgKSB7CisgICAgICAgIGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7CisgICAgICAg
ICAgICBpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCAp
ICkgeworICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0
YVR5cGUKKyAgICBpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHsKKyAgICAgICAg
ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOworICAgIH0gZWxzZSB7CisKKyAgICAgICAg
Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlcworICAgICAgICBmb3IgKCB0eXBlIGluIHJlc3Bv
bnNlcyApIHsKKyAgICAgICAgICAgIGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVy
c1sgdHlwZSArICIgIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7CisgICAgICAgICAgICAgICAgZmlu
YWxEYXRhVHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoICFmaXJzdERhdGFUeXBlICkgeworICAgICAgICAgICAgICAgIGZp
cnN0RGF0YVR5cGUgPSB0eXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lCisgICAgICAgIGZpbmFsRGF0YVR5cGUgPSBmaW5hbERh
dGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7CisgICAgfQorCisgICAgLy8gSWYgd2UgZm91bmQgYSBk
YXRhVHlwZQorICAgIC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVk
CisgICAgLy8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZQorICAgIGlmICgg
ZmluYWxEYXRhVHlwZSApIHsKKyAgICAgICAgaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlw
ZXNbIDAgXSApIHsKKyAgICAgICAgICAgIGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBl
ICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBd
OworICAgIH0KK30KKworLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5k
IHRoZSBvcmlnaW5hbCByZXNwb25zZQorICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVs
ZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlCisgKi8KK2Z1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCBy
ZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHsKKyAgICB2YXIgY29udjIsIGN1cnJlbnQsIGNv
bnYsIHRtcCwgcHJldiwKKyAgICAgICAgY29udmVydGVycyA9IHt9LAorCisgICAgICAgIC8vIFdv
cmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQg
Zm9yIGNvbnZlcnNpb24KKyAgICAgICAgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTsK
KworICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5cworICAg
IGlmICggZGF0YVR5cGVzWyAxIF0gKSB7CisgICAgICAgIGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0
ZXJzICkgeworICAgICAgICAgICAgY29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBz
LmNvbnZlcnRlcnNbIGNvbnYgXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGN1cnJlbnQgPSBk
YXRhVHlwZXMuc2hpZnQoKTsKKworICAgIC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRh
dGFUeXBlCisgICAgd2hpbGUgKCBjdXJyZW50ICkgeworCisgICAgICAgIGlmICggcy5yZXNwb25z
ZUZpZWxkc1sgY3VycmVudCBdICkgeworICAgICAgICAgICAganFYSFJbIHMucmVzcG9uc2VGaWVs
ZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBs
eSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAorICAgICAgICBpZiAoICFwcmV2ICYmIGlzU3Vj
Y2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7CisgICAgICAgICAgICByZXNwb25zZSA9IHMuZGF0YUZp
bHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXYg
PSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7CisKKyAgICAg
ICAgaWYgKCBjdXJyZW50ICkgeworCisgICAgICAgIC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRv
IGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KKyAgICAgICAgICAgIGlmICggY3VycmVu
dCA9PT0gIioiICkgeworCisgICAgICAgICAgICAgICAgY3VycmVudCA9IHByZXY7CisKKyAgICAg
ICAgICAgIC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBh
bmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHByZXYgIT09
ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgeworCisgICAgICAgICAgICAgICAgLy8gU2VlayBh
IGRpcmVjdCBjb252ZXJ0ZXIKKyAgICAgICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJl
diArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOworCisg
ICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXIKKyAgICAgICAgICAg
ICAgICBpZiAoICFjb252ICkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKCBjb252MiBpbiBj
b252ZXJ0ZXJzICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjb252MiBvdXRw
dXRzIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGNvbnYyLnNwbGl0KCAi
ICIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQg
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2IGNhbiBiZSBjb252
ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252
ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsgMCBdIF0gfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udmVydGVyc1sgIiogIiArIHRtcFsgMCBdIF07CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICkgeworCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ID09PSB0cnVlICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhl
IGludGVybWVkaWF0ZSBkYXRhVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRtcFsgMCBdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZh
bGVuY2UpCisgICAgICAgICAgICAgICAgaWYgKCBjb252ICE9PSB0cnVlICkgeworCisgICAgICAg
ICAgICAgICAgICAgIC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRj
aCBhbmQgcmV0dXJuIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICYmIHMudGhy
b3dzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBjb252KCByZXNwb25z
ZSApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJl
c3BvbnNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZTogInBhcnNlcmVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIg
dG8gIiArIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgc3RhdGU6
ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKK30KKworalF1ZXJ5LmV4dGVuZCggeworCisg
ICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCisg
ICAgYWN0aXZlOiAwLAorCisgICAgLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5l
eHQgcmVxdWVzdAorICAgIGxhc3RNb2RpZmllZDoge30sCisgICAgZXRhZzoge30sCisKKyAgICBh
amF4U2V0dGluZ3M6IHsKKyAgICAgICAgdXJsOiBsb2NhdGlvbi5ocmVmLAorICAgICAgICB0eXBl
OiAiR0VUIiwKKyAgICAgICAgaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24u
cHJvdG9jb2wgKSwKKyAgICAgICAgZ2xvYmFsOiB0cnVlLAorICAgICAgICBwcm9jZXNzRGF0YTog
dHJ1ZSwKKyAgICAgICAgYXN5bmM6IHRydWUsCisgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGlj
YXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IiwKKyAgICAgICAgLyoK
KyAgICAgICAgdGltZW91dDogMCwKKyAgICAgICAgZGF0YTogbnVsbCwKKyAgICAgICAgZGF0YVR5
cGU6IG51bGwsCisgICAgICAgIHVzZXJuYW1lOiBudWxsLAorICAgICAgICBwYXNzd29yZDogbnVs
bCwKKyAgICAgICAgY2FjaGU6IG51bGwsCisgICAgICAgIHRocm93czogZmFsc2UsCisgICAgICAg
IHRyYWRpdGlvbmFsOiBmYWxzZSwKKyAgICAgICAgaGVhZGVyczoge30sCisgICAgICAgICovCisK
KyAgICAgICAgYWNjZXB0czogeworICAgICAgICAgICAgIioiOiBhbGxUeXBlcywKKyAgICAgICAg
ICAgIHRleHQ6ICJ0ZXh0L3BsYWluIiwKKyAgICAgICAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAor
ICAgICAgICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsCisgICAgICAgICAg
ICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IgorICAgICAgICB9LAor
CisgICAgICAgIGNvbnRlbnRzOiB7CisgICAgICAgICAgICB4bWw6IC9cYnhtbFxiLywKKyAgICAg
ICAgICAgIGh0bWw6IC9cYmh0bWwvLAorICAgICAgICAgICAganNvbjogL1xianNvblxiLworICAg
ICAgICB9LAorCisgICAgICAgIHJlc3BvbnNlRmllbGRzOiB7CisgICAgICAgICAgICB4bWw6ICJy
ZXNwb25zZVhNTCIsCisgICAgICAgICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IiwKKyAgICAgICAg
ICAgIGpzb246ICJyZXNwb25zZUpTT04iCisgICAgICAgIH0sCisKKyAgICAgICAgLy8gRGF0YSBj
b252ZXJ0ZXJzCisgICAgICAgIC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCAi
KiIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlCisgICAgICAgIGNv
bnZlcnRlcnM6IHsKKworICAgICAgICAgICAgLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0Cisg
ICAgICAgICAgICAiKiB0ZXh0IjogU3RyaW5nLAorCisgICAgICAgICAgICAvLyBUZXh0IHRvIGh0
bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikKKyAgICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0
cnVlLAorCisgICAgICAgICAgICAvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9u
CisgICAgICAgICAgICAidGV4dCBqc29uIjogalF1ZXJ5LnBhcnNlSlNPTiwKKworICAgICAgICAg
ICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwKKyAgICAgICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5w
YXJzZVhNTAorICAgICAgICB9LAorCisgICAgICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxk
bid0IGJlIGRlZXAgZXh0ZW5kZWQ6CisgICAgICAgIC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1
c3RvbSBvcHRpb25zIGhlcmUgaWYKKyAgICAgICAgLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUg
dGhhdCBzaG91bGRuJ3QgYmUKKyAgICAgICAgLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRl
bmQpCisgICAgICAgIGZsYXRPcHRpb25zOiB7CisgICAgICAgICAgICB1cmw6IHRydWUsCisgICAg
ICAgICAgICBjb250ZXh0OiB0cnVlCisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gQ3JlYXRl
cyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXQKKyAgICAvLyB3aXRo
IGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuCisgICAgLy8gSWYgdGFyZ2V0
IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy4KKyAgICBhamF4U2V0dXA6IGZ1
bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkgeworICAgICAgICByZXR1cm4gc2V0dGluZ3MgPwor
CisgICAgICAgICAgICAvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdAorICAgICAgICAgICAg
YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNl
dHRpbmdzICkgOgorCisgICAgICAgICAgICAvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzCisgICAg
ICAgICAgICBhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTsKKyAgICB9
LAorCisgICAgYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVm
aWx0ZXJzICksCisgICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRz
KCB0cmFuc3BvcnRzICksCisKKyAgICAvLyBNYWluIG1ldGhvZAorICAgIGFqYXg6IGZ1bmN0aW9u
KCB1cmwsIG9wdGlvbnMgKSB7CisKKyAgICAgICAgLy8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2lt
dWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKKyAgICAgICAgaWYgKCB0eXBlb2YgdXJsID09PSAib2Jq
ZWN0IiApIHsKKyAgICAgICAgICAgIG9wdGlvbnMgPSB1cmw7CisgICAgICAgICAgICB1cmwgPSB1
bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFu
IG9iamVjdAorICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworICAgICAgICB2YXIg
dHJhbnNwb3J0LAorCisgICAgICAgICAgICAvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFt
CisgICAgICAgICAgICBjYWNoZVVSTCwKKworICAgICAgICAgICAgLy8gUmVzcG9uc2UgaGVhZGVy
cworICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nLAorICAgICAgICAgICAgcmVzcG9u
c2VIZWFkZXJzLAorCisgICAgICAgICAgICAvLyB0aW1lb3V0IGhhbmRsZQorICAgICAgICAgICAg
dGltZW91dFRpbWVyLAorCisgICAgICAgICAgICAvLyBVcmwgY2xlYW51cCB2YXIKKyAgICAgICAg
ICAgIHVybEFuY2hvciwKKworICAgICAgICAgICAgLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRz
IGFyZSB0byBiZSBkaXNwYXRjaGVkCisgICAgICAgICAgICBmaXJlR2xvYmFscywKKworICAgICAg
ICAgICAgLy8gTG9vcCB2YXJpYWJsZQorICAgICAgICAgICAgaSwKKworICAgICAgICAgICAgLy8g
Q3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAorICAgICAgICAgICAgcyA9IGpRdWVyeS5h
amF4U2V0dXAoIHt9LCBvcHRpb25zICksCisKKyAgICAgICAgICAgIC8vIENhbGxiYWNrcyBjb250
ZXh0CisgICAgICAgICAgICBjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKKworICAg
ICAgICAgICAgLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQg
aWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvbgorICAgICAgICAgICAgZ2xv
YmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmCisgICAgICAgICAgICAgICAgKCBjYWxsYmFj
a0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID8KKyAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6CisgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudCwKKworICAgICAgICAgICAgLy8gRGVmZXJyZWRzCisgICAgICAgICAg
ICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAorICAgICAgICAgICAgY29tcGxldGVEZWZl
cnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwKKworICAgICAgICAgICAg
Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKyAgICAgICAgICAgIHN0YXR1c0NvZGUgPSBz
LnN0YXR1c0NvZGUgfHwge30sCisKKyAgICAgICAgICAgIC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNl
bnQgYWxsIGF0IG9uY2UpCisgICAgICAgICAgICByZXF1ZXN0SGVhZGVycyA9IHt9LAorICAgICAg
ICAgICAgcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LAorCisgICAgICAgICAgICAvLyBUaGUganFY
SFIgc3RhdGUKKyAgICAgICAgICAgIHN0YXRlID0gMCwKKworICAgICAgICAgICAgLy8gRGVmYXVs
dCBhYm9ydCBtZXNzYWdlCisgICAgICAgICAgICBzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCisKKyAg
ICAgICAgICAgIC8vIEZha2UgeGhyCisgICAgICAgICAgICBqcVhIUiA9IHsKKyAgICAgICAgICAg
ICAgICByZWFkeVN0YXRlOiAwLAorCisgICAgICAgICAgICAgICAgLy8gQnVpbGRzIGhlYWRlcnMg
aGFzaHRhYmxlIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBm
dW5jdGlvbigga2V5ICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2g7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VIZWFkZXJzID0ge307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsg
MSBdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID09IG51bGwg
PyBudWxsIDogbWF0Y2g7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8v
IFJhdyBzdHJpbmcKKyAgICAgICAgICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25z
ZUhlYWRlcnNTdHJpbmcgOiBudWxsOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
ICAgICAvLyBDYWNoZXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFk
ZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxu
YW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVz
WyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29u
dGVudC10eXBlIGhlYWRlcgorICAgICAgICAgICAgICAgIG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0
aW9uKCB0eXBlICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0ZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHMubWltZVR5cGUgPSB0eXBlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0s
CisKKyAgICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworICAgICAg
ICAgICAgICAgIHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBjb2RlOworICAgICAgICAgICAgICAgICAgICBpZiAoIG1hcCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGNvZGUgaW4gbWFwICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2sgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2
ZXMgb2xkIG9uZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZVsg
Y29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNh
bGxiYWNrcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLmFsd2F5cyggbWFwWyBq
cVhIUi5zdGF0dXMgXSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg
ICAgIH0sCisKKyAgICAgICAgICAgICAgICAvLyBDYW5jZWwgdGhlIHJlcXVlc3QKKyAgICAgICAg
ICAgICAgICBhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0OworICAgICAgICAgICAg
ICAgICAgICBpZiAoIHRyYW5zcG9ydCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5z
cG9ydC5hYm9ydCggZmluYWxUZXh0ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZG9uZSggMCwgZmluYWxUZXh0ICk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
Ly8gQXR0YWNoIGRlZmVycmVkcworICAgICAgICBkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApLmNv
bXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7CisgICAgICAgIGpxWEhSLnN1Y2Nlc3MgPSBq
cVhIUi5kb25lOworICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7CisKKyAgICAgICAg
Ly8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCisg
ICAgICAgIC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQg
ZXhwZWN0IGl0KQorICAgICAgICAvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBv
YmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKQorICAgICAgICAv
LyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGUKKyAgICAgICAgcy51
cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArICIiICkucmVwbGFjZSgg
cmhhc2gsICIiICkKKyAgICAgICAgICAgIC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnBy
b3RvY29sICsgIi8vIiApOworCisgICAgICAgIC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlw
ZSBhcyBwZXIgdGlja2V0ICMxMjAwNAorICAgICAgICBzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8
fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlOworCisgICAgICAgIC8vIEV4dHJh
Y3QgZGF0YVR5cGVzIGxpc3QKKyAgICAgICAgcy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5k
YXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbICIi
IF07CisKKyAgICAgICAgLy8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVu
IHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uCisgICAgICAgIGlm
ICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkgeworICAgICAgICAgICAgdXJsQW5jaG9yID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CisKKyAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElF
OC0xMSsKKyAgICAgICAgICAgIC8vIElFIHRocm93cyBleGNlcHRpb24gaWYgdXJsIGlzIG1hbGZv
cm1lZCwgZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4LworICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICB1cmxBbmNob3IuaHJlZiA9IHMudXJsOworCisgICAgICAgICAgICAgICAg
Ly8gU3VwcG9ydDogSUU4LTExKworICAgICAgICAgICAgICAgIC8vIEFuY2hvcidzIGhvc3QgcHJv
cGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlCisgICAgICAg
ICAgICAgICAgdXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjsKKyAgICAgICAgICAgICAg
ICBzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgIi8vIiArIG9yaWdpbkFu
Y2hvci5ob3N0ICE9PQorICAgICAgICAgICAgICAgICAgICB1cmxBbmNob3IucHJvdG9jb2wgKyAi
Ly8iICsgdXJsQW5jaG9yLmhvc3Q7CisgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKKworICAg
ICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNz
dW1lIGl0IGlzIGNyb3NzRG9tYWluLAorICAgICAgICAgICAgICAgIC8vIGl0IGNhbiBiZSByZWpl
Y3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWQKKyAgICAgICAgICAgICAgICBz
LmNyb3NzRG9tYWluID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZworICAgICAgICBpZiAoIHMu
ZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgewor
ICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwg
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKKyAgICAgICAgaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhS
ICk7CisKKyAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0
ZXIsIHN0b3AgdGhlcmUKKyAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAgICAgICAgICAg
IHJldHVybiBqcVhIUjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2Jh
bCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCisgICAgICAgIC8vIERvbid0IGZpcmUgZXZl
bnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlv
ICgjMTUxMTgpCisgICAgICAgIGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFs
OworCisgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKKyAgICAgICAg
aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7CisgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFVwcGVyY2FzZSB0aGUgdHlwZQorICAgICAgICBzLnR5cGUgPSBzLnR5cGUudG9VcHBl
ckNhc2UoKTsKKworICAgICAgICAvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudAor
ICAgICAgICBzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKKworICAg
ICAgICAvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9k
aWZpZWQtU2luY2UKKyAgICAgICAgLy8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVy
IG9uCisgICAgICAgIGNhY2hlVVJMID0gcy51cmw7CisKKyAgICAgICAgLy8gTW9yZSBvcHRpb25z
IGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnQKKyAgICAgICAgaWYgKCAhcy5o
YXNDb250ZW50ICkgeworCisgICAgICAgICAgICAvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBw
ZW5kIGRhdGEgdG8gdXJsCisgICAgICAgICAgICBpZiAoIHMuZGF0YSApIHsKKyAgICAgICAgICAg
ICAgICBjYWNoZVVSTCA9ICggcy51cmwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/ICIm
IiA6ICI/IiApICsgcy5kYXRhICk7CisKKyAgICAgICAgICAgICAgICAvLyAjOTY4MjogcmVtb3Zl
IGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5CisgICAgICAg
ICAgICAgICAgZGVsZXRlIHMuZGF0YTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
QWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAorICAgICAgICAgICAgaWYgKCBzLmNhY2hl
ID09PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICBzLnVybCA9IHJ0cy50ZXN0KCBjYWNoZVVS
TCApID8KKworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgJ18n
IHBhcmFtZXRlciwgc2V0IGl0cyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBjYWNoZVVSTC5y
ZXBsYWNlKCBydHMsICIkMV89IiArIG5vbmNlKysgKSA6CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlIGFkZCBvbmUgdG8gdGhlIGVuZAorICAgICAgICAgICAgICAgICAgICBjYWNo
ZVVSTCArICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyAiJiIgOiAiPyIgKSArICJfPSIgKyBu
b25jZSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBJ
Zi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9k
aWZpZWQgbW9kZS4KKyAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7CisgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7CisgICAgICAgICAgICAgICAg
anFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1vZGlmaWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RN
b2RpZmllZFsgY2FjaGVVUkwgXSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCBq
UXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHsKKyAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1
ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIGNvcnJlY3QgaGVh
ZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnQKKyAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5oYXND
b250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUg
KSB7CisgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiQ29udGVudC1UeXBlIiwg
cy5jb250ZW50VHlwZSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0IHRoZSBBY2NlcHRz
IGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQorICAgICAg
ICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKAorICAgICAgICAgICAgIkFjY2VwdCIsCisgICAgICAg
ICAgICBzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID8K
KyAgICAgICAgICAgICAgICBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArCisgICAgICAg
ICAgICAgICAgICAgICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVz
ICsgIjsgcT0wLjAxIiA6ICIiICkgOgorICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0K
KyAgICAgICAgKTsKKworICAgICAgICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KKyAgICAg
ICAgZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7CisgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0
SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxs
b3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAorICAgICAgICBpZiAo
IHMuYmVmb3JlU2VuZCAmJgorICAgICAgICAgICAgKCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJh
Y2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkgeworCisg
ICAgICAgICAgICAvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm4KKyAgICAg
ICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWJv
cnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uCisgICAgICAgIHN0ckFib3J0ID0gImFi
b3J0IjsKKworICAgICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHMKKyAgICAg
ICAgZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgewor
ICAgICAgICAgICAganFYSFJbIGkgXSggc1sgaSBdICk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBHZXQgdHJhbnNwb3J0CisgICAgICAgIHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApOworCisgICAgICAgIC8v
IElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAorICAgICAgICBpZiAoICF0cmFuc3BvcnQg
KSB7CisgICAgICAgICAgICBkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSAxOworCisgICAgICAgICAgICAv
LyBTZW5kIGdsb2JhbCBldmVudAorICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKKyAg
ICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhTZW5kIiwgWyBq
cVhIUiwgcyBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHJlcXVlc3Qg
d2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlCisgICAgICAgICAgICBpZiAo
IHN0YXRlID09PSAyICkgeworICAgICAgICAgICAgICAgIHJldHVybiBqcVhIUjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gVGltZW91dAorICAgICAgICAgICAgaWYgKCBzLmFzeW5j
ICYmIHMudGltZW91dCA+IDAgKSB7CisgICAgICAgICAgICAgICAgdGltZW91dFRpbWVyID0gd2lu
ZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBqcVhIUi5h
Ym9ydCggInRpbWVvdXQiICk7CisgICAgICAgICAgICAgICAgfSwgcy50aW1lb3V0ICk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAx
OworICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSAp
OworICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBQcm9w
YWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCisgICAgICAgICAgICAgICAgaWYg
KCBzdGF0ZSA8IDIgKSB7CisgICAgICAgICAgICAgICAgICAgIGRvbmUoIC0xLCBlICk7CisKKyAg
ICAgICAgICAgICAgICAvLyBTaW1wbHkgcmV0aHJvdyBvdGhlcndpc2UKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGxiYWNrIGZvciB3
aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQorICAgICAgICBmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5h
dGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKKyAgICAgICAgICAgIHZhciBp
c1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsCisgICAgICAgICAg
ICAgICAgc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7CisKKyAgICAgICAgICAgIC8vIENh
bGxlZCBvbmNlCisgICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3RhdGUgaXMgImRv
bmUiIG5vdworICAgICAgICAgICAgc3RhdGUgPSAyOworCisgICAgICAgICAgICAvLyBDbGVhciB0
aW1lb3V0IGlmIGl0IGV4aXN0cworICAgICAgICAgICAgaWYgKCB0aW1lb3V0VGltZXIgKSB7Cisg
ICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFy
bHkgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgICAgICAvLyAobm8gbWF0dGVyIGhvdyBsb25n
IHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0g
dW5kZWZpbmVkOworCisgICAgICAgICAgICAvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzCisgICAg
ICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8ICIiOworCisgICAgICAg
ICAgICAvLyBTZXQgcmVhZHlTdGF0ZQorICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IHN0
YXR1cyA+IDAgPyA0IDogMDsKKworICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3Nm
dWwKKyAgICAgICAgICAgIGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAw
IHx8IHN0YXR1cyA9PT0gMzA0OworCisgICAgICAgICAgICAvLyBHZXQgcmVzcG9uc2UgZGF0YQor
ICAgICAgICAgICAgaWYgKCByZXNwb25zZXMgKSB7CisgICAgICAgICAgICAgICAgcmVzcG9uc2Ug
PSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJl
c3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldCkKKyAgICAgICAgICAgIHJlc3BvbnNlID0g
YWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7CisKKyAgICAgICAg
ICAgIC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nCisgICAgICAgICAgICBp
ZiAoIGlzU3VjY2VzcyApIHsKKworICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgSWYtTW9kaWZp
ZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1v
ZGUuCisgICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJMYXN0LU1vZGlmaWVk
IiApOworICAgICAgICAgICAgICAgICAgICBpZiAoIG1vZGlmaWVkICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFY
SFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJldGFnIiApOworICAgICAgICAgICAgICAgICAgICBpZiAo
IG1vZGlmaWVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV0YWdbIGNhY2hl
VVJMIF0gPSBtb2RpZmllZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIGlmIG5vIGNvbnRlbnQKKyAgICAgICAgICAgICAgICBp
ZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gIkhFQUQiICkgeworICAgICAgICAgICAg
ICAgICAgICBzdGF0dXNUZXh0ID0gIm5vY29udGVudCI7CisKKyAgICAgICAgICAgICAgICAvLyBp
ZiBub3QgbW9kaWZpZWQKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMw
NCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7CisK
KyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXQKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0g
cmVzcG9uc2Uuc3RhdGU7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSByZXNwb25zZS5k
YXRhOworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHJlc3BvbnNlLmVycm9yOworICAgICAg
ICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSAhZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZXJyb3IgZnJv
bSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHMKKyAgICAgICAgICAgICAg
ICBlcnJvciA9IHN0YXR1c1RleHQ7CisgICAgICAgICAgICAgICAgaWYgKCBzdGF0dXMgfHwgIXN0
YXR1c1RleHQgKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAiZXJyb3IiOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZXQgZGF0YSBmb3IgdGhlIGZh
a2UgeGhyIG9iamVjdAorICAgICAgICAgICAganFYSFIuc3RhdHVzID0gc3RhdHVzOworICAgICAg
ICAgICAganFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0
ICkgKyAiIjsKKworICAgICAgICAgICAgLy8gU3VjY2Vzcy9FcnJvcgorICAgICAgICAgICAgaWYg
KCBpc1N1Y2Nlc3MgKSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNh
bGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxi
YWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworICAgICAgICAg
ICAganFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOworICAgICAgICAgICAgc3RhdHVzQ29k
ZSA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKKyAgICAg
ICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gImFqYXhT
dWNjZXNzIiA6ICJhamF4RXJyb3IiLAorICAgICAgICAgICAgICAgICAgICBbIGpxWEhSLCBzLCBp
c1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBDb21wbGV0ZQorICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCgg
Y2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKKworICAgICAgICAgICAg
aWYgKCBmaXJlR2xvYmFscyApIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQu
dHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHMgXSApOworCisgICAgICAgICAgICAg
ICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCisgICAgICAgICAgICAgICAgaWYg
KCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2
ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ganFYSFI7CisgICAgfSwKKworICAgIGdl
dEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgeworICAgICAgICByZXR1cm4g
alF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7CisgICAgfSwKKworICAg
IGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBq
UXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisgICAgfQor
fSApOworCitqUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRo
b2QgKSB7CisgICAgalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxi
YWNrLCB0eXBlICkgeworCisgICAgICAgIC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3Vt
ZW50IHdhcyBvbWl0dGVkCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSAp
IHsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrOworICAgICAgICAgICAgY2Fs
bGJhY2sgPSBkYXRhOworICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVu
IG11c3QgaGF2ZSAudXJsKQorICAgICAgICByZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRl
bmQoIHsKKyAgICAgICAgICAgIHVybDogdXJsLAorICAgICAgICAgICAgdHlwZTogbWV0aG9kLAor
ICAgICAgICAgICAgZGF0YVR5cGU6IHR5cGUsCisgICAgICAgICAgICBkYXRhOiBkYXRhLAorICAg
ICAgICAgICAgc3VjY2VzczogY2FsbGJhY2sKKyAgICAgICAgfSwgalF1ZXJ5LmlzUGxhaW5PYmpl
Y3QoIHVybCApICYmIHVybCApICk7CisgICAgfTsKK30gKTsKKworCitqUXVlcnkuX2V2YWxVcmwg
PSBmdW5jdGlvbiggdXJsICkgeworICAgIHJldHVybiBqUXVlcnkuYWpheCggeworICAgICAgICB1
cmw6IHVybCwKKworICAgICAgICAvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2Fu
IG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NCkKKyAgICAgICAgdHlwZTog
IkdFVCIsCisgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKKyAgICAgICAgYXN5bmM6IGZhbHNl
LAorICAgICAgICBnbG9iYWw6IGZhbHNlLAorICAgICAgICAidGhyb3dzIjogdHJ1ZQorICAgIH0g
KTsKK307CisKKworalF1ZXJ5LmZuLmV4dGVuZCggeworICAgIHdyYXBBbGw6IGZ1bmN0aW9uKCBo
dG1sICkgeworICAgICAgICB2YXIgd3JhcDsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCBodG1sICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigg
aSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sLmNhbGwo
IHRoaXMsIGkgKSApOworICAgICAgICAgICAgfSApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCB0aGlzWyAwIF0gKSB7CisKKyAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRo
ZSB0YXJnZXQgYXJvdW5kCisgICAgICAgICAgICB3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAw
IF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTsKKworICAgICAgICAgICAg
aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICB3cmFwLmluc2Vy
dEJlZm9yZSggdGhpc1sgMCBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdyYXAu
bWFwKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7CisKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtOworICAgICAgICAgICAgfSApLmFw
cGVuZCggdGhpcyApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwK
KworICAgIHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIGlmICggalF1ZXJ5
LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1
bmN0aW9uKCBpICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBJbm5lcigg
aHRtbC5jYWxsKCB0aGlzLCBpICkgKTsKKyAgICAgICAgICAgIH0gKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHNl
bGYgPSBqUXVlcnkoIHRoaXMgKSwKKyAgICAgICAgICAgICAgICBjb250ZW50cyA9IHNlbGYuY29u
dGVudHMoKTsKKworICAgICAgICAgICAgaWYgKCBjb250ZW50cy5sZW5ndGggKSB7CisgICAgICAg
ICAgICAgICAgY29udGVudHMud3JhcEFsbCggaHRtbCApOworCisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCBodG1sICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gKTsKKyAgICB9LAorCisgICAgd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAg
ICAgIHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKKworICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgIGpRdWVyeSgg
dGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwg
KTsKKyAgICAgICAgfSApOworICAgIH0sCisKKyAgICB1bndyYXA6IGZ1bmN0aW9uKCkgeworICAg
ICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgImJvZHkiICkgKSB7CisgICAgICAgICAgICAg
ICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOworICAgICAg
ICAgICAgfQorICAgICAgICB9ICkuZW5kKCk7CisgICAgfQorfSApOworCisKK2pRdWVyeS5leHBy
LmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgcmV0dXJuICFqUXVlcnku
ZXhwci5maWx0ZXJzLnZpc2libGUoIGVsZW0gKTsKK307CitqUXVlcnkuZXhwci5maWx0ZXJzLnZp
c2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKKworICAgIC8vIFN1cHBvcnQ6IE9wZXJhIDw9IDEy
LjEyCisgICAgLy8gT3BlcmEgcmVwb3J0cyBvZmZzZXRXaWR0aHMgYW5kIG9mZnNldEhlaWdodHMg
bGVzcyB0aGFuIHplcm8gb24gc29tZSBlbGVtZW50cworICAgIC8vIFVzZSBPUiBpbnN0ZWFkIG9m
IEFORCBhcyB0aGUgZWxlbWVudCBpcyBub3QgdmlzaWJsZSBpZiBlaXRoZXIgaXMgdHJ1ZQorICAg
IC8vIFNlZSB0aWNrZXRzICMxMDQwNiBhbmQgIzEzMTMyCisgICAgcmV0dXJuIGVsZW0ub2Zmc2V0
V2lkdGggPiAwIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0ID4gMCB8fCBlbGVtLmdldENsaWVudFJlY3Rz
KCkubGVuZ3RoID4gMDsKK307CisKKworCisKK3ZhciByMjAgPSAvJTIwL2csCisgICAgcmJyYWNr
ZXQgPSAvXFtcXSQvLAorICAgIHJDUkxGID0gL1xyP1xuL2csCisgICAgcnN1Ym1pdHRlclR5cGVz
ID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLAorICAgIHJzdWJtaXR0
YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTsKKworZnVuY3Rpb24g
YnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkgeworICAgIHZhciBu
YW1lOworCisgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7CisKKyAgICAgICAgLy8g
U2VyaWFsaXplIGFycmF5IGl0ZW0uCisgICAgICAgIGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9u
KCBpLCB2ICkgeworICAgICAgICAgICAgaWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0
KCBwcmVmaXggKSApIHsKKworICAgICAgICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRl
bSBhcyBhIHNjYWxhci4KKyAgICAgICAgICAgICAgICBhZGQoIHByZWZpeCwgdiApOworCisgICAg
ICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgLy8gSXRlbSBpcyBub24tc2NhbGFy
IChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguCisgICAgICAgICAg
ICAgICAgYnVpbGRQYXJhbXMoCisgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICJbIiArICgg
dHlwZW9mIHYgPT09ICJvYmplY3QiICYmIHYgIT0gbnVsbCA/IGkgOiAiIiApICsgIl0iLAorICAg
ICAgICAgICAgICAgICAgICB2LAorICAgICAgICAgICAgICAgICAgICB0cmFkaXRpb25hbCwKKyAg
ICAgICAgICAgICAgICAgICAgYWRkCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSApOworCisgICAgfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50
eXBlKCBvYmogKSA9PT0gIm9iamVjdCIgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIG9iamVj
dCBpdGVtLgorICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgIGJ1aWxk
UGFyYW1zKCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9u
YWwsIGFkZCApOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIFNlcmlh
bGl6ZSBzY2FsYXIgaXRlbS4KKyAgICAgICAgYWRkKCBwcmVmaXgsIG9iaiApOworICAgIH0KK30K
KworLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKKy8v
IGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZworalF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24o
IGEsIHRyYWRpdGlvbmFsICkgeworICAgIHZhciBwcmVmaXgsCisgICAgICAgIHMgPSBbXSwKKyAg
ICAgICAgYWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CisKKyAgICAgICAgICAgIC8vIElm
IHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZQorICAg
ICAgICAgICAgdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAo
IHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICk7CisgICAgICAgICAgICBzWyBzLmxlbmd0aCBd
ID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCgg
dmFsdWUgKTsKKyAgICAgICAgfTsKKworICAgIC8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZv
ciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuCisgICAgaWYgKCB0cmFkaXRpb25hbCA9PT0gdW5k
ZWZpbmVkICkgeworICAgICAgICB0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MgJiYg
alF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDsKKyAgICB9CisKKyAgICAvLyBJZiBhbiBh
cnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVs
ZW1lbnRzLgorICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFq
UXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7CisKKyAgICAgICAgLy8gU2VyaWFsaXplIHRo
ZSBmb3JtIGVsZW1lbnRzCisgICAgICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CisgICAgICAgIH0gKTsKKwor
ICAgIH0gZWxzZSB7CisKKyAgICAgICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgIm9s
ZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCisgICAgICAgIC8vIGRpZCBpdCksIG90aGVy
d2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgorICAgICAgICBmb3IgKCBwcmVmaXggaW4g
YSApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFk
aXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIHJl
c3VsdGluZyBzZXJpYWxpemF0aW9uCisgICAgcmV0dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSgg
cjIwLCAiKyIgKTsKK307CisKK2pRdWVyeS5mbi5leHRlbmQoIHsKKyAgICBzZXJpYWxpemU6IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFy
cmF5KCkgKTsKKyAgICB9LAorICAgIHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgLy8gQ2FuIGFk
ZCBwcm9wSG9vayBmb3IgImVsZW1lbnRzIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHMK
KyAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCAiZWxlbWVudHMi
ICk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVt
ZW50cyApIDogdGhpczsKKyAgICAgICAgfSApCisgICAgICAgIC5maWx0ZXIoIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7CisKKyAgICAgICAgICAgIC8vIFVz
ZSAuaXMoICI6ZGlzYWJsZWQiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3MKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCAiOmRpc2Fi
bGVkIiApICYmCisgICAgICAgICAgICAgICAgcnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5h
bWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJgorICAgICAgICAgICAgICAg
ICggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTsKKyAgICAg
ICAgfSApCisgICAgICAgIC5tYXAoIGZ1bmN0aW9uKCBpLCBlbGVtICkgeworICAgICAgICAgICAg
dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisgICAgICAgICAgICByZXR1cm4gdmFs
ID09IG51bGwgPworICAgICAgICAgICAgICAgIG51bGwgOgorICAgICAgICAgICAgICAgIGpRdWVy
eS5pc0FycmF5KCB2YWwgKSA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHZhbCwg
ZnVuY3Rpb24oIHZhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG5hbWU6
IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKKyAgICAg
ICAgICAgICAgICAgICAgfSApIDoKKyAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBlbGVtLm5h
bWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJcclxuIiApIH07CisgICAgICAgIH0gKS5n
ZXQoKTsKKyAgICB9Cit9ICk7CisKKworalF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlv
bigpIHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVz
dCgpOworICAgIH0gY2F0Y2ggKCBlICkge30KK307CisKK3ZhciB4aHJTdWNjZXNzU3RhdHVzID0g
eworCisgICAgICAgIC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAw
LCBhc3N1bWUgMjAwCisgICAgICAgIDA6IDIwMCwKKworICAgICAgICAvLyBTdXBwb3J0OiBJRTkK
KyAgICAgICAgLy8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91
bGQgYmUgMjA0CisgICAgICAgIDEyMjM6IDIwNAorICAgIH0sCisgICAgeGhyU3VwcG9ydGVkID0g
alF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTsKKworc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0
ZWQgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHJTdXBwb3J0ZWQgKTsKK3N1cHBvcnQuYWph
eCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkOworCitqUXVlcnkuYWpheFRyYW5zcG9y
dCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisgICAgdmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNr
OworCisgICAgLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3Vn
aCBYTUxIdHRwUmVxdWVzdAorICAgIGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAm
JiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKKyAgICAgICAgICAgICAgICB2
YXIgaSwKKyAgICAgICAgICAgICAgICAgICAgeGhyID0gb3B0aW9ucy54aHIoKTsKKworICAgICAg
ICAgICAgICAgIHhoci5vcGVuKAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUsCisg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXJsLAorICAgICAgICAgICAgICAgICAgICBvcHRp
b25zLmFzeW5jLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVzZXJuYW1lLAorICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zLnBhc3N3b3JkCisgICAgICAgICAgICAgICAgKTsKKworICAg
ICAgICAgICAgICAgIC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWQKKyAgICAgICAg
ICAgICAgICBpZiAoIG9wdGlvbnMueGhyRmllbGRzICkgeworICAgICAgICAgICAgICAgICAgICBm
b3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgbWltZSB0
eXBlIGlmIG5lZWRlZAorICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4
aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKKyAgICAgICAgICAgICAgICAgICAgeGhyLm92ZXJyaWRl
TWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgorICAgICAgICAgICAgICAgIC8v
IEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHBy
ZWZsaWdodCBhcmUKKyAgICAgICAgICAgICAgICAvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwg
d2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgorICAgICAgICAgICAgICAgIC8vIChp
dCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcg
YWpheFNldHVwKQorICAgICAgICAgICAgICAgIC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywg
d29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLgorICAgICAgICAgICAgICAg
IGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbICJYLVJlcXVlc3RlZC1XaXRo
IiBdICkgeworICAgICAgICAgICAgICAgICAgICBoZWFkZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIg
XSA9ICJYTUxIdHRwUmVxdWVzdCI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gU2V0IGhlYWRlcnMKKyAgICAgICAgICAgICAgICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7
CisgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBp
IF0gKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsYmFjawor
ICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBl
cnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
bnVsbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImFib3J0
IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gImVycm9yIiApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJ
RTkgdGhyb3dzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9ycyBvbiBh
bnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gIm51bWJlciIgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggMCwgImVycm9y
IiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGUoCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0
YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhoci5zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeGhyLnN0YXR1c1RleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21w
bGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoclN1Y2Nlc3NTdGF0
dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeGhyLnN0YXR1c1RleHQsCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOSBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMt
MTE0MjYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgWEhSMiBu
b24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCB4aHIucmVzcG9uc2VUeXBlIHx8ICJ0ZXh0IiApICE9
PSAidGV4dCIgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2Yg
eGhyLnJlc3BvbnNlVGV4dCAhPT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFk
ZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIExpc3Rl
biB0byBldmVudHMKKyAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gY2FsbGJhY2soKTsKKyAg
ICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSBjYWxsYmFjayggImVy
cm9yIiApOworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU5CisgICAgICAgICAgICAg
ICAgLy8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnQKKyAgICAgICAg
ICAgICAgICAvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzCisgICAgICAgICAgICAgICAgaWYg
KCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICB4aHIu
b25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgeworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0
IGFzIGl0IGNoYW5nZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyLnJlYWR5U3Rh
dGUgPT09IDQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyBvbmVy
cm9yIHRvIGJlIGNhbGxlZCBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBi
dXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nl
c3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhl
IGFib3J0IGNhbGxiYWNrCisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayggImFi
b3J0IiApOworCisgICAgICAgICAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgICAgICAgICAv
LyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pCisgICAg
ICAgICAgICAgICAgICAgIHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5k
YXRhIHx8IG51bGwgKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVu
IG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldAorICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxi
YWNrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
IGFib3J0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgewor
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9Cit9ICk7CisKKworCisKKy8vIEluc3RhbGwgc2Ny
aXB0IGRhdGFUeXBlCitqUXVlcnkuYWpheFNldHVwKCB7CisgICAgYWNjZXB0czogeworICAgICAg
ICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsICIgKwor
ICAgICAgICAgICAgImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNj
cmlwdCIKKyAgICB9LAorICAgIGNvbnRlbnRzOiB7CisgICAgICAgIHNjcmlwdDogL1xiKD86amF2
YXxlY21hKXNjcmlwdFxiLworICAgIH0sCisgICAgY29udmVydGVyczogeworICAgICAgICAidGV4
dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxF
dmFsKCB0ZXh0ICk7CisgICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgfQorICAgIH0K
K30gKTsKKworLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpbgor
alF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBmdW5jdGlvbiggcyApIHsKKyAgICBpZiAo
IHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgcy5jYWNoZSA9IGZhbHNlOworICAg
IH0KKyAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisgICAgICAgIHMudHlwZSA9ICJHRVQiOwor
ICAgIH0KK30gKTsKKworLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0CitqUXVlcnku
YWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgeworCisgICAgLy8gVGhpcyB0
cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0cworICAgIGlmICgg
cy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgdmFyIHNjcmlwdCwgY2FsbGJhY2s7CisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICBzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7Cisg
ICAgICAgICAgICAgICAgc2NyaXB0ID0galF1ZXJ5KCAiPHNjcmlwdD4iICkucHJvcCggeworICAg
ICAgICAgICAgICAgICAgICBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsCisgICAgICAgICAgICAg
ICAgICAgIHNyYzogcy51cmwKKyAgICAgICAgICAgICAgICB9ICkub24oCisgICAgICAgICAgICAg
ICAgICAgICJsb2FkIGVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5j
dGlvbiggZXZ0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnJlbW92ZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBudWxsOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBldnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGUoIGV2dC50eXBlID09PSAiZXJyb3IiID8gNDA0IDogMjAwLCBldnQudHlwZSApOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKTsKKworICAgICAgICAgICAgICAgIC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0
byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeQorICAgICAgICAgICAgICAgIGRvY3Vt
ZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggY2FsbGJh
Y2sgKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30gKTsKKworCisKKwordmFyIG9s
ZENhbGxiYWNrcyA9IFtdLAorICAgIHJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy87CisKKy8v
IERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pRdWVyeS5hamF4U2V0dXAoIHsKKyAgICBqc29ucDog
ImNhbGxiYWNrIiwKKyAgICBqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIg
KyAoIG5vbmNlKysgKSApOworICAgICAgICB0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIGNhbGxiYWNrOworICAgIH0KK30gKTsKKworLy8gRGV0ZWN0LCBub3JtYWxpemUg
b3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzCitqUXVlcnku
YWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5n
cywganFYSFIgKSB7CisKKyAgICB2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9u
c2VDb250YWluZXIsCisgICAgICAgIGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCBy
anNvbnAudGVzdCggcy51cmwgKSA/CisgICAgICAgICAgICAidXJsIiA6CisgICAgICAgICAgICB0
eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAmJgorICAgICAgICAgICAgICAgICggcy5jb250ZW50
VHlwZSB8fCAiIiApCisgICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKCAiYXBwbGljYXRpb24v
eC13d3ctZm9ybS11cmxlbmNvZGVkIiApID09PSAwICYmCisgICAgICAgICAgICAgICAgcmpzb25w
LnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgorICAgICAgICApOworCisgICAgLy8gSGFuZGxlIGlm
ZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29ucCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRl
ciB0byBzZXQKKyAgICBpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29u
cCIgKSB7CisKKyAgICAgICAgLy8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4
aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAorICAgICAgICBjYWxsYmFja05hbWUgPSBz
Lmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPwor
ICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrKCkgOgorICAgICAgICAgICAgcy5qc29ucENhbGxi
YWNrOworCisgICAgICAgIC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEK
KyAgICAgICAgaWYgKCBqc29uUHJvcCApIHsKKyAgICAgICAgICAgIHNbIGpzb25Qcm9wIF0gPSBz
WyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgIiQxIiArIGNhbGxiYWNrTmFtZSApOworICAg
ICAgICB9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAgIHMudXJs
ICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIg
KyBjYWxsYmFja05hbWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0
ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCisgICAgICAgIHMuY29u
dmVydGVyc1sgInNjcmlwdCBqc29uIiBdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAo
ICFyZXNwb25zZUNvbnRhaW5lciApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIGNh
bGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsKKyAgICAgICAgfTsKKworICAgICAg
ICAvLyBGb3JjZSBqc29uIGRhdGFUeXBlCisgICAgICAgIHMuZGF0YVR5cGVzWyAwIF0gPSAianNv
biI7CisKKyAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFjaworICAgICAgICBvdmVyd3JpdHRlbiA9
IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07CisgICAgICAgIHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0g
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRz
OworICAgICAgICB9OworCisgICAgICAgIC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRl
ciBjb252ZXJ0ZXJzKQorICAgICAgICBqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkgeworCisgICAg
ICAgICAgICAvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXQKKyAg
ICAgICAgICAgIGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAg
ICAgICBqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApOworCisgICAg
ICAgICAgICAvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3Zl
cndyaXR0ZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNhdmUgYmFjayBhcyBm
cmVlCisgICAgICAgICAgICBpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkgeworCisgICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3Jl
dyB0aGluZ3MgYXJvdW5kCisgICAgICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2lu
YWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOworCisgICAgICAgICAgICAgICAgLy8gU2F2ZSB0aGUg
Y2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQorICAgICAgICAgICAgICAgIG9sZENhbGxiYWNr
cy5wdXNoKCBjYWxsYmFja05hbWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
Q2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisgICAgICAg
ICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3Jp
dHRlbiApICkgeworICAgICAgICAgICAgICAgIG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5l
clsgMCBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVy
ID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7CisgICAgICAgIH0gKTsKKworICAgICAgICAvLyBE
ZWxlZ2F0ZSB0byBzY3JpcHQKKyAgICAgICAgcmV0dXJuICJzY3JpcHQiOworICAgIH0KK30gKTsK
KworCisKKworLy8gQXJndW1lbnQgImRhdGEiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbAorLy8g
Y29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNy
ZWF0ZWQgaW4gdGhpcyBjb250ZXh0LAorLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnQKKy8vIGtlZXBT
Y3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBp
biB0aGUgaHRtbCBzdHJpbmcKK2pRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29u
dGV4dCwga2VlcFNjcmlwdHMgKSB7CisgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0g
InN0cmluZyIgKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICBpZiAoIHR5cGVv
ZiBjb250ZXh0ID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAgIGtlZXBTY3JpcHRzID0gY29udGV4
dDsKKyAgICAgICAgY29udGV4dCA9IGZhbHNlOworICAgIH0KKyAgICBjb250ZXh0ID0gY29udGV4
dCB8fCBkb2N1bWVudDsKKworICAgIHZhciBwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEg
KSwKKyAgICAgICAgc2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTsKKworICAgIC8vIFNpbmds
ZSB0YWcKKyAgICBpZiAoIHBhcnNlZCApIHsKKyAgICAgICAgcmV0dXJuIFsgY29udGV4dC5jcmVh
dGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07CisgICAgfQorCisgICAgcGFyc2VkID0gYnVpbGRG
cmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTsKKworICAgIGlmICggc2NyaXB0
cyAmJiBzY3JpcHRzLmxlbmd0aCApIHsKKyAgICAgICAgalF1ZXJ5KCBzY3JpcHRzICkucmVtb3Zl
KCk7CisgICAgfQorCisgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5v
ZGVzICk7Cit9OworCisKKy8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKK3Zh
ciBfbG9hZCA9IGpRdWVyeS5mbi5sb2FkOworCisvKioKKyAqIExvYWQgYSB1cmwgaW50byBhIHBh
Z2UKKyAqLworalF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNr
ICkgeworICAgIGlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYgX2xvYWQgKSB7CisgICAg
ICAgIHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisgICAgfQorCisgICAg
dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSwKKyAgICAgICAgc2VsZiA9IHRoaXMsCisgICAg
ICAgIG9mZiA9IHVybC5pbmRleE9mKCAiICIgKTsKKworICAgIGlmICggb2ZmID4gLTEgKSB7Cisg
ICAgICAgIHNlbGVjdG9yID0galF1ZXJ5LnRyaW0oIHVybC5zbGljZSggb2ZmICkgKTsKKyAgICAg
ICAgdXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKKyAgICB9CisKKyAgICAvLyBJZiBpdCdzIGEg
ZnVuY3Rpb24KKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworICAg
ICAgICAvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjaworICAgICAgICBjYWxsYmFj
ayA9IHBhcmFtczsKKyAgICAgICAgcGFyYW1zID0gdW5kZWZpbmVkOworCisgICAgLy8gT3RoZXJ3
aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZworICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBl
b2YgcGFyYW1zID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgdHlwZSA9ICJQT1NUIjsKKyAgICB9
CisKKyAgICAvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVz
dAorICAgIGlmICggc2VsZi5sZW5ndGggPiAwICkgeworICAgICAgICBqUXVlcnkuYWpheCggewor
ICAgICAgICAgICAgdXJsOiB1cmwsCisKKyAgICAgICAgICAgIC8vIElmICJ0eXBlIiB2YXJpYWJs
ZSBpcyB1bmRlZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZC4KKyAgICAgICAg
ICAgIC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZQorICAgICAgICAg
ICAgLy8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kCisgICAg
ICAgICAgICB0eXBlOiB0eXBlIHx8ICJHRVQiLAorICAgICAgICAgICAgZGF0YVR5cGU6ICJodG1s
IiwKKyAgICAgICAgICAgIGRhdGE6IHBhcmFtcworICAgICAgICB9ICkuZG9uZSggZnVuY3Rpb24o
IHJlc3BvbnNlVGV4dCApIHsKKworICAgICAgICAgICAgLy8gU2F2ZSByZXNwb25zZSBmb3IgdXNl
IGluIGNvbXBsZXRlIGNhbGxiYWNrCisgICAgICAgICAgICByZXNwb25zZSA9IGFyZ3VtZW50czsK
KworICAgICAgICAgICAgc2VsZi5odG1sKCBzZWxlY3RvciA/CisKKyAgICAgICAgICAgICAgICAv
LyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMg
aW4gYSBkdW1teSBkaXYKKyAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZv
aWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMKKyAgICAgICAgICAgICAgICBqUXVlcnko
ICI8ZGl2PiIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmlu
ZCggc2VsZWN0b3IgKSA6CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBm
dWxsIHJlc3VsdAorICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCApOworCisgICAgICAgIC8v
IElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImRhdGEiLCAic3Rh
dHVzIiwgImpxWEhSIgorICAgICAgICAvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJl
c3BvbnNlIHdhcyBzZXQgYWJvdmUuCisgICAgICAgIC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0
aW9uIGdldHMgImpxWEhSIiwgInN0YXR1cyIsICJlcnJvciIKKyAgICAgICAgfSApLmFsd2F5cygg
Y2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7CisgICAgICAgICAgICBzZWxm
LmVhY2goIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KCB0aGlz
LCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7Cisg
ICAgICAgICAgICB9ICk7CisgICAgICAgIH0gKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpczsK
K307CisKKworCisKKy8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcg
Y29tbW9uIEFKQVggZXZlbnRzCitqUXVlcnkuZWFjaCggWworICAgICJhamF4U3RhcnQiLAorICAg
ICJhamF4U3RvcCIsCisgICAgImFqYXhDb21wbGV0ZSIsCisgICAgImFqYXhFcnJvciIsCisgICAg
ImFqYXhTdWNjZXNzIiwKKyAgICAiYWpheFNlbmQiCitdLCBmdW5jdGlvbiggaSwgdHlwZSApIHsK
KyAgICBqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMub24oIHR5cGUsIGZuICk7CisgICAgfTsKK30gKTsKKworCisKKworalF1ZXJ5LmV4cHIu
ZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgIHJldHVybiBqUXVlcnku
Z3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkgeworICAgICAgICByZXR1cm4gZWxl
bSA9PT0gZm4uZWxlbTsKKyAgICB9ICkubGVuZ3RoOworfTsKKworCisKKworLyoqCisgKiBHZXRz
IGEgd2luZG93IGZyb20gYW4gZWxlbWVudAorICovCitmdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0g
KSB7CisgICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8gZWxlbSA6IGVsZW0ubm9k
ZVR5cGUgPT09IDkgJiYgZWxlbS5kZWZhdWx0VmlldzsKK30KKworalF1ZXJ5Lm9mZnNldCA9IHsK
KyAgICBzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworICAgICAgICB2
YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1
ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLAorICAgICAgICAgICAgcG9zaXRpb24gPSBqUXVl
cnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICksCisgICAgICAgICAgICBjdXJFbGVtID0galF1ZXJ5
KCBlbGVtICksCisgICAgICAgICAgICBwcm9wcyA9IHt9OworCisgICAgICAgIC8vIFNldCBwb3Np
dGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0K
KyAgICAgICAgaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7CisgICAgICAgICAgICBlbGVt
LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKyAgICAgICAgfQorCisgICAgICAgIGN1ck9m
ZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7CisgICAgICAgIGN1ckNTU1RvcCA9IGpRdWVyeS5jc3Mo
IGVsZW0sICJ0b3AiICk7CisgICAgICAgIGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAi
bGVmdCIgKTsKKyAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJz
b2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYKKyAgICAgICAgICAgICggY3VyQ1NT
VG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoICJhdXRvIiApID4gLTE7CisKKyAgICAgICAgLy8g
TmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIKKyAgICAgICAg
Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9y
IGZpeGVkCisgICAgICAgIGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7CisgICAgICAgICAgICBj
dXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTsKKyAgICAgICAgICAgIGN1clRvcCA9IGN1
clBvc2l0aW9uLnRvcDsKKyAgICAgICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0Owor
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJD
U1NUb3AgKSB8fCAwOworICAgICAgICAgICAgY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xl
ZnQgKSB8fCAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbigg
b3B0aW9ucyApICkgeworCisgICAgICAgICAgICAvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRv
IGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OCkKKyAg
ICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQo
IHt9LCBjdXJPZmZzZXQgKSApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBvcHRpb25zLnRv
cCAhPSBudWxsICkgeworICAgICAgICAgICAgcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1
ck9mZnNldC50b3AgKSArIGN1clRvcDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIG9wdGlvbnMu
bGVmdCAhPSBudWxsICkgeworICAgICAgICAgICAgcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0
IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKKyAgICAgICAgICAgIG9wdGlvbnMudXNpbmcuY2FsbCgg
ZWxlbSwgcHJvcHMgKTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyRWxlbS5j
c3MoIHByb3BzICk7CisgICAgICAgIH0KKyAgICB9Cit9OworCitqUXVlcnkuZm4uZXh0ZW5kKCB7
CisgICAgb2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHsKKyAgICAgICAgaWYgKCBhcmd1bWVu
dHMubGVuZ3RoICkgeworICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/
CisgICAgICAgICAgICAgICAgdGhpcyA6CisgICAgICAgICAgICAgICAgdGhpcy5lYWNoKCBmdW5j
dGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQo
IHRoaXMsIG9wdGlvbnMsIGkgKTsKKyAgICAgICAgICAgICAgICB9ICk7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgZG9jRWxlbSwgd2luLAorICAgICAgICAgICAgZWxlbSA9IHRoaXNbIDAgXSwK
KyAgICAgICAgICAgIGJveCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH0sCisgICAgICAgICAgICBkb2Mg
PSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDsKKworICAgICAgICBpZiAoICFkb2MgKSB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkb2NFbGVtID0gZG9jLmRv
Y3VtZW50RWxlbWVudDsKKworICAgICAgICAvLyBNYWtlIHN1cmUgaXQncyBub3QgYSBkaXNjb25u
ZWN0ZWQgRE9NIG5vZGUKKyAgICAgICAgaWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBl
bGVtICkgKSB7CisgICAgICAgICAgICByZXR1cm4gYm94OworICAgICAgICB9CisKKyAgICAgICAg
Ym94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgd2luID0gZ2V0V2lu
ZG93KCBkb2MgKTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHRvcDogYm94LnRvcCAr
IHdpbi5wYWdlWU9mZnNldCAtIGRvY0VsZW0uY2xpZW50VG9wLAorICAgICAgICAgICAgbGVmdDog
Ym94LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnQKKyAgICAgICAg
fTsKKyAgICB9LAorCisgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoICF0
aGlzWyAwIF0gKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2
YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsCisgICAgICAgICAgICBlbGVtID0gdGhpc1sgMCBdLAor
ICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTsKKworICAgICAg
ICAvLyBGaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gd2luZG93IChwYXJlbnRPZmZzZXQg
PSB7dG9wOjAsIGxlZnQ6IDB9LAorICAgICAgICAvLyBiZWNhdXNlIGl0IGlzIGl0cyBvbmx5IG9m
ZnNldCBwYXJlbnQKKyAgICAgICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICkg
PT09ICJmaXhlZCIgKSB7CisKKyAgICAgICAgICAgIC8vIEFzc3VtZSBnZXRCb3VuZGluZ0NsaWVu
dFJlY3QgaXMgdGhlcmUgd2hlbiBjb21wdXRlZCBwb3NpdGlvbiBpcyBmaXhlZAorICAgICAgICAg
ICAgb2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICB9IGVs
c2UgeworCisgICAgICAgICAgICAvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAorICAgICAgICAg
ICAgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTsKKworICAgICAgICAgICAgLy8g
R2V0IGNvcnJlY3Qgb2Zmc2V0cworICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsK
KyAgICAgICAgICAgIGlmICggIWpRdWVyeS5ub2RlTmFtZSggb2Zmc2V0UGFyZW50WyAwIF0sICJo
dG1sIiApICkgeworICAgICAgICAgICAgICAgIHBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5v
ZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVu
dCBib3JkZXJzCisgICAgICAgICAgICBwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9m
ZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyVG9wV2lkdGgiLCB0cnVlICk7CisgICAgICAgICAgICBw
YXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgImJvcmRl
ckxlZnRXaWR0aCIsIHRydWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN1YnRyYWN0IHBh
cmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnMKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBl
bGVtLCAibWFyZ2luVG9wIiwgdHJ1ZSApLAorICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQg
LSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sICJtYXJnaW5MZWZ0IiwgdHJ1
ZSApCisgICAgICAgIH07CisgICAgfSwKKworICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJu
IGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vIDEpIEZvciB0
aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBt
ZXRob2Qgd2lsbCByZXR1cm4KKyAgICAvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVu
dCB3aW5kb3cKKyAgICAvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50Cisg
ICAgLy8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0
bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZgorICAgIC8vCisgICAgLy8gYnV0IHRob3Nl
IGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2Vz
CisgICAgLy8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3Vs
dHMuCisgICAgLy8KKyAgICAvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVl
ZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZQorICAgIG9mZnNldFBh
cmVudDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7CisKKyAg
ICAgICAgICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVu
dCwgInBvc2l0aW9uIiApID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRQ
YXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDsKKyAgICAgICAg
fSApOworICAgIH0KK30gKTsKKworLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBt
ZXRob2RzCitqUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxU
b3A6ICJwYWdlWU9mZnNldCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKKyAgICB2YXIg
dG9wID0gInBhZ2VZT2Zmc2V0IiA9PT0gcHJvcDsKKworICAgIGpRdWVyeS5mblsgbWV0aG9kIF0g
PSBmdW5jdGlvbiggdmFsICkgeworICAgICAgICByZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlv
biggZWxlbSwgbWV0aG9kLCB2YWwgKSB7CisgICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93
KCBlbGVtICk7CisKKyAgICAgICAgICAgIGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggd2luICkgeworICAgICAgICAgICAgICAg
IHdpbi5zY3JvbGxUbygKKyAgICAgICAgICAgICAgICAgICAgIXRvcCA/IHZhbCA6IHdpbi5wYWdl
WE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgdG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0
CisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBlbGVtWyBtZXRob2QgXSA9IHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgbWV0
aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTsKKyAgICB9OworfSApOworCisvLyBTdXBwb3J0
OiBTYWZhcmk8Ny04KywgQ2hyb21lPDM3LTQ0KworLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29r
cyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb24KKy8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAorLy8gQmxpbmsgYnVnOiBodHRwczovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjI5MjgwCisvLyBnZXRD
b21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQv
Ym90dG9tL3JpZ2h0OworLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQg
b24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmUKK2pRdWVyeS5lYWNo
KCBbICJ0b3AiLCAibGVmdCIgXSwgZnVuY3Rpb24oIGksIHByb3AgKSB7CisgICAgalF1ZXJ5LmNz
c0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbiwKKyAg
ICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworICAgICAgICAgICAgaWYgKCBjb21w
dXRlZCApIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCAp
OworCisgICAgICAgICAgICAgICAgLy8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFs
bGJhY2sgdG8gb2Zmc2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIHJudW1ub25weC50ZXN0KCBj
b21wdXRlZCApID8KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBlbGVtICkucG9zaXRpb24o
KVsgcHJvcCBdICsgInB4IiA6CisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgKTsKK30gKTsKKworCisvLyBDcmVhdGUgaW5uZXJIZWln
aHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRo
IG1ldGhvZHMKK2pRdWVyeS5lYWNoKCB7IEhlaWdodDogImhlaWdodCIsIFdpZHRoOiAid2lkdGgi
IH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkgeworICAgIGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6
ICJpbm5lciIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCAiIjogIm91dGVyIiArIG5hbWUgfSwKKyAg
ICAgICAgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7CisKKyAgICAgICAgLy8g
TWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCisgICAgICAgIGpRdWVy
eS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgeworICAgICAgICAg
ICAgdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwg
dHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCisgICAgICAgICAgICAgICAgZXh0cmEgPSBk
ZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyAibWFy
Z2luIiA6ICJib3JkZXIiICk7CisKKyAgICAgICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1
bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9jOwor
CisgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBBcyBvZiA1LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3Jy
ZWN0IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZhcmksIGJ1dCB0aGVyZQorICAgICAgICAgICAgICAg
ICAgICAvLyBpc24ndCBhIHdob2xlIGxvdCB3ZSBjYW4gZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQg
dGhpcyBVUkwgZm9yIGRpc2N1c3Npb246CisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
Z2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF07Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gR2V0IGRvY3VtZW50IHdpZHRo
IG9yIGhlaWdodAorICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsK
KyAgICAgICAgICAgICAgICAgICAgZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtX
aWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLAorICAgICAgICAgICAgICAgICAg
ICAvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3QKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1h
dGgubWF4KAorICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5h
bWUgXSwgZG9jWyAic2Nyb2xsIiArIG5hbWUgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
ZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0sIGRvY1sgIm9mZnNldCIgKyBuYW1lIF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICBkb2NbICJjbGllbnQiICsgbmFtZSBdCisgICAgICAgICAgICAg
ICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlID09PSB1bmRlZmluZWQgPworCisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB3aWR0aCBv
ciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNl
RmxvYXQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEg
KSA6CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUg
ZWxlbWVudAorICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZh
bHVlLCBleHRyYSApOworICAgICAgICAgICAgfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDog
dW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTsKKyAgICAgICAgfTsKKyAgICB9ICk7Cit9ICk7
CisKKworalF1ZXJ5LmZuLmV4dGVuZCggeworCisgICAgYmluZDogZnVuY3Rpb24oIHR5cGVzLCBk
YXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBm
biApOworICAgIH0sCisgICAgdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkgeworICAgICAg
ICByZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOworICAgIH0sCisKKyAgICBkZWxl
Z2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7CisgICAgfSwKKyAgICB1
bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKKworICAgICAgICAv
LyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApCisgICAgICAgIHJl
dHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8KKyAgICAgICAgICAgIHRoaXMub2ZmKCBzZWxl
Y3RvciwgIioqIiApIDoKKyAgICAgICAgICAgIHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwg
IioqIiwgZm4gKTsKKyAgICB9LAorICAgIHNpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1
cm4gdGhpcy5sZW5ndGg7CisgICAgfQorfSApOworCitqUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVy
eS5mbi5hZGRCYWNrOworCisKKworCisvLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUs
IHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXIKKy8vIGZpbGVzIHRo
YXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2Ny
aXB0IHRoYXQKKy8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBB
TUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdAorLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNh
c2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZQorLy8gZGVyaXZl
ZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEg
bG93ZXJjYXNlCisvLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2Jh
bCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHMKKy8vIHRvIGNhbGwgbm9Db25mbGljdCB0
byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay4KKworLy8gTm90ZSB0
aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVy
eSBzaG91bGQKKy8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5k
IGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW4KKy8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4g
alF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisvLyBo
dHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGlu
Zy1saWJyYXJpZXMjd2lraS1hbm9uCisKK2lmICggdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9u
IiAmJiBkZWZpbmUuYW1kICkgeworICAgIGRlZmluZSggImpxdWVyeSIsIFtdLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeTsKKyAgICB9ICk7Cit9CisKKworCit2YXIKKworICAg
IC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQorICAgIF9qUXVlcnkgPSB3
aW5kb3cualF1ZXJ5LAorCisgICAgLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3Jp
dGUKKyAgICBfJCA9IHdpbmRvdy4kOworCitqUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBk
ZWVwICkgeworICAgIGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHsKKyAgICAgICAgd2luZG93
LiQgPSBfJDsKKyAgICB9CisKKyAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1
ZXJ5ICkgeworICAgICAgICB3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsKKyAgICB9CisKKyAgICBy
ZXR1cm4galF1ZXJ5OworfTsKKworLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywg
ZXZlbiBpbiBBTUQKKy8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1
ZXJ5L2pxdWVyeS9wdWxsLzU1NykKKy8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRv
cnMgKCMxMzU2NikKK2lmICggIW5vR2xvYmFsICkgeworICAgIHdpbmRvdy5qUXVlcnkgPSB3aW5k
b3cuJCA9IGpRdWVyeTsKK30KKworcmV0dXJuIGpRdWVyeTsKK30pKTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkubWlu
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2px
dWVyeS5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDAyNGI2NjIyYjg4OWJiNjU0NzYzNDFhNDhhNGU1YjY0
ODViMTZiOQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVf
bW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkubWluLmpzCkBAIC0wLDAgKzEsNCBAQAorLyohIGpR
dWVyeSB2Mi4yLjQgfCAoYykgalF1ZXJ5IEZvdW5kYXRpb24gfCBqcXVlcnkub3JnL2xpY2Vuc2Ug
Ki8KKyFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlw
ZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5j
dGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBh
IHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIh
PXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWEuZG9j
dW1lbnQsZT1jLnNsaWNlLGY9Yy5jb25jYXQsZz1jLnB1c2gsaD1jLmluZGV4T2YsaT17fSxqPWku
dG9TdHJpbmcsaz1pLmhhc093blByb3BlcnR5LGw9e30sbT0iMi4yLjQiLG49ZnVuY3Rpb24oYSxi
KXtyZXR1cm4gbmV3IG4uZm4uaW5pdChhLGIpfSxvPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVG
Rlx4QTBdKyQvZyxwPS9eLW1zLS8scT0vLShbXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0
dXJuIGIudG9VcHBlckNhc2UoKX07bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3RydWN0
b3I6bixzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGUuY2Fs
bCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hPzA+YT90aGlzW2ErdGhpcy5s
ZW5ndGhdOnRoaXNbYV06ZS5jYWxsKHRoaXMpfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9
bi5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIu
Y29udGV4dD10aGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhKXtyZXR1cm4gbi5lYWNoKHRo
aXMsYSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi5tYXAodGhpcyxm
dW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3Jl
dHVybiB0aGlzLnB1c2hTdGFjayhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgt
MSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVy
biB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcigpfSxwdXNoOmcsc29ydDpj
LnNvcnQsc3BsaWNlOmMuc3BsaWNlfSxuLmV4dGVuZD1uLmZuLmV4dGVuZD1mdW5jdGlvbigpe3Zh
ciBhLGIsYyxkLGUsZixnPWFyZ3VtZW50c1swXXx8e30saD0xLGk9YXJndW1lbnRzLmxlbmd0aCxq
PSExO2ZvcigiYm9vbGVhbiI9PXR5cGVvZiBnJiYoaj1nLGc9YXJndW1lbnRzW2hdfHx7fSxoKysp
LCJvYmplY3QiPT10eXBlb2YgZ3x8bi5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRo
aXMsaC0tKTtpPmg7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdb
Yl0sZD1hW2JdLGchPT1kJiYoaiYmZCYmKG4uaXNQbGFpbk9iamVjdChkKXx8KGU9bi5pc0FycmF5
KGQpKSk/KGU/KGU9ITEsZj1jJiZuLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZuLmlzUGxhaW5PYmpl
Y3QoYyk/Yzp7fSxnW2JdPW4uZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3Jl
dHVybiBnfSxuLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisobStNYXRoLnJhbmRvbSgpKS5yZXBs
YWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJv
cihhKX0sbm9vcDpmdW5jdGlvbigpe30saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4iZnVu
Y3Rpb24iPT09bi50eXBlKGEpfSxpc0FycmF5OkFycmF5LmlzQXJyYXksaXNXaW5kb3c6ZnVuY3Rp
b24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PT1hLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGEp
e3ZhciBiPWEmJmEudG9TdHJpbmcoKTtyZXR1cm4hbi5pc0FycmF5KGEpJiZiLXBhcnNlRmxvYXQo
YikrMT49MH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZigib2JqZWN0IiE9PW4u
dHlwZShhKXx8YS5ub2RlVHlwZXx8bi5pc1dpbmRvdyhhKSlyZXR1cm4hMTtpZihhLmNvbnN0cnVj
dG9yJiYhay5jYWxsKGEsImNvbnN0cnVjdG9yIikmJiFrLmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90
b3R5cGV8fHt9LCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITE7Zm9yKGIgaW4gYSk7cmV0dXJuIHZv
aWQgMD09PWJ8fGsuY2FsbChhLGIpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2Zv
cihiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9
PWE/YSsiIjoib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2lbai5jYWxs
KGEpXXx8Im9iamVjdCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYz1l
dmFsO2E9bi50cmltKGEpLGEmJigxPT09YS5pbmRleE9mKCJ1c2Ugc3RyaWN0Iik/KGI9ZC5jcmVh
dGVFbGVtZW50KCJzY3JpcHQiKSxiLnRleHQ9YSxkLmhlYWQuYXBwZW5kQ2hpbGQoYikucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZChiKSk6YyhhKSl9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4g
YS5yZXBsYWNlKHAsIm1zLSIpLnJlcGxhY2UocSxyKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXty
ZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2Fz
ZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0wO2lmKHMoYSkpe2ZvcihjPWEubGVuZ3Ro
O2M+ZDtkKyspaWYoYi5jYWxsKGFbZF0sZCxhW2RdKT09PSExKWJyZWFrfWVsc2UgZm9yKGQgaW4g
YSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rp
b24oYSl7cmV0dXJuIG51bGw9PWE/IiI6KGErIiIpLnJlcGxhY2UobywiIil9LG1ha2VBcnJheTpm
dW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYocyhPYmplY3QoYSkpP24u
bWVyZ2UoYywic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpOmcuY2FsbChjLGEpKSxjfSxpbkFycmF5
OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbD09Yj8tMTpoLmNhbGwoYixhLGMpfSxtZXJnZTpm
dW5jdGlvbihhLGIpe2Zvcih2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7Yz5kO2QrKylh
W2UrK109YltkXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3Io
dmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1o
JiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxnPTAs
aD1bXTtpZihzKGEpKWZvcihkPWEubGVuZ3RoO2Q+ZztnKyspZT1iKGFbZ10sZyxjKSxudWxsIT1l
JiZoLnB1c2goZSk7ZWxzZSBmb3IoZyBpbiBhKWU9YihhW2ddLGcsYyksbnVsbCE9ZSYmaC5wdXNo
KGUpO3JldHVybiBmLmFwcGx5KFtdLGgpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIg
YyxkLGY7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoYz1hW2JdLGI9YSxhPWMpLG4uaXNGdW5j
dGlvbihhKT8oZD1lLmNhbGwoYXJndW1lbnRzLDIpLGY9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBs
eShifHx0aGlzLGQuY29uY2F0KGUuY2FsbChhcmd1bWVudHMpKSl9LGYuZ3VpZD1hLmd1aWQ9YS5n
dWlkfHxuLmd1aWQrKyxmKTp2b2lkIDB9LG5vdzpEYXRlLm5vdyxzdXBwb3J0Omx9KSwiZnVuY3Rp
b24iPT10eXBlb2YgU3ltYm9sJiYobi5mbltTeW1ib2wuaXRlcmF0b3JdPWNbU3ltYm9sLml0ZXJh
dG9yXSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBS
ZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2lbIltv
YmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gcyhhKXt2YXIgYj0hIWEm
JiJsZW5ndGgiaW4gYSYmYS5sZW5ndGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8
fG4uaXNXaW5kb3coYSk/ITE6ImFycmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGIm
JmI+MCYmYi0xIGluIGF9dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGss
bCxtLG4sbyxwLHEscixzLHQsdT0ic2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAs
eD0wLHk9Z2EoKSx6PWdhKCksQT1nYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihs
PSEwKSwwfSxDPTE8PDMxLEQ9e30uaGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNo
LEg9RS5wdXNoLEk9RS5zbGljZSxKPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0
aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxLPSJjaGVja2VkfHNlbGVj
dGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRk
ZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTD0i
W1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsi
LE49IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/Olxc
XFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitNKyIpKXwpIitM
KyIqXFxdIixPPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86
XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTisiKSopfC4q
KVxcKXwpIixQPW5ldyBSZWdFeHAoTCsiKyIsImciKSxRPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/
Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUj1uZXcgUmVnRXhwKCJeIitMKyIq
LCIrTCsiKiIpLFM9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxUPW5l
dyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFU9bmV3IFJlZ0V4
cChPKSxWPW5ldyBSZWdFeHAoIl4iK00rIiQiKSxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIiki
KSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTSsi
fFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK04pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitPKSxD
SElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8
b2YtdHlwZSkoPzpcXCgiK0wrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0wrIiooPzoo
WystXXwpIitMKyIqKFxcZCspfCkpIitMKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJe
KD86IitLKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTCsiKls+K35dfDoo
ZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitMKyIqKCg/Oi1cXGQpP1xc
ZCopIitMKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxYPS9eKD86aW5wdXR8c2VsZWN0fHRleHRh
cmVhfGJ1dHRvbikkL2ksWT0vXmhcZCQvaSxaPS9eW157XStce1xzKlxbbmF0aXZlIFx3LywkPS9e
KD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sXz0vWyt+XS8sYWE9Lyd8XFwvZyxiYT1u
ZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksY2E9
ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/
U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1
Mjk2LDEwMjMmZHw1NjMyMCl9LGRhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2Fs
bCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2Rl
VHlwZX1jYXRjaChlYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEs
SS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytd
PWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZmEoYSxiLGQsZSl7dmFyIGYsaCxqLGss
bCxvLHIscyx3PWImJmIub3duZXJEb2N1bWVudCx4PWI/Yi5ub2RlVHlwZTo5O2lmKGQ9ZHx8W10s
InN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PXgmJjkhPT14JiYxMSE9PXgpcmV0dXJuIGQ7aWYo
IWUmJigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixwKSl7aWYoMTEh
PT14JiYobz0kLmV4ZWMoYSkpKWlmKGY9b1sxXSl7aWYoOT09PXgpe2lmKCEoaj1iLmdldEVsZW1l
bnRCeUlkKGYpKSlyZXR1cm4gZDtpZihqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZSBp
Zih3JiYoaj13LmdldEVsZW1lbnRCeUlkKGYpKSYmdChiLGopJiZqLmlkPT09ZilyZXR1cm4gZC5w
dXNoKGopLGR9ZWxzZXtpZihvWzJdKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFn
TmFtZShhKSksZDtpZigoZj1vWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoZikpLGR9aWYoYy5xc2EmJiFBW2ErIiAiXSYmKCFxfHwhcS50ZXN0KGEpKSl7aWYoMSE9PXgp
dz1iLHM9YTtlbHNlIGlmKCJvYmplY3QiIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXsoaz1i
LmdldEF0dHJpYnV0ZSgiaWQiKSk/az1rLnJlcGxhY2UoYWEsIlxcJCYiKTpiLnNldEF0dHJpYnV0
ZSgiaWQiLGs9dSkscj1nKGEpLGg9ci5sZW5ndGgsbD1WLnRlc3Qoayk/IiMiK2s6IltpZD0nIitr
KyInXSI7d2hpbGUoaC0tKXJbaF09bCsiICIrcWEocltoXSk7cz1yLmpvaW4oIiwiKSx3PV8udGVz
dChhKSYmb2EoYi5wYXJlbnROb2RlKXx8Yn1pZihzKXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVl
cnlTZWxlY3RvckFsbChzKSksZH1jYXRjaCh5KXt9ZmluYWxseXtrPT09dSYmYi5yZW1vdmVBdHRy
aWJ1dGUoImlkIil9fX1yZXR1cm4gaShhLnJlcGxhY2UoUSwiJDEiKSxiLGQsZSl9ZnVuY3Rpb24g
Z2EoKXt2YXIgYT1bXTtmdW5jdGlvbiBiKGMsZSl7cmV0dXJuIGEucHVzaChjKyIgIik+ZC5jYWNo
ZUxlbmd0aCYmZGVsZXRlIGJbYS5zaGlmdCgpXSxiW2MrIiAiXT1lfXJldHVybiBifWZ1bmN0aW9u
IGhhKGEpe3JldHVybiBhW3VdPSEwLGF9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9bi5jcmVhdGVFbGVt
ZW50KCJkaXYiKTt0cnl7cmV0dXJuISFhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yi5w
YXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfX1mdW5jdGlvbiBq
YShhLGIpe3ZhciBjPWEuc3BsaXQoInwiKSxlPWMubGVuZ3RoO3doaWxlKGUtLSlkLmF0dHJIYW5k
bGVbY1tlXV09Yn1mdW5jdGlvbiBrYShhLGIpe3ZhciBjPWImJmEsZD1jJiYxPT09YS5ub2RlVHlw
ZSYmMT09PWIubm9kZVR5cGUmJih+Yi5zb3VyY2VJbmRleHx8QyktKH5hLnNvdXJjZUluZGV4fHxD
KTtpZihkKXJldHVybiBkO2lmKGMpd2hpbGUoYz1jLm5leHRTaWJsaW5nKWlmKGM9PT1iKXJldHVy
bi0xO3JldHVybiBhPzE6LTF9ZnVuY3Rpb24gbGEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBj
PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YyYmYi50eXBlPT09YX19
ZnVuY3Rpb24gbWEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PWN8fCJidXR0b24iPT09YykmJmIudHlwZT09PWF9fWZ1
bmN0aW9uIG5hKGEpe3JldHVybiBoYShmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixoYShmdW5jdGlv
bihjLGQpe3ZhciBlLGY9YShbXSxjLmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9
ZltnXV0mJihjW2VdPSEoZFtlXT1jW2VdKSl9KX0pfWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhJiYi
dW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmF9Yz1mYS5zdXBwb3J0
PXt9LGY9ZmEuaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9YSYmKGEub3duZXJEb2N1bWVudHx8YSku
ZG9jdW1lbnRFbGVtZW50O3JldHVybiBiPyJIVE1MIiE9PWIubm9kZU5hbWU6ITF9LG09ZmEuc2V0
RG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZSxnPWE/YS5vd25lckRvY3VtZW50fHxhOnY7cmV0
dXJuIGchPT1uJiY5PT09Zy5ub2RlVHlwZSYmZy5kb2N1bWVudEVsZW1lbnQ/KG49ZyxvPW4uZG9j
dW1lbnRFbGVtZW50LHA9IWYobiksKGU9bi5kZWZhdWx0VmlldykmJmUudG9wIT09ZSYmKGUuYWRk
RXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZGEsITEpOmUuYXR0YWNo
RXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixkYSkpLGMuYXR0cmlidXRlcz1pYShmdW5j
dGlvbihhKXtyZXR1cm4gYS5jbGFzc05hbWU9ImkiLCFhLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1l
Iil9KSxjLmdldEVsZW1lbnRzQnlUYWdOYW1lPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVu
ZENoaWxkKG4uY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiku
bGVuZ3RofSksYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVoudGVzdChuLmdldEVsZW1lbnRzQnlD
bGFzc05hbWUpLGMuZ2V0QnlJZD1pYShmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChh
KS5pZD11LCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5n
dGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiIT10
eXBlb2YgYi5nZXRFbGVtZW50QnlJZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1
cm4gYz9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEs
Y2EpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0p
OihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFj
ZShiYSxjYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5n
ZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFs
dWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIp
e3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1
bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lm
KCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJu
IGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0
aW9uKGEsYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFz
YT1aLnRlc3Qobi5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYShmdW5jdGlvbihhKXtvLmFwcGVuZENo
aWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXHJc
XCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVj
dD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEu
cHVzaCgiWypeJF09IitMKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxl
Y3RlZF0iKS5sZW5ndGh8fHEucHVzaCgiXFxbIitMKyIqKD86dmFsdWV8IitLKyIpIiksYS5xdWVy
eVNlbGVjdG9yQWxsKCJbaWR+PSIrdSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5
U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVy
eVNlbGVjdG9yQWxsKCJhIyIrdSsiKyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGlh
KGZ1bmN0aW9uKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0
ZSgidHlwZSIsImhpZGRlbiIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwi
RCIpLGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIr
TCsiKlsqXiR8IX5dPz0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxx
LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iiks
cS5wdXNoKCIsLio6Iil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPVoudGVzdChzPW8ubWF0Y2hlc3x8
by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVz
U2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmaWEoZnVuY3Rpb24oYSl7Yy5kaXNjb25u
ZWN0ZWRNYXRjaD1zLmNhbGwoYSwiZGl2Iikscy5jYWxsKGEsIltzIT0nJ106eCIpLHIucHVzaCgi
IT0iLE8pfSkscT1xLmxlbmd0aCYmbmV3IFJlZ0V4cChxLmpvaW4oInwiKSkscj1yLmxlbmd0aCYm
bmV3IFJlZ0V4cChyLmpvaW4oInwiKSksYj1aLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
biksdD1ifHxaLnRlc3Qoby5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2Rl
VHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8
ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVu
Y3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3Jl
dHVybiExfSxCPWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFh
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVy
biBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1ufHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYs
YSk/LTE6Yj09PW58fGIub3duZXJEb2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxi
KTowOjQmZD8tMToxKX06ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBj
LGQ9MCxlPWEucGFyZW50Tm9kZSxmPWIucGFyZW50Tm9kZSxnPVthXSxoPVtiXTtpZighZXx8IWYp
cmV0dXJuIGE9PT1uPy0xOmI9PT1uPzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09
PWYpcmV0dXJuIGthKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWcudW5zaGlmdChjKTtj
PWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO3doaWxlKGdbZF09PT1oW2RdKWQr
KztyZXR1cm4gZD9rYShnW2RdLGhbZF0pOmdbZF09PT12Py0xOmhbZF09PT12PzE6MH0sbik6bn0s
ZmEubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYShhLG51bGwsbnVsbCxiKX0sZmEubWF0
Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZt
KGEpLGI9Yi5yZXBsYWNlKFQsIj0nJDEnXSIpLGMubWF0Y2hlc1NlbGVjdG9yJiZwJiYhQVtiKyIg
Il0mJighcnx8IXIudGVzdChiKSkmJighcXx8IXEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChh
LGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVu
dC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGZhKGIsbixudWxsLFthXSkubGVu
Z3RoPjB9LGZhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8
YSkhPT1uJiZtKGEpLHQoYSxiKX0sZmEuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1l
bnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUm
JkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3Jl
dHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1h
LmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGZhLmVycm9y
PWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQg
ZXhwcmVzc2lvbjogIithKX0sZmEudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9
MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgw
KSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hp
bGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWZhLmdldFRleHQ9ZnVu
Y3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09
Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4
dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxz
ZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10p
Yys9ZShiKTtyZXR1cm4gY30sZD1mYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBz
ZXVkbzpoYSxtYXRjaDpXLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6
InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJw
cmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHBy
ZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoYmEsY2Ep
LGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGJhLGNhKSwifj0iPT09YVsyXSYm
KGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVy
biBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8
ZmEuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVsz
XXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYm
ZmEuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07
cmV0dXJuIFcuQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6
YyYmVS50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1j
Lmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGlj
ZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSku
dG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9u
KGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xB
U1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihe
fCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgi
c3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5
cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRS
OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9ZmEuYXR0cihkLGEpO3Jl
dHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9
PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+
LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVw
bGFjZShQLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAs
Yy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3Zh
ciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlw
ZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5v
ZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmci
OiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpLHM9IWkmJiFoLHQ9ITE7aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtw
XSlpZihoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJu
ITE7bz1wPSJvbmx5Ij09PWEmJiFvJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKG89W2c/cS5m
aXJzdENoaWxkOnEubGFzdENoaWxkXSxnJiZzKXttPXEsbD1tW3VdfHwobVt1XT17fSksaz1sW20u
dW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFd
LHQ9biYmalsyXSxtPW4mJnEuY2hpbGROb2Rlc1tuXTt3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9
bj0wKXx8by5wb3AoKSlpZigxPT09bS5ub2RlVHlwZSYmKyt0JiZtPT09Yil7a1thXT1bdyxuLHRd
O2JyZWFrfX1lbHNlIGlmKHMmJihtPWIsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURd
fHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biksdD09
PSExKXdoaWxlKG09KytuJiZtJiZtW3BdfHwodD1uPTApfHxvLnBvcCgpKWlmKChoP20ubm9kZU5h
bWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpJiYrK3QmJihzJiYobD1tW3VdfHwo
bVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksa1thXT1bdyx0XSks
bT09PWIpKWJyZWFrO3JldHVybiB0LT1lLHQ9PT1kfHx0JWQ9PT0wJiZ0L2Q+PTB9fX0sUFNFVURP
OmZ1bmN0aW9uKGEsYil7dmFyIGMsZT1kLnBzZXVkb3NbYV18fGQuc2V0RmlsdGVyc1thLnRvTG93
ZXJDYXNlKCldfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2EpO3JldHVybiBlW3Vd
P2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLCIiLGJdLGQuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0
eShhLnRvTG93ZXJDYXNlKCkpP2hhKGZ1bmN0aW9uKGEsYyl7dmFyIGQsZj1lKGEsYiksZz1mLmxl
bmd0aDt3aGlsZShnLS0pZD1KKGEsZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihh
KXtyZXR1cm4gZShhLDAsYyl9KTplfX0scHNldWRvczp7bm90OmhhKGZ1bmN0aW9uKGEpe3ZhciBi
PVtdLGM9W10sZD1oKGEucmVwbGFjZShRLCIkMSIpKTtyZXR1cm4gZFt1XT9oYShmdW5jdGlvbihh
LGIsYyxlKXt2YXIgZixnPWQoYSxudWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdb
aF0pJiYoYVtoXT0hKGJbaF09ZikpfSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChi
LG51bGwsZixjKSxiWzBdPW51bGwsIWMucG9wKCl9fSksaGFzOmhhKGZ1bmN0aW9uKGEpe3JldHVy
biBmdW5jdGlvbihiKXtyZXR1cm4gZmEoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYShmdW5j
dGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoYmEsY2EpLGZ1bmN0aW9uKGIpe3JldHVybihiLnRl
eHRDb250ZW50fHxiLmlubmVyVGV4dHx8ZShiKSkuaW5kZXhPZihhKT4tMX19KSxsYW5nOmhhKGZ1
bmN0aW9uKGEpe3JldHVybiBWLnRlc3QoYXx8IiIpfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgbGFu
ZzogIithKSxhPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXt2YXIg
YztkbyBpZihjPXA/Yi5sYW5nOmIuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxiLmdldEF0dHJp
YnV0ZSgibGFuZyIpKXJldHVybiBjPWMudG9Mb3dlckNhc2UoKSxjPT09YXx8MD09PWMuaW5kZXhP
ZihhKyItIik7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmMT09PWIubm9kZVR5cGUpO3JldHVybiEx
fX0pLHRhcmdldDpmdW5jdGlvbihiKXt2YXIgYz1hLmxvY2F0aW9uJiZhLmxvY2F0aW9uLmhhc2g7
cmV0dXJuIGMmJmMuc2xpY2UoMSk9PT1iLmlkfSxyb290OmZ1bmN0aW9uKGEpe3JldHVybiBhPT09
b30sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1uLmFjdGl2ZUVsZW1lbnQmJighbi5oYXNG
b2N1c3x8bi5oYXNGb2N1cygpKSYmISEoYS50eXBlfHxhLmhyZWZ8fH5hLnRhYkluZGV4KX0sZW5h
YmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlv
bihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmISFhLmNoZWNrZWR8fCJv
cHRpb24iPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5w
YXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVt
cHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihh
Lm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4h
ZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFkudGVzdChhLm5v
ZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0sYnV0
dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5w
dXQiPT09YiYmImJ1dHRvbiI9PT1hLnR5cGV8fCJidXR0b24iPT09Yn0sdGV4dDpmdW5jdGlvbihh
KXt2YXIgYjtyZXR1cm4iaW5wdXQiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9
PT1hLnR5cGUmJihudWxsPT0oYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09Yi50
b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6bmEoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Om5hKGZ1
bmN0aW9uKGEsYil7cmV0dXJuW2ItMV19KSxlcTpuYShmdW5jdGlvbihhLGIsYyl7cmV0dXJuWzA+
Yz9jK2I6Y119KSxldmVuOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7Yj5jO2MrPTIpYS5w
dXNoKGMpO3JldHVybiBhfSksb2RkOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yj5jO2Mr
PTIpYS5wdXNoKGMpO3JldHVybiBhfSksbHQ6bmEoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0w
PmM/YytiOmM7LS1kPj0wOylhLnB1c2goZCk7cmV0dXJuIGF9KSxndDpuYShmdW5jdGlvbihhLGIs
Yyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzsrK2Q8YjspYS5wdXNoKGQpO3JldHVybiBhfSl9fSxkLnBz
ZXVkb3MubnRoPWQucHNldWRvcy5lcTtmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxl
OiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlkLnBzZXVkb3NbYl09bGEoYik7Zm9yKGIgaW57c3Vi
bWl0OiEwLHJlc2V0OiEwfSlkLnBzZXVkb3NbYl09bWEoYik7ZnVuY3Rpb24gcGEoKXt9cGEucHJv
dG90eXBlPWQuZmlsdGVycz1kLnBzZXVkb3MsZC5zZXRGaWx0ZXJzPW5ldyBwYSxnPWZhLnRva2Vu
aXplPWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz16W2ErIiAiXTtpZihrKXJldHVy
biBiPzA6ay5zbGljZSgwKTtoPWEsaT1bXSxqPWQucHJlRmlsdGVyO3doaWxlKGgpe2MmJiEoZT1S
LmV4ZWMoaCkpfHwoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSks
Yz0hMSwoZT1TLmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVsw
XS5yZXBsYWNlKFEsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVy
KSEoZT1XW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1
c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFj
KWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/ZmEuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtm
dW5jdGlvbiBxYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2Jd
LnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHJhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJl
bnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9
YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxn
KXt2YXIgaCxpLGosaz1bdyxmXTtpZihnKXt3aGlsZShiPWJbZF0paWYoKDE9PT1iLm5vZGVUeXBl
fHxlKSYmYShiLGMsZykpcmV0dXJuITB9ZWxzZSB3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5
cGV8fGUpe2lmKGo9Ylt1XXx8KGJbdV09e30pLGk9altiLnVuaXF1ZUlEXXx8KGpbYi51bmlxdWVJ
RF09e30pLChoPWlbZF0pJiZoWzBdPT09dyYmaFsxXT09PWYpcmV0dXJuIGtbMl09aFsyXTtpZihp
W2RdPWssa1syXT1hKGIsYyxnKSlyZXR1cm4hMH19fWZ1bmN0aW9uIHNhKGEpe3JldHVybiBhLmxl
bmd0aD4xP2Z1bmN0aW9uKGIsYyxkKXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0paWYoIWFbZV0o
YixjLGQpKXJldHVybiExO3JldHVybiEwfTphWzBdfWZ1bmN0aW9uIHRhKGEsYixjKXtmb3IodmFy
IGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspZmEoYSxiW2RdLGMpO3JldHVybiBjfWZ1bmN0aW9uIHVh
KGEsYixjLGQsZSl7Zm9yKHZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1udWxsIT1iO2k+aDto
KyspKGY9YVtoXSkmJihjJiYhYyhmLGQsZSl8fChnLnB1c2goZiksaiYmYi5wdXNoKGgpKSk7cmV0
dXJuIGd9ZnVuY3Rpb24gdmEoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFt1XSYmKGQ9dmEoZCkp
LGUmJiFlW3VdJiYoZT12YShlLGYpKSxoYShmdW5jdGlvbihmLGcsaCxpKXt2YXIgaixrLGwsbT1b
XSxuPVtdLG89Zy5sZW5ndGgscD1mfHx0YShifHwiKiIsaC5ub2RlVHlwZT9baF06aCxbXSkscT0h
YXx8IWYmJmI/cDp1YShwLG0sYSxoLGkpLHI9Yz9lfHwoZj9hOm98fGQpP1tdOmc6cTtpZihjJiZj
KHEscixoLGkpLGQpe2o9dWEocixuKSxkKGosW10saCxpKSxrPWoubGVuZ3RoO3doaWxlKGstLSko
bD1qW2tdKSYmKHJbbltrXV09IShxW25ba11dPWwpKX1pZihmKXtpZihlfHxhKXtpZihlKXtqPVtd
LGs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiZqLnB1c2gocVtrXT1sKTtlKG51bGwscj1b
XSxqLGkpfWs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiYoaj1lP0ooZixsKTptW2tdKT4t
MSYmKGZbal09IShnW2pdPWwpKX19ZWxzZSByPXVhKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgp
OnIpLGU/ZShudWxsLGcscixpKTpILmFwcGx5KGcscil9KX1mdW5jdGlvbiB3YShhKXtmb3IodmFy
IGIsYyxlLGY9YS5sZW5ndGgsZz1kLnJlbGF0aXZlW2FbMF0udHlwZV0saD1nfHxkLnJlbGF0aXZl
WyIgIl0saT1nPzE6MCxrPXJhKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saCwhMCksbD1yYShm
dW5jdGlvbihhKXtyZXR1cm4gSihiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7dmFy
IGU9IWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSk7cmV0
dXJuIGI9bnVsbCxlfV07Zj5pO2krKylpZihjPWQucmVsYXRpdmVbYVtpXS50eXBlXSltPVtyYShz
YShtKSxjKV07ZWxzZXtpZihjPWQuZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCxhW2ldLm1h
dGNoZXMpLGNbdV0pe2ZvcihlPSsraTtmPmU7ZSsrKWlmKGQucmVsYXRpdmVbYVtlXS50eXBlXSli
cmVhaztyZXR1cm4gdmEoaT4xJiZzYShtKSxpPjEmJnFhKGEuc2xpY2UoMCxpLTEpLmNvbmNhdCh7
dmFsdWU6IiAiPT09YVtpLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoUSwiJDEiKSxjLGU+aSYm
d2EoYS5zbGljZShpLGUpKSxmPmUmJndhKGE9YS5zbGljZShlKSksZj5lJiZxYShhKSl9bS5wdXNo
KGMpfXJldHVybiBzYShtKX1mdW5jdGlvbiB4YShhLGIpe3ZhciBjPWIubGVuZ3RoPjAsZT1hLmxl
bmd0aD4wLGY9ZnVuY3Rpb24oZixnLGgsaSxrKXt2YXIgbCxvLHEscj0wLHM9IjAiLHQ9ZiYmW10s
dT1bXSx2PWoseD1mfHxlJiZkLmZpbmQuVEFHKCIqIixrKSx5PXcrPW51bGw9PXY/MTpNYXRoLnJh
bmRvbSgpfHwuMSx6PXgubGVuZ3RoO2ZvcihrJiYoaj1nPT09bnx8Z3x8ayk7cyE9PXomJm51bGwh
PShsPXhbc10pO3MrKyl7aWYoZSYmbCl7bz0wLGd8fGwub3duZXJEb2N1bWVudD09PW58fChtKGwp
LGg9IXApO3doaWxlKHE9YVtvKytdKWlmKHEobCxnfHxuLGgpKXtpLnB1c2gobCk7YnJlYWt9ayYm
KHc9eSl9YyYmKChsPSFxJiZsKSYmci0tLGYmJnQucHVzaChsKSl9aWYocis9cyxjJiZzIT09cil7
bz0wO3doaWxlKHE9YltvKytdKXEodCx1LGcsaCk7aWYoZil7aWYocj4wKXdoaWxlKHMtLSl0W3Nd
fHx1W3NdfHwodVtzXT1GLmNhbGwoaSkpO3U9dWEodSl9SC5hcHBseShpLHUpLGsmJiFmJiZ1Lmxl
bmd0aD4wJiZyK2IubGVuZ3RoPjEmJmZhLnVuaXF1ZVNvcnQoaSl9cmV0dXJuIGsmJih3PXksaj12
KSx0fTtyZXR1cm4gYz9oYShmKTpmfXJldHVybiBoPWZhLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2
YXIgYyxkPVtdLGU9W10sZj1BW2ErIiAiXTtpZighZil7Ynx8KGI9ZyhhKSksYz1iLmxlbmd0aDt3
aGlsZShjLS0pZj13YShiW2NdKSxmW3VdP2QucHVzaChmKTplLnB1c2goZik7Zj1BKGEseGEoZSxk
KSksZi5zZWxlY3Rvcj1hfXJldHVybiBmfSxpPWZhLnNlbGVjdD1mdW5jdGlvbihhLGIsZSxmKXt2
YXIgaSxqLGssbCxtLG49ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEsbz0hZiYmZyhhPW4uc2VsZWN0
b3J8fGEpO2lmKGU9ZXx8W10sMT09PW8ubGVuZ3RoKXtpZihqPW9bMF09b1swXS5zbGljZSgwKSxq
Lmxlbmd0aD4yJiYiSUQiPT09KGs9alswXSkudHlwZSYmYy5nZXRCeUlkJiY5PT09Yi5ub2RlVHlw
ZSYmcCYmZC5yZWxhdGl2ZVtqWzFdLnR5cGVdKXtpZihiPShkLmZpbmQuSUQoay5tYXRjaGVzWzBd
LnJlcGxhY2UoYmEsY2EpLGIpfHxbXSlbMF0sIWIpcmV0dXJuIGU7biYmKGI9Yi5wYXJlbnROb2Rl
KSxhPWEuc2xpY2Uoai5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1XLm5lZWRzQ29udGV4dC50ZXN0
KGEpPzA6ai5sZW5ndGg7d2hpbGUoaS0tKXtpZihrPWpbaV0sZC5yZWxhdGl2ZVtsPWsudHlwZV0p
YnJlYWs7aWYoKG09ZC5maW5kW2xdKSYmKGY9bShrLm1hdGNoZXNbMF0ucmVwbGFjZShiYSxjYSks
Xy50ZXN0KGpbMF0udHlwZSkmJm9hKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwx
KSxhPWYubGVuZ3RoJiZxYShqKSwhYSlyZXR1cm4gSC5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1
cm4obnx8aChhLG8pKShmLGIsIXAsZSwhYnx8Xy50ZXN0KGEpJiZvYShiLnBhcmVudE5vZGUpfHxi
KSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRl
Y3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJu
IDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGlh
KGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09
YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGphKCJ0eXBlfGhyZWZ8aGVpZ2h0
fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIs
InR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmlhKGZ1bmN0aW9u
KGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1
dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8
fGphKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGlhKGZ1bmN0aW9uKGEpe3Jl
dHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxqYShLLGZ1bmN0aW9uKGEs
YixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1h
LmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYX0oYSk7
bi5maW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4u
dW5pcXVlU29ydD1uLnVuaXF1ZT10LnVuaXF1ZVNvcnQsbi50ZXh0PXQuZ2V0VGV4dCxuLmlzWE1M
RG9jPXQuaXNYTUwsbi5jb250YWlucz10LmNvbnRhaW5zO3ZhciB1PWZ1bmN0aW9uKGEsYixjKXt2
YXIgZD1bXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9
PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0s
dj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2Rl
VHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY30sdz1uLmV4cHIubWF0Y2gubmVlZHNDb250
ZXh0LHg9L148KFtcdy1dKylccypcLz8+KD86PFwvXDE+fCkkLyx5PS9eLlteOiNcW1wuLF0qJC87
ZnVuY3Rpb24geihhLGIsYyl7aWYobi5pc0Z1bmN0aW9uKGIpKXJldHVybiBuLmdyZXAoYSxmdW5j
dGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVy
biBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5
cGVvZiBiKXtpZih5LnRlc3QoYikpcmV0dXJuIG4uZmlsdGVyKGIsYSxjKTtiPW4uZmlsdGVyKGIs
YSl9cmV0dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBoLmNhbGwoYixhKT4tMSE9PWN9
KX1uLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3Qo
IithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9uLmZpbmQubWF0Y2hlc1NlbGVj
dG9yKGQsYSk/W2RdOltdOm4uZmluZC5tYXRjaGVzKGEsbi5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0
dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxuLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIg
YixjPXRoaXMubGVuZ3RoLGQ9W10sZT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4g
dGhpcy5wdXNoU3RhY2sobihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2M+YjtiKyspaWYo
bi5jb250YWlucyhlW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7Yz5iO2IrKyluLmZpbmQo
YSxlW2JdLGQpO3JldHVybiBkPXRoaXMucHVzaFN0YWNrKGM+MT9uLnVuaXF1ZShkKTpkKSxkLnNl
bGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGR9LGZpbHRlcjpmdW5j
dGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5j
dGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0
aW9uKGEpe3JldHVybiEheih0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdy50ZXN0KGEpP24oYSk6
YXx8W10sITEpLmxlbmd0aH19KTt2YXIgQSxCPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtc
dy1dKikpJC8sQz1uLmZuLmluaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY7aWYoIWEpcmV0dXJu
IHRoaXM7aWYoYz1jfHxBLCJzdHJpbmciPT10eXBlb2YgYSl7aWYoZT0iPCI9PT1hWzBdJiYiPiI9
PT1hW2EubGVuZ3RoLTFdJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOkIuZXhlYyhhKSwhZXx8
IWVbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHxjKS5maW5kKGEpOnRoaXMuY29uc3RydWN0
b3IoYikuZmluZChhKTtpZihlWzFdKXtpZihiPWIgaW5zdGFuY2VvZiBuP2JbMF06YixuLm1lcmdl
KHRoaXMsbi5wYXJzZUhUTUwoZVsxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8Yjpk
LCEwKSkseC50ZXN0KGVbMV0pJiZuLmlzUGxhaW5PYmplY3QoYikpZm9yKGUgaW4gYiluLmlzRnVu
Y3Rpb24odGhpc1tlXSk/dGhpc1tlXShiW2VdKTp0aGlzLmF0dHIoZSxiW2VdKTtyZXR1cm4gdGhp
c31yZXR1cm4gZj1kLmdldEVsZW1lbnRCeUlkKGVbMl0pLGYmJmYucGFyZW50Tm9kZSYmKHRoaXMu
bGVuZ3RoPTEsdGhpc1swXT1mKSx0aGlzLmNvbnRleHQ9ZCx0aGlzLnNlbGVjdG9yPWEsdGhpc31y
ZXR1cm4gYS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRo
aXMpOm4uaXNGdW5jdGlvbihhKT92b2lkIDAhPT1jLnJlYWR5P2MucmVhZHkoYSk6YShuKToodm9p
ZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9
YS5jb250ZXh0KSxuLm1ha2VBcnJheShhLHRoaXMpKX07Qy5wcm90b3R5cGU9bi5mbixBPW4oZCk7
dmFyIEQ9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sRT17Y2hpbGRyZW46ITAsY29u
dGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtuLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3Zh
ciBiPW4oYSx0aGlzKSxjPWIubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zv
cih2YXIgYT0wO2M+YTthKyspaWYobi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LGNs
b3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXcu
dGVzdChhKXx8InN0cmluZyIhPXR5cGVvZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2Qr
Kylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEm
JihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0b3Io
YyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9u
LnVuaXF1ZVNvcnQoZik6Zil9LGluZGV4OmZ1bmN0aW9uKGEpe3JldHVybiBhPyJzdHJpbmciPT10
eXBlb2YgYT9oLmNhbGwobihhKSx0aGlzWzBdKTpoLmNhbGwodGhpcyxhLmpxdWVyeT9hWzBdOmEp
OnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0
aDotMX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4udW5pcXVlU29y
dChuLm1lcmdlKHRoaXMuZ2V0KCksbihhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVy
biB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVy
KGEpKX19KTtmdW5jdGlvbiBGKGEsYil7d2hpbGUoKGE9YVtiXSkmJjEhPT1hLm5vZGVUeXBlKTty
ZXR1cm4gYX1uLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0
dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJu
IHUoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB1
KGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBGKGEsIm5leHRTaWJs
aW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEYoYSwicHJldmlvdXNTaWJsaW5nIil9LG5l
eHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHUoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5j
dGlvbihhKXtyZXR1cm4gdShhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9u
KGEsYixjKXtyZXR1cm4gdShhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihh
LGIsYyl7cmV0dXJuIHUoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24o
YSl7cmV0dXJuIHYoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1
bmN0aW9uKGEpe3JldHVybiB2KGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3Jl
dHVybiBhLmNvbnRlbnREb2N1bWVudHx8bi5tZXJnZShbXSxhLmNoaWxkTm9kZXMpfX0sZnVuY3Rp
b24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGMsZCl7dmFyIGU9bi5tYXAodGhpcyxiLGMpO3JldHVy
biJVbnRpbCIhPT1hLnNsaWNlKC01KSYmKGQ9YyksZCYmInN0cmluZyI9PXR5cGVvZiBkJiYoZT1u
LmZpbHRlcihkLGUpKSx0aGlzLmxlbmd0aD4xJiYoRVthXXx8bi51bmlxdWVTb3J0KGUpLEQudGVz
dChhKSYmZS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBHPS9cUysvZztmdW5j
dGlvbiBIKGEpe3ZhciBiPXt9O3JldHVybiBuLmVhY2goYS5tYXRjaChHKXx8W10sZnVuY3Rpb24o
YSxjKXtiW2NdPSEwfSksYn1uLkNhbGxiYWNrcz1mdW5jdGlvbihhKXthPSJzdHJpbmciPT10eXBl
b2YgYT9IKGEpOm4uZXh0ZW5kKHt9LGEpO3ZhciBiLGMsZCxlLGY9W10sZz1bXSxoPS0xLGk9ZnVu
Y3Rpb24oKXtmb3IoZT1hLm9uY2UsZD1iPSEwO2cubGVuZ3RoO2g9LTEpe2M9Zy5zaGlmdCgpO3do
aWxlKCsraDxmLmxlbmd0aClmW2hdLmFwcGx5KGNbMF0sY1sxXSk9PT0hMSYmYS5zdG9wT25GYWxz
ZSYmKGg9Zi5sZW5ndGgsYz0hMSl9YS5tZW1vcnl8fChjPSExKSxiPSExLGUmJihmPWM/W106IiIp
fSxqPXthZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gZiYmKGMmJiFiJiYoaD1mLmxlbmd0aC0xLGcucHVz
aChjKSksZnVuY3Rpb24gZChiKXtuLmVhY2goYixmdW5jdGlvbihiLGMpe24uaXNGdW5jdGlvbihj
KT9hLnVuaXF1ZSYmai5oYXMoYyl8fGYucHVzaChjKTpjJiZjLmxlbmd0aCYmInN0cmluZyIhPT1u
LnR5cGUoYykmJmQoYyl9KX0oYXJndW1lbnRzKSxjJiYhYiYmaSgpKSx0aGlzfSxyZW1vdmU6ZnVu
Y3Rpb24oKXtyZXR1cm4gbi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxl
KChjPW4uaW5BcnJheShiLGYsYykpPi0xKWYuc3BsaWNlKGMsMSksaD49YyYmaC0tfSksdGhpc30s
aGFzOmZ1bmN0aW9uKGEpe3JldHVybiBhP24uaW5BcnJheShhLGYpPi0xOmYubGVuZ3RoPjB9LGVt
cHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihmPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7
cmV0dXJuIGU9Zz1bXSxmPWM9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZn0s
bG9jazpmdW5jdGlvbigpe3JldHVybiBlPWc9W10sY3x8KGY9Yz0iIiksdGhpc30sbG9ja2VkOmZ1
bmN0aW9uKCl7cmV0dXJuISFlfSxmaXJlV2l0aDpmdW5jdGlvbihhLGMpe3JldHVybiBlfHwoYz1j
fHxbXSxjPVthLGMuc2xpY2U/Yy5zbGljZSgpOmNdLGcucHVzaChjKSxifHxpKCkpLHRoaXN9LGZp
cmU6ZnVuY3Rpb24oKXtyZXR1cm4gai5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmly
ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWR9fTtyZXR1cm4gan0sbi5leHRlbmQoe0RlZmVycmVkOmZ1
bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUiLCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1v
cnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9y
eSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnki
KV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFsd2F5czpmdW5j
dGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhl
bjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cztyZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihj
KXtuLmVhY2goYixmdW5jdGlvbihiLGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtl
W2ZbMV1dKGZ1bmN0aW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5p
c0Z1bmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkucHJvZ3Jlc3MoYy5ub3RpZnkpLmRvbmUo
Yy5yZXNvbHZlKS5mYWlsKGMucmVqZWN0KTpjW2ZbMF0rIldpdGgiXSh0aGlzPT09ZD9jLnByb21p
c2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlz
ZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVy
biBkLnBpcGU9ZC50aGVuLG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107
ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2FibGUs
YlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlswXSsiV2l0aCJdKHRo
aXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlswXSsiV2l0aCJdPWcuZmlyZVdpdGh9
KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUsZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0w
LGM9ZS5jYWxsKGFyZ3VtZW50cyksZD1jLmxlbmd0aCxmPTEhPT1kfHxhJiZuLmlzRnVuY3Rpb24o
YS5wcm9taXNlKT9kOjAsZz0xPT09Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXty
ZXR1cm4gZnVuY3Rpb24oZCl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0aD4xP2UuY2Fs
bChhcmd1bWVudHMpOmQsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6LS1mfHxnLnJlc29sdmVXaXRo
KGIsYyl9fSxpLGosaztpZihkPjEpZm9yKGk9bmV3IEFycmF5KGQpLGo9bmV3IEFycmF5KGQpLGs9
bmV3IEFycmF5KGQpO2Q+YjtiKyspY1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1ti
XS5wcm9taXNlKCkucHJvZ3Jlc3MoaChiLGosaSkpLmRvbmUoaChiLGssYykpLmZhaWwoZy5yZWpl
Y3QpOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0pO3ZhciBJ
O24uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4ucmVhZHkucHJvbWlzZSgpLmRvbmUoYSks
dGhpc30sbi5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9u
KGEpe2E/bi5yZWFkeVdhaXQrKzpuLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0h
MD8tLW4ucmVhZHlXYWl0Om4uaXNSZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVh
ZHlXYWl0PjB8fChJLnJlc29sdmVXaXRoKGQsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYobihk
KS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxuKGQpLm9mZigicmVhZHkiKSkpKX19KTtmdW5jdGlv
biBKKCl7ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixKKSxhLnJlbW92
ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEopLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rp
b24oYil7cmV0dXJuIEl8fChJPW4uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09ZC5yZWFkeVN0YXRl
fHwibG9hZGluZyIhPT1kLnJlYWR5U3RhdGUmJiFkLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9h
LnNldFRpbWVvdXQobi5yZWFkeSk6KGQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRl
ZCIsSiksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixKKSkpLEkucHJvbWlzZShiKX0sbi5yZWFk
eS5wcm9taXNlKCk7dmFyIEs9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVu
Z3RoLGo9bnVsbD09YztpZigib2JqZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKUso
YSxiLGgsY1toXSwhMCxmLGcpfWVsc2UgaWYodm9pZCAwIT09ZCYmKGU9ITAsbi5pc0Z1bmN0aW9u
KGQpfHwoZz0hMCksaiYmKGc/KGIuY2FsbChhLGQpLGI9bnVsbCk6KGo9YixiPWZ1bmN0aW9uKGEs
YixjKXtyZXR1cm4gai5jYWxsKG4oYSksYyl9KSksYikpZm9yKDtpPmg7aCsrKWIoYVtoXSxjLGc/
ZDpkLmNhbGwoYVtoXSxoLGIoYVtoXSxjKSkpO3JldHVybiBlP2E6aj9iLmNhbGwoYSk6aT9iKGFb
MF0sYyk6Zn0sTD1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5cGV8fDk9PT1hLm5vZGVU
eXBlfHwhK2Eubm9kZVR5cGV9O2Z1bmN0aW9uIE0oKXt0aGlzLmV4cGFuZG89bi5leHBhbmRvK00u
dWlkKyt9TS51aWQ9MSxNLnByb3RvdHlwZT17cmVnaXN0ZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1i
fHx7fTtyZXR1cm4gYS5ub2RlVHlwZT9hW3RoaXMuZXhwYW5kb109YzpPYmplY3QuZGVmaW5lUHJv
cGVydHkoYSx0aGlzLmV4cGFuZG8se3ZhbHVlOmMsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEw
fSksYVt0aGlzLmV4cGFuZG9dfSxjYWNoZTpmdW5jdGlvbihhKXtpZighTChhKSlyZXR1cm57fTt2
YXIgYj1hW3RoaXMuZXhwYW5kb107cmV0dXJuIGJ8fChiPXt9LEwoYSkmJihhLm5vZGVUeXBlP2Fb
dGhpcy5leHBhbmRvXT1iOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHRoaXMuZXhwYW5kbyx7dmFs
dWU6Yixjb25maWd1cmFibGU6ITB9KSkpLGJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT10
aGlzLmNhY2hlKGEpO2lmKCJzdHJpbmciPT10eXBlb2YgYillW2JdPWM7ZWxzZSBmb3IoZCBpbiBi
KWVbZF09YltkXTtyZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/
dGhpcy5jYWNoZShhKTphW3RoaXMuZXhwYW5kb10mJmFbdGhpcy5leHBhbmRvXVtiXX0sYWNjZXNz
OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gdm9pZCAwPT09Ynx8YiYmInN0cmluZyI9PXR5
cGVvZiBiJiZ2b2lkIDA9PT1jPyhkPXRoaXMuZ2V0KGEsYiksdm9pZCAwIT09ZD9kOnRoaXMuZ2V0
KGEsbi5jYW1lbENhc2UoYikpKToodGhpcy5zZXQoYSxiLGMpLHZvaWQgMCE9PWM/YzpiKX0scmVt
b3ZlOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9YVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9
PWYpe2lmKHZvaWQgMD09PWIpdGhpcy5yZWdpc3RlcihhKTtlbHNle24uaXNBcnJheShiKT9kPWIu
Y29uY2F0KGIubWFwKG4uY2FtZWxDYXNlKSk6KGU9bi5jYW1lbENhc2UoYiksYiBpbiBmP2Q9W2Is
ZV06KGQ9ZSxkPWQgaW4gZj9bZF06ZC5tYXRjaChHKXx8W10pKSxjPWQubGVuZ3RoO3doaWxlKGMt
LSlkZWxldGUgZltkW2NdXX0odm9pZCAwPT09Ynx8bi5pc0VtcHR5T2JqZWN0KGYpKSYmKGEubm9k
ZVR5cGU/YVt0aGlzLmV4cGFuZG9dPXZvaWQgMDpkZWxldGUgYVt0aGlzLmV4cGFuZG9dKX19LGhh
c0RhdGE6ZnVuY3Rpb24oYSl7dmFyIGI9YVt0aGlzLmV4cGFuZG9dO3JldHVybiB2b2lkIDAhPT1i
JiYhbi5pc0VtcHR5T2JqZWN0KGIpfX07dmFyIE49bmV3IE0sTz1uZXcgTSxQPS9eKD86XHtbXHdc
V10qXH18XFtbXHdcV10qXF0pJC8sUT0vW0EtWl0vZztmdW5jdGlvbiBSKGEsYixjKXt2YXIgZDtp
Zih2b2lkIDA9PT1jJiYxPT09YS5ub2RlVHlwZSlpZihkPSJkYXRhLSIrYi5yZXBsYWNlKFEsIi0k
JiIpLnRvTG93ZXJDYXNlKCksYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMp
e3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIi
PT09Yz8rYzpQLnRlc3QoYyk/bi5wYXJzZUpTT04oYyk6YzsKK31jYXRjaChlKXt9Ty5zZXQoYSxi
LGMpfWVsc2UgYz12b2lkIDA7cmV0dXJuIGN9bi5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oYSl7
cmV0dXJuIE8uaGFzRGF0YShhKXx8Ti5oYXNEYXRhKGEpfSxkYXRhOmZ1bmN0aW9uKGEsYixjKXty
ZXR1cm4gTy5hY2Nlc3MoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7Ty5yZW1vdmUo
YSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBOLmFjY2VzcyhhLGIsYyl9LF9yZW1v
dmVEYXRhOmZ1bmN0aW9uKGEsYil7Ti5yZW1vdmUoYSxiKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpm
dW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9p
ZCAwPT09YSl7aWYodGhpcy5sZW5ndGgmJihlPU8uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTi5n
ZXQoZiwiaGFzRGF0YUF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1nW2Nd
Lm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2UoZC5zbGljZSg1KSks
UihmLGQsZVtkXSkpKTtOLnNldChmLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gZX1yZXR1cm4i
b2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Ty5zZXQodGhpcyxhKX0pOkso
dGhpcyxmdW5jdGlvbihiKXt2YXIgYyxkO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9Ty5nZXQoZixh
KXx8Ty5nZXQoZixhLnJlcGxhY2UoUSwiLSQmIikudG9Mb3dlckNhc2UoKSksdm9pZCAwIT09Yyly
ZXR1cm4gYztpZihkPW4uY2FtZWxDYXNlKGEpLGM9Ty5nZXQoZixkKSx2b2lkIDAhPT1jKXJldHVy
biBjO2lmKGM9UihmLGQsdm9pZCAwKSx2b2lkIDAhPT1jKXJldHVybiBjfWVsc2UgZD1uLmNhbWVs
Q2FzZShhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1PLmdldCh0aGlzLGQpO08uc2V0KHRo
aXMsZCxiKSxhLmluZGV4T2YoIi0iKT4tMSYmdm9pZCAwIT09YyYmTy5zZXQodGhpcyxhLGIpfSl9
LG51bGwsYixhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24o
YSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe08ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4
dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngiKSsi
cXVldWUiLGQ9Ti5nZXQoYSxiKSxjJiYoIWR8fG4uaXNBcnJheShjKT9kPU4uYWNjZXNzKGEsYixu
Lm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9u
KGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgp
LGY9bi5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJv
Z3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlu
cHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZp
cmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1
cm4gTi5nZXQoYSxjKXx8Ti5hY2Nlc3MoYSxjLHtlbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1v
cnkiKS5hZGQoZnVuY3Rpb24oKXtOLnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxuLmZu
LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBl
b2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0aGlzWzBd
LGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1uLnF1ZXVlKHRo
aXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNb
MF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpe24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24o
YSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2
YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigp
ey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZv
aWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPU4uZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMm
JmMuZW1wdHkmJihkKyssYy5lbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0p
O3ZhciBTPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFQ9bmV3
IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1MrIikoW2EteiVdKikkIiwiaSIpLFU9WyJUb3AiLCJS
aWdodCIsIkJvdHRvbSIsIkxlZnQiXSxWPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9u
ZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX07
ZnVuY3Rpb24gVyhhLGIsYyxkKXt2YXIgZSxmPTEsZz0yMCxoPWQ/ZnVuY3Rpb24oKXtyZXR1cm4g
ZC5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gbi5jc3MoYSxiLCIiKX0saT1oKCksaj1jJiZjWzNd
fHwobi5jc3NOdW1iZXJbYl0/IiI6InB4Iiksaz0obi5jc3NOdW1iZXJbYl18fCJweCIhPT1qJiYr
aSkmJlQuZXhlYyhuLmNzcyhhLGIpKTtpZihrJiZrWzNdIT09ail7aj1qfHxrWzNdLGM9Y3x8W10s
az0raXx8MTtkbyBmPWZ8fCIuNSIsay89ZixuLnN0eWxlKGEsYixrK2opO3doaWxlKGYhPT0oZj1o
KCkvaSkmJjEhPT1mJiYtLWcpfXJldHVybiBjJiYoaz0ra3x8K2l8fDAsZT1jWzFdP2srKGNbMV0r
MSkqY1syXTorY1syXSxkJiYoZC51bml0PWosZC5zdGFydD1rLGQuZW5kPWUpKSxlfXZhciBYPS9e
KD86Y2hlY2tib3h8cmFkaW8pJC9pLFk9LzwoW1x3Oi1dKykvLFo9L14kfFwvKD86amF2YXxlY21h
KXNjcmlwdC9pLCQ9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwv
c2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48
Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIs
IjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Ri
b2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTskLm9wdGdyb3VwPSQub3B0aW9uLCQu
dGJvZHk9JC50Zm9vdD0kLmNvbGdyb3VwPSQuY2FwdGlvbj0kLnRoZWFkLCQudGg9JC50ZDtmdW5j
dGlvbiBfKGEsYil7dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdO
YW1lP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYnx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGEu
cXVlcnlTZWxlY3RvckFsbD9hLnF1ZXJ5U2VsZWN0b3JBbGwoYnx8IioiKTpbXTtyZXR1cm4gdm9p
ZCAwPT09Ynx8YiYmbi5ub2RlTmFtZShhLGIpP24ubWVyZ2UoW2FdLGMpOmN9ZnVuY3Rpb24gYWEo
YSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspTi5zZXQoYVtjXSwiZ2xvYmFsRXZh
bCIsIWJ8fE4uZ2V0KGJbY10sImdsb2JhbEV2YWwiKSl9dmFyIGJhPS88fCYjP1x3KzsvO2Z1bmN0
aW9uIGNhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaCxpLGosayxsPWIuY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpLG09W10sbz0wLHA9YS5sZW5ndGg7cD5vO28rKylpZihmPWFbb10sZnx8MD09PWYp
aWYoIm9iamVjdCI9PT1uLnR5cGUoZikpbi5tZXJnZShtLGYubm9kZVR5cGU/W2ZdOmYpO2Vsc2Ug
aWYoYmEudGVzdChmKSl7Zz1nfHxsLmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudCgiZGl2Iikp
LGg9KFkuZXhlYyhmKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxpPSRbaF18fCQuX2RlZmF1
bHQsZy5pbm5lckhUTUw9aVsxXStuLmh0bWxQcmVmaWx0ZXIoZikraVsyXSxrPWlbMF07d2hpbGUo
ay0tKWc9Zy5sYXN0Q2hpbGQ7bi5tZXJnZShtLGcuY2hpbGROb2RlcyksZz1sLmZpcnN0Q2hpbGQs
Zy50ZXh0Q29udGVudD0iIn1lbHNlIG0ucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtsLnRleHRD
b250ZW50PSIiLG89MDt3aGlsZShmPW1bbysrXSlpZihkJiZuLmluQXJyYXkoZixkKT4tMSllJiZl
LnB1c2goZik7ZWxzZSBpZihqPW4uY29udGFpbnMoZi5vd25lckRvY3VtZW50LGYpLGc9XyhsLmFw
cGVuZENoaWxkKGYpLCJzY3JpcHQiKSxqJiZhYShnKSxjKXtrPTA7d2hpbGUoZj1nW2srK10pWi50
ZXN0KGYudHlwZXx8IiIpJiZjLnB1c2goZil9cmV0dXJuIGx9IWZ1bmN0aW9uKCl7dmFyIGE9ZC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCksYj1hLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgi
ZGl2IikpLGM9ZC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2Muc2V0QXR0cmlidXRlKCJ0eXBlIiwi
cmFkaW8iKSxjLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxjLnNldEF0dHJpYnV0
ZSgibmFtZSIsInQiKSxiLmFwcGVuZENoaWxkKGMpLGwuY2hlY2tDbG9uZT1iLmNsb25lTm9kZSgh
MCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxiLmlubmVySFRNTD0iPHRleHRhcmVh
Png8L3RleHRhcmVhPiIsbC5ub0Nsb25lQ2hlY2tlZD0hIWIuY2xvbmVOb2RlKCEwKS5sYXN0Q2hp
bGQuZGVmYXVsdFZhbHVlfSgpO3ZhciBkYT0vXmtleS8sZWE9L14oPzptb3VzZXxwb2ludGVyfGNv
bnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLGZhPS9eKFteLl0qKSg/OlwuKC4rKXwpLztmdW5j
dGlvbiBnYSgpe3JldHVybiEwfWZ1bmN0aW9uIGhhKCl7cmV0dXJuITF9ZnVuY3Rpb24gaWEoKXt0
cnl7cmV0dXJuIGQuYWN0aXZlRWxlbWVudH1jYXRjaChhKXt9fWZ1bmN0aW9uIGphKGEsYixjLGQs
ZSxmKXt2YXIgZyxoO2lmKCJvYmplY3QiPT10eXBlb2YgYil7InN0cmluZyIhPXR5cGVvZiBjJiYo
ZD1kfHxjLGM9dm9pZCAwKTtmb3IoaCBpbiBiKWphKGEsaCxjLGQsYltoXSxmKTtyZXR1cm4gYX1p
ZihudWxsPT1kJiZudWxsPT1lPyhlPWMsZD1jPXZvaWQgMCk6bnVsbD09ZSYmKCJzdHJpbmciPT10
eXBlb2YgYz8oZT1kLGQ9dm9pZCAwKTooZT1kLGQ9YyxjPXZvaWQgMCkpLGU9PT0hMSllPWhhO2Vs
c2UgaWYoIWUpcmV0dXJuIGE7cmV0dXJuIDE9PT1mJiYoZz1lLGU9ZnVuY3Rpb24oYSl7cmV0dXJu
IG4oKS5vZmYoYSksZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1nLmd1aWR8fChnLmd1
aWQ9bi5ndWlkKyspKSxhLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50LmFkZCh0aGlzLGIsZSxkLGMp
fSl9bi5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxp
LGosayxsLG0sbyxwLHEscj1OLmdldChhKTtpZihyKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRs
ZXIsZT1mLnNlbGVjdG9yKSxjLmd1aWR8fChjLmd1aWQ9bi5ndWlkKyspLChpPXIuZXZlbnRzKXx8
KGk9ci5ldmVudHM9e30pLChnPXIuaGFuZGxlKXx8KGc9ci5oYW5kbGU9ZnVuY3Rpb24oYil7cmV0
dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBuJiZuLmV2ZW50LnRyaWdnZXJlZCE9PWIudHlwZT9uLmV2
ZW50LmRpc3BhdGNoLmFwcGx5KGEsYXJndW1lbnRzKTp2b2lkIDB9KSxiPShifHwiIikubWF0Y2go
Ryl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paD1mYS5leGVjKGJbal0pfHxbXSxvPXE9aFsx
XSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29d
fHx7fSxvPShlP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFs
W29dfHx7fSxrPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1
aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5tYXRjaC5uZWVkc0Nv
bnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGYpLChtPWlbb10pfHwobT1pW29d
PVtdLG0uZGVsZWdhdGVDb3VudD0wLGwuc2V0dXAmJmwuc2V0dXAuY2FsbChhLGQscCxnKSE9PSEx
fHxhLmFkZEV2ZW50TGlzdGVuZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihvLGcpKSxsLmFkZCYmKGwu
YWRkLmNhbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkpLGU/
bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksbi5ldmVudC5nbG9iYWxb
b109ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxv
LHAscSxyPU4uaGFzRGF0YShhKSYmTi5nZXQoYSk7aWYociYmKGk9ci5ldmVudHMpKXtiPShifHwi
IikubWF0Y2goRyl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1mYS5leGVjKGJbal0p
fHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1uLmV2ZW50
LnNwZWNpYWxbb118fHt9LG89KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbT1pW29d
fHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIp
KyIoXFwufCQpIiksZz1mPW0ubGVuZ3RoO3doaWxlKGYtLSlrPW1bZl0sIWUmJnEhPT1rLm9yaWdU
eXBlfHxjJiZjLmd1aWQhPT1rLmd1aWR8fGgmJiFoLnRlc3Qoay5uYW1lc3BhY2UpfHxkJiZkIT09
ay5zZWxlY3RvciYmKCIqKiIhPT1kfHwhay5zZWxlY3Rvcil8fChtLnNwbGljZShmLDEpLGsuc2Vs
ZWN0b3ImJm0uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsaykpO2cm
JiFtLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09
ITF8fG4ucmVtb3ZlRXZlbnQoYSxvLHIuaGFuZGxlKSxkZWxldGUgaVtvXSl9ZWxzZSBmb3IobyBp
biBpKW4uZXZlbnQucmVtb3ZlKGEsbytiW2pdLGMsZCwhMCk7bi5pc0VtcHR5T2JqZWN0KGkpJiZO
LnJlbW92ZShhLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXthPW4uZXZl
bnQuZml4KGEpO3ZhciBiLGMsZCxmLGcsaD1bXSxpPWUuY2FsbChhcmd1bWVudHMpLGo9KE4uZ2V0
KHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1uLmV2ZW50LnNwZWNpYWxbYS50eXBl
XXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5w
cmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1uLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhp
cyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXth
LmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGM9MDt3aGlsZSgoZz1mLmhhbmRsZXJzW2MrK10pJiYhYS5p
c0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKWEucm5hbWVzcGFjZSYmIWEucm5hbWVzcGFj
ZS50ZXN0KGcubmFtZXNwYWNlKXx8KGEuaGFuZGxlT2JqPWcsYS5kYXRhPWcuZGF0YSxkPSgobi5l
dmVudC5zcGVjaWFsW2cub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxnLmhhbmRsZXIpLmFwcGx5KGYu
ZWxlbSxpKSx2b2lkIDAhPT1kJiYoYS5yZXN1bHQ9ZCk9PT0hMSYmKGEucHJldmVudERlZmF1bHQo
KSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNw
YXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBj
LGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBl
JiYoImNsaWNrIiE9PWEudHlwZXx8aXNOYU4oYS5idXR0b24pfHxhLmJ1dHRvbjwxKSlmb3IoO2kh
PT10aGlzO2k9aS5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1pLm5vZGVUeXBlJiYoaS5kaXNhYmxl
ZCE9PSEwfHwiY2xpY2siIT09YS50eXBlKSl7Zm9yKGQ9W10sYz0wO2g+YztjKyspZj1iW2NdLGU9
Zi5zZWxlY3RvcisiICIsdm9pZCAwPT09ZFtlXSYmKGRbZV09Zi5uZWVkc0NvbnRleHQ/bihlLHRo
aXMpLmluZGV4KGkpPi0xOm4uZmluZChlLHRoaXMsbnVsbCxbaV0pLmxlbmd0aCksZFtlXSYmZC5w
dXNoKGYpO2QubGVuZ3RoJiZnLnB1c2goe2VsZW06aSxoYW5kbGVyczpkfSl9cmV0dXJuIGg8Yi5s
ZW5ndGgmJmcucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOmIuc2xpY2UoaCl9KSxnfSxwcm9wczoi
YWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWlsIGV2
ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAg
dmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIg
Y2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0
dXJuIG51bGw9PWEud2hpY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpi
LmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBj
bGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVt
ZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnPWIuYnV0dG9u
O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVy
RG9jdW1lbnR8fGQsZT1jLmRvY3VtZW50RWxlbWVudCxmPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50
WCsoZSYmZS5zY3JvbGxMZWZ0fHxmJiZmLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8
fGYmJmYuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxm
JiZmLnNjcm9sbFRvcHx8MCktKGUmJmUuY2xpZW50VG9wfHxmJiZmLmNsaWVudFRvcHx8MCkpLGEu
d2hpY2h8fHZvaWQgMD09PWd8fChhLndoaWNoPTEmZz8xOjImZz8zOjQmZz8yOjApLGF9fSxmaXg6
ZnVuY3Rpb24oYSl7aWYoYVtuLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZSxmPWEudHlwZSxn
PWEsaD10aGlzLmZpeEhvb2tzW2ZdO2h8fCh0aGlzLmZpeEhvb2tzW2ZdPWg9ZWEudGVzdChmKT90
aGlzLm1vdXNlSG9va3M6ZGEudGVzdChmKT90aGlzLmtleUhvb2tzOnt9KSxlPWgucHJvcHM/dGhp
cy5wcm9wcy5jb25jYXQoaC5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBuLkV2ZW50KGcpLGI9ZS5s
ZW5ndGg7d2hpbGUoYi0tKWM9ZVtiXSxhW2NdPWdbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJn
ZXQ9ZCksMz09PWEudGFyZ2V0Lm5vZGVUeXBlJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9k
ZSksaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0s
Zm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PWlhKCkmJnRoaXMuZm9jdXM/
KHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0
cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1pYSgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1
cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpm
dW5jdGlvbigpe3JldHVybiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2smJm4ubm9k
ZU5hbWUodGhpcywiaW5wdXQiKT8odGhpcy5jbGljaygpLCExKTp2b2lkIDB9LF9kZWZhdWx0OmZ1
bmN0aW9uKGEpe3JldHVybiBuLm5vZGVOYW1lKGEudGFyZ2V0LCJhIil9fSxiZWZvcmV1bmxvYWQ6
e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihhKXt2b2lkIDAhPT1hLnJlc3VsdCYmYS5vcmlnaW5hbEV2
ZW50JiYoYS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWEucmVzdWx0KX19fX0sbi5yZW1vdmVF
dmVudD1mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50
TGlzdGVuZXIoYixjKX0sbi5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNl
b2Ygbi5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50
eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09
YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/Z2E6aGEpOnRoaXMudHlwZT1h
LGImJm4uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG4ubm93
KCksdm9pZCh0aGlzW24uZXhwYW5kb109ITApKTpuZXcgbi5FdmVudChhLGIpfSxuLkV2ZW50LnBy
b3RvdHlwZT17Y29uc3RydWN0b3I6bi5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6aGEsaXNQcm9w
YWdhdGlvblN0b3BwZWQ6aGEsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6aGEsaXNTaW11
bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZl
bnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Z2EsYSYmIXRoaXMuaXNTaW11bGF0ZWQmJmEucHJl
dmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmln
aW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Z2EsYSYmIXRoaXMuaXNTaW11bGF0
ZWQmJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlv
bigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25T
dG9wcGVkPWdhLGEmJiF0aGlzLmlzU2ltdWxhdGVkJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlv
bigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxuLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3Zl
ciIsbW91c2VsZWF2ZToibW91c2VvdXQiLHBvaW50ZXJlbnRlcjoicG9pbnRlcm92ZXIiLHBvaW50
ZXJsZWF2ZToicG9pbnRlcm91dCJ9LGZ1bmN0aW9uKGEsYil7bi5ldmVudC5zcGVjaWFsW2FdPXtk
ZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMs
ZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iajtyZXR1cm4gZSYmKGU9PT1kfHxuLmNvbnRh
aW5zKGQsZSkpfHwoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1
bWVudHMpLGEudHlwZT1iKSxjfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCl7
cmV0dXJuIGphKHRoaXMsYSxiLGMsZCl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gamEo
dGhpcyxhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYSYmYS5wcmV2
ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmopcmV0dXJuIGQ9YS5oYW5kbGVPYmosbihhLmRlbGVnYXRl
VGFyZ2V0KS5vZmYoZC5uYW1lc3BhY2U/ZC5vcmlnVHlwZSsiLiIrZC5uYW1lc3BhY2U6ZC5vcmln
VHlwZSxkLnNlbGVjdG9yLGQuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGEpe2Zv
cihlIGluIGEpdGhpcy5vZmYoZSxiLGFbZV0pO3JldHVybiB0aGlzfXJldHVybiBiIT09ITEmJiJm
dW5jdGlvbiIhPXR5cGVvZiBifHwoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWhhKSx0aGlzLmVh
Y2goZnVuY3Rpb24oKXtuLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfX0pO3ZhciBrYT0vPCg/
IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6LV0r
KVtePl0qKVwvPi9naSxsYT0vPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxtYT0vY2hlY2tlZFxzKig/
OltePV18PVxzKi5jaGVja2VkLikvaSxuYT0vXnRydWVcLyguKikvLG9hPS9eXHMqPCEoPzpcW0NE
QVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBwYShhLGIpe3JldHVybiBuLm5v
ZGVOYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENo
aWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hp
bGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24gcWEo
YSl7cmV0dXJuIGEudHlwZT0obnVsbCE9PWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5
cGUsYX1mdW5jdGlvbiByYShhKXt2YXIgYj1uYS5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBl
PWJbMV06YS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIHNhKGEsYil7dmFyIGMs
ZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYoTi5oYXNEYXRhKGEpJiYoZj1OLmFj
Y2VzcyhhKSxnPU4uc2V0KGIsZiksaj1mLmV2ZW50cykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50
cz17fTtmb3IoZSBpbiBqKWZvcihjPTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKW4uZXZlbnQuYWRk
KGIsZSxqW2VdW2NdKX1PLmhhc0RhdGEoYSkmJihoPU8uYWNjZXNzKGEpLGk9bi5leHRlbmQoe30s
aCksTy5zZXQoYixpKSl9fWZ1bmN0aW9uIHRhKGEsYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpOyJpbnB1dCI9PT1jJiZYLnRlc3QoYS50eXBlKT9iLmNoZWNrZWQ9YS5jaGVja2VkOiJp
bnB1dCIhPT1jJiYidGV4dGFyZWEiIT09Y3x8KGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVl
KX1mdW5jdGlvbiB1YShhLGIsYyxkKXtiPWYuYXBwbHkoW10sYik7dmFyIGUsZyxoLGksaixrLG09
MCxvPWEubGVuZ3RoLHA9by0xLHE9YlswXSxyPW4uaXNGdW5jdGlvbihxKTtpZihyfHxvPjEmJiJz
dHJpbmciPT10eXBlb2YgcSYmIWwuY2hlY2tDbG9uZSYmbWEudGVzdChxKSlyZXR1cm4gYS5lYWNo
KGZ1bmN0aW9uKGUpe3ZhciBmPWEuZXEoZSk7ciYmKGJbMF09cS5jYWxsKHRoaXMsZSxmLmh0bWwo
KSkpLHVhKGYsYixjLGQpfSk7aWYobyYmKGU9Y2EoYixhWzBdLm93bmVyRG9jdW1lbnQsITEsYSxk
KSxnPWUuZmlyc3RDaGlsZCwxPT09ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGU9ZyksZ3x8ZCkpe2Zv
cihoPW4ubWFwKF8oZSwic2NyaXB0IikscWEpLGk9aC5sZW5ndGg7bz5tO20rKylqPWUsbSE9PXAm
JihqPW4uY2xvbmUoaiwhMCwhMCksaSYmbi5tZXJnZShoLF8oaiwic2NyaXB0IikpKSxjLmNhbGwo
YVttXSxqLG0pO2lmKGkpZm9yKGs9aFtoLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG4ubWFwKGgs
cmEpLG09MDtpPm07bSsrKWo9aFttXSxaLnRlc3Qoai50eXBlfHwiIikmJiFOLmFjY2VzcyhqLCJn
bG9iYWxFdmFsIikmJm4uY29udGFpbnMoayxqKSYmKGouc3JjP24uX2V2YWxVcmwmJm4uX2V2YWxV
cmwoai5zcmMpOm4uZ2xvYmFsRXZhbChqLnRleHRDb250ZW50LnJlcGxhY2Uob2EsIiIpKSl9cmV0
dXJuIGF9ZnVuY3Rpb24gdmEoYSxiLGMpe2Zvcih2YXIgZCxlPWI/bi5maWx0ZXIoYixhKTphLGY9
MDtudWxsIT0oZD1lW2ZdKTtmKyspY3x8MSE9PWQubm9kZVR5cGV8fG4uY2xlYW5EYXRhKF8oZCkp
LGQucGFyZW50Tm9kZSYmKGMmJm4uY29udGFpbnMoZC5vd25lckRvY3VtZW50LGQpJiZhYShfKGQs
InNjcmlwdCIpKSxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCkpO3JldHVybiBhfW4uZXh0ZW5k
KHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2Uoa2EsIjwkMT48LyQy
PiIpfSxjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNsb25lTm9kZSghMCks
aT1uLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZighKGwubm9DbG9uZUNoZWNrZWR8fDEh
PT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGV8fG4uaXNYTUxEb2MoYSkpKWZvcihnPV8oaCks
Zj1fKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspdGEoZltkXSxnW2RdKTtpZihiKWlmKGMpZm9y
KGY9Znx8XyhhKSxnPWd8fF8oaCksZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKylzYShmW2RdLGdbZF0p
O2Vsc2Ugc2EoYSxoKTtyZXR1cm4gZz1fKGgsInNjcmlwdCIpLGcubGVuZ3RoPjAmJmFhKGcsIWkm
Jl8oYSwic2NyaXB0IikpLGh9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGU9
bi5ldmVudC5zcGVjaWFsLGY9MDt2b2lkIDAhPT0oYz1hW2ZdKTtmKyspaWYoTChjKSl7aWYoYj1j
W04uZXhwYW5kb10pe2lmKGIuZXZlbnRzKWZvcihkIGluIGIuZXZlbnRzKWVbZF0/bi5ldmVudC5y
ZW1vdmUoYyxkKTpuLnJlbW92ZUV2ZW50KGMsZCxiLmhhbmRsZSk7Y1tOLmV4cGFuZG9dPXZvaWQg
MH1jW08uZXhwYW5kb10mJihjW08uZXhwYW5kb109dm9pZCAwKX19fSksbi5mbi5leHRlbmQoe2Rv
bU1hbmlwOnVhLGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdmEodGhpcyxhLCEwKX0scmVtb3Zl
OmZ1bmN0aW9uKGEpe3JldHVybiB2YSh0aGlzLGEpfSx0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBL
KHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRoaXMuZW1w
dHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlw
ZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWEpfSl9LG51bGwsYSxhcmd1
bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHVhKHRoaXMsYXJndW1lbnRz
LGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9
PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1wYSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHBy
ZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYo
MT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUp
e3ZhciBiPXBhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZv
cmU6ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5w
YXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6
ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJl
bnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9
KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKykx
PT09YS5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKF8oYSwhMSkpLGEudGV4dENvbnRlbnQ9IiIpO3Jl
dHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9PWE/ITE6YSxiPW51
bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY2xvbmUodGhpcyxhLGIpfSl9
LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBd
fHx7fSxjPTAsZD10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1
cm4gYi5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhbGEudGVzdChhKSYmISRbKFku
ZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9bi5odG1sUHJlZmlsdGVyKGEp
O3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7fSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5E
YXRhKF8oYiwhMSkpLGIuaW5uZXJIVE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHko
KS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rp
b24oKXt2YXIgYT1bXTtyZXR1cm4gdWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYil7dmFyIGM9
dGhpcy5wYXJlbnROb2RlO24uaW5BcnJheSh0aGlzLGEpPDAmJihuLmNsZWFuRGF0YShfKHRoaXMp
KSxjJiZjLnJlcGxhY2VDaGlsZChiLHRoaXMpKX0sYSl9fSksbi5lYWNoKHthcHBlbmRUbzoiYXBw
ZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRl
cjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2Fd
PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPVtdLGU9bihhKSxmPWUubGVuZ3RoLTEsaD0wO2Y+PWg7
aCsrKWM9aD09PWY/dGhpczp0aGlzLmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGcuYXBwbHkoZCxj
LmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIHdhLHhhPXtIVE1MOiJibG9j
ayIsQk9EWToiYmxvY2sifTtmdW5jdGlvbiB5YShhLGIpe3ZhciBjPW4oYi5jcmVhdGVFbGVtZW50
KGEpKS5hcHBlbmRUbyhiLmJvZHkpLGQ9bi5jc3MoY1swXSwiZGlzcGxheSIpO3JldHVybiBjLmRl
dGFjaCgpLGR9ZnVuY3Rpb24gemEoYSl7dmFyIGI9ZCxjPXhhW2FdO3JldHVybiBjfHwoYz15YShh
LGIpLCJub25lIiE9PWMmJmN8fCh3YT0od2F8fG4oIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdp
ZHRoPScwJyBoZWlnaHQ9JzAnLz4iKSkuYXBwZW5kVG8oYi5kb2N1bWVudEVsZW1lbnQpLGI9d2Fb
MF0uY29udGVudERvY3VtZW50LGIud3JpdGUoKSxiLmNsb3NlKCksYz15YShhLGIpLHdhLmRldGFj
aCgpKSx4YVthXT1jKSxjfXZhciBBYT0vXm1hcmdpbi8sQmE9bmV3IFJlZ0V4cCgiXigiK1MrIiko
PyFweClbYS16JV0rJCIsImkiKSxDYT1mdW5jdGlvbihiKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQu
ZGVmYXVsdFZpZXc7cmV0dXJuIGMmJmMub3BlbmVyfHwoYz1hKSxjLmdldENvbXB1dGVkU3R5bGUo
Yil9LERhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZz17fTtmb3IoZiBpbiBiKWdbZl09YS5z
dHlsZVtmXSxhLnN0eWxlW2ZdPWJbZl07ZT1jLmFwcGx5KGEsZHx8W10pO2ZvcihmIGluIGIpYS5z
dHlsZVtmXT1nW2ZdO3JldHVybiBlfSxFYT1kLmRvY3VtZW50RWxlbWVudDshZnVuY3Rpb24oKXt2
YXIgYixjLGUsZixnPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksaD1kLmNyZWF0ZUVsZW1lbnQoImRp
diIpO2lmKGguc3R5bGUpe2guc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixoLmNs
b25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsbC5jbGVhckNsb25lU3R5bGU9ImNv
bnRlbnQtYm94Ij09PWguc3R5bGUuYmFja2dyb3VuZENsaXAsZy5zdHlsZS5jc3NUZXh0PSJib3Jk
ZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O3BhZGRpbmc6MDttYXJn
aW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZSIsZy5hcHBlbmRDaGlsZChoKTtmdW5jdGlvbiBp
KCl7aC5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJv
eC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRp
dmU7ZGlzcGxheTpibG9jazttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3RvcDox
JTt3aWR0aDo1MCUiLGguaW5uZXJIVE1MPSIiLEVhLmFwcGVuZENoaWxkKGcpO3ZhciBkPWEuZ2V0
Q29tcHV0ZWRTdHlsZShoKTtiPSIxJSIhPT1kLnRvcCxmPSIycHgiPT09ZC5tYXJnaW5MZWZ0LGM9
IjRweCI9PT1kLndpZHRoLGguc3R5bGUubWFyZ2luUmlnaHQ9IjUwJSIsZT0iNHB4Ij09PWQubWFy
Z2luUmlnaHQsRWEucmVtb3ZlQ2hpbGQoZyl9bi5leHRlbmQobCx7cGl4ZWxQb3NpdGlvbjpmdW5j
dGlvbigpe3JldHVybiBpKCksYn0sYm94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4g
bnVsbD09YyYmaSgpLGN9LHBpeGVsTWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09
YyYmaSgpLGV9LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1jJiZp
KCksZn0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3ZhciBiLGM9aC5hcHBlbmRDaGls
ZChkLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtyZXR1cm4gYy5zdHlsZS5jc3NUZXh0PWguc3R5bGUu
Y3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVu
dC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjAiLGMuc3R5bGUu
bWFyZ2luUmlnaHQ9Yy5zdHlsZS53aWR0aD0iMCIsaC5zdHlsZS53aWR0aD0iMXB4IixFYS5hcHBl
bmRDaGlsZChnKSxiPSFwYXJzZUZsb2F0KGEuZ2V0Q29tcHV0ZWRTdHlsZShjKS5tYXJnaW5SaWdo
dCksRWEucmVtb3ZlQ2hpbGQoZyksaC5yZW1vdmVDaGlsZChjKSxifX0pfX0oKTtmdW5jdGlvbiBG
YShhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fENhKGEpLGc9Yz9jLmdl
dFByb3BlcnR5VmFsdWUoYil8fGNbYl06dm9pZCAwLCIiIT09ZyYmdm9pZCAwIT09Z3x8bi5jb250
YWlucyhhLm93bmVyRG9jdW1lbnQsYSl8fChnPW4uc3R5bGUoYSxiKSksYyYmIWwucGl4ZWxNYXJn
aW5SaWdodCgpJiZCYS50ZXN0KGcpJiZBYS50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0
aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgs
aC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpLHZvaWQgMCE9PWc/ZysiIjpnfWZ1
bmN0aW9uIEdhKGEsYil7cmV0dXJue2dldDpmdW5jdGlvbigpe3JldHVybiBhKCk/dm9pZCBkZWxl
dGUgdGhpcy5nZXQ6KHRoaXMuZ2V0PWIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXZhciBIYT0v
Xihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sSWE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJp
bGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LEphPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250
V2VpZ2h0OiI0MDAifSxLYT1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdLExhPWQuY3JlYXRlRWxl
bWVudCgiZGl2Iikuc3R5bGU7ZnVuY3Rpb24gTWEoYSl7aWYoYSBpbiBMYSlyZXR1cm4gYTt2YXIg
Yj1hWzBdLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKSxjPUthLmxlbmd0aDt3aGlsZShjLS0paWYo
YT1LYVtjXStiLGEgaW4gTGEpcmV0dXJuIGF9ZnVuY3Rpb24gTmEoYSxiLGMpe3ZhciBkPVQuZXhl
YyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMl0tKGN8fDApKSsoZFszXXx8InB4Iik6Yn1mdW5j
dGlvbiBPYShhLGIsYyxkLGUpe2Zvcih2YXIgZj1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80
OiJ3aWR0aCI9PT1iPzE6MCxnPTA7ND5mO2YrPTIpIm1hcmdpbiI9PT1jJiYoZys9bi5jc3MoYSxj
K1VbZl0sITAsZSkpLGQ/KCJjb250ZW50Ij09PWMmJihnLT1uLmNzcyhhLCJwYWRkaW5nIitVW2Zd
LCEwLGUpKSwibWFyZ2luIiE9PWMmJihnLT1uLmNzcyhhLCJib3JkZXIiK1VbZl0rIldpZHRoIiwh
MCxlKSkpOihnKz1uLmNzcyhhLCJwYWRkaW5nIitVW2ZdLCEwLGUpLCJwYWRkaW5nIiE9PWMmJihn
Kz1uLmNzcyhhLCJib3JkZXIiK1VbZl0rIldpZHRoIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9u
IFBhKGEsYixjKXt2YXIgZD0hMCxlPSJ3aWR0aCI9PT1iP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRI
ZWlnaHQsZj1DYShhKSxnPSJib3JkZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZik7
aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT1GYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5
bGVbYl0pLEJhLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYobC5ib3hTaXppbmdSZWxpYWJsZSgpfHxl
PT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK09hKGEsYixjfHwoZz8i
Ym9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1mdW5jdGlvbiBRYShhLGIpe2Zvcih2YXIgYyxk
LGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1OLmdl
dChkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8
KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlYoZCkmJihmW2ddPU4u
YWNjZXNzKGQsIm9sZGRpc3BsYXkiLHphKGQubm9kZU5hbWUpKSkpOihlPVYoZCksIm5vbmUiPT09
YyYmZXx8Ti5zZXQoZCwib2xkZGlzcGxheSIsZT9jOm4uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3Io
Zz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkm
JiIiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUi
KSk7cmV0dXJuIGF9bi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxi
KXtpZihiKXt2YXIgYz1GYShhLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1jPyIxIjpjfX19fSxjc3NO
dW1iZXI6e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGNvbHVtbkNvdW50OiEwLGZpbGxPcGFj
aXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0
OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpv
b206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOiJjc3NGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYixj
LGQpe2lmKGEmJjMhPT1hLm5vZGVUeXBlJiY4IT09YS5ub2RlVHlwZSYmYS5zdHlsZSl7dmFyIGUs
ZixnLGg9bi5jYW1lbENhc2UoYiksaT1hLnN0eWxlO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChu
LmNzc1Byb3BzW2hdPU1hKGgpfHxoKSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sdm9p
ZCAwPT09Yz9nJiYiZ2V0ImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXToo
Zj10eXBlb2YgYywic3RyaW5nIj09PWYmJihlPVQuZXhlYyhjKSkmJmVbMV0mJihjPVcoYSxiLGUp
LGY9Im51bWJlciIpLG51bGwhPWMmJmM9PT1jJiYoIm51bWJlciI9PT1mJiYoYys9ZSYmZVszXXx8
KG4uY3NzTnVtYmVyW2hdPyIiOiJweCIpKSxsLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09
Yi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChpW2JdPSJpbmhlcml0IiksZyYmInNldCJpbiBnJiZ2
b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpfHwoaVtiXT1jKSksdm9pZCAwKX19LGNzczpmdW5jdGlv
bihhLGIsYyxkKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1uLmNzc1Byb3Bz
W2hdfHwobi5jc3NQcm9wc1toXT1NYShoKXx8aCksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tz
W2hdLGcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZSYmKGU9RmEoYSxi
LGQpKSwibm9ybWFsIj09PWUmJmIgaW4gSmEmJihlPUphW2JdKSwiIj09PWN8fGM/KGY9cGFyc2VG
bG9hdChlKSxjPT09ITB8fGlzRmluaXRlKGYpP2Z8fDA6ZSk6ZX19KSxuLmVhY2goWyJoZWlnaHQi
LCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxk
KXtyZXR1cm4gYz9IYS50ZXN0KG4uY3NzKGEsImRpc3BsYXkiKSkmJjA9PT1hLm9mZnNldFdpZHRo
P0RhKGEsSWEsZnVuY3Rpb24oKXtyZXR1cm4gUGEoYSxiLGQpfSk6UGEoYSxiLGQpOnZvaWQgMH0s
c2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxmPWQmJkNhKGEpLGc9ZCYmT2EoYSxiLGQsImJvcmRl
ci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKSxmKTtyZXR1cm4gZyYmKGU9VC5leGVj
KGMpKSYmInB4IiE9PShlWzNdfHwicHgiKSYmKGEuc3R5bGVbYl09YyxjPW4uY3NzKGEsYikpLE5h
KGEsYyxnKX19fSksbi5jc3NIb29rcy5tYXJnaW5MZWZ0PUdhKGwucmVsaWFibGVNYXJnaW5MZWZ0
LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/KHBhcnNlRmxvYXQoRmEoYSwibWFyZ2luTGVmdCIpKXx8
YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LURhKGEse21hcmdpbkxlZnQ6MH0sZnVuY3Rp
b24oKXtyZXR1cm4gYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCI6dm9pZCAw
fSksbi5jc3NIb29rcy5tYXJnaW5SaWdodD1HYShsLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rp
b24oYSxiKXtyZXR1cm4gYj9EYShhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxGYSxbYSwibWFy
Z2luUmlnaHQiXSk6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6
IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihj
KXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107
ND5kO2QrKyllW2ErVVtkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxBYS50ZXN0
KGEpfHwobi5jc3NIb29rc1thK2JdLnNldD1OYSl9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9u
KGEsYil7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihu
LmlzQXJyYXkoYikpe2ZvcihkPUNhKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW4uY3Nz
KGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9uLnN0eWxlKGEsYixjKTpu
LmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVy
biBRYSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBRYSh0aGlzKX0sdG9nZ2xlOmZ1
bmN0aW9uKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhp
ZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtWKHRoaXMpP24odGhpcykuc2hvdygpOm4odGhpcyku
aGlkZSgpfSl9fSk7ZnVuY3Rpb24gUmEoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IFJhLnByb3RvdHlw
ZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1SYSxSYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJh
LGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMu
ZWFzaW5nPWV8fG4uZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhp
cy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/
IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPVJhLnByb3BIb29rc1t0aGlzLnByb3BdO3Jl
dHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpSYS5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMp
fSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1SYS5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4g
dGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEs
dGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5w
b3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5v
cHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRo
aXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOlJhLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyks
dGhpc319LFJhLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1SYS5wcm90b3R5cGUsUmEucHJvcEhv
b2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiAxIT09YS5lbGVtLm5v
ZGVUeXBlfHxudWxsIT1hLmVsZW1bYS5wcm9wXSYmbnVsbD09YS5lbGVtLnN0eWxlW2EucHJvcF0/
YS5lbGVtW2EucHJvcF06KGI9bi5jc3MoYS5lbGVtLGEucHJvcCwiIiksYiYmImF1dG8iIT09Yj9i
OjApfSxzZXQ6ZnVuY3Rpb24oYSl7bi5meC5zdGVwW2EucHJvcF0/bi5meC5zdGVwW2EucHJvcF0o
YSk6MSE9PWEuZWxlbS5ub2RlVHlwZXx8bnVsbD09YS5lbGVtLnN0eWxlW24uY3NzUHJvcHNbYS5w
cm9wXV0mJiFuLmNzc0hvb2tzW2EucHJvcF0/YS5lbGVtW2EucHJvcF09YS5ub3c6bi5zdHlsZShh
LmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCl9fX0sUmEucHJvcEhvb2tzLnNjcm9sbFRvcD1SYS5w
cm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5l
bGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxuLmVhc2luZz17bGluZWFy
OmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNv
cyhhKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LG4uZng9UmEucHJvdG90eXBlLmluaXQs
bi5meC5zdGVwPXt9O3ZhciBTYSxUYSxVYT0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sVmE9L3F1
ZXVlSG9va3MkLztmdW5jdGlvbiBXYSgpe3JldHVybiBhLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtT
YT12b2lkIDB9KSxTYT1uLm5vdygpfWZ1bmN0aW9uIFhhKGEsYil7dmFyIGMsZD0wLGU9e2hlaWdo
dDphfTtmb3IoYj1iPzE6MDs0PmQ7ZCs9Mi1iKWM9VVtkXSxlWyJtYXJnaW4iK2NdPWVbInBhZGRp
bmciK2NdPWE7cmV0dXJuIGImJihlLm9wYWNpdHk9ZS53aWR0aD1hKSxlfWZ1bmN0aW9uIFlhKGEs
YixjKXtmb3IodmFyIGQsZT0oX2EudHdlZW5lcnNbYl18fFtdKS5jb25jYXQoX2EudHdlZW5lcnNb
IioiXSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJu
IGR9ZnVuY3Rpb24gWmEoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbD10aGlzLG09e30sbz1h
LnN0eWxlLHA9YS5ub2RlVHlwZSYmVihhKSxxPU4uZ2V0KGEsImZ4c2hvdyIpO2MucXVldWV8fCho
PW4uX3F1ZXVlSG9va3MoYSwiZngiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9
aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgu
dW5xdWV1ZWQrKyxsLmFsd2F5cyhmdW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1
ZXVlZC0tLG4ucXVldWUoYSwiZngiKS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEu
bm9kZVR5cGUmJigiaGVpZ2h0ImluIGJ8fCJ3aWR0aCJpbiBiKSYmKGMub3ZlcmZsb3c9W28ub3Zl
cmZsb3csby5vdmVyZmxvd1gsby5vdmVyZmxvd1ldLGo9bi5jc3MoYSwiZGlzcGxheSIpLGs9Im5v
bmUiPT09aj9OLmdldChhLCJvbGRkaXNwbGF5Iil8fHphKGEubm9kZU5hbWUpOmosImlubGluZSI9
PT1rJiYibm9uZSI9PT1uLmNzcyhhLCJmbG9hdCIpJiYoby5kaXNwbGF5PSJpbmxpbmUtYmxvY2si
KSksYy5vdmVyZmxvdyYmKG8ub3ZlcmZsb3c9ImhpZGRlbiIsbC5hbHdheXMoZnVuY3Rpb24oKXtv
Lm92ZXJmbG93PWMub3ZlcmZsb3dbMF0sby5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxvLm92ZXJm
bG93WT1jLm92ZXJmbG93WzJdfSkpO2ZvcihkIGluIGIpaWYoZT1iW2RdLFVhLmV4ZWMoZSkpe2lm
KGRlbGV0ZSBiW2RdLGY9Znx8InRvZ2dsZSI9PT1lLGU9PT0ocD8iaGlkZSI6InNob3ciKSl7aWYo
InNob3ciIT09ZXx8IXF8fHZvaWQgMD09PXFbZF0pY29udGludWU7cD0hMH1tW2RdPXEmJnFbZF18
fG4uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKG4uaXNFbXB0eU9iamVjdChtKSkiaW5saW5l
Ij09PSgibm9uZSI9PT1qP3phKGEubm9kZU5hbWUpOmopJiYoby5kaXNwbGF5PWopO2Vsc2V7cT8i
aGlkZGVuImluIHEmJihwPXEuaGlkZGVuKTpxPU4uYWNjZXNzKGEsImZ4c2hvdyIse30pLGYmJihx
LmhpZGRlbj0hcCkscD9uKGEpLnNob3coKTpsLmRvbmUoZnVuY3Rpb24oKXtuKGEpLmhpZGUoKX0p
LGwuZG9uZShmdW5jdGlvbigpe3ZhciBiO04ucmVtb3ZlKGEsImZ4c2hvdyIpO2ZvcihiIGluIG0p
bi5zdHlsZShhLGIsbVtiXSl9KTtmb3IoZCBpbiBtKWc9WWEocD9xW2RdOjAsZCxsKSxkIGluIHF8
fChxW2RdPWcuc3RhcnQscCYmKGcuZW5kPWcuc3RhcnQsZy5zdGFydD0id2lkdGgiPT09ZHx8Imhl
aWdodCI9PT1kPzE6MCkpfX1mdW5jdGlvbiAkYShhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4g
YSlpZihkPW4uY2FtZWxDYXNlKGMpLGU9YltkXSxmPWFbY10sbi5pc0FycmF5KGYpJiYoZT1mWzFd
LGY9YVtjXT1mWzBdKSxjIT09ZCYmKGFbZF09ZixkZWxldGUgYVtjXSksZz1uLmNzc0hvb2tzW2Rd
LGcmJiJleHBhbmQiaW4gZyl7Zj1nLmV4cGFuZChmKSxkZWxldGUgYVtkXTtmb3IoYyBpbiBmKWMg
aW4gYXx8KGFbY109ZltjXSxiW2NdPWUpfWVsc2UgYltkXT1lfWZ1bmN0aW9uIF9hKGEsYixjKXt2
YXIgZCxlLGY9MCxnPV9hLnByZWZpbHRlcnMubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhm
dW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3Io
dmFyIGI9U2F8fFdhKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1j
L2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2Vl
bnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5y
ZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5k
KHt9LGIpLG9wdHM6bi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOm4uZWFzaW5n
Ll9kZWZhdWx0fSxjKSxvcmlnaW5hbFByb3BlcnRpZXM6YixvcmlnaW5hbE9wdGlvbnM6YyxzdGFy
dFRpbWU6U2F8fFdhKCksZHVyYXRpb246Yy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46
ZnVuY3Rpb24oYixjKXt2YXIgZD1uLlR3ZWVuKGEsai5vcHRzLGIsYyxqLm9wdHMuc3BlY2lhbEVh
c2luZ1tiXXx8ai5vcHRzLmVhc2luZyk7cmV0dXJuIGoudHdlZW5zLnB1c2goZCksZH0sc3RvcDpm
dW5jdGlvbihiKXt2YXIgYz0wLGQ9Yj9qLnR3ZWVucy5sZW5ndGg6MDtpZihlKXJldHVybiB0aGlz
O2ZvcihlPSEwO2Q+YztjKyspai50d2VlbnNbY10ucnVuKDEpO3JldHVybiBiPyhoLm5vdGlmeVdp
dGgoYSxbaiwxLDBdKSxoLnJlc29sdmVXaXRoKGEsW2osYl0pKTpoLnJlamVjdFdpdGgoYSxbaixi
XSksdGhpc319KSxrPWoucHJvcHM7Zm9yKCRhKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+Zjtm
KyspaWYoZD1fYS5wcmVmaWx0ZXJzW2ZdLmNhbGwoaixhLGssai5vcHRzKSlyZXR1cm4gbi5pc0Z1
bmN0aW9uKGQuc3RvcCkmJihuLl9xdWV1ZUhvb2tzKGouZWxlbSxqLm9wdHMucXVldWUpLnN0b3A9
bi5wcm94eShkLnN0b3AsZCkpLGQ7cmV0dXJuIG4ubWFwKGssWWEsaiksbi5pc0Z1bmN0aW9uKGou
b3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbi5meC50aW1lcihuLmV4dGVuZChp
LHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5w
cm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZh
aWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChfYSx7dHdlZW5l
cnM6eyIqIjpbZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNyZWF0ZVR3ZWVuKGEsYik7cmV0dXJu
IFcoYy5lbGVtLGEsVC5leGVjKGIpLGMpLGN9XX0sdHdlZW5lcjpmdW5jdGlvbihhLGIpe24uaXNG
dW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5tYXRjaChHKTtmb3IodmFyIGMsZD0wLGU9YS5s
ZW5ndGg7ZT5kO2QrKyljPWFbZF0sX2EudHdlZW5lcnNbY109X2EudHdlZW5lcnNbY118fFtdLF9h
LnR3ZWVuZXJzW2NdLnVuc2hpZnQoYil9LHByZWZpbHRlcnM6W1phXSxwcmVmaWx0ZXI6ZnVuY3Rp
b24oYSxiKXtiP19hLnByZWZpbHRlcnMudW5zaGlmdChhKTpfYS5wcmVmaWx0ZXJzLnB1c2goYSl9
fSksbi5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24u
ZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0
aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0
aW9uPW4uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5k
dXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVk
cy5fZGVmYXVsdCxudWxsIT1kLnF1ZXVlJiZkLnF1ZXVlIT09ITB8fChkLnF1ZXVlPSJmeCIpLGQu
b2xkPWQuY29tcGxldGUsZC5jb21wbGV0ZT1mdW5jdGlvbigpe24uaXNGdW5jdGlvbihkLm9sZCkm
JmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZSYmbi5kZXF1ZXVlKHRoaXMsZC5xdWV1ZSl9LGR9LG4u
Zm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKFYp
LmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQp
fSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4uaXNFbXB0eU9iamVjdChhKSxmPW4u
c3BlZWQoYixjLGQpLGc9ZnVuY3Rpb24oKXt2YXIgYj1fYSh0aGlzLG4uZXh0ZW5kKHt9LGEpLGYp
OyhlfHxOLmdldCh0aGlzLCJmaW5pc2giKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1n
LGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9w
OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEu
c3RvcCxiKGMpfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxi
JiZhIT09ITEmJnRoaXMucXVldWUoYXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFy
IGI9ITAsZT1udWxsIT1hJiZhKyJxdWV1ZUhvb2tzIixmPW4udGltZXJzLGc9Ti5nZXQodGhpcyk7
aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0u
c3RvcCYmVmEudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9
PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxm
LnNwbGljZShlLDEpKTshYiYmY3x8bi5kZXF1ZXVlKHRoaXMsYSl9KX0sZmluaXNoOmZ1bmN0aW9u
KGEpe3JldHVybiBhIT09ITEmJihhPWF8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBi
LGM9Ti5nZXQodGhpcyksZD1jW2ErInF1ZXVlIl0sZT1jW2ErInF1ZXVlSG9va3MiXSxmPW4udGlt
ZXJzLGc9ZD9kLmxlbmd0aDowO2ZvcihjLmZpbmlzaD0hMCxuLnF1ZXVlKHRoaXMsYSxbXSksZSYm
ZS5zdG9wJiZlLnN0b3AuY2FsbCh0aGlzLCEwKSxiPWYubGVuZ3RoO2ItLTspZltiXS5lbGVtPT09
dGhpcyYmZltiXS5xdWV1ZT09PWEmJihmW2JdLmFuaW0uc3RvcCghMCksZi5zcGxpY2UoYiwxKSk7
Zm9yKGI9MDtnPmI7YisrKWRbYl0mJmRbYl0uZmluaXNoJiZkW2JdLmZpbmlzaC5jYWxsKHRoaXMp
O2RlbGV0ZSBjLmZpbmlzaH0pfX0pLG4uZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVu
Y3Rpb24oYSxiKXt2YXIgYz1uLmZuW2JdO24uZm5bYl09ZnVuY3Rpb24oYSxkLGUpe3JldHVybiBu
dWxsPT1hfHwiYm9vbGVhbiI9PXR5cGVvZiBhP2MuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMu
YW5pbWF0ZShYYShiLCEwKSxhLGQsZSl9fSksbi5lYWNoKHtzbGlkZURvd246WGEoInNob3ciKSxz
bGlkZVVwOlhhKCJoaWRlIiksc2xpZGVUb2dnbGU6WGEoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0
eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0
b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhp
cy5hbmltYXRlKGIsYSxjLGQpfX0pLG4udGltZXJzPVtdLG4uZngudGljaz1mdW5jdGlvbigpe3Zh
ciBhLGI9MCxjPW4udGltZXJzO2ZvcihTYT1uLm5vdygpO2I8Yy5sZW5ndGg7YisrKWE9Y1tiXSxh
KCl8fGNbYl0hPT1hfHxjLnNwbGljZShiLS0sMSk7Yy5sZW5ndGh8fG4uZnguc3RvcCgpLFNhPXZv
aWQgMH0sbi5meC50aW1lcj1mdW5jdGlvbihhKXtuLnRpbWVycy5wdXNoKGEpLGEoKT9uLmZ4LnN0
YXJ0KCk6bi50aW1lcnMucG9wKCl9LG4uZnguaW50ZXJ2YWw9MTMsbi5meC5zdGFydD1mdW5jdGlv
bigpe1RhfHwoVGE9YS5zZXRJbnRlcnZhbChuLmZ4LnRpY2ssbi5meC5pbnRlcnZhbCkpfSxuLmZ4
LnN0b3A9ZnVuY3Rpb24oKXthLmNsZWFySW50ZXJ2YWwoVGEpLFRhPW51bGx9LG4uZnguc3BlZWRz
PXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYixj
KXtyZXR1cm4gYj1uLmZ4P24uZnguc3BlZWRzW2JdfHxiOmIsYz1jfHwiZngiLHRoaXMucXVldWUo
YyxmdW5jdGlvbihjLGQpe3ZhciBlPWEuc2V0VGltZW91dChjLGIpO2Quc3RvcD1mdW5jdGlvbigp
e2EuY2xlYXJUaW1lb3V0KGUpfX0pfSxmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgi
aW5wdXQiKSxiPWQuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksYz1iLmFwcGVuZENoaWxkKGQuY3Jl
YXRlRWxlbWVudCgib3B0aW9uIikpO2EudHlwZT0iY2hlY2tib3giLGwuY2hlY2tPbj0iIiE9PWEu
dmFsdWUsbC5vcHRTZWxlY3RlZD1jLnNlbGVjdGVkLGIuZGlzYWJsZWQ9ITAsbC5vcHREaXNhYmxl
ZD0hYy5kaXNhYmxlZCxhPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnZhbHVlPSJ0IixhLnR5
cGU9InJhZGlvIixsLnJhZGlvVmFsdWU9InQiPT09YS52YWx1ZX0oKTt2YXIgYWIsYmI9bi5leHBy
LmF0dHJIYW5kbGU7bi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSyh0aGlz
LG4uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXty
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxuLmV4
dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoMyE9PWYm
JjghPT1mJiYyIT09ZilyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGEuZ2V0QXR0cmlidXRlP24u
cHJvcChhLGIsYyk6KDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJDYXNlKCksZT1u
LmF0dHJIb29rc1tiXXx8KG4uZXhwci5tYXRjaC5ib29sLnRlc3QoYik/YWI6dm9pZCAwKSksdm9p
ZCAwIT09Yz9udWxsPT09Yz92b2lkIG4ucmVtb3ZlQXR0cihhLGIpOmUmJiJzZXQiaW4gZSYmdm9p
ZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOihhLnNldEF0dHJpYnV0ZShiLGMrIiIpLGMpOmUmJiJn
ZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6KGQ9bi5maW5kLmF0dHIoYSxiKSxudWxs
PT1kP3ZvaWQgMDpkKSl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWwu
cmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm4ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52
YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19
LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRyk7aWYo
ZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1uLnByb3BGaXhbY118fGMsbi5leHBy
Lm1hdGNoLmJvb2wudGVzdChjKSYmKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfX0pLGFi
PXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6YS5z
ZXRBdHRyaWJ1dGUoYyxjKSxjfX0sbi5lYWNoKG4uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRj
aCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9YmJbYl18fG4uZmluZC5hdHRyO2JiW2JdPWZ1
bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj1iYltiXSxiYltiXT1lLGU9bnVsbCE9
YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsYmJbYl09ZiksZX19KTt2YXIgY2I9L14oPzpp
bnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxkYj0vXig/OmF8YXJlYSkkL2k7bi5mbi5l
eHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSyh0aGlzLG4ucHJvcCxhLGIsYXJndW1l
bnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbi5wcm9wRml4W2FdfHxhXX0pfX0pLG4uZXh0ZW5kKHtwcm9w
OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZigzIT09ZiYmOCE9PWYmJjIh
PT1mKXJldHVybiAxPT09ZiYmbi5pc1hNTERvYyhhKXx8KGI9bi5wcm9wRml4W2JdfHxiLGU9bi5w
cm9wSG9va3NbYl0pLAordm9pZCAwIT09Yz9lJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0
KGEsYyxiKSk/ZDphW2JdPWM6ZSYmImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDph
W2JdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0
dHIoYSwidGFiaW5kZXgiKTtyZXR1cm4gYj9wYXJzZUludChiLDEwKTpjYi50ZXN0KGEubm9kZU5h
bWUpfHxkYi50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDotMX19fSxwcm9wRml4OnsiZm9yIjoi
aHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn19KSxsLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9v
a3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGIm
JmIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0
aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9k
ZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLG4uZWFjaChbInRhYkluZGV4IiwicmVh
ZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIs
ImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0
aW9uKCl7bi5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pO3ZhciBlYj0vW1x0XHJc
blxmXS9nO2Z1bmN0aW9uIGZiKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1
dGUoImNsYXNzIil8fCIifW4uZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixj
LGQsZSxmLGcsaCxpPTA7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oYil7bih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLGZiKHRoaXMpKSl9KTtpZigic3Ry
aW5nIj09dHlwZW9mIGEmJmEpe2I9YS5tYXRjaChHKXx8W107d2hpbGUoYz10aGlzW2krK10paWYo
ZT1mYihjKSxkPTE9PT1jLm5vZGVUeXBlJiYoIiAiK2UrIiAiKS5yZXBsYWNlKGViLCIgIikpe2c9
MDt3aGlsZShmPWJbZysrXSlkLmluZGV4T2YoIiAiK2YrIiAiKTwwJiYoZCs9ZisiICIpO2g9bi50
cmltKGQpLGUhPT1oJiZjLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGgpfX1yZXR1cm4gdGhpc30scmVt
b3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaT0wO2lmKG4uaXNGdW5jdGlv
bihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykucmVtb3ZlQ2xhc3MoYS5j
YWxsKHRoaXMsYixmYih0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMu
YXR0cigiY2xhc3MiLCIiKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEpe2I9YS5tYXRjaChHKXx8
W107d2hpbGUoYz10aGlzW2krK10paWYoZT1mYihjKSxkPTE9PT1jLm5vZGVUeXBlJiYoIiAiK2Ur
IiAiKS5yZXBsYWNlKGViLCIgIikpe2c9MDt3aGlsZShmPWJbZysrXSl3aGlsZShkLmluZGV4T2Yo
IiAiK2YrIiAiKT4tMSlkPWQucmVwbGFjZSgiICIrZisiICIsIiAiKTtoPW4udHJpbShkKSxlIT09
aCYmYy5zZXRBdHRyaWJ1dGUoImNsYXNzIixoKX19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1
bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0
cmluZyI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOm4uaXNGdW5j
dGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwo
dGhpcyxjLGZiKHRoaXMpLGIpLGIpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsZCxlLGY7
aWYoInN0cmluZyI9PT1jKXtkPTAsZT1uKHRoaXMpLGY9YS5tYXRjaChHKXx8W107d2hpbGUoYj1m
W2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZSB2
b2lkIDAhPT1hJiYiYm9vbGVhbiIhPT1jfHwoYj1mYih0aGlzKSxiJiZOLnNldCh0aGlzLCJfX2Ns
YXNzTmFtZV9fIixiKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNz
IixifHxhPT09ITE/IiI6Ti5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0Ns
YXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD0wO2I9IiAiK2ErIiAiO3doaWxlKGM9dGhpc1tkKytd
KWlmKDE9PT1jLm5vZGVUeXBlJiYoIiAiK2ZiKGMpKyIgIikucmVwbGFjZShlYiwiICIpLmluZGV4
T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGdiPS9cci9nLGhiPS9bXHgyMFx0XHJc
blxmXSsvZztuLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07
e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChm
dW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG4o
dGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjpuLmlz
QXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0p
KSxiPW4udmFsSG9va3NbdGhpcy50eXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwo
dGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8bi52YWxI
b29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9
Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxh
Y2UoZ2IsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntn
ZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9
Yj9iOm4udHJpbShuLnRleHQoYSkpLnJlcGxhY2UoaGIsIiAiKX19LHNlbGVjdDp7Z2V0OmZ1bmN0
aW9uKGEpe2Zvcih2YXIgYixjLGQ9YS5vcHRpb25zLGU9YS5zZWxlY3RlZEluZGV4LGY9InNlbGVj
dC1vbmUiPT09YS50eXBlfHwwPmUsZz1mP251bGw6W10saD1mP2UrMTpkLmxlbmd0aCxpPTA+ZT9o
OmY/ZTowO2g+aTtpKyspaWYoYz1kW2ldLChjLnNlbGVjdGVkfHxpPT09ZSkmJihsLm9wdERpc2Fi
bGVkPyFjLmRpc2FibGVkOm51bGw9PT1jLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSkmJighYy5w
YXJlbnROb2RlLmRpc2FibGVkfHwhbi5ub2RlTmFtZShjLnBhcmVudE5vZGUsIm9wdGdyb3VwIikp
KXtpZihiPW4oYykudmFsKCksZilyZXR1cm4gYjtnLnB1c2goYil9cmV0dXJuIGd9LHNldDpmdW5j
dGlvbihhLGIpe3ZhciBjLGQsZT1hLm9wdGlvbnMsZj1uLm1ha2VBcnJheShiKSxnPWUubGVuZ3Ro
O3doaWxlKGctLSlkPWVbZ10sKGQuc2VsZWN0ZWQ9bi5pbkFycmF5KG4udmFsSG9va3Mub3B0aW9u
LmdldChkKSxmKT4tMSkmJihjPSEwKTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19
fX0pLG4uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe24udmFsSG9va3NbdGhp
c109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmlzQXJyYXkoYik/YS5jaGVja2VkPW4uaW5B
cnJheShuKGEpLnZhbCgpLGIpPi0xOnZvaWQgMH19LGwuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhp
c10uZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/
Im9uIjphLnZhbHVlfSl9KTt2YXIgaWI9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQv
O24uZXh0ZW5kKG4uZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24oYixjLGUsZil7dmFyIGcsaCxpLGos
bCxtLG8scD1bZXx8ZF0scT1rLmNhbGwoYiwidHlwZSIpP2IudHlwZTpiLHI9ay5jYWxsKGIsIm5h
bWVzcGFjZSIpP2IubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYoaD1pPWU9ZXx8ZCwzIT09ZS5u
b2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJiFpYi50ZXN0KHErbi5ldmVudC50cmlnZ2VyZWQpJiYo
cS5pbmRleE9mKCIuIik+LTEmJihyPXEuc3BsaXQoIi4iKSxxPXIuc2hpZnQoKSxyLnNvcnQoKSks
bD1xLmluZGV4T2YoIjoiKTwwJiYib24iK3EsYj1iW24uZXhwYW5kb10/YjpuZXcgbi5FdmVudChx
LCJvYmplY3QiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9Zj8yOjMsYi5uYW1lc3BhY2U9ci5q
b2luKCIuIiksYi5ybmFtZXNwYWNlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iu
am9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50
YXJnZXR8fChiLnRhcmdldD1lKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxvPW4u
ZXZlbnQuc3BlY2lhbFtxXXx8e30sZnx8IW8udHJpZ2dlcnx8by50cmlnZ2VyLmFwcGx5KGUsYykh
PT0hMSkpe2lmKCFmJiYhby5ub0J1YmJsZSYmIW4uaXNXaW5kb3coZSkpe2ZvcihqPW8uZGVsZWdh
dGVUeXBlfHxxLGliLnRlc3QoaitxKXx8KGg9aC5wYXJlbnROb2RlKTtoO2g9aC5wYXJlbnROb2Rl
KXAucHVzaChoKSxpPWg7aT09PShlLm93bmVyRG9jdW1lbnR8fGQpJiZwLnB1c2goaS5kZWZhdWx0
Vmlld3x8aS5wYXJlbnRXaW5kb3d8fGEpfWc9MDt3aGlsZSgoaD1wW2crK10pJiYhYi5pc1Byb3Bh
Z2F0aW9uU3RvcHBlZCgpKWIudHlwZT1nPjE/ajpvLmJpbmRUeXBlfHxxLG09KE4uZ2V0KGgsImV2
ZW50cyIpfHx7fSlbYi50eXBlXSYmTi5nZXQoaCwiaGFuZGxlIiksbSYmbS5hcHBseShoLGMpLG09
bCYmaFtsXSxtJiZtLmFwcGx5JiZMKGgpJiYoYi5yZXN1bHQ9bS5hcHBseShoLGMpLGIucmVzdWx0
PT09ITEmJmIucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGIudHlwZT1xLGZ8fGIuaXNEZWZhdWx0
UHJldmVudGVkKCl8fG8uX2RlZmF1bHQmJm8uX2RlZmF1bHQuYXBwbHkocC5wb3AoKSxjKSE9PSEx
fHwhTChlKXx8bCYmbi5pc0Z1bmN0aW9uKGVbcV0pJiYhbi5pc1dpbmRvdyhlKSYmKGk9ZVtsXSxp
JiYoZVtsXT1udWxsKSxuLmV2ZW50LnRyaWdnZXJlZD1xLGVbcV0oKSxuLmV2ZW50LnRyaWdnZXJl
ZD12b2lkIDAsaSYmKGVbbF09aSkpLGIucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMp
e3ZhciBkPW4uZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMH0pO24u
ZXZlbnQudHJpZ2dlcihkLG51bGwsYil9fSksbi5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24o
YSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlz
KX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/
bi5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSksbi5lYWNoKCJibHVyIGZvY3VzIGZv
Y3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBt
b3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIg
bW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVy
cm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7bi5mbltiXT1mdW5jdGlv
bihhLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbihiLG51bGwsYSxjKTp0aGlz
LnRyaWdnZXIoYil9fSksbi5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRo
aXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLGwuZm9jdXNpbj0ib25mb2N1c2lu
ImluIGEsbC5mb2N1c2lufHxuLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9
LGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFy
Z2V0LG4uZXZlbnQuZml4KGEpKX07bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigp
e3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPU4uYWNjZXNzKGQsYik7ZXx8ZC5hZGRF
dmVudExpc3RlbmVyKGEsYywhMCksTi5hY2Nlc3MoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVu
Y3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1OLmFjY2VzcyhkLGIpLTE7
ZT9OLmFjY2VzcyhkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLE4ucmVtb3Zl
KGQsYikpfX19KTt2YXIgamI9YS5sb2NhdGlvbixrYj1uLm5vdygpLGxiPS9cPy87bi5wYXJzZUpT
T049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYSsiIil9LG4ucGFyc2VYTUw9ZnVuY3Rp
b24oYil7dmFyIGM7aWYoIWJ8fCJzdHJpbmciIT10eXBlb2YgYilyZXR1cm4gbnVsbDt0cnl7Yz0o
bmV3IGEuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKX1jYXRjaChkKXtj
PXZvaWQgMH1yZXR1cm4gYyYmIWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIiku
bGVuZ3RofHxuLmVycm9yKCJJbnZhbGlkIFhNTDogIitiKSxjfTt2YXIgbWI9LyMuKiQvLG5iPS8o
Wz8mXSlfPVteJl0qLyxvYj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLHBiPS9eKD86YWJv
dXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLHFiPS9e
KD86R0VUfEhFQUQpJC8scmI9L15cL1wvLyxzYj17fSx0Yj17fSx1Yj0iKi8iLmNvbmNhdCgiKiIp
LHZiPWQuY3JlYXRlRWxlbWVudCgiYSIpO3ZiLmhyZWY9amIuaHJlZjtmdW5jdGlvbiB3YihhKXty
ZXR1cm4gZnVuY3Rpb24oYixjKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWIsYj0iKiIpO3ZhciBk
LGU9MCxmPWIudG9Mb3dlckNhc2UoKS5tYXRjaChHKXx8W107aWYobi5pc0Z1bmN0aW9uKGMpKXdo
aWxlKGQ9ZltlKytdKSIrIj09PWRbMF0/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtd
KS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24geGIoYSxiLGMs
ZCl7dmFyIGU9e30sZj1hPT09dGI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxu
LmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5n
IiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0
KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioi
KX1mdW5jdGlvbiB5YihhLGIpe3ZhciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8
e307Zm9yKGMgaW4gYil2b2lkIDAhPT1iW2NdJiYoKGVbY10/YTpkfHwoZD17fSkpW2NdPWJbY10p
O3JldHVybiBkJiZuLmV4dGVuZCghMCxhLGQpLGF9ZnVuY3Rpb24gemIoYSxiLGMpe3ZhciBkLGUs
ZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgp
LHZvaWQgMD09PWQmJihkPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQt
VHlwZSIpKTtpZihkKWZvcihlIGluIGgpaWYoaFtlXSYmaFtlXS50ZXN0KGQpKXtpLnVuc2hpZnQo
ZSk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGUgaW4gYyl7aWYoIWlbMF18fGEu
Y29udmVydGVyc1tlKyIgIitpWzBdXSl7Zj1lO2JyZWFrfWd8fChnPWUpfWY9Znx8Z31yZXR1cm4g
Zj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gQWIoYSxiLGMs
ZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihn
IGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5z
aGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxk
c1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlw
ZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1m
KXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgi
ICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1q
W2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClp
ZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntz
dGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRv
ICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAs
bGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6amIuaHJlZix0eXBlOiJH
RVQiLGlzTG9jYWw6cGIudGVzdChqYi5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEw
LGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7
IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjp1Yix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0
ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRp
b24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDov
XGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1M
Iix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIq
IHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpuLnBhcnNlSlNPTiwidGV4
dCB4bWwiOm4ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhT
ZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP3liKHliKGEsbi5hamF4U2V0dGluZ3MpLGIpOnli
KG4uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOndiKHNiKSxhamF4VHJhbnNwb3J0Ondi
KHRiKSxhamF4OmZ1bmN0aW9uKGIsYyl7Im9iamVjdCI9PXR5cGVvZiBiJiYoYz1iLGI9dm9pZCAw
KSxjPWN8fHt9O3ZhciBlLGYsZyxoLGksaixrLGwsbT1uLmFqYXhTZXR1cCh7fSxjKSxvPW0uY29u
dGV4dHx8bSxwPW0uY29udGV4dCYmKG8ubm9kZVR5cGV8fG8uanF1ZXJ5KT9uKG8pOm4uZXZlbnQs
cT1uLkRlZmVycmVkKCkscj1uLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxzPW0uc3RhdHVzQ29k
ZXx8e30sdD17fSx1PXt9LHY9MCx3PSJjYW5jZWxlZCIseD17cmVhZHlTdGF0ZTowLGdldFJlc3Bv
bnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT12KXtpZighaCl7aD17fTt3aGlsZShi
PW9iLmV4ZWMoZykpaFtiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1oW2EudG9Mb3dlckNhc2Uo
KV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24o
KXtyZXR1cm4gMj09PXY/ZzpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFy
IGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB2fHwoYT11W2NdPXVbY118fGEsdFthXT1iKSx0aGlz
fSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB2fHwobS5taW1lVHlwZT1hKSx0
aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj52KWZvcihiIGluIGEp
c1tiXT1bc1tiXSxhW2JdXTtlbHNlIHguYWx3YXlzKGFbeC5zdGF0dXNdKTtyZXR1cm4gdGhpc30s
YWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dztyZXR1cm4gZSYmZS5hYm9ydChiKSx6KDAsYiks
dGhpc319O2lmKHEucHJvbWlzZSh4KS5jb21wbGV0ZT1yLmFkZCx4LnN1Y2Nlc3M9eC5kb25lLHgu
ZXJyb3I9eC5mYWlsLG0udXJsPSgoYnx8bS51cmx8fGpiLmhyZWYpKyIiKS5yZXBsYWNlKG1iLCIi
KS5yZXBsYWNlKHJiLGpiLnByb3RvY29sKyIvLyIpLG0udHlwZT1jLm1ldGhvZHx8Yy50eXBlfHxt
Lm1ldGhvZHx8bS50eXBlLG0uZGF0YVR5cGVzPW4udHJpbShtLmRhdGFUeXBlfHwiKiIpLnRvTG93
ZXJDYXNlKCkubWF0Y2goRyl8fFsiIl0sbnVsbD09bS5jcm9zc0RvbWFpbil7aj1kLmNyZWF0ZUVs
ZW1lbnQoImEiKTt0cnl7ai5ocmVmPW0udXJsLGouaHJlZj1qLmhyZWYsbS5jcm9zc0RvbWFpbj12
Yi5wcm90b2NvbCsiLy8iK3ZiLmhvc3QhPWoucHJvdG9jb2wrIi8vIitqLmhvc3R9Y2F0Y2goeSl7
bS5jcm9zc0RvbWFpbj0hMH19aWYobS5kYXRhJiZtLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlw
ZW9mIG0uZGF0YSYmKG0uZGF0YT1uLnBhcmFtKG0uZGF0YSxtLnRyYWRpdGlvbmFsKSkseGIoc2Is
bSxjLHgpLDI9PT12KXJldHVybiB4O2s9bi5ldmVudCYmbS5nbG9iYWwsayYmMD09PW4uYWN0aXZl
KysmJm4uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IiksbS50eXBlPW0udHlwZS50b1VwcGVyQ2Fz
ZSgpLG0uaGFzQ29udGVudD0hcWIudGVzdChtLnR5cGUpLGY9bS51cmwsbS5oYXNDb250ZW50fHwo
bS5kYXRhJiYoZj1tLnVybCs9KGxiLnRlc3QoZik/IiYiOiI/IikrbS5kYXRhLGRlbGV0ZSBtLmRh
dGEpLG0uY2FjaGU9PT0hMSYmKG0udXJsPW5iLnRlc3QoZik/Zi5yZXBsYWNlKG5iLCIkMV89Iitr
YisrKTpmKyhsYi50ZXN0KGYpPyImIjoiPyIpKyJfPSIra2IrKykpLG0uaWZNb2RpZmllZCYmKG4u
bGFzdE1vZGlmaWVkW2ZdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixu
Lmxhc3RNb2RpZmllZFtmXSksbi5ldGFnW2ZdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUt
TWF0Y2giLG4uZXRhZ1tmXSkpLChtLmRhdGEmJm0uaGFzQ29udGVudCYmbS5jb250ZW50VHlwZSE9
PSExfHxjLmNvbnRlbnRUeXBlKSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLG0u
Y29udGVudFR5cGUpLHguc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixtLmRhdGFUeXBlc1swXSYm
bS5hY2NlcHRzW20uZGF0YVR5cGVzWzBdXT9tLmFjY2VwdHNbbS5kYXRhVHlwZXNbMF1dKygiKiIh
PT1tLmRhdGFUeXBlc1swXT8iLCAiK3ViKyI7IHE9MC4wMSI6IiIpOm0uYWNjZXB0c1siKiJdKTtm
b3IobCBpbiBtLmhlYWRlcnMpeC5zZXRSZXF1ZXN0SGVhZGVyKGwsbS5oZWFkZXJzW2xdKTtpZiht
LmJlZm9yZVNlbmQmJihtLmJlZm9yZVNlbmQuY2FsbChvLHgsbSk9PT0hMXx8Mj09PXYpKXJldHVy
biB4LmFib3J0KCk7dz0iYWJvcnQiO2ZvcihsIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRl
OjF9KXhbbF0obVtsXSk7aWYoZT14Yih0YixtLGMseCkpe2lmKHgucmVhZHlTdGF0ZT0xLGsmJnAu
dHJpZ2dlcigiYWpheFNlbmQiLFt4LG1dKSwyPT09dilyZXR1cm4geDttLmFzeW5jJiZtLnRpbWVv
dXQ+MCYmKGk9YS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eC5hYm9ydCgidGltZW91dCIpfSxtLnRp
bWVvdXQpKTt0cnl7dj0xLGUuc2VuZCh0LHopfWNhdGNoKHkpe2lmKCEoMj52KSl0aHJvdyB5O3oo
LTEseSl9fWVsc2UgeigtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24geihiLGMsZCxoKXt2YXIg
aixsLHQsdSx3LHk9YzsyIT09diYmKHY9MixpJiZhLmNsZWFyVGltZW91dChpKSxlPXZvaWQgMCxn
PWh8fCIiLHgucmVhZHlTdGF0ZT1iPjA/NDowLGo9Yj49MjAwJiYzMDA+Ynx8MzA0PT09YixkJiYo
dT16YihtLHgsZCkpLHU9QWIobSx1LHgsaiksaj8obS5pZk1vZGlmaWVkJiYodz14LmdldFJlc3Bv
bnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksdyYmKG4ubGFzdE1vZGlmaWVkW2ZdPXcpLHc9eC5n
ZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHcmJihuLmV0YWdbZl09dykpLDIwND09PWJ8fCJIRUFE
Ij09PW0udHlwZT95PSJub2NvbnRlbnQiOjMwND09PWI/eT0ibm90bW9kaWZpZWQiOih5PXUuc3Rh
dGUsbD11LmRhdGEsdD11LmVycm9yLGo9IXQpKToodD15LCFiJiZ5fHwoeT0iZXJyb3IiLDA+YiYm
KGI9MCkpKSx4LnN0YXR1cz1iLHguc3RhdHVzVGV4dD0oY3x8eSkrIiIsaj9xLnJlc29sdmVXaXRo
KG8sW2wseSx4XSk6cS5yZWplY3RXaXRoKG8sW3gseSx0XSkseC5zdGF0dXNDb2RlKHMpLHM9dm9p
ZCAwLGsmJnAudHJpZ2dlcihqPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW3gsbSxqP2w6dF0p
LHIuZmlyZVdpdGgobyxbeCx5XSksayYmKHAudHJpZ2dlcigiYWpheENvbXBsZXRlIixbeCxtXSks
LS1uLmFjdGl2ZXx8bi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIHh9LGdldEpT
T046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLmdldChhLGIsYywianNvbiIpfSxnZXRTY3JpcHQ6
ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5nZXQoYSx2b2lkIDAsYiwic2NyaXB0Iil9fSksbi5lYWNo
KFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYil7bltiXT1mdW5jdGlvbihhLGMsZCxlKXtyZXR1
cm4gbi5pc0Z1bmN0aW9uKGMpJiYoZT1lfHxkLGQ9YyxjPXZvaWQgMCksbi5hamF4KG4uZXh0ZW5k
KHt1cmw6YSx0eXBlOmIsZGF0YVR5cGU6ZSxkYXRhOmMsc3VjY2VzczpkfSxuLmlzUGxhaW5PYmpl
Y3QoYSkmJmEpKX19KSxuLl9ldmFsVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBuLmFqYXgoe3VybDph
LHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3Mi
OiEwfSl9LG4uZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBuLmlz
RnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcEFsbChhLmNhbGwo
dGhpcyxiKSl9KToodGhpc1swXSYmKGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCku
Y2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5t
YXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RFbGVtZW50Q2hpbGQpYT1hLmZp
cnN0RWxlbWVudENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpKSx0aGlzKX0sd3JhcElubmVy
OmZ1bmN0aW9uKGEpe3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIp
e24odGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigp
e3ZhciBiPW4odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBw
ZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9bi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9
KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigp
e24ubm9kZU5hbWUodGhpcywiYm9keSIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGRO
b2Rlcyl9KS5lbmQoKX19KSxuLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7cmV0dXJu
IW4uZXhwci5maWx0ZXJzLnZpc2libGUoYSl9LG4uZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rp
b24oYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGg+MHx8YS5vZmZzZXRIZWlnaHQ+MHx8YS5nZXRDbGll
bnRSZWN0cygpLmxlbmd0aD4wfTt2YXIgQmI9LyUyMC9nLENiPS9cW1xdJC8sRGI9L1xyP1xuL2cs
RWI9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLEZiPS9eKD86aW5wdXR8
c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBHYihhLGIsYyxkKXt2YXIgZTtpZihu
LmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxDYi50ZXN0KGEpP2QoYSxlKTpH
YihhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lP2I6IiIpKyJdIixlLGMsZCl9KTtl
bHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpR2Io
YSsiWyIrZSsiXSIsYltlXSxjLGQpfW4ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9
ZnVuY3Rpb24oYSxiKXtiPW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5n
dGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2
b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwp
LG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5PYmplY3QoYSkpbi5lYWNoKGEsZnVu
Y3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlHYihjLGFb
Y10sYixlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZShCYiwiKyIpfSxuLmZuLmV4dGVuZCh7
c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgp
KX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2
YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9uLm1ha2VBcnJheShhKTp0aGlz
fSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFu
KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmRmIudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUViLnRlc3Qo
YSkmJih0aGlzLmNoZWNrZWR8fCFYLnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9
bih0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1hcChjLGZ1
bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoRGIsIlxyXG4iKX19
KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKERiLCJcclxuIil9fSkuZ2V0KCl9fSksbi5h
amF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgYS5YTUxIdHRwUmVxdWVz
dH1jYXRjaChiKXt9fTt2YXIgSGI9ezA6MjAwLDEyMjM6MjA0fSxJYj1uLmFqYXhTZXR0aW5ncy54
aHIoKTtsLmNvcnM9ISFJYiYmIndpdGhDcmVkZW50aWFscyJpbiBJYixsLmFqYXg9SWI9ISFJYixu
LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYil7dmFyIGMsZDtyZXR1cm4gbC5jb3JzfHxJYiYmIWIu
Y3Jvc3NEb21haW4/e3NlbmQ6ZnVuY3Rpb24oZSxmKXt2YXIgZyxoPWIueGhyKCk7aWYoaC5vcGVu
KGIudHlwZSxiLnVybCxiLmFzeW5jLGIudXNlcm5hbWUsYi5wYXNzd29yZCksYi54aHJGaWVsZHMp
Zm9yKGcgaW4gYi54aHJGaWVsZHMpaFtnXT1iLnhockZpZWxkc1tnXTtiLm1pbWVUeXBlJiZoLm92
ZXJyaWRlTWltZVR5cGUmJmgub3ZlcnJpZGVNaW1lVHlwZShiLm1pbWVUeXBlKSxiLmNyb3NzRG9t
YWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0
dHBSZXF1ZXN0Iik7Zm9yKGcgaW4gZSloLnNldFJlcXVlc3RIZWFkZXIoZyxlW2ddKTtjPWZ1bmN0
aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe2MmJihjPWQ9aC5vbmxvYWQ9aC5vbmVycm9yPWgub25h
Ym9ydD1oLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1hP2guYWJvcnQoKToiZXJy
b3IiPT09YT8ibnVtYmVyIiE9dHlwZW9mIGguc3RhdHVzP2YoMCwiZXJyb3IiKTpmKGguc3RhdHVz
LGguc3RhdHVzVGV4dCk6ZihIYltoLnN0YXR1c118fGguc3RhdHVzLGguc3RhdHVzVGV4dCwidGV4
dCIhPT0oaC5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2YgaC5yZXNwb25z
ZVRleHQ/e2JpbmFyeTpoLnJlc3BvbnNlfTp7dGV4dDpoLnJlc3BvbnNlVGV4dH0saC5nZXRBbGxS
ZXNwb25zZUhlYWRlcnMoKSkpfX0saC5vbmxvYWQ9YygpLGQ9aC5vbmVycm9yPWMoImVycm9yIiks
dm9pZCAwIT09aC5vbmFib3J0P2gub25hYm9ydD1kOmgub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0
aW9uKCl7ND09PWgucmVhZHlTdGF0ZSYmYS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YyYmZCgpfSl9
LGM9YygiYWJvcnQiKTt0cnl7aC5zZW5kKGIuaGFzQ29udGVudCYmYi5kYXRhfHxudWxsKX1jYXRj
aChpKXtpZihjKXRocm93IGl9fSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoKX19OnZvaWQgMH0pLG4u
YWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24v
amF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2Ny
aXB0In0sY29udGVudHM6e3NjcmlwdDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0
ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19
fSksbi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUm
JihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiKX0pLG4uYWpheFRyYW5z
cG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjO3JldHVy
bntzZW5kOmZ1bmN0aW9uKGUsZil7Yj1uKCI8c2NyaXB0PiIpLnByb3Aoe2NoYXJzZXQ6YS5zY3Jp
cHRDaGFyc2V0LHNyYzphLnVybH0pLm9uKCJsb2FkIGVycm9yIixjPWZ1bmN0aW9uKGEpe2IucmVt
b3ZlKCksYz1udWxsLGEmJmYoImVycm9yIj09PWEudHlwZT80MDQ6MjAwLGEudHlwZSl9KSxkLmhl
YWQuYXBwZW5kQ2hpbGQoYlswXSl9LGFib3J0OmZ1bmN0aW9uKCl7YyYmYygpfX19fSk7dmFyIEpi
PVtdLEtiPS8oPSlcPyg/PSZ8JCl8XD9cPy87bi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIs
anNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPUpiLnBvcCgpfHxuLmV4cGFuZG8rIl8iK2ti
Kys7cmV0dXJuIHRoaXNbYV09ITAsYX19KSxuLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1
bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaD1iLmpzb25wIT09ITEmJihLYi50ZXN0KGIudXJsKT8i
dXJsIjoic3RyaW5nIj09dHlwZW9mIGIuZGF0YSYmMD09PShiLmNvbnRlbnRUeXBlfHwiIikuaW5k
ZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJktiLnRlc3QoYi5kYXRh
KSYmImRhdGEiKTtyZXR1cm4gaHx8Impzb25wIj09PWIuZGF0YVR5cGVzWzBdPyhlPWIuanNvbnBD
YWxsYmFjaz1uLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpi
Lmpzb25wQ2FsbGJhY2ssaD9iW2hdPWJbaF0ucmVwbGFjZShLYiwiJDEiK2UpOmIuanNvbnAhPT0h
MSYmKGIudXJsKz0obGIudGVzdChiLnVybCk/IiYiOiI/IikrYi5qc29ucCsiPSIrZSksYi5jb252
ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIGd8fG4uZXJyb3IoZSsiIHdh
cyBub3QgY2FsbGVkIiksZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iLGY9YVtlXSxhW2VdPWZ1
bmN0aW9uKCl7Zz1hcmd1bWVudHN9LGQuYWx3YXlzKGZ1bmN0aW9uKCl7dm9pZCAwPT09Zj9uKGEp
LnJlbW92ZVByb3AoZSk6YVtlXT1mLGJbZV0mJihiLmpzb25wQ2FsbGJhY2s9Yy5qc29ucENhbGxi
YWNrLEpiLnB1c2goZSkpLGcmJm4uaXNGdW5jdGlvbihmKSYmZihnWzBdKSxnPWY9dm9pZCAwfSks
InNjcmlwdCIpOnZvaWQgMH0pLG4ucGFyc2VIVE1MPWZ1bmN0aW9uKGEsYixjKXtpZighYXx8InN0
cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIGImJihjPWIsYj0h
MSksYj1ifHxkO3ZhciBlPXguZXhlYyhhKSxmPSFjJiZbXTtyZXR1cm4gZT9bYi5jcmVhdGVFbGVt
ZW50KGVbMV0pXTooZT1jYShbYV0sYixmKSxmJiZmLmxlbmd0aCYmbihmKS5yZW1vdmUoKSxuLm1l
cmdlKFtdLGUuY2hpbGROb2RlcykpfTt2YXIgTGI9bi5mbi5sb2FkO24uZm4ubG9hZD1mdW5jdGlv
bihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZMYilyZXR1cm4gTGIuYXBwbHkodGhpcyxh
cmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD4tMSYm
KGQ9bi50cmltKGEuc2xpY2UoaCkpLGE9YS5zbGljZSgwLGgpKSxuLmlzRnVuY3Rpb24oYik/KGM9
YixiPXZvaWQgMCk6YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoZT0iUE9TVCIpLGcubGVuZ3RoPjAm
Jm4uYWpheCh7dXJsOmEsdHlwZTplfHwiR0VUIixkYXRhVHlwZToiaHRtbCIsZGF0YTpifSkuZG9u
ZShmdW5jdGlvbihhKXtmPWFyZ3VtZW50cyxnLmh0bWwoZD9uKCI8ZGl2PiIpLmFwcGVuZChuLnBh
cnNlSFRNTChhKSkuZmluZChkKTphKX0pLmFsd2F5cyhjJiZmdW5jdGlvbihhLGIpe2cuZWFjaChm
dW5jdGlvbigpe2MuYXBwbHkodGhpcyxmfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KX0pLHRoaXN9
LG4uZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9y
IiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGEsYil7bi5mbltiXT1mdW5jdGlv
bihhKXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLG4uZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0
aW9uKGEpe3JldHVybiBuLmdyZXAobi50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVs
ZW19KS5sZW5ndGh9O2Z1bmN0aW9uIE1iKGEpe3JldHVybiBuLmlzV2luZG93KGEpP2E6OT09PWEu
bm9kZVR5cGUmJmEuZGVmYXVsdFZpZXd9bi5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihhLGIs
Yyl7dmFyIGQsZSxmLGcsaCxpLGosaz1uLmNzcyhhLCJwb3NpdGlvbiIpLGw9bihhKSxtPXt9OyJz
dGF0aWMiPT09ayYmKGEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksaD1sLm9mZnNldCgpLGY9
bi5jc3MoYSwidG9wIiksaT1uLmNzcyhhLCJsZWZ0Iiksaj0oImFic29sdXRlIj09PWt8fCJmaXhl
ZCI9PT1rKSYmKGYraSkuaW5kZXhPZigiYXV0byIpPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50
b3AsZT1kLmxlZnQpOihnPXBhcnNlRmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxuLmlz
RnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsbi5leHRlbmQoe30saCkpKSxudWxsIT1iLnRvcCYm
KG0udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0
K2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG0pOmwuY3NzKG0pfX0sbi5mbi5leHRlbmQo
e29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1h
P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9
KTt2YXIgYixjLGQ9dGhpc1swXSxlPXt0b3A6MCxsZWZ0OjB9LGY9ZCYmZC5vd25lckRvY3VtZW50
O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsbi5jb250YWlucyhiLGQpPyhlPWQuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCksYz1NYihmKSx7dG9wOmUudG9wK2MucGFnZVlPZmZzZXQtYi5j
bGllbnRUb3AsbGVmdDplLmxlZnQrYy5wYWdlWE9mZnNldC1iLmNsaWVudExlZnR9KTplfSxwb3Np
dGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBhLGIsYz10aGlzWzBdLGQ9e3RvcDowLGxl
ZnQ6MH07cmV0dXJuImZpeGVkIj09PW4uY3NzKGMsInBvc2l0aW9uIik/Yj1jLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOihhPXRoaXMub2Zmc2V0UGFyZW50KCksYj10aGlzLm9mZnNldCgpLG4ubm9k
ZU5hbWUoYVswXSwiaHRtbCIpfHwoZD1hLm9mZnNldCgpKSxkLnRvcCs9bi5jc3MoYVswXSwiYm9y
ZGVyVG9wV2lkdGgiLCEwKSxkLmxlZnQrPW4uY3NzKGFbMF0sImJvcmRlckxlZnRXaWR0aCIsITAp
KSx7dG9wOmIudG9wLWQudG9wLW4uY3NzKGMsIm1hcmdpblRvcCIsITApLGxlZnQ6Yi5sZWZ0LWQu
bGVmdC1uLmNzcyhjLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUo
YSYmInN0YXRpYyI9PT1uLmNzcyhhLCJwb3NpdGlvbiIpKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJu
IGF8fEVhfSl9fSksbi5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJw
YWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9InBhZ2VZT2Zmc2V0Ij09PWI7bi5mblth
XT1mdW5jdGlvbihkKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKGEsZCxlKXt2YXIgZj1NYihhKTty
ZXR1cm4gdm9pZCAwPT09ZT9mP2ZbYl06YVtkXTp2b2lkKGY/Zi5zY3JvbGxUbyhjP2YucGFnZVhP
ZmZzZXQ6ZSxjP2U6Zi5wYWdlWU9mZnNldCk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgp
fX0pLG4uZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09R2Eo
bC5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/KGM9RmEoYSxiKSxCYS50ZXN0
KGMpP24oYSkucG9zaXRpb24oKVtiXSsicHgiOmMpOnZvaWQgMH0pfSksbi5lYWNoKHtIZWlnaHQ6
ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmVhY2goe3BhZGRpbmc6Imlu
bmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5j
dGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBk
KSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIEsodGhpcyxm
dW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1
bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1l
bnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZz
ZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixj
LGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5leHRl
bmQoe2JpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJp
bmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5j
dGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlv
bihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhp
cy5vZmYoYixhfHwiKioiLGMpfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofX0p
LG4uZm4uYW5kU2VsZj1uLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVm
aW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgTmI9
YS5qUXVlcnksT2I9YS4kO3JldHVybiBuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEu
JD09PW4mJihhLiQ9T2IpLGImJmEualF1ZXJ5PT09biYmKGEualF1ZXJ5PU5iKSxufSxifHwoYS5q
UXVlcnk9YS4kPW4pLG59KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25v
ZGVfbW9kdWxlcy9qcXVlcnkvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL2pxdWVyeS9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY0ZDcwYTlhN2Mx
ZmIyYmZjMWY5YzdjOTI5NGU3NTY5NTRlYmU5NAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9qcXVlcnkvcGFja2FnZS5qc29uCkBAIC0wLDAg
KzEsMTU2IEBACit7CisgICJfYXJncyI6IFsKKyAgICBbCisgICAgICB7CisgICAgICAgICJyYXci
OiAianF1ZXJ5QF4yLjEuMCIsCisgICAgICAgICJzY29wZSI6IG51bGwsCisgICAgICAgICJlc2Nh
cGVkTmFtZSI6ICJqcXVlcnkiLAorICAgICAgICAibmFtZSI6ICJqcXVlcnkiLAorICAgICAgICAi
cmF3U3BlYyI6ICJeMi4xLjAiLAorICAgICAgICAic3BlYyI6ICI+PTIuMS4wIDwzLjAuMCIsCisg
ICAgICAgICJ0eXBlIjogInJhbmdlIgorICAgICAgfSwKKyAgICAgICIvVXNlcnMvYWRkeW8vRGVz
a3RvcC9TcGVlZG9tZXRlci1hL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMv
ZmxpZ2h0IgorICAgIF0KKyAgXSwKKyAgIl9mcm9tIjogImpxdWVyeUA+PTIuMS4wIDwzLjAuMCIs
CisgICJfaWQiOiAianF1ZXJ5QDIuMi40IiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2Nh
dGlvbiI6ICIvanF1ZXJ5IiwKKyAgIl9ub2RlVmVyc2lvbiI6ICIwLjEwLjQ1IiwKKyAgIl9ucG1P
cGVyYXRpb25hbEludGVybmFsIjogeworICAgICJob3N0IjogInBhY2thZ2VzLTE2LWVhc3QuaW50
ZXJuYWwubnBtanMuY29tIiwKKyAgICAidG1wIjogInRtcC9qcXVlcnktMi4yLjQudGd6XzE0NjM3
NjUxNjY4MzZfMC41ODM0Mzg5Njc1ODc0MjYzIgorICB9LAorICAiX25wbVVzZXIiOiB7CisgICAg
Im5hbWUiOiAidGltbXl3aWwiLAorICAgICJlbWFpbCI6ICJ0aW1teXdpbGxpc25AZ21haWwuY29t
IgorICB9LAorICAiX25wbVZlcnNpb24iOiAiMi4xNS4xIiwKKyAgIl9waGFudG9tQ2hpbGRyZW4i
OiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7CisgICAgInJhdyI6ICJqcXVlcnlAXjIuMS4wIiwKKyAg
ICAic2NvcGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJqcXVlcnkiLAorICAgICJuYW1l
IjogImpxdWVyeSIsCisgICAgInJhd1NwZWMiOiAiXjIuMS4wIiwKKyAgICAic3BlYyI6ICI+PTIu
MS4wIDwzLjAuMCIsCisgICAgInR5cGUiOiAicmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRCeSI6
IFsKKyAgICAiLyIKKyAgXSwKKyAgIl9yZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9qcXVlcnkvLS9qcXVlcnktMi4yLjQudGd6IiwKKyAgIl9zaGFzdW0iOiAiMmM4OWQ2ODg5
YjVlYWM1MjJhN2VlYTMyYzE0NTIxNTU5YzZjYmYwMiIsCisgICJfc2hyaW5rd3JhcCI6IG51bGws
CisgICJfc3BlYyI6ICJqcXVlcnlAXjIuMS4wIiwKKyAgIl93aGVyZSI6ICIvVXNlcnMvYWRkeW8v
RGVza3RvcC9TcGVlZG9tZXRlci1hL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBs
ZXMvZmxpZ2h0IiwKKyAgImF1dGhvciI6IHsKKyAgICAibmFtZSI6ICJqUXVlcnkgRm91bmRhdGlv
biBhbmQgb3RoZXIgY29udHJpYnV0b3JzIiwKKyAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNv
bS9qcXVlcnkvanF1ZXJ5L2Jsb2IvMi4yLjQvQVVUSE9SUy50eHQiCisgIH0sCisgICJidWdzIjog
eworICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvaXNzdWVzIgor
ICB9LAorICAiY29tbWl0cGxlYXNlIjogeworICAgICJjb21wb25lbnRzIjogWworICAgICAgIkRv
Y3MiLAorICAgICAgIlRlc3RzIiwKKyAgICAgICJCdWlsZCIsCisgICAgICAiUmVsZWFzZSIsCisg
ICAgICAiQ29yZSIsCisgICAgICAiQWpheCIsCisgICAgICAiQXR0cmlidXRlcyIsCisgICAgICAi
Q2FsbGJhY2tzIiwKKyAgICAgICJDU1MiLAorICAgICAgIkRhdGEiLAorICAgICAgIkRlZmVycmVk
IiwKKyAgICAgICJEZXByZWNhdGVkIiwKKyAgICAgICJEaW1lbnNpb25zIiwKKyAgICAgICJFZmZl
Y3RzIiwKKyAgICAgICJFdmVudCIsCisgICAgICAiTWFuaXB1bGF0aW9uIiwKKyAgICAgICJPZmZz
ZXQiLAorICAgICAgIlF1ZXVlIiwKKyAgICAgICJTZWxlY3RvciIsCisgICAgICAiU2VyaWFsaXpl
IiwKKyAgICAgICJUcmF2ZXJzaW5nIiwKKyAgICAgICJXcmFwIgorICAgIF0KKyAgfSwKKyAgImRl
cGVuZGVuY2llcyI6IHt9LAorICAiZGVzY3JpcHRpb24iOiAiSmF2YVNjcmlwdCBsaWJyYXJ5IGZv
ciBET00gb3BlcmF0aW9ucyIsCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgImNvbW1pdHBs
ZWFzZSI6ICIyLjAuMCIsCisgICAgImNvcmUtanMiOiAiMC45LjE3IiwKKyAgICAiZ3J1bnQiOiAi
MC40LjUiLAorICAgICJncnVudC1iYWJlbCI6ICI1LjAuMSIsCisgICAgImdydW50LWNsaSI6ICIw
LjEuMTMiLAorICAgICJncnVudC1jb21wYXJlLXNpemUiOiAiMC40LjAiLAorICAgICJncnVudC1j
b250cmliLWpzaGludCI6ICIwLjExLjIiLAorICAgICJncnVudC1jb250cmliLXVnbGlmeSI6ICIw
LjkuMiIsCisgICAgImdydW50LWNvbnRyaWItd2F0Y2giOiAiMC42LjEiLAorICAgICJncnVudC1n
aXQtYXV0aG9ycyI6ICIyLjAuMSIsCisgICAgImdydW50LWpzY3MiOiAiMi4xLjAiLAorICAgICJn
cnVudC1qc29ubGludCI6ICIxLjAuNCIsCisgICAgImdydW50LW5wbWNvcHkiOiAiMC4xLjAiLAor
ICAgICJnemlwLWpzIjogIjAuMy4yIiwKKyAgICAianNkb20iOiAiNS42LjEiLAorICAgICJsb2Fk
LWdydW50LXRhc2tzIjogIjEuMC4wIiwKKyAgICAicXVuaXQtYXNzZXJ0LXN0ZXAiOiAiMS4wLjMi
LAorICAgICJxdW5pdGpzIjogIjEuMTcuMSIsCisgICAgInJlcXVpcmVqcyI6ICIyLjEuMTciLAor
ICAgICJzaW5vbiI6ICIxLjEwLjMiLAorICAgICJzaXp6bGUiOiAiMi4yLjEiLAorICAgICJzdHJp
cC1qc29uLWNvbW1lbnRzIjogIjEuMC4zIiwKKyAgICAidGVzdHN3YXJtIjogIjEuMS4wIiwKKyAg
ICAid2luLXNwYXduIjogIjIuMC4wIgorICB9LAorICAiZGlyZWN0b3JpZXMiOiB7fSwKKyAgImRp
c3QiOiB7CisgICAgInNoYXN1bSI6ICIyYzg5ZDY4ODliNWVhYzUyMmE3ZWVhMzJjMTQ1MjE1NTlj
NmNiZjAyIiwKKyAgICAidGFyYmFsbCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcXVl
cnkvLS9qcXVlcnktMi4yLjQudGd6IgorICB9LAorICAiZ2l0SGVhZCI6ICJjMDE4NWFiN2M3NWFh
Yjg4NzYyYzVhYWU3ODBiOWQ4M2I4MGVkYTcyIiwKKyAgImhvbWVwYWdlIjogImh0dHA6Ly9qcXVl
cnkuY29tIiwKKyAgImtleXdvcmRzIjogWworICAgICJqcXVlcnkiLAorICAgICJqYXZhc2NyaXB0
IiwKKyAgICAiYnJvd3NlciIsCisgICAgImxpYnJhcnkiCisgIF0sCisgICJsaWNlbnNlIjogIk1J
VCIsCisgICJtYWluIjogImRpc3QvanF1ZXJ5LmpzIiwKKyAgIm1haW50YWluZXJzIjogWworICAg
IHsKKyAgICAgICJuYW1lIjogImRtZXRodmluIiwKKyAgICAgICJlbWFpbCI6ICJkYXZlLm1ldGh2
aW5AZ21haWwuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic2NvdHQuZ29uemFs
ZXoiLAorICAgICAgImVtYWlsIjogInNjb3R0LmdvbnphbGV6QGdtYWlsLmNvbSIKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogIm1fZ29sIiwKKyAgICAgICJlbWFpbCI6ICJtLmdvbGViQGdt
YWlsLmNvbSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInRpbW15d2lsIiwKKyAgICAg
ICJlbWFpbCI6ICJ0aW1teXdpbGxpc25AZ21haWwuY29tIgorICAgIH0KKyAgXSwKKyAgIm5hbWUi
OiAianF1ZXJ5IiwKKyAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjoge30sCisgICJyZWFkbWUiOiAi
RVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kISIsCisgICJyZXBvc2l0b3J5IjogeworICAgICJ0
eXBlIjogImdpdCIsCisgICAgInVybCI6ICJnaXQraHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9q
cXVlcnkuZ2l0IgorICB9LAorICAic2NyaXB0cyI6IHsKKyAgICAiYnVpbGQiOiAibnBtIGluc3Rh
bGwgJiYgZ3J1bnQiLAorICAgICJzdGFydCI6ICJncnVudCB3YXRjaCIsCisgICAgInRlc3QiOiAi
Z3J1bnQgJiYgZ3J1bnQgdGVzdCIKKyAgfSwKKyAgInRpdGxlIjogImpRdWVyeSIsCisgICJ2ZXJz
aW9uIjogIjIuMi40IgorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9k
ZV9tb2R1bGVzL21lbW9yeXN0b3JhZ2UvbWVtb3J5c3RvcmFnZS5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9tZW1vcnlzdG9yYWdlL21lbW9yeXN0b3JhZ2UuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjY4M2U1Njk2YzgwZmJiYzBhN2RkNTlhN2Y3NDA3N2Y1ZGNjNzE1ZQotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9tZW1vcnlz
dG9yYWdlL21lbW9yeXN0b3JhZ2UuanMKQEAgLTAsMCArMSwzIEBACisvKiEgbWVtb3J5c3RvcmFn
ZSAwLjExLjAgwqkyMDE2IGJ5IFN0aWpuIGRlIFdpdHQgYW5kIGNvbnRyaWJ1dG9ycy4gU29tZSBy
aWdodHMgcmVzZXJ2ZWQuIExpY2Vuc2U6IENDLUJZLTQuMCAqLworIWZ1bmN0aW9uKHUsbSxkKXsi
ZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgibWVtb3J5c3RvcmFn
ZSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gZCgpfSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21v
ZHVsZS5leHBvcnRzPWQoKTp1W21dPWQoKX0odGhpcywiTWVtb3J5U3RvcmFnZSIsZnVuY3Rpb24o
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTWVtb3J5U3RvcmFnZShjKXtmdW5jdGlvbiBlKCl7cmV0
dXJuIE9iamVjdC5rZXlzKGgpLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4hKGIgaW4gYSl9KX1m
dW5jdGlvbiBmKCl7cmV0dXJuIE9iamVjdC5rZXlzKGkpfWZ1bmN0aW9uIGcoKXtyZXR1cm4gZSgp
LmNvbmNhdChmKCkpfWM9Y3x8Imdsb2JhbCI7dmFyIGg9YltjXTtpZihoKXJldHVybiBoO2lmKCEo
dGhpcyBpbnN0YW5jZW9mIE1lbW9yeVN0b3JhZ2UpKXJldHVybiBuZXcgTWVtb3J5U3RvcmFnZShj
KTtoPWJbY109dGhpczt2YXIgaT17fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImlk
Iix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6Y30pLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShoLCJsZW5ndGgiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gZygpLmxlbmd0aH19KSxoLmdldEl0ZW09ZnVuY3Rpb24oYil7cmV0dXJu
KGIgaW4gYT9pW2JdOnRoaXNbYl0pfHxudWxsfSxoLnNldEl0ZW09ZnVuY3Rpb24oYixjKXtiIGlu
IGE/aVtiXT1jOnRoaXNbYl09Y30saC5yZW1vdmVJdGVtPWZ1bmN0aW9uKGIpe2IgaW4gYT9kZWxl
dGUgaVtiXTpkZWxldGUgdGhpc1tiXX0saC5rZXk9ZnVuY3Rpb24oYSl7dmFyIGI9ZygpO3JldHVy
biBhPj0wJiZhPGIubGVuZ3RoP2JbYV06bnVsbH0saC5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIg
YSxiPWUoKSxjPTA7YT1iW2NdO2MrKylkZWxldGUgdGhpc1thXTtiPWYoKTtmb3IodmFyIGEsYz0w
O2E9YltjXTtjKyspZGVsZXRlIGlbYV19LCJ1bmRlZmluZWQiPT10eXBlb2YgUHJveHk/aDpuZXcg
UHJveHkoaCx7b3duS2V5czpmdW5jdGlvbigpe3JldHVybiBnKCl9fSl9dmFyIGE9e2NsZWFyOjEs
Z2V0SXRlbToxLGlkOjEsa2V5OjEsbGVuZ3RoOjEscmVtb3ZlSXRlbToxLHNldEl0ZW06MX0sYj17
fTtyZXR1cm4gTWVtb3J5U3RvcmFnZX0pOworLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVtb3J5c3Rv
cmFnZS5taW4uanMubWFwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L0xJQ0VO
U0UgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzLXRleHQv
TElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNjJlYjBmMjhmMTE4NzlmZjFlM2VjNTRjZDg3ZTNkZjE4ZjUw
ZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1
bGVzL3JlcXVpcmVqcy10ZXh0L0xJQ0VOU0UKQEAgLTAsMCArMSw0NSBAQAorQ29weXJpZ2h0IGpR
dWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMsIGh0dHBzOi8vanF1ZXJ5Lm9y
Zy8KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBt
YWRlIGJ5IG1hbnkKK2luZGl2aWR1YWxzLiBGb3IgZXhhY3QgY29udHJpYnV0aW9uIGhpc3Rvcnks
IHNlZSB0aGUgcmV2aXNpb24gaGlzdG9yeQorYXZhaWxhYmxlIGF0IGh0dHBzOi8vZ2l0aHViLmNv
bS9yZXF1aXJlanMvdGV4dAorCitUaGUgZm9sbG93aW5nIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwg
cGFydHMgb2YgdGhpcyBzb2Z0d2FyZSBleGNlcHQgYXMKK2RvY3VtZW50ZWQgYmVsb3c6CisKKz09
PT0KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu
eSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl
ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBT
b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlv
biB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3Ry
aWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu
ZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv
IGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitp
bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0
d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO
VFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ
TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCitMSUFCTEUgRk9SIEFOWSBD
TEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCitP
RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElO
IENPTk5FQ1RJT04KK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO
R1MgSU4gVEhFIFNPRlRXQVJFLgorCis9PT09CisKK0NvcHlyaWdodCBhbmQgcmVsYXRlZCByaWdo
dHMgZm9yIHNhbXBsZSBjb2RlIGFyZSB3YWl2ZWQgdmlhIENDMC4gU2FtcGxlCitjb2RlIGlzIGRl
ZmluZWQgYXMgYWxsIHNvdXJjZSBjb2RlIGRpc3BsYXllZCB3aXRoaW4gdGhlIHByb3NlIG9mIHRo
ZQorZG9jdW1lbnRhdGlvbi4KKworQ0MwOiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJs
aWNkb21haW4vemVyby8xLjAvCisKKz09PT0KKworRmlsZXMgbG9jYXRlZCBpbiB0aGUgbm9kZV9t
b2R1bGVzIGRpcmVjdG9yeSwgYW5kIGNlcnRhaW4gdXRpbGl0aWVzIHVzZWQKK3RvIGJ1aWxkIG9y
IHRlc3QgdGhlIHNvZnR3YXJlIGluIHRoZSB0ZXN0IGFuZCBkaXN0IGRpcmVjdG9yaWVzLCBhcmUK
K2V4dGVybmFsbHkgbWFpbnRhaW5lZCBsaWJyYXJpZXMgdXNlZCBieSB0aGlzIHNvZnR3YXJlIHdo
aWNoIGhhdmUgdGhlaXIgb3duCitsaWNlbnNlczsgd2UgcmVjb21tZW5kIHlvdSByZWFkIHRoZW0s
IGFzIHRoZWlyIHRlcm1zIG1heSBkaWZmZXIgZnJvbSB0aGUKK3Rlcm1zIGFib3ZlLgpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0
L1JFQURNRS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJl
anMtdGV4dC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWVkMjNiMjM3MmU4MDZkZWQ1MzY2M2JiZDE0
YzcyOGMyODlkODA4ZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0
L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC9SRUFETUUubWQKQEAgLTAsMCArMSwyMDYgQEAK
KyMgdGV4dAorCitBIFtSZXF1aXJlSlNdKGh0dHA6Ly9yZXF1aXJlanMub3JnKS9BTUQgbG9hZGVy
IHBsdWdpbiBmb3IgbG9hZGluZyB0ZXh0CityZXNvdXJjZXMuCisKK0tub3duIHRvIHdvcmsgaW4g
UmVxdWlyZUpTLCBidXQgc2hvdWxkIHdvcmsgaW4gb3RoZXIgQU1EIGxvYWRlcnMgdGhhdCBzdXBw
b3J0Cit0aGUgc2FtZSBsb2FkZXIgcGx1Z2luIEFQSS4KKworIyMgRG9jcworCitTZWUgdGhlIFtS
ZXF1aXJlSlMgQVBJIHRleHQgc2VjdGlvbl0oaHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9hcGku
aHRtbCN0ZXh0KS4KKworIyMgTGF0ZXN0IHJlbGVhc2UKKworVGhlIGxhdGVzdCByZWxlYXNlIGlz
IGFsd2F5cyBhdmFpbGFibGUgZnJvbSBbdGhlICJsYXRlc3QiIHRhZ10oaHR0cHM6Ly9yYXcuZ2l0
aHViLmNvbS9yZXF1aXJlanMvdGV4dC9sYXRlc3QvdGV4dC5qcykuCisKK0l0IGNhbiBhbHNvIGJl
IGluc3RhbGxlZCB1c2luZyBbdm9sb10oaHR0cHM6Ly9naXRodWIuY29tL3ZvbG9qcy92b2xvKToK
KworICAgIHZvbG8gYWRkIHJlcXVpcmVqcy90ZXh0CisKK0lmIHVzaW5nIG5wbToKKworICAgIG5w
bSBpbnN0YWxsIHJlcXVpcmVqcy90ZXh0CisKKyMjIFVzYWdlCisKK0l0IGlzIG5pY2UgdG8gYnVp
bGQgSFRNTCB1c2luZyByZWd1bGFyIEhUTUwgdGFncywgaW5zdGVhZCBvZiBidWlsZGluZyB1cCBE
T00KK3N0cnVjdHVyZXMgaW4gc2NyaXB0LiBIb3dldmVyLCB0aGVyZSBpcyBubyBnb29kIHdheSB0
byBlbWJlZCBIVE1MIGluIGEKK0phdmFTY3JpcHQgZmlsZS4gVGhlIGJlc3QgdGhhdCBjYW4gYmUg
ZG9uZSBpcyB1c2luZyBhIHN0cmluZyBvZiBIVE1MLCBidXQgdGhhdAorY2FuIGJlIGhhcmQgdG8g
bWFuYWdlLCBwYXJ0aWN1bGFybHkgZm9yIG11bHRpLWxpbmUgSFRNTC4KKworVGhlIHRleHQuanMg
QU1EIGxvYWRlciBwbHVnaW4gY2FuIGhlbHAgd2l0aCB0aGlzIGlzc3VlLiBJdCB3aWxsIGF1dG9t
YXRpY2FsbHkgYmUKK2xvYWRlZCBpZiB0aGUgdGV4dCEgcHJlZml4IGlzIHVzZWQgZm9yIGEgZGVw
ZW5kZW5jeS4gRG93bmxvYWQgdGhlIHBsdWdpbiBhbmQgcHV0CitpdCBpbiB0aGUgYXBwJ3MgW2Jh
c2VVcmxdKGh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3MvYXBpLmh0bWwjY29uZmlnLWJhc2VVcmwp
CitkaXJlY3RvcnkgKG9yIHVzZSB0aGUgW3BhdGhzIGNvbmZpZ10oaHR0cDovL3JlcXVpcmVqcy5v
cmcvZG9jcy9hcGkuaHRtbCNjb25maWctcGF0aHMpIHRvIHBsYWNlIGl0IGluIG90aGVyIGFyZWFz
KS4KKworWW91IGNhbiBzcGVjaWZ5IGEgdGV4dCBmaWxlIHJlc291cmNlIGFzIGEgZGVwZW5kZW5j
eSBsaWtlIHNvOgorCitgYGBqYXZhc2NyaXB0CityZXF1aXJlKFsic29tZS9tb2R1bGUiLCAidGV4
dCFzb21lL21vZHVsZS5odG1sIiwgInRleHQhc29tZS9tb2R1bGUuY3NzIl0sCisgICAgZnVuY3Rp
b24obW9kdWxlLCBodG1sLCBjc3MpIHsKKyAgICAgICAgLy90aGUgaHRtbCB2YXJpYWJsZSB3aWxs
IGJlIHRoZSB0ZXh0CisgICAgICAgIC8vb2YgdGhlIHNvbWUvbW9kdWxlLmh0bWwgZmlsZQorICAg
ICAgICAvL3RoZSBjc3MgdmFyaWFibGUgd2lsbCBiZSB0aGUgdGV4dAorICAgICAgICAvL29mIHRo
ZSBzb21lL21vZHVsZS5jc3MgZmlsZS4KKyAgICB9CispOworYGBgCisKK05vdGljZSB0aGUgLmh0
bWwgYW5kIC5jc3Mgc3VmZml4ZXMgdG8gc3BlY2lmeSB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxl
LiBUaGUKKyJzb21lL21vZHVsZSIgcGFydCBvZiB0aGUgcGF0aCB3aWxsIGJlIHJlc29sdmVkIGFj
Y29yZGluZyB0byBub3JtYWwgbW9kdWxlIG5hbWUKK3Jlc29sdXRpb246IGl0IHdpbGwgdXNlIHRo
ZSAqKmJhc2VVcmwqKiBhbmQgKipwYXRocyoqIFtjb25maWd1cmF0aW9uCitvcHRpb25zXShodHRw
Oi8vcmVxdWlyZWpzLm9yZy9kb2NzL2FwaS5odG1sI2NvbmZpZykgdG8gbWFwIHRoYXQgbmFtZSB0
byBhIHBhdGguCisKK0ZvciBIVE1ML1hNTC9TVkcgZmlsZXMsIHRoZXJlIGlzIGFub3RoZXIgb3B0
aW9uLiBZb3UgY2FuIHBhc3MgIXN0cmlwLCB3aGljaAorc3RyaXBzIFhNTCBkZWNsYXJhdGlvbnMg
c28gdGhhdCBleHRlcm5hbCBTVkcgYW5kIFhNTCBkb2N1bWVudHMgY2FuIGJlIGFkZGVkIHRvIGEK
K2RvY3VtZW50IHdpdGhvdXQgd29ycnkuIEFsc28sIGlmIHRoZSBzdHJpbmcgaXMgYW4gSFRNTCBk
b2N1bWVudCwgb25seSB0aGUgcGFydAoraW5zaWRlIHRoZSBib2R5IHRhZyBpcyByZXR1cm5lZC4g
RXhhbXBsZToKKworYGBgamF2YXNjcmlwdAorcmVxdWlyZShbInRleHQhc29tZS9tb2R1bGUuaHRt
bCFzdHJpcCJdLAorICAgIGZ1bmN0aW9uKGh0bWwpIHsKKyAgICAgICAgLy90aGUgaHRtbCB2YXJp
YWJsZSB3aWxsIGJlIHRoZSB0ZXh0IG9mIHRoZQorICAgICAgICAvL3NvbWUvbW9kdWxlLmh0bWwg
ZmlsZSwgYnV0IG9ubHkgdGhlIHBhcnQKKyAgICAgICAgLy9pbnNpZGUgdGhlIGJvZHkgdGFnLgor
ICAgIH0KKyk7CitgYGAKKworVGhlIHRleHQgZmlsZXMgYXJlIGxvYWRlZCB2aWEgYXN5bmNocm9u
b3VzIFhNTEh0dHBSZXF1ZXN0IChYSFIpIGNhbGxzLCBzbyB5b3UKK2NhbiBvbmx5IGZldGNoIGZp
bGVzIGZyb20gdGhlIHNhbWUgZG9tYWluIGFzIHRoZSB3ZWIgcGFnZSAoc2VlICoqWEhSCityZXN0
cmljdGlvbnMqKiBiZWxvdykuCisKK0hvd2V2ZXIsIFt0aGUgUmVxdWlyZUpTIG9wdGltaXplcl0o
aHR0cDovL3JlcXVpcmVqcy5vcmcvZG9jcy9vcHRpbWl6YXRpb24uaHRtbCkKK3dpbGwgaW5saW5l
IGFueSB0ZXh0ISByZWZlcmVuY2VzIHdpdGggdGhlIGFjdHVhbCB0ZXh0IGZpbGUgY29udGVudHMg
aW50byB0aGUKK21vZHVsZXMsIHNvIGFmdGVyIGEgYnVpbGQsIHRoZSBtb2R1bGVzIHRoYXQgaGF2
ZSB0ZXh0ISBkZXBlbmRlbmNpZXMgY2FuIGJlIHVzZWQKK2Zyb20gb3RoZXIgZG9tYWlucy4KKwor
IyMgQ29uZmlndXJhdGlvbgorCisjIyMgWEhSIHJlc3RyaWN0aW9ucworCitUaGUgdGV4dCBwbHVn
aW4gd29ya3MgYnkgdXNpbmcgWE1MSHR0cFJlcXVlc3QgKFhIUikgdG8gZmV0Y2ggdGhlIHRleHQg
Zm9yIHRoZQorcmVzb3VyY2VzIGl0IGhhbmRsZXMuCisKK0hvd2V2ZXIsIFhIUiBjYWxscyBoYXZl
IHNvbWUgcmVzdHJpY3Rpb25zLCBkdWUgdG8gYnJvd3Nlci93ZWIgc2VjdXJpdHkgcG9saWNpZXM6
CisKKzEpIE1hbnkgYnJvd3NlcnMgZG8gbm90IGFsbG93IGZpbGU6Ly8gYWNjZXNzIHRvIGp1c3Qg
YW55IGZpbGUuIFlvdSBhcmUgYmV0dGVyCitvZmYgc2VydmluZyB0aGUgYXBwbGljYXRpb24gZnJv
bSBhIGxvY2FsIHdlYiBzZXJ2ZXIgdGhhbiB1c2luZyBsb2NhbCBmaWxlOi8vCitVUkxzLiBZb3Ug
d2lsbCBsaWtlbHkgcnVuIGludG8gdHJvdWJsZSBvdGhlcndpc2UuCisKKzIpIFRoZXJlIGFyZSBy
ZXN0cmljdGlvbnMgZm9yIHVzaW5nIFhIUiB0byBhY2Nlc3MgZmlsZXMgb24gYW5vdGhlciB3ZWIg
ZG9tYWluLgorV2hpbGUgQ09SUyBjYW4gaGVscCBlbmFibGUgdGhlIHNlcnZlciBmb3IgY3Jvc3Mt
ZG9tYWluIGFjY2VzcywgZG9pbmcgc28gbXVzdAorYmUgZG9uZSB3aXRoIGNhcmUgKGluIHBhcnRp
Y3VsYXIgaWYgeW91IGFsc28gaG9zdCBhbiBBUEkgZnJvbSB0aGF0IGRvbWFpbiksCithbmQgbm90
IGFsbCBicm93c2VycyBzdXBwb3J0IENPUlMuCisKK1NvIGlmIHRoZSB0ZXh0IHBsdWdpbiBkZXRl
cm1pbmVzIHRoYXQgdGhlIHJlcXVlc3QgZm9yIHRoZSByZXNvdXJjZSBpcyBvbiBhbm90aGVyCitk
b21haW4sIGl0IHdpbGwgdHJ5IHRvIGFjY2VzcyBhICIuanMiIHZlcnNpb24gb2YgdGhlIHJlc291
cmNlIGJ5IHVzaW5nIGEKK3NjcmlwdCB0YWcuIFNjcmlwdCB0YWcgR0VUIHJlcXVlc3RzIGFyZSBh
bGxvd2VkIGFjcm9zcyBkb21haW5zLiBUaGUgLmpzIHZlcnNpb24KK29mIHRoZSByZXNvdXJjZSBz
aG91bGQganVzdCBiZSBhIHNjcmlwdCB3aXRoIGEgZGVmaW5lKCkgY2FsbCBpbiBpdCB0aGF0IHJl
dHVybnMKK2Egc3RyaW5nIGZvciB0aGUgbW9kdWxlIHZhbHVlLgorCitFeGFtcGxlOiBpZiB0aGUg
cmVzb3VyY2UgaXMgJ3RleHQhZXhhbXBsZS5odG1sJyBhbmQgdGhhdCByZXNvbHZlcyB0byBhIHBh
dGgKK29uIGFub3RoZXIgd2ViIGRvbWFpbiwgdGhlIHRleHQgcGx1Z2luIHdpbGwgZG8gYSBzY3Jp
cHQgdGFnIGxvYWQgZm9yCisnZXhhbXBsZS5odG1sLmpzJy4KKworVGhlIFtyZXF1aXJlanMgb3B0
aW1pemVyXShodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL29wdGltaXphdGlvbi5odG1sKSB3aWxs
CitnZW5lcmF0ZSB0aGVzZSAnLmpzJyB2ZXJzaW9ucyBvZiB0aGUgdGV4dCByZXNvdXJjZXMgaWYg
eW91IHNldCB0aGlzIGluIHRoZQorYnVpbGQgcHJvZmlsZToKKworICAgIG9wdGltaXplQWxsUGx1
Z2luUmVzb3VyY2VzOiB0cnVlCisKK0luIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2FudCB0aGUgdGV4
dCBwbHVnaW4gdG8gbm90IHRyeSB0aGUgLmpzIHJlc291cmNlLCBtYXliZQorYmVjYXVzZSB5b3Ug
aGF2ZSBjb25maWd1cmVkIENPUlMgb24gdGhlIG90aGVyIHNlcnZlciwgYW5kIHlvdSBrbm93IHRo
YXQgb25seQorYnJvd3NlcnMgdGhhdCBzdXBwb3J0IENPUlMgd2lsbCBiZSB1c2VkLiBJbiB0aGF0
IGNhc2UgeW91IGNhbiB1c2UgdGhlCitbbW9kdWxlIGNvbmZpZ10oaHR0cDovL3JlcXVpcmVqcy5v
cmcvZG9jcy9hcGkuaHRtbCNjb25maWctbW9kdWxlY29uZmlnKQorKHJlcXVpcmVzIFJlcXVpcmVK
UyAyKykgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUgYmFzaWMgbG9naWMgdGhlIHBsdWdpbiB1c2Vz
IHRvCitkZXRlcm1pbmUgaWYgdGhlIC5qcyBmaWxlIHNob3VsZCBiZSByZXF1ZXN0ZWQ6CisKK2Bg
YGphdmFzY3JpcHQKK3JlcXVpcmVqcy5jb25maWcoeworICAgIGNvbmZpZzogeworICAgICAgICB0
ZXh0OiB7CisgICAgICAgICAgICB1c2VYaHI6IGZ1bmN0aW9uICh1cmwsIHByb3RvY29sLCBob3N0
bmFtZSwgcG9ydCkgeworICAgICAgICAgICAgICAgIC8vT3ZlcnJpZGUgZnVuY3Rpb24gZm9yIGRl
dGVybWluaW5nIGlmIFhIUiBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgICAgICAgICAvL3VybDog
dGhlIFVSTCBiZWluZyByZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICAvL3Byb3RvY29sOiBwcm90
b2NvbCBvZiBwYWdlIHRleHQuanMgaXMgcnVubmluZyBvbgorICAgICAgICAgICAgICAgIC8vaG9z
dG5hbWU6IGhvc3RuYW1lIG9mIHBhZ2UgdGV4dC5qcyBpcyBydW5uaW5nIG9uCisgICAgICAgICAg
ICAgICAgLy9wb3J0OiBwb3J0IG9mIHBhZ2UgdGV4dC5qcyBpcyBydW5uaW5nIG9uCisgICAgICAg
ICAgICAgICAgLy9Vc2UgcHJvdG9jb2wsIGhvc3RuYW1lLCBhbmQgcG9ydCB0byBjb21wYXJlIGFn
YWluc3QgdGhlIHVybAorICAgICAgICAgICAgICAgIC8vYmVpbmcgcmVxdWVzdGVkLgorICAgICAg
ICAgICAgICAgIC8vUmV0dXJuIHRydWUgb3IgZmFsc2UuIHRydWUgbWVhbnMgInVzZSB4aHIiLCBm
YWxzZSBtZWFucworICAgICAgICAgICAgICAgIC8vImZldGNoIHRoZSAuanMgdmVyc2lvbiBvZiB0
aGlzIHJlc291cmNlIi4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30pOworYGBg
CisKKyMjIyBDdXN0b20gWEhSIGhvb2tzCisKK1RoZXJlIG1heSBiZSBjYXNlcyB3aGVyZSB5b3Ug
bWlnaHQgd2FudCB0byBwcm92aWRlIHRoZSBYSFIgb2JqZWN0IHRvIHVzZQoraW4gdGhlIHJlcXVl
c3QsIG9yIHlvdSBtYXkganVzdCB3YW50IHRvIGFkZCBzb21lIGN1c3RvbSBoZWFkZXJzIHRvIHRo
ZQorWEhSIG9iamVjdCB1c2VkIHRvIG1ha2UgdGhlIHJlcXVlc3QuIFlvdSBjYW4gdXNlIHRoZSBm
b2xsb3dpbmcgaG9va3M6CisKK2BgYGphdmFzY3JpcHQKK3JlcXVpcmVqcy5jb25maWcoeworICAg
IGNvbmZpZzogeworICAgICAgICB0ZXh0OiB7CisgICAgICAgICAgICBvblhocjogZnVuY3Rpb24g
KHhociwgdXJsKSB7CisgICAgICAgICAgICAgICAgLy9DYWxsZWQgYWZ0ZXIgdGhlIFhIUiBoYXMg
YmVlbiBjcmVhdGVkIGFuZCBhZnRlciB0aGUKKyAgICAgICAgICAgICAgICAvL3hoci5vcGVuKCkg
Y2FsbCwgYnV0IGJlZm9yZSB0aGUgeGhyLnNlbmQoKSBjYWxsLgorICAgICAgICAgICAgICAgIC8v
VXNlZnVsIHRpbWUgdG8gc2V0IGhlYWRlcnMuCisgICAgICAgICAgICAgICAgLy94aHI6IHRoZSB4
aHIgb2JqZWN0CisgICAgICAgICAgICAgICAgLy91cmw6IHRoZSB1cmwgdGhhdCBpcyBiZWluZyB1
c2VkIHdpdGggdGhlIHhociBvYmplY3QuCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY3Jl
YXRlWGhyOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgLy9PdmVycmlkZXMgdGhlIGNy
ZWF0aW9uIG9mIHRoZSBYSFIgb2JqZWN0LiBSZXR1cm4gYW4gWEhSCisgICAgICAgICAgICAgICAg
Ly9vYmplY3QgZnJvbSB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgIC8vQXZhaWxhYmxl
IGluIHRleHQuanMgMi4wLjEgb3IgbGF0ZXIuCisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
b25YaHJDb21wbGV0ZTogZnVuY3Rpb24gKHhociwgdXJsKSB7CisgICAgICAgICAgICAgICAgLy9D
YWxsZWQgd2hlbmV2ZXIgYW4gWEhSIGhhcyBjb21wbGV0ZWQgaXRzIHdvcmsuIFVzZWZ1bAorICAg
ICAgICAgICAgICAgIC8vaWYgYnJvd3Nlci1zcGVjaWZpYyB4aHIgY2xlYW51cCBuZWVkcyB0byBi
ZSBkb25lLgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfSk7CitgYGAKKworIyMj
IEZvcmNpbmcgdGhlIGVudmlyb25tZW50IGltcGxlbWVudGF0aW9uCisKK1RoZSB0ZXh0IHBsdWdp
biB0cmllcyB0byBkZXRlY3Qgd2hhdCBlbnZpcm9ubWVudCBpdCBpcyBhdmFpbGFibGUgZm9yIGxv
YWRpbmcKK3RleHQgcmVzb3VyY2VzLCBOb2RlLCBYTUxIdHRwUmVxdWVzdCAoWEhSKSBvciBSaGlu
bywgYnV0IHNvbWV0aW1lcyB0aGUKK05vZGUgb3IgUmhpbm8gZW52aXJvbm1lbnQgbWF5IGhhdmUg
bG9hZGVkIGEgbGlicmFyeSB0aGF0IGludHJvZHVjZXMgYW4gWEhSCitpbXBsZW1lbnRhdGlvbi4g
WW91IGNhbiBmb3JjZSB0aGUgZW52aXJvbm1lbnQgaW1wbGVtZW50YXRpb24gdG8gdXNlIGJ5IHBh
c3NpbmcKK2FuICJlbnYiIG1vZHVsZSBjb25maWcgdG8gdGhlIHBsdWdpbjoKKworYGBgamF2YXNj
cmlwdAorcmVxdWlyZWpzLmNvbmZpZyh7CisgICAgY29uZmlnOiB7CisgICAgICAgIHRleHQ6IHsK
KyAgICAgICAgICAgIC8vVmFsaWQgdmFsdWVzIGFyZSAnbm9kZScsICd4aHInLCBvciAncmhpbm8n
CisgICAgICAgICAgICBlbnY6ICdyaGlubycKKyAgICAgICAgfQorICAgIH0KK30pOworYGBgCisK
KyMjIExpY2Vuc2UKKworTUlUCisKKyMjIENvZGUgb2YgQ29uZHVjdAorCitbalF1ZXJ5IEZvdW5k
YXRpb24gQ29kZSBvZiBDb25kdWN0XShodHRwczovL2pxdWVyeS5vcmcvY29uZHVjdC8pLgorCisj
IyBXaGVyZSBhcmUgdGhlIHRlc3RzPworCitUaGV5IGFyZSBpbiB0aGUgW3JlcXVpcmVqc10oaHR0
cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMpIGFuZAorW3IuanNdKGh0dHBzOi8v
Z2l0aHViLmNvbS9yZXF1aXJlanMvci5qcykgcmVwb3MuCisKKyMjIEhpc3RvcnkKKworVGhpcyBw
bHVnaW4gd2FzIGluIHRoZSBbcmVxdWlyZWpzIHJlcG9dKGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1
aXJlanMvcmVxdWlyZWpzKQordXAgdW50aWwgdGhlIHJlcXVpcmVqcyAyLjAgcmVsZWFzZS4KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMt
dGV4dC9ib3dlci5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3Jl
cXVpcmVqcy10ZXh0L2Jvd2VyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNiZGE5MGI1ZmIyN2YxNGUyYTUz
NmE2MDViYjg4ZTQ5ZGIxZTdkNAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC9ib3dlci5qc29uCkBAIC0wLDAgKzEs
NiBAQAoreworICAibmFtZSI6ICJ0ZXh0IiwKKyAgInZlcnNpb24iOiAiMi4wLjE1IiwKKyAgIm1h
aW4iOiAidGV4dC5qcyIsCisgICJsaWNlbnNlIjogIk1JVCIKK30KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvcmVxdWlyZWpzLXRleHQvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2Yx
MDg2ZjhjYzE5MjlmMDBmNjU4OTk3NTUzYWQ0OGM1ZjQ0NGJlCi0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3BhY2th
Z2UuanNvbgpAQCAtMCwwICsxLDg1IEBACit7CisgICJfYXJncyI6IFsKKyAgICBbCisgICAgICB7
CisgICAgICAgICJyYXciOiAicmVxdWlyZWpzLXRleHRAXjIuMC4xMiIsCisgICAgICAgICJzY29w
ZSI6IG51bGwsCisgICAgICAgICJlc2NhcGVkTmFtZSI6ICJyZXF1aXJlanMtdGV4dCIsCisgICAg
ICAgICJuYW1lIjogInJlcXVpcmVqcy10ZXh0IiwKKyAgICAgICAgInJhd1NwZWMiOiAiXjIuMC4x
MiIsCisgICAgICAgICJzcGVjIjogIj49Mi4wLjEyIDwzLjAuMCIsCisgICAgICAgICJ0eXBlIjog
InJhbmdlIgorICAgICAgfSwKKyAgICAgICIvVXNlcnMvYWRkeW8vRGVza3RvcC9TcGVlZG9tZXRl
ci1hL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0IgorICAgIF0K
KyAgXSwKKyAgIl9mcm9tIjogInJlcXVpcmVqcy10ZXh0QD49Mi4wLjEyIDwzLjAuMCIsCisgICJf
aWQiOiAicmVxdWlyZWpzLXRleHRAMi4wLjE1IiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9s
b2NhdGlvbiI6ICIvcmVxdWlyZWpzLXRleHQiLAorICAiX25vZGVWZXJzaW9uIjogIjcuMi4xIiwK
KyAgIl9ucG1PcGVyYXRpb25hbEludGVybmFsIjogeworICAgICJob3N0IjogInBhY2thZ2VzLTEy
LXdlc3QuaW50ZXJuYWwubnBtanMuY29tIiwKKyAgICAidG1wIjogInRtcC9yZXF1aXJlanMtdGV4
dC0yLjAuMTUudGd6XzE0ODIwNzQxMDkzMDJfMC45ODYwNTk4MDg2Mzc5NDY4IgorICB9LAorICAi
X25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAiY2hlc3RvbiIsCisgICAgImVtYWlsIjogImNoZXN0
b25sbG95ZEBnbWFpbC5jb20iCisgIH0sCisgICJfbnBtVmVyc2lvbiI6ICIzLjEwLjEwIiwKKyAg
Il9waGFudG9tQ2hpbGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7CisgICAgInJhdyI6ICJy
ZXF1aXJlanMtdGV4dEBeMi4wLjEyIiwKKyAgICAic2NvcGUiOiBudWxsLAorICAgICJlc2NhcGVk
TmFtZSI6ICJyZXF1aXJlanMtdGV4dCIsCisgICAgIm5hbWUiOiAicmVxdWlyZWpzLXRleHQiLAor
ICAgICJyYXdTcGVjIjogIl4yLjAuMTIiLAorICAgICJzcGVjIjogIj49Mi4wLjEyIDwzLjAuMCIs
CisgICAgInR5cGUiOiAicmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIK
KyAgXSwKKyAgIl9yZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJl
anMtdGV4dC8tL3JlcXVpcmVqcy10ZXh0LTIuMC4xNS50Z3oiLAorICAiX3NoYXN1bSI6ICIxMzEz
ODczMzYxM2ZjNDQ1N2I3ZTEyNDdlOGNiNzUxZGY3YWE1NDI5IiwKKyAgIl9zaHJpbmt3cmFwIjog
bnVsbCwKKyAgIl9zcGVjIjogInJlcXVpcmVqcy10ZXh0QF4yLjAuMTIiLAorICAiX3doZXJlIjog
Ii9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiLAorICAiYnVncyI6IHsKKyAgICAidXJsIjogImh0dHBz
Oi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvdGV4dC9pc3N1ZXMiCisgIH0sCisgICJjYXRlZ29yaWVz
IjogWworICAgICJMb2FkZXIgcGx1Z2lucyIKKyAgXSwKKyAgImRlcGVuZGVuY2llcyI6IHt9LAor
ICAiZGVzY3JpcHRpb24iOiAiQW4gQU1EIGxvYWRlciBwbHVnaW4gZm9yIGxvYWRpbmcgdGV4dCBy
ZXNvdXJjZXMuIiwKKyAgImRldkRlcGVuZGVuY2llcyI6IHt9LAorICAiZGlyZWN0b3JpZXMiOiB7
fSwKKyAgImRpc3QiOiB7CisgICAgInNoYXN1bSI6ICIxMzEzODczMzYxM2ZjNDQ1N2I3ZTEyNDdl
OGNiNzUxZGY3YWE1NDI5IiwKKyAgICAidGFyYmFsbCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9yZXF1aXJlanMtdGV4dC8tL3JlcXVpcmVqcy10ZXh0LTIuMC4xNS50Z3oiCisgIH0sCisg
ICJnaXRIZWFkIjogImNhNGIwOWU3NzliNzMwMGJlYmVmZDJiNzQ4NjQzYTZkY2RlOTcxZWYiLAor
ICAiZ2l0aHViIjogImh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvdGV4dCIsCisgICJob21l
cGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3RleHQjcmVhZG1lIiwKKyAgImxp
Y2Vuc2UiOiAiTUlUIiwKKyAgIm1haW4iOiAidGV4dC5qcyIsCisgICJtYWludGFpbmVycyI6IFsK
KyAgICB7CisgICAgICAibmFtZSI6ICJjaGVzdG9uIiwKKyAgICAgICJlbWFpbCI6ICJjaGVzdG9u
bGxveWRAZ21haWwuY29tIgorICAgIH0KKyAgXSwKKyAgIm5hbWUiOiAicmVxdWlyZWpzLXRleHQi
LAorICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8g
UkVBRE1FIGRhdGEgZm91bmQhIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0
IiwKKyAgICAidXJsIjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3RleHQuZ2l0
IgorICB9LAorICAic2NyaXB0cyI6IHt9LAorICAidmVyc2lvbiI6ICIyLjAuMTUiLAorICAidm9s
byI6IHsKKyAgICAidXJsIjogImh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vcmVxdWlyZWpzL3RleHQv
e3ZlcnNpb259L3RleHQuanMiCisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4dC90ZXh0LmpzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy10ZXh0L3RleHQuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjgzNzBkNjJmYWM2ZDU4OTBlOGE0M2M5MjNjYzViNjEyM2I0YjkzYgotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMtdGV4
dC90ZXh0LmpzCkBAIC0wLDAgKzEsNDA4IEBACisvKioKKyAqIEBsaWNlbnNlIHRleHQgMi4wLjE1
IENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgorICog
UmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIGh0dHA6Ly9naXRodWIuY29tL3JlcXVpcmVqcy90
ZXh0L0xJQ0VOU0UKKyAqLworLypqc2xpbnQgcmVnZXhwOiB0cnVlICovCisvKmdsb2JhbCByZXF1
aXJlLCBYTUxIdHRwUmVxdWVzdCwgQWN0aXZlWE9iamVjdCwKKyAgZGVmaW5lLCB3aW5kb3csIHBy
b2Nlc3MsIFBhY2thZ2VzLAorICBqYXZhLCBsb2NhdGlvbiwgQ29tcG9uZW50cywgRmlsZVV0aWxz
ICovCisKK2RlZmluZShbJ21vZHVsZSddLCBmdW5jdGlvbiAobW9kdWxlKSB7CisgICAgJ3VzZSBz
dHJpY3QnOworCisgICAgdmFyIHRleHQsIGZzLCBDYywgQ2ksIHhwY0lzV2luZG93cywKKyAgICAg
ICAgcHJvZ0lkcyA9IFsnTXN4bWwyLlhNTEhUVFAnLCAnTWljcm9zb2Z0LlhNTEhUVFAnLCAnTXN4
bWwyLlhNTEhUVFAuNC4wJ10sCisgICAgICAgIHhtbFJlZ0V4cCA9IC9eXHMqPFw/eG1sKFxzKSt2
ZXJzaW9uPVtcJ1wiXShcZCkqLihcZCkqW1wnXCJdKFxzKSpcPz4vaW0sCisgICAgICAgIGJvZHlS
ZWdFeHAgPSAvPGJvZHlbXj5dKj5ccyooW1xzXFNdKylccyo8XC9ib2R5Pi9pbSwKKyAgICAgICAg
aGFzTG9jYXRpb24gPSB0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnICYmIGxvY2F0aW9u
LmhyZWYsCisgICAgICAgIGRlZmF1bHRQcm90b2NvbCA9IGhhc0xvY2F0aW9uICYmIGxvY2F0aW9u
LnByb3RvY29sICYmIGxvY2F0aW9uLnByb3RvY29sLnJlcGxhY2UoL1w6LywgJycpLAorICAgICAg
ICBkZWZhdWx0SG9zdE5hbWUgPSBoYXNMb2NhdGlvbiAmJiBsb2NhdGlvbi5ob3N0bmFtZSwKKyAg
ICAgICAgZGVmYXVsdFBvcnQgPSBoYXNMb2NhdGlvbiAmJiAobG9jYXRpb24ucG9ydCB8fCB1bmRl
ZmluZWQpLAorICAgICAgICBidWlsZE1hcCA9IHt9LAorICAgICAgICBtYXN0ZXJDb25maWcgPSAo
bW9kdWxlLmNvbmZpZyAmJiBtb2R1bGUuY29uZmlnKCkpIHx8IHt9OworCisgICAgZnVuY3Rpb24g
dXNlRGVmYXVsdCh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7CisgICAgICAgIHJldHVybiB2YWx1ZSA9
PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJyA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlOworICAg
IH0KKworICAgIC8vQWxsb3cgZm9yIGRlZmF1bHQgcG9ydHMgZm9yIGh0dHAgYW5kIGh0dHBzLgor
ICAgIGZ1bmN0aW9uIGlzU2FtZVBvcnQocHJvdG9jb2wxLCBwb3J0MSwgcHJvdG9jb2wyLCBwb3J0
MikgeworICAgICAgICBpZiAocG9ydDEgPT09IHBvcnQyKSB7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChwcm90b2NvbDEgPT09IHByb3RvY29sMikgeworICAg
ICAgICAgICAgaWYgKHByb3RvY29sMSA9PT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHVzZURlZmF1bHQocG9ydDEsICc4MCcpID09PSB1c2VEZWZhdWx0KHBvcnQyLCAnODAnKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvdG9jb2wxID09PSAnaHR0cHMnKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHVzZURlZmF1bHQocG9ydDEsICc0NDMnKSA9PT0gdXNlRGVmYXVsdChw
b3J0MiwgJzQ0MycpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICB0ZXh0ID0geworICAgICAgICB2ZXJzaW9uOiAnMi4wLjE1JywK
KworICAgICAgICBzdHJpcDogZnVuY3Rpb24gKGNvbnRlbnQpIHsKKyAgICAgICAgICAgIC8vU3Ry
aXBzIDw/eG1sIC4uLj8+IGRlY2xhcmF0aW9ucyBzbyB0aGF0IGV4dGVybmFsIFNWRyBhbmQgWE1M
CisgICAgICAgICAgICAvL2RvY3VtZW50cyBjYW4gYmUgYWRkZWQgdG8gYSBkb2N1bWVudCB3aXRo
b3V0IHdvcnJ5LiBBbHNvLCBpZiB0aGUgc3RyaW5nCisgICAgICAgICAgICAvL2lzIGFuIEhUTUwg
ZG9jdW1lbnQsIG9ubHkgdGhlIHBhcnQgaW5zaWRlIHRoZSBib2R5IHRhZyBpcyByZXR1cm5lZC4K
KyAgICAgICAgICAgIGlmIChjb250ZW50KSB7CisgICAgICAgICAgICAgICAgY29udGVudCA9IGNv
bnRlbnQucmVwbGFjZSh4bWxSZWdFeHAsICIiKTsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hl
cyA9IGNvbnRlbnQubWF0Y2goYm9keVJlZ0V4cCk7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNo
ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IG1hdGNoZXNbMV07CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZW50
ID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29udGVudDsKKyAgICAg
ICAgfSwKKworICAgICAgICBqc0VzY2FwZTogZnVuY3Rpb24gKGNvbnRlbnQpIHsKKyAgICAgICAg
ICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UoLyhbJ1xcXSkvZywgJ1xcJDEnKQorICAgICAgICAg
ICAgICAgIC5yZXBsYWNlKC9bXGZdL2csICJcXGYiKQorICAgICAgICAgICAgICAgIC5yZXBsYWNl
KC9bXGJdL2csICJcXGIiKQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXG5dL2csICJcXG4i
KQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXHRdL2csICJcXHQiKQorICAgICAgICAgICAg
ICAgIC5yZXBsYWNlKC9bXHJdL2csICJcXHIiKQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b
XHUyMDI4XS9nLCAiXFx1MjAyOCIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcdTIwMjld
L2csICJcXHUyMDI5Iik7CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlWGhyOiBtYXN0ZXJD
b25maWcuY3JlYXRlWGhyIHx8IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vV291bGQgbG92
ZSB0byBkdW1wIHRoZSBBY3RpdmVYIGNyYXAgaW4gaGVyZS4gTmVlZCBJRSA2IHRvIGRpZSBmaXJz
dC4KKyAgICAgICAgICAgIHZhciB4aHIsIGksIHByb2dJZDsKKyAgICAgICAgICAgIGlmICh0eXBl
b2YgWE1MSHR0cFJlcXVlc3QgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yg
QWN0aXZlWE9iamVjdCAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgMzsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHByb2dJZCA9IHByb2dJ
ZHNbaV07CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdChwcm9nSWQpOworICAgICAgICAgICAgICAgICAgICB9
IGNhdGNoIChlKSB7fQorCisgICAgICAgICAgICAgICAgICAgIGlmICh4aHIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2dJZHMgPSBbcHJvZ0lkXTsgIC8vIHNvIGZhc3RlciBuZXh0IHRp
bWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
eGhyOworICAgICAgICB9LAorCisgICAgICAgIC8qKgorICAgICAgICAgKiBQYXJzZXMgYSByZXNv
dXJjZSBuYW1lIGludG8gaXRzIGNvbXBvbmVudCBwYXJ0cy4gUmVzb3VyY2UgbmFtZXMKKyAgICAg
ICAgICogbG9vayBsaWtlOiBtb2R1bGUvbmFtZS5leHQhc3RyaXAsIHdoZXJlIHRoZSAhc3RyaXAg
cGFydCBpcworICAgICAgICAgKiBvcHRpb25hbC4KKyAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9
IG5hbWUgdGhlIHJlc291cmNlIG5hbWUKKyAgICAgICAgICogQHJldHVybnMge09iamVjdH0gd2l0
aCBwcm9wZXJ0aWVzICJtb2R1bGVOYW1lIiwgImV4dCIgYW5kICJzdHJpcCIKKyAgICAgICAgICog
d2hlcmUgc3RyaXAgaXMgYSBib29sZWFuLgorICAgICAgICAgKi8KKyAgICAgICAgcGFyc2VOYW1l
OiBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICAgICAgdmFyIG1vZE5hbWUsIGV4dCwgdGVtcCwK
KyAgICAgICAgICAgICAgICBzdHJpcCA9IGZhbHNlLAorICAgICAgICAgICAgICAgIGluZGV4ID0g
bmFtZS5sYXN0SW5kZXhPZigiLiIpLAorICAgICAgICAgICAgICAgIGlzUmVsYXRpdmUgPSBuYW1l
LmluZGV4T2YoJy4vJykgPT09IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZS5pbmRleE9mKCcuLi8nKSA9PT0gMDsKKworICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSAm
JiAoIWlzUmVsYXRpdmUgfHwgaW5kZXggPiAxKSkgeworICAgICAgICAgICAgICAgIG1vZE5hbWUg
PSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CisgICAgICAgICAgICAgICAgZXh0ID0gbmFtZS5z
dWJzdHJpbmcoaW5kZXggKyAxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgbW9kTmFtZSA9IG5hbWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlbXAgPSBl
eHQgfHwgbW9kTmFtZTsKKyAgICAgICAgICAgIGluZGV4ID0gdGVtcC5pbmRleE9mKCIhIik7Cisg
ICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICAgICAgLy9QdWxsIG9m
ZiB0aGUgc3RyaXAgYXJnLgorICAgICAgICAgICAgICAgIHN0cmlwID0gdGVtcC5zdWJzdHJpbmco
aW5kZXggKyAxKSA9PT0gInN0cmlwIjsKKyAgICAgICAgICAgICAgICB0ZW1wID0gdGVtcC5zdWJz
dHJpbmcoMCwgaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChleHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZXh0ID0gdGVtcDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBtb2ROYW1lID0gdGVtcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgbW9kdWxlTmFtZTog
bW9kTmFtZSwKKyAgICAgICAgICAgICAgICBleHQ6IGV4dCwKKyAgICAgICAgICAgICAgICBzdHJp
cDogc3RyaXAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgeGRSZWdFeHA6
IC9eKChcdyspXDopP1wvXC8oW15cL1xcXSspLywKKworICAgICAgICAvKioKKyAgICAgICAgICog
SXMgYW4gVVJMIG9uIGFub3RoZXIgZG9tYWluLiBPbmx5IHdvcmtzIGZvciBicm93c2VyIHVzZSwg
cmV0dXJucworICAgICAgICAgKiBmYWxzZSBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudHMuIE9u
bHkgdXNlZCB0byBrbm93IGlmIGFuCisgICAgICAgICAqIG9wdGltaXplZCAuanMgdmVyc2lvbiBv
ZiBhIHRleHQgcmVzb3VyY2Ugc2hvdWxkIGJlIGxvYWRlZAorICAgICAgICAgKiBpbnN0ZWFkLgor
ICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsCisgICAgICAgICAqIEByZXR1cm5zIEJvb2xl
YW4KKyAgICAgICAgICovCisgICAgICAgIHVzZVhocjogZnVuY3Rpb24gKHVybCwgcHJvdG9jb2ws
IGhvc3RuYW1lLCBwb3J0KSB7CisgICAgICAgICAgICB2YXIgdVByb3RvY29sLCB1SG9zdE5hbWUs
IHVQb3J0LAorICAgICAgICAgICAgICAgIG1hdGNoID0gdGV4dC54ZFJlZ0V4cC5leGVjKHVybCk7
CisgICAgICAgICAgICBpZiAoIW1hdGNoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1UHJvdG9jb2wgPSBtYXRjaFsyXTsKKyAgICAg
ICAgICAgIHVIb3N0TmFtZSA9IG1hdGNoWzNdOworCisgICAgICAgICAgICB1SG9zdE5hbWUgPSB1
SG9zdE5hbWUuc3BsaXQoJzonKTsKKyAgICAgICAgICAgIHVQb3J0ID0gdUhvc3ROYW1lWzFdOwor
ICAgICAgICAgICAgdUhvc3ROYW1lID0gdUhvc3ROYW1lWzBdOworCisgICAgICAgICAgICByZXR1
cm4gKCF1UHJvdG9jb2wgfHwgdVByb3RvY29sID09PSBwcm90b2NvbCkgJiYKKyAgICAgICAgICAg
ICAgICAgICAoIXVIb3N0TmFtZSB8fCB1SG9zdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gaG9zdG5h
bWUudG9Mb3dlckNhc2UoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAoKCF1UG9ydCAmJiAhdUhv
c3ROYW1lKSB8fCBpc1NhbWVQb3J0KHVQcm90b2NvbCwgdVBvcnQsIHByb3RvY29sLCBwb3J0KSk7
CisgICAgICAgIH0sCisKKyAgICAgICAgZmluaXNoTG9hZDogZnVuY3Rpb24gKG5hbWUsIHN0cmlw
LCBjb250ZW50LCBvbkxvYWQpIHsKKyAgICAgICAgICAgIGNvbnRlbnQgPSBzdHJpcCA/IHRleHQu
c3RyaXAoY29udGVudCkgOiBjb250ZW50OworICAgICAgICAgICAgaWYgKG1hc3RlckNvbmZpZy5p
c0J1aWxkKSB7CisgICAgICAgICAgICAgICAgYnVpbGRNYXBbbmFtZV0gPSBjb250ZW50OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgb25Mb2FkKGNvbnRlbnQpOworICAgICAgICB9LAorCisg
ICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChuYW1lLCByZXEsIG9uTG9hZCwgY29uZmlnKSB7CisgICAg
ICAgICAgICAvL05hbWUgaGFzIGZvcm1hdDogc29tZS5tb2R1bGUuZmlsZXh0IXN0cmlwCisgICAg
ICAgICAgICAvL1RoZSBzdHJpcCBwYXJ0IGlzIG9wdGlvbmFsLgorICAgICAgICAgICAgLy9pZiBz
dHJpcCBpcyBwcmVzZW50LCB0aGVuIHRoYXQgbWVhbnMgb25seSBnZXQgdGhlIHN0cmluZyBjb250
ZW50cworICAgICAgICAgICAgLy9pbnNpZGUgYSBib2R5IHRhZyBpbiBhbiBIVE1MIHN0cmluZy4g
Rm9yIFhNTC9TVkcgY29udGVudCBpdCBtZWFucworICAgICAgICAgICAgLy9yZW1vdmluZyB0aGUg
PD94bWwgLi4uPz4gZGVjbGFyYXRpb25zIHNvIHRoZSBjb250ZW50IGNhbiBiZSBpbnNlcnRlZAor
ICAgICAgICAgICAgLy9pbnRvIHRoZSBjdXJyZW50IGRvYyB3aXRob3V0IHByb2JsZW1zLgorCisg
ICAgICAgICAgICAvLyBEbyBub3QgYm90aGVyIHdpdGggdGhlIHdvcmsgaWYgYSBidWlsZCBhbmQg
dGV4dCB3aWxsCisgICAgICAgICAgICAvLyBub3QgYmUgaW5saW5lZC4KKyAgICAgICAgICAgIGlm
IChjb25maWcgJiYgY29uZmlnLmlzQnVpbGQgJiYgIWNvbmZpZy5pbmxpbmVUZXh0KSB7CisgICAg
ICAgICAgICAgICAgb25Mb2FkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBtYXN0ZXJDb25maWcuaXNCdWlsZCA9IGNvbmZpZyAmJiBjb25m
aWcuaXNCdWlsZDsKKworICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHRleHQucGFyc2VOYW1lKG5h
bWUpLAorICAgICAgICAgICAgICAgIG5vblN0cmlwTmFtZSA9IHBhcnNlZC5tb2R1bGVOYW1lICsK
KyAgICAgICAgICAgICAgICAgICAgKHBhcnNlZC5leHQgPyAnLicgKyBwYXJzZWQuZXh0IDogJycp
LAorICAgICAgICAgICAgICAgIHVybCA9IHJlcS50b1VybChub25TdHJpcE5hbWUpLAorICAgICAg
ICAgICAgICAgIHVzZVhociA9IChtYXN0ZXJDb25maWcudXNlWGhyKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQudXNlWGhyOworCisgICAgICAgICAgICAvLyBEbyBub3QgbG9hZCBp
ZiBpdCBpcyBhbiBlbXB0eTogdXJsCisgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJ2VtcHR5
OicpID09PSAwKSB7CisgICAgICAgICAgICAgICAgb25Mb2FkKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL0xvYWQgdGhlIHRleHQuIFVz
ZSBYSFIgaWYgcG9zc2libGUgYW5kIGluIGEgYnJvd3Nlci4KKyAgICAgICAgICAgIGlmICghaGFz
TG9jYXRpb24gfHwgdXNlWGhyKHVybCwgZGVmYXVsdFByb3RvY29sLCBkZWZhdWx0SG9zdE5hbWUs
IGRlZmF1bHRQb3J0KSkgeworICAgICAgICAgICAgICAgIHRleHQuZ2V0KHVybCwgZnVuY3Rpb24g
KGNvbnRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dC5maW5pc2hMb2FkKG5hbWUsIHBh
cnNlZC5zdHJpcCwgY29udGVudCwgb25Mb2FkKTsKKyAgICAgICAgICAgICAgICB9LCBmdW5jdGlv
biAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvbkxvYWQuZXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG9uTG9hZC5lcnJvcihlcnIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vTmVlZCB0byBmZXRjaCB0aGUgcmVzb3VyY2UgYWNyb3NzIGRvbWFpbnMuIEFzc3Vt
ZQorICAgICAgICAgICAgICAgIC8vdGhlIHJlc291cmNlIGhhcyBiZWVuIG9wdGltaXplZCBpbnRv
IGEgSlMgbW9kdWxlLiBGZXRjaAorICAgICAgICAgICAgICAgIC8vYnkgdGhlIG1vZHVsZSBuYW1l
ICsgZXh0ZW5zaW9uLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlCisgICAgICAgICAgICAgICAgLy8h
c3RyaXAgcGFydCB0byBhdm9pZCBmaWxlIHN5c3RlbSBpc3N1ZXMuCisgICAgICAgICAgICAgICAg
cmVxKFtub25TdHJpcE5hbWVdLCBmdW5jdGlvbiAoY29udGVudCkgeworICAgICAgICAgICAgICAg
ICAgICB0ZXh0LmZpbmlzaExvYWQocGFyc2VkLm1vZHVsZU5hbWUgKyAnLicgKyBwYXJzZWQuZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnN0cmlwLCBjb250
ZW50LCBvbkxvYWQpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorCisgICAgICAgIHdyaXRlOiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgbW9kdWxlTmFtZSwg
d3JpdGUsIGNvbmZpZykgeworICAgICAgICAgICAgaWYgKGJ1aWxkTWFwLmhhc093blByb3BlcnR5
KG1vZHVsZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0ZXh0LmpzRXNj
YXBlKGJ1aWxkTWFwW21vZHVsZU5hbWVdKTsKKyAgICAgICAgICAgICAgICB3cml0ZS5hc01vZHVs
ZShwbHVnaW5OYW1lICsgIiEiICsgbW9kdWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZGVmaW5lKGZ1bmN0aW9uICgpIHsgcmV0dXJuICciICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGVudCArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIic7fSk7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICB3
cml0ZUZpbGU6IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBtb2R1bGVOYW1lLCByZXEsIHdyaXRlLCBj
b25maWcpIHsKKyAgICAgICAgICAgIHZhciBwYXJzZWQgPSB0ZXh0LnBhcnNlTmFtZShtb2R1bGVO
YW1lKSwKKyAgICAgICAgICAgICAgICBleHRQYXJ0ID0gcGFyc2VkLmV4dCA/ICcuJyArIHBhcnNl
ZC5leHQgOiAnJywKKyAgICAgICAgICAgICAgICBub25TdHJpcE5hbWUgPSBwYXJzZWQubW9kdWxl
TmFtZSArIGV4dFBhcnQsCisgICAgICAgICAgICAgICAgLy9Vc2UgYSAnLmpzJyBmaWxlIG5hbWUg
c28gdGhhdCBpdCBpbmRpY2F0ZXMgaXQgaXMgYQorICAgICAgICAgICAgICAgIC8vc2NyaXB0IHRo
YXQgY2FuIGJlIGxvYWRlZCBhY3Jvc3MgZG9tYWlucy4KKyAgICAgICAgICAgICAgICBmaWxlTmFt
ZSA9IHJlcS50b1VybChwYXJzZWQubW9kdWxlTmFtZSArIGV4dFBhcnQpICsgJy5qcyc7CisKKyAg
ICAgICAgICAgIC8vTGV2ZXJhZ2Ugb3duIGxvYWQoKSBtZXRob2QgdG8gbG9hZCBwbHVnaW4gdmFs
dWUsIGJ1dCBvbmx5CisgICAgICAgICAgICAvL3dyaXRlIG91dCB2YWx1ZXMgdGhhdCBkbyBub3Qg
aGF2ZSB0aGUgc3RyaXAgYXJndW1lbnQsCisgICAgICAgICAgICAvL3RvIGF2b2lkIGFueSBwb3Rl
bnRpYWwgaXNzdWVzIHdpdGggISBpbiBmaWxlIG5hbWVzLgorICAgICAgICAgICAgdGV4dC5sb2Fk
KG5vblN0cmlwTmFtZSwgcmVxLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAv
L1VzZSBvd24gd3JpdGUoKSBtZXRob2QgdG8gY29uc3RydWN0IGZ1bGwgbW9kdWxlIHZhbHVlLgor
ICAgICAgICAgICAgICAgIC8vQnV0IG5lZWQgdG8gY3JlYXRlIHNoZWxsIHRoYXQgdHJhbnNsYXRl
cyB3cml0ZUZpbGUncworICAgICAgICAgICAgICAgIC8vd3JpdGUoKSB0byB0aGUgcmlnaHQgaW50
ZXJmYWNlLgorICAgICAgICAgICAgICAgIHZhciB0ZXh0V3JpdGUgPSBmdW5jdGlvbiAoY29udGVu
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlKGZpbGVOYW1lLCBjb250ZW50
cyk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB0ZXh0V3JpdGUuYXNNb2R1
bGUgPSBmdW5jdGlvbiAobW9kdWxlTmFtZSwgY29udGVudHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHdyaXRlLmFzTW9kdWxlKG1vZHVsZU5hbWUsIGZpbGVOYW1lLCBjb250ZW50cyk7
CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHRleHQud3JpdGUocGx1Z2lu
TmFtZSwgbm9uU3RyaXBOYW1lLCB0ZXh0V3JpdGUsIGNvbmZpZyk7CisgICAgICAgICAgICB9LCBj
b25maWcpOworICAgICAgICB9CisgICAgfTsKKworICAgIGlmIChtYXN0ZXJDb25maWcuZW52ID09
PSAnbm9kZScgfHwgKCFtYXN0ZXJDb25maWcuZW52ICYmCisgICAgICAgICAgICB0eXBlb2YgcHJv
Y2VzcyAhPT0gInVuZGVmaW5lZCIgJiYKKyAgICAgICAgICAgIHByb2Nlc3MudmVyc2lvbnMgJiYK
KyAgICAgICAgICAgICEhcHJvY2Vzcy52ZXJzaW9ucy5ub2RlICYmCisgICAgICAgICAgICAhcHJv
Y2Vzcy52ZXJzaW9uc1snbm9kZS13ZWJraXQnXSAmJgorICAgICAgICAgICAgIXByb2Nlc3MudmVy
c2lvbnNbJ2F0b20tc2hlbGwnXSkpIHsKKyAgICAgICAgLy9Vc2luZyBzcGVjaWFsIHJlcXVpcmUu
bm9kZVJlcXVpcmUsIHNvbWV0aGluZyBhZGRlZCBieSByLmpzLgorICAgICAgICBmcyA9IHJlcXVp
cmUubm9kZVJlcXVpcmUoJ2ZzJyk7CisKKyAgICAgICAgdGV4dC5nZXQgPSBmdW5jdGlvbiAodXJs
LCBjYWxsYmFjaywgZXJyYmFjaykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICB2YXIgZmlsZSA9IGZzLnJlYWRGaWxlU3luYyh1cmwsICd1dGY4Jyk7CisgICAgICAgICAgICAg
ICAgLy9SZW1vdmUgQk9NIChCeXRlIE1hcmsgT3JkZXIpIGZyb20gdXRmOCBmaWxlcyBpZiBpdCBp
cyB0aGVyZS4KKyAgICAgICAgICAgICAgICBpZiAoZmlsZVswXSA9PT0gJ1x1RkVGRicpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjYWxsYmFjayhmaWxlKTsKKyAgICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXJyYmFjaykgeworICAgICAgICAgICAgICAg
ICAgICBlcnJiYWNrKGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKyAgICB9IGVsc2UgaWYgKG1hc3RlckNvbmZpZy5lbnYgPT09ICd4aHInIHx8ICghbWFz
dGVyQ29uZmlnLmVudiAmJgorICAgICAgICAgICAgdGV4dC5jcmVhdGVYaHIoKSkpIHsKKyAgICAg
ICAgdGV4dC5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaywgZXJyYmFjaywgaGVhZGVycykg
eworICAgICAgICAgICAgdmFyIHhociA9IHRleHQuY3JlYXRlWGhyKCksIGhlYWRlcjsKKyAgICAg
ICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOworCisgICAgICAgICAgICAvL0FsbG93
IHBsdWdpbnMgZGlyZWN0IGFjY2VzcyB0byB4aHIgaGVhZGVycworICAgICAgICAgICAgaWYgKGhl
YWRlcnMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGhlYWRlciBpbiBoZWFkZXJzKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChoZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlci50b0xvd2Vy
Q2FzZSgpLCBoZWFkZXJzW2hlYWRlcl0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL0FsbG93IG92ZXJyaWRl
cyBzcGVjaWZpZWQgaW4gY29uZmlnCisgICAgICAgICAgICBpZiAobWFzdGVyQ29uZmlnLm9uWGhy
KSB7CisgICAgICAgICAgICAgICAgbWFzdGVyQ29uZmlnLm9uWGhyKHhociwgdXJsKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9u
IChldnQpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3RhdHVzLCBlcnI7CisgICAgICAgICAgICAg
ICAgLy9EbyBub3QgZXhwbGljaXRseSBoYW5kbGUgZXJyb3JzLCB0aG9zZSBzaG91bGQgYmUKKyAg
ICAgICAgICAgICAgICAvL3Zpc2libGUgdmlhIGNvbnNvbGUgb3V0cHV0IGluIHRoZSBicm93c2Vy
LgorICAgICAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkgeworICAgICAgICAg
ICAgICAgICAgICBzdGF0dXMgPSB4aHIuc3RhdHVzIHx8IDA7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0dXMgPiAzOTkgJiYgc3RhdHVzIDwgNjAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvL0FuIGh0dHAgNHh4IG9yIDV4eCBlcnJvci4gU2lnbmFsIGFuIGVycm9yLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyID0gbmV3IEVycm9yKHVybCArICcgSFRUUCBzdGF0dXM6ICcg
KyBzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnhociA9IHhocjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyYmFjayhlcnIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhy
LnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAobWFzdGVyQ29uZmlnLm9uWGhyQ29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hc3RlckNvbmZpZy5vblhockNvbXBsZXRlKHhociwgdXJsKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICB4aHIuc2VuZChudWxsKTsKKyAgICAgICAgfTsKKyAgICB9IGVsc2UgaWYgKG1hc3RlckNvbmZp
Zy5lbnYgPT09ICdyaGlubycgfHwgKCFtYXN0ZXJDb25maWcuZW52ICYmCisgICAgICAgICAgICB0
eXBlb2YgUGFja2FnZXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBqYXZhICE9PSAndW5kZWZp
bmVkJykpIHsKKyAgICAgICAgLy9XaHkgSmF2YSwgd2h5IGlzIHRoaXMgc28gYXdrd2FyZD8KKyAg
ICAgICAgdGV4dC5nZXQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaykgeworICAgICAgICAgICAg
dmFyIHN0cmluZ0J1ZmZlciwgbGluZSwKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9ICJ1dGYt
OCIsCisgICAgICAgICAgICAgICAgZmlsZSA9IG5ldyBqYXZhLmlvLkZpbGUodXJsKSwKKyAgICAg
ICAgICAgICAgICBsaW5lU2VwYXJhdG9yID0gamF2YS5sYW5nLlN5c3RlbS5nZXRQcm9wZXJ0eSgi
bGluZS5zZXBhcmF0b3IiKSwKKyAgICAgICAgICAgICAgICBpbnB1dCA9IG5ldyBqYXZhLmlvLkJ1
ZmZlcmVkUmVhZGVyKG5ldyBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyKG5ldyBqYXZhLmlvLkZp
bGVJbnB1dFN0cmVhbShmaWxlKSwgZW5jb2RpbmcpKSwKKyAgICAgICAgICAgICAgICBjb250ZW50
ID0gJyc7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHN0cmluZ0J1ZmZlciA9
IG5ldyBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgbGluZSA9IGlu
cHV0LnJlYWRMaW5lKCk7CisKKyAgICAgICAgICAgICAgICAvLyBCeXRlIE9yZGVyIE1hcmsgKEJP
TSkgLSBUaGUgVW5pY29kZSBTdGFuZGFyZCwgdmVyc2lvbiAzLjAsIHBhZ2UgMzI0CisgICAgICAg
ICAgICAgICAgLy8gaHR0cDovL3d3dy51bmljb2RlLm9yZy9mYXEvdXRmX2JvbS5odG1sCisKKyAg
ICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2hlbiB3ZSB1c2UgdXRmLTgsIHRoZSBCT00gc2hv
dWxkIGFwcGVhciBhcyAiRUYgQkIgQkYiLCBidXQgaXQgZG9lc24ndCBkdWUgdG8gdGhpcyBidWcg
aW4gdGhlIEpESzoKKyAgICAgICAgICAgICAgICAvLyBodHRwOi8vYnVncy5zdW4uY29tL2J1Z2Rh
dGFiYXNlL3ZpZXdfYnVnLmRvP2J1Z19pZD00NTA4MDU4CisgICAgICAgICAgICAgICAgaWYgKGxp
bmUgJiYgbGluZS5sZW5ndGgoKSAmJiBsaW5lLmNoYXJBdCgwKSA9PT0gMHhmZWZmKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEVhdCB0aGUgQk9NLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGZvdW5k
IHRoZSBlbmNvZGluZyBvbiB0aGlzIGZpbGUsCisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3
ZSBwbGFuIHRvIGNvbmNhdGVuYXRpbmcgdGhpcyBidWZmZXIgd2l0aCBvdGhlcnM7IHRoZSBCT00g
c2hvdWxkCisgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgYXBwZWFyIGF0IHRoZSB0b3Agb2Yg
YSBmaWxlLgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxpbmUgIT09IG51bGwpIHsK
KyAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVmZmVyLmFwcGVuZChsaW5lKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBpbnB1dC5yZWFkTGlu
ZSgpKSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWZmZXIuYXBwZW5k
KGxpbmVTZXBhcmF0b3IpOworICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWZmZXIuYXBwZW5k
KGxpbmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvL01ha2Ugc3VyZSB3
ZSByZXR1cm4gYSBKYXZhU2NyaXB0IHN0cmluZyBhbmQgbm90IGEgSmF2YSBzdHJpbmcuCisgICAg
ICAgICAgICAgICAgY29udGVudCA9IFN0cmluZyhzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7IC8v
U3RyaW5nCisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGlucHV0LmNs
b3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxsYmFjayhjb250ZW50KTsKKyAg
ICAgICAgfTsKKyAgICB9IGVsc2UgaWYgKG1hc3RlckNvbmZpZy5lbnYgPT09ICd4cGNvbm5lY3Qn
IHx8ICghbWFzdGVyQ29uZmlnLmVudiAmJgorICAgICAgICAgICAgdHlwZW9mIENvbXBvbmVudHMg
IT09ICd1bmRlZmluZWQnICYmIENvbXBvbmVudHMuY2xhc3NlcyAmJgorICAgICAgICAgICAgQ29t
cG9uZW50cy5pbnRlcmZhY2VzKSkgeworICAgICAgICAvL0F2ZXJ0IHlvdXIgZ2F6ZSEKKyAgICAg
ICAgQ2MgPSBDb21wb25lbnRzLmNsYXNzZXM7CisgICAgICAgIENpID0gQ29tcG9uZW50cy5pbnRl
cmZhY2VzOworICAgICAgICBDb21wb25lbnRzLnV0aWxzWydpbXBvcnQnXSgncmVzb3VyY2U6Ly9n
cmUvbW9kdWxlcy9GaWxlVXRpbHMuanNtJyk7CisgICAgICAgIHhwY0lzV2luZG93cyA9ICgnQG1v
emlsbGEub3JnL3dpbmRvd3MtcmVnaXN0cnkta2V5OzEnIGluIENjKTsKKworICAgICAgICB0ZXh0
LmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7CisgICAgICAgICAgICB2YXIgaW5TdHJl
YW0sIGNvbnZlcnRTdHJlYW0sIGZpbGVPYmosCisgICAgICAgICAgICAgICAgcmVhZERhdGEgPSB7
fTsKKworICAgICAgICAgICAgaWYgKHhwY0lzV2luZG93cykgeworICAgICAgICAgICAgICAgIHVy
bCA9IHVybC5yZXBsYWNlKC9cLy9nLCAnXFwnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZmlsZU9iaiA9IG5ldyBGaWxlVXRpbHMuRmlsZSh1cmwpOworCisgICAgICAgICAgICAvL1hQ
Q09NLCB5b3Ugc28gY3JhenkKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaW5T
dHJlYW0gPSBDY1snQG1vemlsbGEub3JnL25ldHdvcmsvZmlsZS1pbnB1dC1zdHJlYW07MSddCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlSW5zdGFuY2UoQ2kubnNJRmlsZUlucHV0
U3RyZWFtKTsKKyAgICAgICAgICAgICAgICBpblN0cmVhbS5pbml0KGZpbGVPYmosIDEsIDAsIGZh
bHNlKTsKKworICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0gPSBDY1snQG1vemlsbGEub3Jn
L2ludGwvY29udmVydGVyLWlucHV0LXN0cmVhbTsxJ10KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmNyZWF0ZUluc3RhbmNlKENpLm5zSUNvbnZlcnRlcklucHV0U3RyZWFtKTsKKyAg
ICAgICAgICAgICAgICBjb252ZXJ0U3RyZWFtLmluaXQoaW5TdHJlYW0sICJ1dGYtOCIsIGluU3Ry
ZWFtLmF2YWlsYWJsZSgpLAorICAgICAgICAgICAgICAgIENpLm5zSUNvbnZlcnRlcklucHV0U3Ry
ZWFtLkRFRkFVTFRfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTsKKworICAgICAgICAgICAgICAgIGNv
bnZlcnRTdHJlYW0ucmVhZFN0cmluZyhpblN0cmVhbS5hdmFpbGFibGUoKSwgcmVhZERhdGEpOwor
ICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBp
blN0cmVhbS5jbG9zZSgpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlYWREYXRhLnZhbHVl
KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoKGZpbGVPYmogJiYgZmlsZU9iai5wYXRoIHx8ICcnKSArICc6ICcgKyBlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgcmV0dXJuIHRleHQ7Cit9KTsKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVw
ZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMvUkVB
RE1FLm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy9S
RUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQ1YjMxZDdlNjU1ZjgyNzQ0MzAzMTNlNjIxZjNiZWU5NGY1
Y2JlYwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9k
dWxlcy9yZXF1aXJlanMvUkVBRE1FLm1kCkBAIC0wLDAgKzEsOSBAQAorIyByZXF1aXJlanMKKwor
UmVxdWlyZUpTIGZvciB1c2UgaW4gTm9kZS4gaW5jbHVkZXM6CisKKyogci5qczogdGhlIFJlcXVp
cmVKUyBvcHRpbWl6ZXIsIGFuZCBBTUQgcnVudGltZSBmb3IgdXNlIGluIE5vZGUuCisqIHJlcXVp
cmUuanM6IFRoZSBicm93c2VyLWJhc2VkIEFNRCBsb2FkZXIuCisKK01vcmUgaW5mb3JtYXRpb24g
YXQgaHR0cDovL3JlcXVpcmVqcy5vcmcKKwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvcmVxdWlyZWpzL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xZmNmYjQ0NjIzYjdlYTA5N2FmZTM2N2I3N2JiYTRiNGE2YWIyZmYwCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBl
bmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3JlcXVpcmVqcy9wYWNr
YWdlLmpzb24KQEAgLTAsMCArMSw4OSBAQAoreworICAiX2FyZ3MiOiBbCisgICAgWworICAgICAg
eworICAgICAgICAicmF3IjogInJlcXVpcmVqc0BeMi4xLjE1IiwKKyAgICAgICAgInNjb3BlIjog
bnVsbCwKKyAgICAgICAgImVzY2FwZWROYW1lIjogInJlcXVpcmVqcyIsCisgICAgICAgICJuYW1l
IjogInJlcXVpcmVqcyIsCisgICAgICAgICJyYXdTcGVjIjogIl4yLjEuMTUiLAorICAgICAgICAi
c3BlYyI6ICI+PTIuMS4xNSA8My4wLjAiLAorICAgICAgICAidHlwZSI6ICJyYW5nZSIKKyAgICAg
IH0sCisgICAgICAiL1VzZXJzL2FkZHlvL0Rlc2t0b3AvU3BlZWRvbWV0ZXItYS9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodCIKKyAgICBdCisgIF0sCisgICJfZnJv
bSI6ICJyZXF1aXJlanNAPj0yLjEuMTUgPDMuMC4wIiwKKyAgIl9pZCI6ICJyZXF1aXJlanNAMi4z
LjMiLAorICAiX2luQ2FjaGUiOiB0cnVlLAorICAiX2xvY2F0aW9uIjogIi9yZXF1aXJlanMiLAor
ICAiX25vZGVWZXJzaW9uIjogIjYuNy4wIiwKKyAgIl9ucG1PcGVyYXRpb25hbEludGVybmFsIjog
eworICAgICJob3N0IjogInBhY2thZ2VzLTEyLXdlc3QuaW50ZXJuYWwubnBtanMuY29tIiwKKyAg
ICAidG1wIjogInRtcC9yZXF1aXJlanMtMi4zLjMudGd6XzE0ODc1MjQwODMyNzVfMC4zMjM3Mjg0
MzAzMTc3MTQ4IgorICB9LAorICAiX25wbVVzZXIiOiB7CisgICAgIm5hbWUiOiAianJidXJrZSIs
CisgICAgImVtYWlsIjogImpyYnVya2VAZ21haWwuY29tIgorICB9LAorICAiX25wbVZlcnNpb24i
OiAiMy4xMC4zIiwKKyAgIl9waGFudG9tQ2hpbGRyZW4iOiB7fSwKKyAgIl9yZXF1ZXN0ZWQiOiB7
CisgICAgInJhdyI6ICJyZXF1aXJlanNAXjIuMS4xNSIsCisgICAgInNjb3BlIjogbnVsbCwKKyAg
ICAiZXNjYXBlZE5hbWUiOiAicmVxdWlyZWpzIiwKKyAgICAibmFtZSI6ICJyZXF1aXJlanMiLAor
ICAgICJyYXdTcGVjIjogIl4yLjEuMTUiLAorICAgICJzcGVjIjogIj49Mi4xLjE1IDwzLjAuMCIs
CisgICAgInR5cGUiOiAicmFuZ2UiCisgIH0sCisgICJfcmVxdWlyZWRCeSI6IFsKKyAgICAiLyIK
KyAgXSwKKyAgIl9yZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJl
anMvLS9yZXF1aXJlanMtMi4zLjMudGd6IiwKKyAgIl9zaGFzdW0iOiAiYWE1OWZkM2EwMjg3ZWFm
NDA3OTU5YTEzODIyODA0NGI1ZGQ2YTZhMyIsCisgICJfc2hyaW5rd3JhcCI6IG51bGwsCisgICJf
c3BlYyI6ICJyZXF1aXJlanNAXjIuMS4xNSIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL0Rl
c2t0b3AvU3BlZWRvbWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVz
L2ZsaWdodCIsCisgICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiSmFtZXMgQnVya2UiLAorICAg
ICJlbWFpbCI6ICJqcmJ1cmtlQGdtYWlsLmNvbSIsCisgICAgInVybCI6ICJodHRwOi8vZ2l0aHVi
LmNvbS9qcmJ1cmtlIgorICB9LAorICAiYmluIjogeworICAgICJyLmpzIjogIi4vYmluL3IuanMi
LAorICAgICJyX2pzIjogIi4vYmluL3IuanMiCisgIH0sCisgICJidWdzIjogeworICAgICJ1cmwi
OiAiaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2Uvci5qcy9pc3N1ZXMiCisgIH0sCisgICJkZXBl
bmRlbmNpZXMiOiB7fSwKKyAgImRlc2NyaXB0aW9uIjogIk5vZGUgYWRhcHRlciBmb3IgUmVxdWly
ZUpTLCBmb3IgbG9hZGluZyBBTUQgbW9kdWxlcy4gSW5jbHVkZXMgUmVxdWlyZUpTIG9wdGltaXpl
ciIsCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7fSwKKyAgImRpcmVjdG9yaWVzIjoge30sCisgICJk
aXN0IjogeworICAgICJzaGFzdW0iOiAiYWE1OWZkM2EwMjg3ZWFmNDA3OTU5YTEzODIyODA0NGI1
ZGQ2YTZhMyIsCisgICAgInRhcmJhbGwiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVx
dWlyZWpzLy0vcmVxdWlyZWpzLTIuMy4zLnRneiIKKyAgfSwKKyAgImVuZ2luZXMiOiB7CisgICAg
Im5vZGUiOiAiPj0wLjQuMCIKKyAgfSwKKyAgImhvbWVwYWdlIjogImh0dHA6Ly9naXRodWIuY29t
L2pyYnVya2Uvci5qcyIsCisgICJsaWNlbnNlIjogIk1JVCIsCisgICJtYWluIjogIi4vYmluL3Iu
anMiLAorICAibWFpbnRhaW5lcnMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAianJidXJrZSIs
CisgICAgICAiZW1haWwiOiAianJidXJrZUBnbWFpbC5jb20iCisgICAgfQorICBdLAorICAibmFt
ZSI6ICJyZXF1aXJlanMiLAorICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7fSwKKyAgInJlYWRt
ZSI6ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIiwKKyAgInJlcG9zaXRvcnkiOiB7Cisg
ICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImdpdCtodHRwczovL2dpdGh1Yi5jb20vanJi
dXJrZS9yLmpzLmdpdCIKKyAgfSwKKyAgInNjcmlwdHMiOiB7fSwKKyAgInZlcnNpb24iOiAiMi4z
LjMiCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMv
cmVxdWlyZWpzL3JlcXVpcmUuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVs
ZXMvcmVxdWlyZWpzL3JlcXVpcmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZjMTA4MmQ1OWY3YmFjMjM5ZWY4
MDhmNWU1NmM3ZTY2Y2FkOGI2OQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQv
ZmxpZ2h0L25vZGVfbW9kdWxlcy9yZXF1aXJlanMvcmVxdWlyZS5qcwpAQCAtMCwwICsxLDIxNDUg
QEAKKy8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAorICogQGxpY2Vuc2UgUmVxdWlyZUpTIDIu
My4zIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgor
ICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJl
anMvcmVxdWlyZWpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKKyAqLworLy9Ob3QgdXNpbmcgc3RyaWN0
OiB1bmV2ZW4gc3RyaWN0IHN1cHBvcnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVzZXMKKy8v
cHJvYmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1h
eSBub3QgYmUgc3RyaWN0LgorLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xv
cHB5OiB0cnVlICovCisvKmdsb2JhbCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQsIGltcG9y
dFNjcmlwdHMsIHNldFRpbWVvdXQsIG9wZXJhICovCisKK3ZhciByZXF1aXJlanMsIHJlcXVpcmUs
IGRlZmluZTsKKyhmdW5jdGlvbiAoZ2xvYmFsLCBzZXRUaW1lb3V0KSB7CisgICAgdmFyIHJlcSwg
cywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCisgICAgICAgIGludGVyYWN0aXZl
U2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCisgICAg
ICAgIHZlcnNpb24gPSAnMi4zLjMnLAorICAgICAgICBjb21tZW50UmVnRXhwID0gL1wvXCpbXHNc
U10qP1wqXC98KFteOiInPV18XilcL1wvLiokL21nLAorICAgICAgICBjanNSZXF1aXJlUmVnRXhw
ID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAorICAg
ICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9cLmpzJC8sCisgICAgICAgIGN1cnJEaXJSZWdFeHAgPSAv
XlwuXC8vLAorICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCisgICAgICAgIG9zdHJpbmcg
PSBvcC50b1N0cmluZywKKyAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCisgICAg
ICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVv
ZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCisgICAgICAg
IGlzV2ViV29ya2VyID0gIWlzQnJvd3NlciAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3Vu
ZGVmaW5lZCcsCisgICAgICAgIC8vUFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBi
dXQgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0ZQorICAgICAgICAvL3NwZWNpZmljYWxseS4gU2Vx
dWVuY2UgaXMgJ2xvYWRpbmcnLCAnbG9hZGVkJywgZXhlY3V0aW9uLAorICAgICAgICAvLyB0aGVu
ICdjb21wbGV0ZScuIFRoZSBVQSBjaGVjayBpcyB1bmZvcnR1bmF0ZSwgYnV0IG5vdCBzdXJlIGhv
dworICAgICAgICAvL3RvIGZlYXR1cmUgdGVzdCB3L28gY2F1c2luZyBwZXJmIGlzc3Vlcy4KKyAg
ICAgICAgcmVhZHlSZWdFeHAgPSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAn
UExBWVNUQVRJT04gMycgPworICAgICAgICAgICAgICAgICAgICAgIC9eY29tcGxldGUkLyA6IC9e
KGNvbXBsZXRlfGxvYWRlZCkkLywKKyAgICAgICAgZGVmQ29udGV4dE5hbWUgPSAnXycsCisgICAg
ICAgIC8vT2ggdGhlIHRyYWdlZHksIGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBp
c09wZXJhIGZvciByZWFzb24uCisgICAgICAgIGlzT3BlcmEgPSB0eXBlb2Ygb3BlcmEgIT09ICd1
bmRlZmluZWQnICYmIG9wZXJhLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE9wZXJhXScsCisgICAg
ICAgIGNvbnRleHRzID0ge30sCisgICAgICAgIGNmZyA9IHt9LAorICAgICAgICBnbG9iYWxEZWZR
dWV1ZSA9IFtdLAorICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOworCisgICAgLy9Db3Vs
ZCBtYXRjaCBzb21ldGhpbmcgbGlrZSAnKS8vY29tbWVudCcsIGRvIG5vdCBsb3NlIHRoZSBwcmVm
aXggdG8gY29tbWVudC4KKyAgICBmdW5jdGlvbiBjb21tZW50UmVwbGFjZShtYXRjaCwgc2luZ2xl
UHJlZml4KSB7CisgICAgICAgIHJldHVybiBzaW5nbGVQcmVmaXggfHwgJyc7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgeworICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxs
KGl0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0Fy
cmF5KGl0KSB7CisgICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBB
cnJheV0nOworICAgIH0KKworICAgIC8qKgorICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRl
cmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRoZSBmdW5jIHJldHVybnMKKyAgICAgKiBhIHRydWUg
dmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgorICAgICAqLworICAgIGZ1bmN0
aW9uIGVhY2goYXJ5LCBmdW5jKSB7CisgICAgICAgIGlmIChhcnkpIHsKKyAgICAgICAgICAgIHZh
ciBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgewor
ICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIGZv
ciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCisgICAgICog
cmV0dXJucyBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGVhY2hSZXZlcnNlKGFyeSwgZnVuYykgeworICAgICAgICBpZiAo
YXJ5KSB7CisgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5n
dGggLSAxOyBpID4gLTE7IGkgLT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYg
ZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHsKKyAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9i
aiwgcHJvcCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgeworICAg
ICAgICByZXR1cm4gaGFzUHJvcChvYmosIHByb3ApICYmIG9ialtwcm9wXTsKKyAgICB9CisKKyAg
ICAvKioKKyAgICAgKiBDeWNsZXMgb3ZlciBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCBhbmQgY2Fs
bHMgYSBmdW5jdGlvbiBmb3IgZWFjaAorICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVu
Y3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgdGhlbiB0aGUKKyAgICAgKiBpdGVyYXRpb24g
aXMgc3RvcHBlZC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsK
KyAgICAgICAgdmFyIHByb3A7CisgICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKKyAgICAgICAg
ICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnVuYyhv
YmpbcHJvcF0sIHByb3ApKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAg
ICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRv
IHRhcmdldCwKKyAgICAgKiBidXQgb25seSBpZiB0YXJnZXQgZG9lcyBub3QgYWxyZWFkeSBoYXZl
IGEgcHJvcGVydHkgb2YgdGhlIHNhbWUgbmFtZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBtaXhp
bih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbikgeworICAgICAgICBpZiAo
c291cmNlKSB7CisgICAgICAgICAgICBlYWNoUHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwg
cHJvcCkgeworICAgICAgICAgICAgICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHBy
b3ApKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWVwU3RyaW5nTWl4aW4gJiYgdHlwZW9m
IHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
IWlzQXJyYXkodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCF0YXJnZXRbcHJvcF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRbcHJvcF0gPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1peGluKHRhcmdldFtwcm9wXSwgdmFsdWUsIGZvcmNlLCBkZWVwU3Ry
aW5nTWl4aW4pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdGFyZ2V0OworICAgIH0KKworICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUu
YmluZCwgYnV0IHRoZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAorICAgIC8vZmlyc3QsIHNp
bmNlIGl0IGlzIGVhc2llciB0byByZWFkL2ZpZ3VyZSBvdXQgd2hhdCAndGhpcycgd2lsbCBiZS4K
KyAgICBmdW5jdGlvbiBiaW5kKG9iaiwgZm4pIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShvYmosIGFyZ3VtZW50cyk7CisgICAgICAg
IH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NyaXB0cygpIHsKKyAgICAgICAgcmV0dXJuIGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBkZWZhdWx0T25FcnJvcihlcnIpIHsKKyAgICAgICAgdGhyb3cgZXJyOworICAgIH0KKwor
ICAgIC8vQWxsb3cgZ2V0dGluZyBhIGdsb2JhbCB0aGF0IGlzIGV4cHJlc3NlZCBpbgorICAgIC8v
ZG90IG5vdGF0aW9uLCBsaWtlICdhLmIuYycuCisgICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVl
KSB7CisgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICAgICAgfQorICAgICAgICB2YXIgZyA9IGdsb2JhbDsKKyAgICAgICAgZWFjaCh2YWx1ZS5zcGxp
dCgnLicpLCBmdW5jdGlvbiAocGFydCkgeworICAgICAgICAgICAgZyA9IGdbcGFydF07CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm4gZzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25z
dHJ1Y3RzIGFuIGVycm9yIHdpdGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3Jt
YXRpb24uCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBlcnJvciBJRCB0aGF0IG1hcHMg
dG8gYW4gSUQgb24gYSB3ZWIgcGFnZS4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBo
dW1hbiByZWFkYWJsZSBlcnJvci4KKyAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3Jp
Z2luYWwgZXJyb3IsIGlmIHRoZXJlIGlzIG9uZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIHtF
cnJvcn0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBtYWtlRXJyb3IoaWQsIG1zZywgZXJyLCByZXF1
aXJlTW9kdWxlcykgeworICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwOi8v
cmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sIycgKyBpZCk7CisgICAgICAgIGUucmVxdWly
ZVR5cGUgPSBpZDsKKyAgICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwor
ICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGU7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBkZWZp
bmUgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBp
biBwbGF5IHZpYSBhbm90aGVyIEFNRCBsb2FkZXIsCisgICAgICAgIC8vZG8gbm90IG92ZXJ3cml0
ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBlb2YgcmVxdWlyZWpzICE9
PSAndW5kZWZpbmVkJykgeworICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7Cisg
ICAgICAgICAgICAvL0RvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgcmVxdWlyZWpzIGluc3Rh
bmNlLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNmZyA9IHJlcXVp
cmVqczsKKyAgICAgICAgcmVxdWlyZWpzID0gdW5kZWZpbmVkOworICAgIH0KKworICAgIC8vQWxs
b3cgZm9yIGEgcmVxdWlyZSBjb25maWcgb2JqZWN0CisgICAgaWYgKHR5cGVvZiByZXF1aXJlICE9
PSAndW5kZWZpbmVkJyAmJiAhaXNGdW5jdGlvbihyZXF1aXJlKSkgeworICAgICAgICAvL2Fzc3Vt
ZSBpdCBpcyBhIGNvbmZpZyBvYmplY3QuCisgICAgICAgIGNmZyA9IHJlcXVpcmU7CisgICAgICAg
IHJlcXVpcmUgPSB1bmRlZmluZWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gbmV3Q29udGV4dChj
b250ZXh0TmFtZSkgeworICAgICAgICB2YXIgaW5DaGVja0xvYWRlZCwgTW9kdWxlLCBjb250ZXh0
LCBoYW5kbGVycywKKyAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkLAorICAgICAgICAg
ICAgY29uZmlnID0geworICAgICAgICAgICAgICAgIC8vRGVmYXVsdHMuIERvIG5vdCBzZXQgYSBk
ZWZhdWx0IGZvciBtYXAKKyAgICAgICAgICAgICAgICAvL2NvbmZpZyB0byBzcGVlZCB1cCBub3Jt
YWxpemUoKSwgd2hpY2gKKyAgICAgICAgICAgICAgICAvL3dpbGwgcnVuIGZhc3RlciBpZiB0aGVy
ZSBpcyBubyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIHdhaXRTZWNvbmRzOiA3LAorICAgICAg
ICAgICAgICAgIGJhc2VVcmw6ICcuLycsCisgICAgICAgICAgICAgICAgcGF0aHM6IHt9LAorICAg
ICAgICAgICAgICAgIGJ1bmRsZXM6IHt9LAorICAgICAgICAgICAgICAgIHBrZ3M6IHt9LAorICAg
ICAgICAgICAgICAgIHNoaW06IHt9LAorICAgICAgICAgICAgICAgIGNvbmZpZzoge30KKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICByZWdpc3RyeSA9IHt9LAorICAgICAgICAgICAgLy9yZWdp
c3RyeSBvZiBqdXN0IGVuYWJsZWQgbW9kdWxlcywgdG8gc3BlZWQKKyAgICAgICAgICAgIC8vY3lj
bGUgYnJlYWtpbmcgY29kZSB3aGVuIGxvdHMgb2YgbW9kdWxlcworICAgICAgICAgICAgLy9hcmUg
cmVnaXN0ZXJlZCwgYnV0IG5vdCBhY3RpdmF0ZWQuCisgICAgICAgICAgICBlbmFibGVkUmVnaXN0
cnkgPSB7fSwKKyAgICAgICAgICAgIHVuZGVmRXZlbnRzID0ge30sCisgICAgICAgICAgICBkZWZR
dWV1ZSA9IFtdLAorICAgICAgICAgICAgZGVmaW5lZCA9IHt9LAorICAgICAgICAgICAgdXJsRmV0
Y2hlZCA9IHt9LAorICAgICAgICAgICAgYnVuZGxlc01hcCA9IHt9LAorICAgICAgICAgICAgcmVx
dWlyZUNvdW50ZXIgPSAxLAorICAgICAgICAgICAgdW5ub3JtYWxpemVkQ291bnRlciA9IDE7CisK
KyAgICAgICAgLyoqCisgICAgICAgICAqIFRyaW1zIHRoZSAuIGFuZCAuLiBmcm9tIGFuIGFycmF5
IG9mIHBhdGggc2VnbWVudHMuCisgICAgICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0
aCBzZWdtZW50IGlmIGEgLi4gd2lsbCBiZWNvbWUKKyAgICAgICAgICogdGhlIGZpcnN0IHBhdGgg
c2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsCisgICAgICAgICAqIHdo
aWNoIGFjdCBsaWtlIHBhdGhzLCBidXQgY2FuIGJlIHJlbWFwcGVkLiBCdXQgdGhlIGVuZCByZXN1
bHQsCisgICAgICAgICAqIGFsbCBwYXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBs
b29rIG5vcm1hbGl6ZWQuCisgICAgICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRo
ZSBpbnB1dCBhcnJheS4KKyAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJ5IHRoZSBhcnJheSBv
ZiBwYXRoIHNlZ21lbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMo
YXJ5KSB7CisgICAgICAgICAgICB2YXIgaSwgcGFydDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBhcnkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOwor
ICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAg
YXJ5LnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgaSAtPSAxOworICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgeworICAgICAgICAgICAgICAgICAgICAv
LyBJZiBhdCB0aGUgc3RhcnQsIG9yIHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLAorICAgICAg
ICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBh
dGggaXQgbWF5CisgICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHdvcmsgd2hlbiBjb252ZXJ0
ZWQgdG8gYSBwYXRoLCBldmVuIHRob3VnaAorICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJ
RCBpdCBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIGxhcmdlciBwb2ludAorICAgICAgICAgICAgICAg
ICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9y
LgorICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCAoaSA9PT0gMSAmJiBhcnlbMl0g
PT09ICcuLicpIHx8IGFyeVtpIC0gMV0gPT09ICcuLicpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGkgLSAxLCAyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGkgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAg
KiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxp
emUgaXQgdG8KKyAgICAgICAgICogYSByZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEg
cGF0aC4KKyAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUK
KyAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhl
IG5hbWUgYXJnIGlzIHJlbGF0aXZlCisgICAgICAgICAqIHRvLgorICAgICAgICAgKiBAcGFyYW0g
e0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hv
dWxkCisgICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9y
IGEgZGVwZW5kZW5jeSBJRC4KKyAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXpl
ZCBuYW1lCisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFz
ZU5hbWUsIGFwcGx5TWFwKSB7CisgICAgICAgICAgICB2YXIgcGtnTWFpbiwgbWFwVmFsdWUsIG5h
bWVQYXJ0cywgaSwgaiwgbmFtZVNlZ21lbnQsIGxhc3RJbmRleCwKKyAgICAgICAgICAgICAgICBm
b3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJLCBub3JtYWxpemVkQmFzZVBhcnRz
LAorICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IChiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxp
dCgnLycpKSwKKyAgICAgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAorICAgICAgICAgICAg
ICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CisKKyAgICAgICAgICAgIC8vQWRqdXN0IGFu
eSByZWxhdGl2ZSBwYXRocy4KKyAgICAgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgICAg
ICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTsKKyAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBu
YW1lLmxlbmd0aCAtIDE7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3YW50aW5nIG5vZGUgSUQg
Y29tcGF0aWJpbGl0eSwgc3RyaXAgLmpzIGZyb20gZW5kCisgICAgICAgICAgICAgICAgLy8gb2Yg
SURzLiBIYXZlIHRvIGRvIHRoaXMgaGVyZSwgYW5kIG5vdCBpbiBuYW1lVG9VcmwKKyAgICAgICAg
ICAgICAgICAvLyBiZWNhdXNlIG5vZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBt
YXAKKyAgICAgICAgICAgICAgICAvLyB0byBzYW1lIGZpbGUuCisgICAgICAgICAgICAgICAgaWYg
KGNvbmZpZy5ub2RlSWRDb21wYXQgJiYganNTdWZmaXhSZWdFeHAudGVzdChuYW1lW2xhc3RJbmRl
eF0pKSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdElu
ZGV4XS5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWUK
KyAgICAgICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFy
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBh
bmQgbG9wIG9mZiB0aGUgbGFzdCBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQg
LiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdz
CisgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9m
ICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bworICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdv
L3RocmVlLmpzJywgYnV0IHdlIHdhbnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgorICAg
ICAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVu
Z3RoIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVkQmFzZVBhcnRz
LmNvbmNhdChuYW1lKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0cmlt
RG90cyhuYW1lKTsKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUu
CisgICAgICAgICAgICBpZiAoYXBwbHlNYXAgJiYgbWFwICYmIChiYXNlUGFydHMgfHwgc3Rhck1h
cCkpIHsKKyAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7CisKKyAg
ICAgICAgICAgICAgICBvdXRlckxvb3A6IGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAw
OyBpIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFydHMu
c2xpY2UoMCwgaSkuam9pbignLycpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFy
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNlTmFt
ZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuCisgICAgICAgICAgICAgICAgICAgICAgICAv
L1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQ
YXJ0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7
IGogPiAwOyBqIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9
IGdldE93bihtYXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJykpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQg
aWYgaXQgaGFzIG9uZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbmFt
ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVT
ZWdtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFt
ZSB0byB0aGUgbmV3IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm91bmRNYXAgPSBtYXBWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvdW5kSSA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBv
dXRlckxvb3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFw
IG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRvIGl0LAorICAgICAgICAgICAgICAgICAgICAvL2lm
IHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKKyAg
ICAgICAgICAgICAgICAgICAgLy9jb25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFw
LgorICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdl
dE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
dW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFySSA9IGk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkg
eworICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKKyAgICAgICAg
ICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKGZvdW5kTWFwKSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5z
cGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBu
YW1lUGFydHMuam9pbignLycpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gSWYgdGhlIG5hbWUgcG9pbnRzIHRvIGEgcGFja2FnZSdzIG5hbWUsIHVz
ZQorICAgICAgICAgICAgLy8gdGhlIHBhY2thZ2UgbWFpbiBpbnN0ZWFkLgorICAgICAgICAgICAg
cGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbmFtZSk7CisKKyAgICAgICAgICAgIHJldHVy
biBwa2dNYWluID8gcGtnTWFpbiA6IG5hbWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biByZW1vdmVTY3JpcHQobmFtZSkgeworICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgeworICAg
ICAgICAgICAgICAgIGVhY2goc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0Tm9kZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWly
ZW1vZHVsZScpID09PSBuYW1lICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0
Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250
ZXh0TmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKHNjcmlwdE5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhp
ZCkgeworICAgICAgICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBp
ZCk7CisgICAgICAgICAgICBpZiAocGF0aENvbmZpZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYm
IHBhdGhDb25maWcubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUg
Zmlyc3QgYXJyYXkgdmFsdWUsIHNpbmNlIGl0IGZhaWxlZCwgYW5kCisgICAgICAgICAgICAgICAg
Ly9yZXRyeQorICAgICAgICAgICAgICAgIHBhdGhDb25maWcuc2hpZnQoKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcXVpcmUudW5kZWYoaWQpOworCisgICAgICAgICAgICAgICAgLy9DdXN0
b20gcmVxdWlyZSB0aGF0IGRvZXMgbm90IGRvIG1hcCB0cmFuc2xhdGlvbiwgc2luY2UKKyAgICAg
ICAgICAgICAgICAvL0lEIGlzICJhYnNvbHV0ZSIsIGFscmVhZHkgbWFwcGVkL3Jlc29sdmVkLgor
ICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUobnVsbCwgeworICAgICAgICAgICAg
ICAgICAgICBza2lwTWFwOiB0cnVlCisgICAgICAgICAgICAgICAgfSkoW2lkXSk7CisKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCisgICAg
ICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQorICAgICAg
ICAvL2RpZCBub3QgaGF2ZSBhIHBsdWdpbiBwcmVmaXguCisgICAgICAgIGZ1bmN0aW9uIHNwbGl0
UHJlZml4KG5hbWUpIHsKKyAgICAgICAgICAgIHZhciBwcmVmaXgsCisgICAgICAgICAgICAgICAg
aW5kZXggPSBuYW1lID8gbmFtZS5pbmRleE9mKCchJykgOiAtMTsKKyAgICAgICAgICAgIGlmIChp
bmRleCA+IC0xKSB7CisgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwg
aW5kZXgpOworICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEs
IG5hbWUubGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBbcHJlZml4
LCBuYW1lXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVhdGVzIGEg
bW9kdWxlIG1hcHBpbmcgdGhhdCBpbmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUKKyAgICAg
ICAgICogbmFtZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3
aWxsCisgICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1h
bGl6ZSgpCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBt
b2R1bGUgbmFtZQorICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0g
cGFyZW50IG1vZHVsZSBtYXAKKyAgICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwgdXNlZCB0
byByZXNvbHZlIHJlbGF0aXZlIG5hbWVzLgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlz
Tm9ybWFsaXplZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KKyAgICAgICAgICogVGhp
cyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4K
KyAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1hcCBjb25m
aWcgdG8gdGhlIElELgorICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFw
IGlzIGZvciBhIGRlcGVuZGVuY3kuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm5zIHtP
YmplY3R9CisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUs
IHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgeworICAgICAgICAgICAg
dmFyIHVybCwgcGx1Z2luTW9kdWxlLCBzdWZmaXgsIG5hbWVQYXJ0cywKKyAgICAgICAgICAgICAg
ICBwcmVmaXggPSBudWxsLAorICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1
bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCisgICAgICAgICAgICAgICAgb3Jp
Z2luYWxOYW1lID0gbmFtZSwKKyAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCisgICAg
ICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKKworICAgICAgICAgICAgLy9JZiBubyBu
YW1lLCB0aGVuIGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgorICAg
ICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgorICAgICAgICAgICAgaWYgKCFuYW1lKSB7CisgICAg
ICAgICAgICAgICAgaXNEZWZpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBuYW1lID0gJ19A
cicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOworICAgICAgICAgICAgcHJlZml4ID0gbmFt
ZVBhcnRzWzBdOworICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKKworICAgICAgICAg
ICAgaWYgKHByZWZpeCkgeworICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVm
aXgsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKKyAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUg
PSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KKyAg
ICAgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9k
LgorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBwbHVnaW5Nb2R1bGUu
bm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5lc3RlZCBwbHVnaW4gcmVmZXJlbmNlcywgdGhl
biBkbyBub3QgdHJ5IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUsIGFz
IGl0IHdpbGwgbm90IG5vcm1hbGl6ZSBjb3JyZWN0bHkuIFRoaXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHBsYWNlcyBhIHJlc3RyaWN0aW9uIG9uIHJlc291cmNlSWRzLCBhbmQgdGhlIGxv
bmdlcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVybSBzb2x1dGlvbiBpcyBub3QgdG8g
bm9ybWFsaXplIHVudGlsIHBsdWdpbnMgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBs
b2FkZWQgYW5kIGFsbCBub3JtYWxpemF0aW9ucyB0byBhbGxvdyBmb3IgYXN5bmMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGxvYWRpbmcgb2YgYSBsb2FkZXIgcGx1Z2luLiBCdXQgZm9yIG5v
dywgZml4ZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gdXNlcy4gRGV0
YWlscyBpbiAjMTEzMQorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBu
YW1lLmluZGV4T2YoJyEnKSA9PT0gLTEgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApIDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8v
QSByZWd1bGFyIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBu
b3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOworCisgICAgICAgICAgICAgICAg
ICAgIC8vTm9ybWFsaXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZp
ZworICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1h
cCBjb25maWcgdmFsdWVzIG11c3QKKyAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJlIG5v
cm1hbGl6ZWQsIHNvIGRvIG5vdCBuZWVkIHRvIHJlZG8gdGhhdCBwYXJ0LgorICAgICAgICAgICAg
ICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKKyAgICAgICAgICAgICAgICAgICAg
bm9ybWFsaXplZE5hbWUgPSBuYW1lUGFydHNbMV07CisgICAgICAgICAgICAgICAgICAgIGlzTm9y
bWFsaXplZCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5uYW1l
VG9Vcmwobm9ybWFsaXplZE5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUg
ZGV0ZXJtaW5lZCBpZiBpdCBuZWVkcworICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFt
cCBpdCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQorICAgICAgICAg
ICAgLy9pZHMgdGhhdCBtYXkgY29uZmxpY3QgY2FuIGJlIHNlcGFyYXRlLgorICAgICAgICAgICAg
c3VmZml4ID0gcHJlZml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/CisgICAg
ICAgICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciAr
PSAxKSA6CisgICAgICAgICAgICAgICAgICAgICAnJzsKKworICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCwKKyAgICAgICAgICAgICAgICBuYW1lOiBu
b3JtYWxpemVkTmFtZSwKKyAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1h
cCwKKyAgICAgICAgICAgICAgICB1bm5vcm1hbGl6ZWQ6ICEhc3VmZml4LAorICAgICAgICAgICAg
ICAgIHVybDogdXJsLAorICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1l
LAorICAgICAgICAgICAgICAgIGlzRGVmaW5lOiBpc0RlZmluZSwKKyAgICAgICAgICAgICAgICBp
ZDogKHByZWZpeCA/CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3Jt
YWxpemVkTmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkgKyBz
dWZmaXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBnZXRN
b2R1bGUoZGVwTWFwKSB7CisgICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCisgICAgICAg
ICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisKKyAgICAgICAgICAgIGlmICgh
bW9kKSB7CisgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRleHQu
TW9kdWxlKGRlcE1hcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtb2Q7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7Cisg
ICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCisgICAgICAgICAgICAgICAgbW9kID0gZ2V0
T3duKHJlZ2lzdHJ5LCBpZCk7CisKKyAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlk
KSAmJgorICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRl
KSkgeworICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmaW5lZCcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm4oZGVmaW5lZFtpZF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZuKG1vZC5lcnJvcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVy
ciwgZXJyYmFjaykgeworICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywK
KyAgICAgICAgICAgICAgICBub3RpZmllZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoZXJy
YmFjaykgeworICAgICAgICAgICAgICAgIGVycmJhY2soZXJyKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9u
IG1vZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBjaGVja3MuCisgICAgICAgICAgICAgICAgICAg
ICAgICBtb2QuZXJyb3IgPSBlcnI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2
ZW50cy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJlcS5vbkVycm9yKGVycik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVybmFsIG1l
dGhvZCB0byB0cmFuc2ZlciBnbG9iYWxRdWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncworICAg
ICAgICAgKiBkZWZRdWV1ZS4KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIHRha2VHbG9i
YWxRdWV1ZSgpIHsKKyAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0
ZW1zIGludG8gdGhlIGNvbnRleHQncyBkZWZRdWV1ZQorICAgICAgICAgICAgaWYgKGdsb2JhbERl
ZlF1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGVhY2goZ2xvYmFsRGVmUXVldWUsIGZ1
bmN0aW9uKHF1ZXVlSXRlbSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBxdWV1ZUl0
ZW1bMF07CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUucHVz
aChxdWV1ZUl0ZW0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGdsb2Jh
bERlZlF1ZXVlID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYW5k
bGVycyA9IHsKKyAgICAgICAgICAgICdyZXF1aXJlJzogZnVuY3Rpb24gKG1vZCkgeworICAgICAg
ICAgICAgICAgIGlmIChtb2QucmVxdWlyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bW9kLnJlcXVpcmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChtb2QucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZXhwb3J0cyc6
IGZ1bmN0aW9uIChtb2QpIHsKKyAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pc0RlZmluZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAobW9kLmV4cG9ydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoZGVmaW5lZFttb2QubWFwLmlkXSA9IG1vZC5leHBvcnRzKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMg
PSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdtb2R1bGUnOiBmdW5j
dGlvbiAobW9kKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZC5tb2R1bGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QubW9kdWxlID0geworICAgICAgICAgICAg
ICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICB1cmk6
IG1vZC5tYXAudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldE93bihjb25maWcuY29u
ZmlnLCBtb2QubWFwLmlkKSB8fCB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICBleHBvcnRzOiBtb2QuZXhwb3J0cyB8fCAobW9kLmV4cG9ydHMg
PSB7fSkKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIGNsZWFuUmVnaXN0cnkoaWQp
IHsKKyAgICAgICAgICAgIC8vQ2xlYW4gdXAgbWFjaGluZXJ5IHVzZWQgZm9yIHdhaXRpbmcgbW9k
dWxlcy4KKyAgICAgICAgICAgIGRlbGV0ZSByZWdpc3RyeVtpZF07CisgICAgICAgICAgICBkZWxl
dGUgZW5hYmxlZFJlZ2lzdHJ5W2lkXTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGJy
ZWFrQ3ljbGUobW9kLCB0cmFjZWQsIHByb2Nlc3NlZCkgeworICAgICAgICAgICAgdmFyIGlkID0g
bW9kLm1hcC5pZDsKKworICAgICAgICAgICAgaWYgKG1vZC5lcnJvcikgeworICAgICAgICAgICAg
ICAgIG1vZC5lbWl0KCdlcnJvcicsIG1vZC5lcnJvcik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHRyYWNlZFtpZF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGVhY2go
bW9kLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGRlcElkID0gZGVwTWFwLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZ2V0
T3duKHJlZ2lzdHJ5LCBkZXBJZCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNl
IHRoaW5ncyB0aGF0IGhhdmUgbm90IGNvbXBsZXRlZAorICAgICAgICAgICAgICAgICAgICAvL2Jl
aW5nIGRlZmluZWQsIHNvIHN0aWxsIGluIHRoZSByZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAg
ICAgLy9hbmQgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gbWF0Y2hlZCB1cAorICAgICAgICAgICAg
ICAgICAgICAvL2luIHRoZSBtb2R1bGUgYWxyZWFkeS4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRlcCAmJiAhbW9kLmRlcE1hdGNoZWRbaV0gJiYgIXByb2Nlc3NlZFtkZXBJZF0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24odHJhY2VkLCBkZXBJZCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtb2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuY2hlY2soKTsgLy9wYXNzIGZhbHNlPworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVha0N5Y2xlKGRlcCwgdHJhY2VkLCBwcm9jZXNzZWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgcHJvY2Vzc2VkW2lkXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCgpIHsKKyAgICAgICAgICAgIHZhciBl
cnIsIHVzaW5nUGF0aEZhbGxiYWNrLAorICAgICAgICAgICAgICAgIHdhaXRJbnRlcnZhbCA9IGNv
bmZpZy53YWl0U2Vjb25kcyAqIDEwMDAsCisgICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJs
ZSB0byBkaXNhYmxlIHRoZSB3YWl0IGludGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAu
CisgICAgICAgICAgICAgICAgZXhwaXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFy
dFRpbWUgKyB3YWl0SW50ZXJ2YWwpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCisgICAgICAgICAg
ICAgICAgbm9Mb2FkcyA9IFtdLAorICAgICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCisgICAg
ICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gZmFsc2UsCisgICAgICAgICAgICAgICAgbmVlZEN5
Y2xlQ2hlY2sgPSB0cnVlOworCisgICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBj
YWxsIHdhcyBhIHJlc3VsdCBvZiBhIGN5Y2xlIGJyZWFrLgorICAgICAgICAgICAgaWYgKGluQ2hl
Y2tMb2FkZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSB0cnVlOworCisgICAgICAgICAgICAvL0ZpZ3VyZSBv
dXQgdGhlIHN0YXRlIG9mIGFsbCB0aGUgbW9kdWxlcy4KKyAgICAgICAgICAgIGVhY2hQcm9wKGVu
YWJsZWRSZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgIHZhciBtYXAg
PSBtb2QubWFwLAorICAgICAgICAgICAgICAgICAgICBtb2RJZCA9IG1hcC5pZDsKKworICAgICAg
ICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Ig
c3RhdGUuCisgICAgICAgICAgICAgICAgaWYgKCFtb2QuZW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KCFtYXAuaXNEZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2Qp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQs
IGFuZCBpdCBoYXMgbm90CisgICAgICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRp
bWUgaXMgdXAsIHJlbWVtYmVyIGl0LgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0
ZWQgJiYgZXhwaXJlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxs
YmFjayhtb2RJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxs
YmFjayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9Mb2Fkcy5wdXNoKG1vZElkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZW1vdmVTY3JpcHQobW9kSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYm
IG1hcC5pc0RlZmluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFwLnByZWZpeCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5m
aW5pc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9u
bHkgc3RpbGxMb2FkaW5nIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BsdWdp
biByZXNvdXJjZSB0aG91Z2gsIGtlZXAgZ29pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9iZWNhdXNlIGl0IG1heSBiZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5lZWRDeWNsZUNoZWNrID0gZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChleHBpcmVk
ICYmIG5vTG9hZHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhw
aXJlZCwgdGhyb3cgZXJyb3Igb2YgdW5sb2FkZWQgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBl
cnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsg
bm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7CisgICAgICAgICAgICAgICAgZXJyLmNvbnRleHROYW1l
ID0gY29udGV4dC5jb250ZXh0TmFtZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihl
cnIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBm
b3IgYSBjeWNsZS4KKyAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgeworICAgICAgICAg
ICAgICAgIGVhY2gocmVxQ2FsbHMsIGZ1bmN0aW9uIChtb2QpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWtDeWNsZShtb2QsIHt9LCB7fSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRo
ZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCisgICAgICAgICAgICAvL290aGVyIHRoYW4gYSBw
bHVnaW4gcmVzb3VyY2UsIG9yIHRoZXJlIGFyZSBzdGlsbCBvdXRzdGFuZGluZworICAgICAgICAg
ICAgLy9zY3JpcHRzLCB0aGVuIGp1c3QgdHJ5IGJhY2sgbGF0ZXIuCisgICAgICAgICAgICBpZiAo
KCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKKyAgICAg
ICAgICAgICAgICAvL1NvbWV0aGluZyBpcyBzdGlsbCB3YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9y
IGl0LCBidXQgb25seQorICAgICAgICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJl
YWR5IGluIGVmZmVjdC4KKyAgICAgICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldv
cmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7CisgICAgICAgICAgICAgICAgICAgIGNo
ZWNrTG9hZGVkVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja0xvYWRlZCgpOworICAgICAgICAgICAgICAgICAgICB9LCA1MCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbkNoZWNrTG9hZGVk
ID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7
CisgICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8
fCB7fTsKKyAgICAgICAgICAgIHRoaXMubWFwID0gbWFwOworICAgICAgICAgICAgdGhpcy5zaGlt
ID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtYXAuaWQpOworICAgICAgICAgICAgdGhpcy5kZXBFeHBv
cnRzID0gW107CisgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXTsKKyAgICAgICAgICAgIHRo
aXMuZGVwTWF0Y2hlZCA9IFtdOworICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307Cisg
ICAgICAgICAgICB0aGlzLmRlcENvdW50ID0gMDsKKworICAgICAgICAgICAgLyogdGhpcy5leHBv
cnRzIHRoaXMuZmFjdG9yeQorICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW10sCisgICAg
ICAgICAgICAgICB0aGlzLmVuYWJsZWQsIHRoaXMuZmV0Y2hlZAorICAgICAgICAgICAgKi8KKyAg
ICAgICAgfTsKKworICAgICAgICBNb2R1bGUucHJvdG90eXBlID0geworICAgICAgICAgICAgaW5p
dDogZnVuY3Rpb24gKGRlcE1hcHMsIGZhY3RvcnksIGVycmJhY2ssIG9wdGlvbnMpIHsKKyAgICAg
ICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKworICAgICAgICAgICAgICAgIC8v
RG8gbm90IGRvIG1vcmUgaW5pdHMgaWYgYWxyZWFkeSBkb25lLiBDYW4gaGFwcGVuIGlmIHRoZXJl
CisgICAgICAgICAgICAgICAgLy9hcmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2Ft
ZSBtb2R1bGUuIFRoYXQgaXMgbm90CisgICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9u
IGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgorICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmluaXRlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKKworICAg
ICAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0
ZXIgZm9yIGVycm9ycyBvbiB0aGlzIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5v
bignZXJyb3InLCBlcnJiYWNrKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZl
bnRzLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5
LCBidXQgdGhlcmUgYXJlIGVycm9yIGxpc3RlbmVycworICAgICAgICAgICAgICAgICAgICAvL29u
IHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgorICAg
ICAgICAgICAgICAgICAgICBlcnJiYWNrID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9E
byBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRoYXQKKyAgICAgICAgICAgICAg
ICAvL3NvdXJjZSBpbnB1dHMgYXJlIG5vdCBtb2RpZmllZC4gRm9yIGV4YW1wbGUKKyAgICAgICAg
ICAgICAgICAvLyJzaGltIiBkZXBzIGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCisg
ICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1h
cHMgYXJyYXkKKyAgICAgICAgICAgICAgICAvL3dvdWxkIGFmZmVjdCB0aGF0IGNvbmZpZy4KKyAg
ICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7
CisKKyAgICAgICAgICAgICAgICB0aGlzLmVycmJhY2sgPSBlcnJiYWNrOworCisgICAgICAgICAg
ICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKKyAgICAgICAg
ICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICB0aGlzLmlnbm9y
ZSA9IG9wdGlvbnMuaWdub3JlOworCisgICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlv
biB0byBpbml0IHRoaXMgbW9kdWxlIGluIGVuYWJsZWQgbW9kZSwKKyAgICAgICAgICAgICAgICAv
L29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVy
LAorICAgICAgICAgICAgICAgIC8vdGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHVudGls
IGluaXQgaXMgY2FsbGVkLiBTbworICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91
c2x5LCBub3cgdHJpZ2dlciBkZXBlbmRlbmNpZXMgYXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAg
ICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkgeworICAgICAgICAgICAgICAg
ICAgICAvL0VuYWJsZSB0aGlzIG1vZHVsZSBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAg
ICAgICAgICAvL1dpbGwgY2FsbCB0aGlzLmNoZWNrKCkKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5lbmFibGUoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLmNoZWNrKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgeworICAgICAgICAg
ICAgICAgIC8vQmVjYXVzZSBvZiBjeWNsZXMsIGRlZmluZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4K
KyAgICAgICAgICAgICAgICAvL2V4cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgor
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ldKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZGVwTWF0Y2hlZFtpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuZGVwQ291bnQgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ld
ID0gZGVwRXhwb3J0czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICBmZXRjaDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLmZl
dGNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0aGlzLmZldGNoZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAg
Y29udGV4dC5zdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworCisgICAgICAgICAg
ICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOworCisgICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFu
YWdlciBpcyBmb3IgYSBwbHVnaW4gbWFuYWdlZCByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAv
L2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93LgorICAgICAgICAgICAgICAgIGlmICh0aGlz
LnNoaW0pIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1h
cCwgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQor
ICAgICAgICAgICAgICAgICAgICB9KSh0aGlzLnNoaW0uZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/
IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgIH0p
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvL1JlZ3Vs
YXIgZGVwZW5kZW5jeS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0
aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sCisKKyAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgdXJsID0gdGhpcy5tYXAudXJsOworCisgICAgICAgICAgICAgICAgLy9SZWd1bGFy
IGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5sb2FkKHRoaXMubWFwLmlkLCB1cmwpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ2hlY2tz
IGlmIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAorICAg
ICAgICAgICAgICogZGVmaW5lIGl0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjaGVj
azogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRo
aXMuZW5hYmxpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBlcnIsIGNqc01vZHVsZSwKKyAgICAgICAgICAg
ICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKKyAgICAgICAgICAgICAgICAgICAgZGVwRXhwb3J0
cyA9IHRoaXMuZGVwRXhwb3J0cywKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMu
ZXhwb3J0cywKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKKwor
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gT25seSBmZXRjaCBpZiBub3QgYWxyZWFkeSBpbiB0aGUgZGVmUXVldWUuCisgICAgICAgICAg
ICAgICAgICAgIGlmICghaGFzUHJvcChjb250ZXh0LmRlZlF1ZXVlTWFwLCBpZCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2goKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lcnJvcikgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghdGhpcy5kZWZpbmluZykgeworICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0
b3J5IGNvdWxkIHRyaWdnZXIgYW5vdGhlciByZXF1aXJlIGNhbGwKKyAgICAgICAgICAgICAgICAg
ICAgLy90aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bworICAgICAg
ICAgICAgICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHBy
b2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29y
ay4KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2
b3IgcGFzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFk
IG9mIHRocm93aW5nIGFuIGVycm9yLiBIb3dldmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vb25seSBkbyBpdCBmb3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9y
IGZhaWx1cmVzIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVpciBjYWxsYmFj
a3MgKCM2OTkpLiBIb3dldmVyIGlmIGEgZ2xvYmFsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9vbkVycm9yIGlzIHNldCwgdXNlIHRoYXQuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IgIT09IGRlZmF1bHRPbkVycm9y
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3Rv
cnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIg
PSBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
b3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGYXZvciByZXR1cm4gdmFsdWUgb3ZlciBleHBvcnRzLiBJZiBub2RlL2NqcyBpbiBw
bGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2lsbCBub3QgaGF2ZSBh
IHJldHVybiB2YWx1ZSBhbnl3YXkuIEZhdm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbW9kdWxlLmV4cG9ydHMgYXNzaWdubWVudCBvdmVyIGV4cG9ydHMgb2JqZWN0LgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiBleHBvcnRzID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxl
ID0gdGhpcy5tb2R1bGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjanNN
b2R1bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBj
anNNb2R1bGUuZXhwb3J0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh0aGlzLnVzaW5nRXhwb3J0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy9leHBvcnRzIGFscmVhZHkgc2V0IHRoZSBkZWZpbmVkIHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0czsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNYXAgPSB0aGlzLm1hcDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gdGhpcy5tYXAuaXNE
ZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdy
ZXF1aXJlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3Io
KHRoaXMuZXJyb3IgPSBlcnIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cG9ydHMgPSBmYWN0b3J5OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNlTG9hZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcmVzTG9hZE1hcHMgPSBbXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0xvYWRNYXBzLnB1c2goZGVw
TWFwLm5vcm1hbGl6ZWRNYXAgfHwgZGVwTWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vblJlc291cmNl
TG9hZChjb250ZXh0LCB0aGlzLm1hcCwgcmVzTG9hZE1hcHMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy9DbGVhbiB1cAorICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3Ry
eShpZCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvL0ZpbmlzaGVkIHRo
ZSBkZWZpbmUgc3RhZ2UuIEFsbG93IGNhbGxpbmcgY2hlY2sgYWdhaW4KKyAgICAgICAgICAgICAg
ICAgICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBv
ZiBhCisgICAgICAgICAgICAgICAgICAgIC8vY3ljbGUuCisgICAgICAgICAgICAgICAgICAgIHRo
aXMuZGVmaW5pbmcgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZp
bmVkICYmICF0aGlzLmRlZmluZUVtaXR0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZGVmaW5lRW1pdHRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVt
aXQoJ2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5kZWZpbmVFbWl0Q29tcGxldGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBjYWxsUGx1Z2lu
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwLAorICAg
ICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKKyAgICAgICAgICAgICAgICAgICAgLy9NYXAg
YWxyZWFkeSBub3JtYWxpemVkIHRoZSBwcmVmaXguCisgICAgICAgICAgICAgICAgICAgIHBsdWdp
bk1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCk7CisKKyAgICAgICAgICAgICAgICAvL01h
cmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAorICAgICAgICAg
ICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgorICAgICAgICAgICAgICAgIHRoaXMu
ZGVwTWFwcy5wdXNoKHBsdWdpbk1hcCk7CisKKyAgICAgICAgICAgICAgICBvbihwbHVnaW5NYXAs
ICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgdGhpcy5tYXAuaWQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5t
YXAucGFyZW50TWFwLm5hbWUgOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxS
ZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZShtYXAucGFyZW50TWFwLCB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9JZiBjdXJyZW50IG1hcCBp
cyBub3Qgbm9ybWFsaXplZCwgd2FpdCBmb3IgdGhhdAorICAgICAgICAgICAgICAgICAgICAvL25v
cm1hbGl6ZWQgbmFtZSB0byBsb2FkIGluc3RlYWQgb2YgY29udGludWluZy4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMubWFwLnVubm9ybWFsaXplZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy9Ob3JtYWxpemUgdGhlIElEIGlmIHRoZSBwbHVnaW4gYWxsb3dzIGl0LgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5ub3JtYWxpemUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lID0gcGx1Z2luLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5h
bWUsIHBhcmVudE5hbWUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8
ICcnOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVk
CisgICAgICAgICAgICAgICAgICAgICAgICAvL2ZvciBhcHBseWluZyBtYXAgY29uZmlnIGFnYWlu
IGVpdGhlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAgPSBtYWtlTW9k
dWxlTWFwKG1hcC5wcmVmaXggKyAnIScgKyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvbihub3JtYWxpemVkTWFwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAubm9ybWFsaXplZE1hcCA9IG5v
cm1hbGl6ZWRNYXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChb
XSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVk
TWFwLmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZv
ciB0aGlzIHBsdWdpbiwgc28gaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbiBi
ZSB0cmFjZWQgZm9yIGN5Y2xlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRl
cE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0aGlzLmV2ZW50cy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVy
cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1v
ZC5lbmFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgLy9JZiBhIHBhdGhzIGNvbmZpZywgdGhlbiBqdXN0IGxvYWQgdGhhdCBmaWxlIGluc3Rl
YWQgdG8KKyAgICAgICAgICAgICAgICAgICAgLy9yZXNvbHZlIHRoZSBwbHVnaW4sIGFzIGl0IGlz
IGJ1aWx0IGludG8gdGhhdCBwYXRocyBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1
bmRsZUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC51cmwgPSBjb250ZXh0
Lm5hbWVUb1VybChidW5kbGVJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGxvYWQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7
IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
YWJsZWQ6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBm
dW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyOworICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gW2lkXTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy9SZW1vdmUgdGVtcCB1bm5vcm1hbGl6ZWQgbW9kdWxlcyBmb3IgdGhpcyBt
b2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBi
ZSByZXNvbHZlZCBvdGhlcndpc2Ugbm93LgorICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFBy
b3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobW9kLm1hcC5pZC5pbmRleE9mKGlkICsgJ191bm5vcm1hbGl6ZWQnKSA9PT0gMCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIC8vQWxsb3cgcGx1Z2lucyB0byBs
b2FkIG90aGVyIGNvZGUgd2l0aG91dCBoYXZpbmcgdG8ga25vdyB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgLy9jb250ZXh0IG9yIGhvdyB0byAnY29tcGxldGUnIHRoZSBsb2FkLgorICAgICAgICAg
ICAgICAgICAgICBsb2FkLmZyb21UZXh0ID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4
dEFsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHVsZU5hbWUgPSBtYXAubmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVNYXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5h
bWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ludGVyYWN0aXZlID0gdXNlSW50
ZXJhY3RpdmU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBv
cnQganVzdCBwYXNzaW5nIHRoZSB0ZXh0LCB0byByZWluZm9yY2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vZnJvbVRleHQgb25seSBiZWluZyBjYWxsZWQgb25jZSBwZXIgcmVzb3VyY2UuIFN0
aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAvL3N1cHBvcnQgb2xkIHN0eWxlIG9mIHBhc3Np
bmcgbW9kdWxlTmFtZSBidXQgZGlzY2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0
IG1vZHVsZU5hbWUgaW4gZmF2b3Igb2YgdGhlIGludGVybmFsIHJlZi4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXh0QWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dCA9IHRleHRBbHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vVHVybiBvZmYgaW50ZXJhY3RpdmUgc2NyaXB0IG1hdGNoaW5nIGZvciBJRSBm
b3IgYW55IGRlZmluZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4
dCwgdGhlbiB0dXJuIGl0IGJhY2sgb24gYXQgdGhlIGVuZC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZUludGVyYWN0aXZlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vUHJpbWUgdGhlIHN5c3RlbSBieSBjcmVhdGluZyBhIG1vZHVs
ZSBpbnN0YW5jZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vaXQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRNb2R1bGUobW9kdWxlTWFwKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgLy9UcmFuc2ZlciBhbnkgY29uZmlnIHRvIHRoaXMgb3RoZXIgbW9kdWxlLgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc1Byb3AoY29uZmlnLmNvbmZpZywgaWQpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvbmZpZ1ttb2R1bGVOYW1lXSA9IGNvbmZp
Zy5jb25maWdbaWRdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5leGVjKHRl
eHQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignZnJvbXRleHRldmFsJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tVGV4dCBl
dmFsIGZvciAnICsgaWQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnIGZhaWxlZDogJyArIGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW2lkXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhl
IHBsdWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZQorICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobW9kdWxlTWFwKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy9TdXBwb3J0IGFub255bW91cyBtb2R1bGVzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vQmluZCB0aGUgdmFsdWUgb2YgdGhhdCBtb2R1bGUgdG8gdGhlIHZhbHVl
IGZvciB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlIElELgorICAgICAg
ICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlKFttb2R1bGVOYW1lXSwgbG9hZCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIC8vVXNlIHBhcmVudE5h
bWUgaGVyZSBzaW5jZSB0aGUgcGx1Z2luJ3MgbmFtZSBpcyBub3QgcmVsaWFibGUsCisgICAgICAg
ICAgICAgICAgICAgIC8vY291bGQgYmUgc29tZSB3ZWlyZCBzdHJpbmcgd2l0aCBubyBwYXRoIHRo
YXQgYWN0dWFsbHkgd2FudHMgdG8KKyAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhl
IHBhcmVudE5hbWUncyBwYXRoLgorICAgICAgICAgICAgICAgICAgICBwbHVnaW4ubG9hZChtYXAu
bmFtZSwgbG9jYWxSZXF1aXJlLCBsb2FkLCBjb25maWcpOworICAgICAgICAgICAgICAgIH0pKTsK
KworICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CisgICAg
ICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzW3BsdWdpbk1hcC5pZF0gPSBwbHVnaW5NYXA7Cisg
ICAgICAgICAgICB9LAorCisgICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgICAgICBlbmFibGVkUmVnaXN0cnlbdGhpcy5tYXAuaWRdID0gdGhpczsKKyAgICAgICAg
ICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy9TZXQgZmxh
ZyBtZW50aW9uaW5nIHRoYXQgdGhlIG1vZHVsZSBpcyBlbmFibGluZywKKyAgICAgICAgICAgICAg
ICAvL3NvIHRoYXQgaW1tZWRpYXRlIGNhbGxzIHRvIHRoZSBkZWZpbmVkIGNhbGxiYWNrcworICAg
ICAgICAgICAgICAgIC8vZm9yIGRlcGVuZGVuY2llcyBkbyBub3QgdHJpZ2dlciBpbmFkdmVydGVu
dCBsb2FkCisgICAgICAgICAgICAgICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6
ZXJvLgorICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxpbmcgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgLy9FbmFibGUgZWFjaCBkZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgZWFjaCh0aGlz
LmRlcE1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgaWQsIG1vZCwgaGFuZGxlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
dHlwZW9mIGRlcE1hcCA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
RGVwZW5kZW5jeSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBkZXBNYXAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vYW5kIHdpcmVkIHVwIHRvIHRoaXMgbW9kdWxlLgorICAgICAgICAgICAg
ICAgICAgICAgICAgZGVwTWFwID0gbWFrZU1vZHVsZU1hcChkZXBNYXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1hcC5pc0RlZmluZSA/IHRo
aXMubWFwIDogdGhpcy5tYXAucGFyZW50TWFwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICF0aGlzLnNraXBNYXApOworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5kZXBNYXBzW2ldID0gZGVwTWFwOworCisgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVyID0gZ2V0T3duKGhhbmRsZXJzLCBkZXBNYXAuaWQpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFuZGxlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZGVwRXhwb3J0c1tpXSA9IGhhbmRsZXIodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmRlcENvdW50ICs9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9u
KGRlcE1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBFeHBvcnRzKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5kZWZlZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRGVwKGksIGRlcEV4
cG9ydHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuZXJyYmFjaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vy
cm9yJywgYmluZCh0aGlzLCB0aGlzLmVycmJhY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBObyBkaXJlY3QgZXJyYmFjayBvbiB0aGlzIG1vZHVsZSwgYnV0IHNvbWV0aGluZwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgaXMgbGlzdGVuaW5nIGZvciBlcnJv
cnMsIHNvIGJlIHN1cmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdh
dGUgdGhlIGVycm9yIGNvcnJlY3RseS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihk
ZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24oZXJyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOworICAg
ICAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF07CisKKyAgICAgICAgICAgICAgICAg
ICAgLy9Ta2lwIHNwZWNpYWwgbW9kdWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJworICAgICAgICAgICAgICAgICAgICAvL0Fsc28sIGRvbid0IGNhbGwgZW5hYmxlIGlmIGl0
IGlzIGFscmVhZHkgZW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRhbnQgaW4g
Y2lyY3VsYXIgZGVwZW5kZW5jeSBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQ
cm9wKGhhbmRsZXJzLCBpZCkgJiYgbW9kICYmICFtb2QuZW5hYmxlZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5lbmFibGUoZGVwTWFwLCB0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgIC8vRW5hYmxl
IGVhY2ggcGx1Z2luIHRoYXQgaXMgdXNlZCBpbgorICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRl
bmN5CisgICAgICAgICAgICAgICAgZWFjaFByb3AodGhpcy5wbHVnaW5NYXBzLCBiaW5kKHRoaXMs
IGZ1bmN0aW9uIChwbHVnaW5NYXApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdl
dE93bihyZWdpc3RyeSwgcGx1Z2luTWFwLmlkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1v
ZCAmJiAhbW9kLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5h
YmxlKHBsdWdpbk1hcCwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KSk7CisKKyAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gZmFsc2U7CisKKyAg
ICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICBvbjogZnVuY3Rpb24gKG5hbWUsIGNiKSB7CisgICAgICAgICAgICAgICAgdmFyIGNicyA9IHRo
aXMuZXZlbnRzW25hbWVdOworICAgICAgICAgICAgICAgIGlmICghY2JzKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdID0gW107CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNicy5wdXNoKGNiKTsKKyAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgIGVtaXQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHsKKyAgICAgICAgICAgICAgICBlYWNo
KHRoaXMuZXZlbnRzW25hbWVdLCBmdW5jdGlvbiAoY2IpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2IoZXZ0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PT0gJ2Vycm9yJykgeworICAgICAgICAgICAgICAgICAgICAvL05vdyB0aGF0IHRoZSBlcnJvciBo
YW5kbGVyIHdhcyB0cmlnZ2VyZWQsIHJlbW92ZQorICAgICAgICAgICAgICAgICAgICAvL3RoZSBs
aXN0ZW5lcnMsIHNpbmNlIHRoaXMgYnJva2VuIE1vZHVsZSBpbnN0YW5jZQorICAgICAgICAgICAg
ICAgICAgICAvL2NhbiBzdGF5IGFyb3VuZCBmb3IgYSB3aGlsZSBpbiB0aGUgcmVnaXN0cnkuCisg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50c1tuYW1lXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gY2Fs
bEdldE1vZHVsZShhcmdzKSB7CisgICAgICAgICAgICAvL1NraXAgbW9kdWxlcyBhbHJlYWR5IGRl
ZmluZWQuCisgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKKyAg
ICAgICAgICAgICAgICBnZXRNb2R1bGUobWFrZU1vZHVsZU1hcChhcmdzWzBdLCBudWxsLCB0cnVl
KSkuaW5pdChhcmdzWzFdLCBhcmdzWzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGZ1bmMsIG5hbWUsIGllTmFtZSkg
eworICAgICAgICAgICAgLy9GYXZvciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQorICAgICAg
ICAgICAgLy9pc3N1ZSwgc2VlIGF0dGFjaEV2ZW50L2FkZEV2ZW50TGlzdGVuZXIgY29tbWVudCBl
bHNld2hlcmUKKyAgICAgICAgICAgIC8vaW4gdGhpcyBmaWxlLgorICAgICAgICAgICAgaWYgKG5v
ZGUuZGV0YWNoRXZlbnQgJiYgIWlzT3BlcmEpIHsKKyAgICAgICAgICAgICAgICAvL1Byb2JhYmx5
IElFLiBJZiBub3QgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciwgd2hpY2ggd2lsbCBiZQorICAgICAg
ICAgICAgICAgIC8vdXNlZnVsIHRvIGtub3cuCisgICAgICAgICAgICAgICAgaWYgKGllTmFtZSkg
eworICAgICAgICAgICAgICAgICAgICBub2RlLmRldGFjaEV2ZW50KGllTmFtZSwgZnVuYyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBu
b2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZnVuYywgZmFsc2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZy
b20gYSBzY3JpcHQgbm9kZSwgZ2V0IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAorICAgICAg
ICAgKiBhbmQgdGhlbiByZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIG5vZGUuCisg
ICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dAorICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0
fQorICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gZ2V0U2NyaXB0RGF0YShldnQpIHsKKyAg
ICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmly
ZWZveCAyLjAncyBzYWtlLiBOb3QKKyAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxs
IGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAorICAgICAgICAgICAg
Ly90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KKyAgICAgICAgICAgIHZhciBub2Rl
ID0gZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQ7CisKKyAgICAgICAgICAgIC8v
UmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb25jZSBoZXJlLgorICAgICAgICAgICAgcmVtb3ZlTGlzdGVu
ZXIobm9kZSwgY29udGV4dC5vblNjcmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5n
ZScpOworICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdEVy
cm9yLCAnZXJyb3InKTsKKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBu
b2RlOiBub2RlLAorICAgICAgICAgICAgICAgIGlkOiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRl
KCdkYXRhLXJlcXVpcmVtb2R1bGUnKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIGludGFrZURlZmluZXMoKSB7CisgICAgICAgICAgICB2YXIgYXJnczsKKwor
ICAgICAgICAgICAgLy9BbnkgZGVmaW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGlu
dGFrZSB0aGVtIG5vdy4KKyAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOworCisgICAgICAg
ICAgICAvL01ha2Ugc3VyZSBhbnkgcmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJs
eSBwcm9jZXNzZWQuCisgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYg
KGFyZ3NbMF0gPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3Io
bWFrZUVycm9yKCdtaXNtYXRjaCcsICdNaXNtYXRjaGVkIGFub255bW91cyBkZWZpbmUoKSBtb2R1
bGU6ICcgKworICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFy
ZSBpZCwgZGVwcywgZmFjdG9yeS4gU2hvdWxkIGJlIG5vcm1hbGl6ZWQgYnkgdGhlCisgICAgICAg
ICAgICAgICAgICAgIC8vZGVmaW5lKCkgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNh
bGxHZXRNb2R1bGUoYXJncyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OworICAgICAgICB9CisKKyAgICAgICAg
Y29udGV4dCA9IHsKKyAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLAorICAgICAgICAgICAgY29u
dGV4dE5hbWU6IGNvbnRleHROYW1lLAorICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAor
ICAgICAgICAgICAgZGVmaW5lZDogZGVmaW5lZCwKKyAgICAgICAgICAgIHVybEZldGNoZWQ6IHVy
bEZldGNoZWQsCisgICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCisgICAgICAgICAgICBk
ZWZRdWV1ZU1hcDoge30sCisgICAgICAgICAgICBNb2R1bGU6IE1vZHVsZSwKKyAgICAgICAgICAg
IG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCisgICAgICAgICAgICBuZXh0VGljazogcmVx
Lm5leHRUaWNrLAorICAgICAgICAgICAgb25FcnJvcjogb25FcnJvciwKKworICAgICAgICAgICAg
LyoqCisgICAgICAgICAgICAgKiBTZXQgYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4K
KyAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRl
Z3JhdGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24g
KGNmZykgeworICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4g
YSBzbGFzaC4KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VVcmwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNoYXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAh
PT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBDb252ZXJ0IG9sZCBzdHlsZSB1cmxBcmdzIHN0cmluZyB0byBhIGZ1bmN0aW9uLgorICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgY2ZnLnVybEFyZ3MgPT09ICdzdHJpbmcnKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciB1cmxBcmdzID0gY2ZnLnVybEFyZ3M7CisgICAgICAgICAgICAg
ICAgICAgIGNmZy51cmxBcmdzID0gZnVuY3Rpb24oaWQsIHVybCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyB1
cmxBcmdzOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vU2F2ZSBvZmYgdGhlIHBhdGhzIHNpbmNlIHRoZXkgcmVxdWlyZSBzcGVj
aWFsIHByb2Nlc3NpbmcsCisgICAgICAgICAgICAgICAgLy90aGV5IGFyZSBhZGRpdGl2ZS4KKyAg
ICAgICAgICAgICAgICB2YXIgc2hpbSA9IGNvbmZpZy5zaGltLAorICAgICAgICAgICAgICAgICAg
ICBvYmpzID0geworICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHRydWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBidW5kbGVzOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiB0cnVlCisgICAgICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcsIGZ1bmN0aW9u
ICh2YWx1ZSwgcHJvcCkgeworICAgICAgICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdbcHJvcF0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB7fTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUs
IHRydWUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZmlnW3Byb3BdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8vUmV2ZXJzZSBtYXAgdGhl
IGJ1bmRsZXMKKyAgICAgICAgICAgICAgICBpZiAoY2ZnLmJ1bmRsZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZWFjaFByb3AoY2ZnLmJ1bmRsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gcHJvcCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBidW5kbGVzTWFwW3ZdID0gcHJvcDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9NZXJnZSBz
aGltCisgICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7CisgICAgICAgICAgICAgICAgICAg
IGVhY2hQcm9wKGNmZy5zaGltLCBmdW5jdGlvbiAodmFsdWUsIGlkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFsdWUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQp
ICYmICF2YWx1ZS5leHBvcnRzRm4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVl
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNo
aW0gPSBzaGltOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vQWRqdXN0
IHBhY2thZ2VzIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2Vz
KSB7CisgICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtn
T2JqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24sIG5hbWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcn
ID8ge25hbWU6IHBrZ09ian0gOiBwa2dPYmo7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgPSBwa2dPYmoubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtn
T2JqLmxvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW25hbWVdID0gcGtnT2JqLmxv
Y2F0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAvL1NhdmUgcG9pbnRlciB0byBtYWluIG1vZHVsZSBJRCBmb3IgcGtnIG5hbWUuCisgICAg
ICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSBsZWFkaW5nIGRvdCBpbiBtYWluLCBzbyBtYWlu
IHBhdGhzIGFyZSBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgcmVt
b3ZlIGFueSB0cmFpbGluZyAuanMsIHNpbmNlIGRpZmZlcmVudCBwYWNrYWdlCisgICAgICAgICAg
ICAgICAgICAgICAgICAvL2VudnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNl
IGEgbW9kdWxlIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAvL3NvbWUgdXNlIGEgZmls
ZSBuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBrZ3NbbmFtZV0gPSBwa2dP
YmoubmFtZSArICcvJyArIChwa2dPYmoubWFpbiB8fCAnbWFpbicpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY3VyckRpclJlZ0V4cCwgJycpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcn
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy9JZiB0aGVyZSBhcmUgYW55ICJ3YWl0aW5nIHRvIGV4ZWN1dGUiIG1vZHVsZXMg
aW4gdGhlIHJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0
aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVSTHMgdG8gbG9hZCwKKyAgICAgICAgICAgICAg
ICAvL21heSBoYXZlIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnks
IGZ1bmN0aW9uIChtb2QsIGlkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFs
cmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBpdCBpcyB0b28KKyAgICAgICAgICAgICAgICAg
ICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCisg
ICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSBhcmUgdHJhbnNpZW50LgorICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCwgbnVsbCwg
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgICAgIC8vSWYgYSBkZXBzIGFycmF5IG9yIGEgY29uZmlnIGNhbGxiYWNrIGlzIHNw
ZWNpZmllZCwgdGhlbiBjYWxsCisgICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhvc2Ug
YXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQorICAgICAg
ICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCisg
ICAgICAgICAgICAgICAgaWYgKGNmZy5kZXBzIHx8IGNmZy5jYWxsYmFjaykgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFjayk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgbWFrZVNo
aW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBm
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlLmluaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZhbHVlLmlu
aXQuYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFs
KHZhbHVlLmV4cG9ydHMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZuOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0
aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9u
cyB8fCB7fTsKKworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBj
YWxsYmFjaywgZXJyYmFjaykgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVx
dWlyZU1vZDsKKworICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWlsZENh
bGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0g
J3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxi
YWNrKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJl
YXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9y
dHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vdmFsdWUgZm9yIHRoZW0gZnJvbSB0aGUgc3BlY2lhbCBoYW5kbGVycy4gQ2F2ZWF0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJl
aW5nIGRlZmluZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1By
b3AoaGFuZGxlcnMsIGRlcHMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGhhbmRsZXJzW2RlcHNdKHJlZ2lzdHJ5W3JlbE1hcC5pZF0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL1N5bmNocm9ub3VzIGFjY2VzcyB0
byBvbmUgbW9kdWxlLiBJZiByZXF1aXJlLmdldCBpcworICAgICAgICAgICAgICAgICAgICAgICAg
Ly9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlcS5nZXQoY29udGV4dCwgZGVwcywgcmVsTWFwLCBsb2NhbFJlcXVpcmUp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAv
L05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLgorICAgICAgICAg
ICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNlLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9k
dWxlIG5hbWUgIicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90IGJl
ZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVzZSByZXF1aXJlKFtdKScpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVm
aW5lZFtpZF07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAv
L0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCisgICAgICAgICAgICAg
ICAgICAgIGludGFrZURlZmluZXMoKTsKKworICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxs
IHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hvdWxk
IGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCisgICAgICAgICAgICAgICAgICAgICAgICAvL2Nh
bGwgZm9yIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2Qu
c2tpcE1hcCA9IG9wdGlvbnMuc2tpcE1hcDsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbWl4aW4obG9jYWxSZXF1aXJlLCB7Cisg
ICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAorCisgICAgICAgICAgICAg
ICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1l
ICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgorICAgICAgICAgICAgICAgICAgICAgKiAq
UmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1
c2luZworICAgICAgICAgICAgICAgICAgICAgKiBwbGFpbiBVUkxzIGxpa2UgbmFtZVRvVXJsLgor
ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0
aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0
Lmxhc3RJbmRleE9mKCcuJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9
IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNSZWxhdGl2ZSA9IHNlZ21lbnQgPT09ICcuJyB8fCBzZWdtZW50ID09PSAnLi4nOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlhcywg
YW5kIGl0IGlzIG5vdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZG90cyBmcm9tIGEg
cmVsYXRpdmUgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEg
JiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQ
bHVzRXh0Lmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZVBs
dXNFeHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC5uYW1lVG9Vcmwobm9ybWFsaXplKG1vZHVsZU5hbWVQbHVzRXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsTWFwICYmIHJlbE1hcC5pZCwgdHJ1
ZSksIGV4dCwgIHRydWUpOworICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAg
ICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwg
dHJ1ZSkuaWQpOworICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAg
IHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA9
IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0
cnksIGlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNh
bGxzCisgICAgICAgICAgICAgICAgaWYgKCFyZWxNYXApIHsKKyAgICAgICAgICAgICAgICAgICAg
bG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy9maXggZm9yICM0MDgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
bWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCB0cnVlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kLnVuZGVmZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmVt
b3ZlU2NyaXB0KGlkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlZmluZWRb
aWRdOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHF1ZXVlZCBkZWZpbmVzIHRvby4gR28gYmFja3dh
cmRzCisgICAgICAgICAgICAgICAgICAgICAgICAvL2luIGFycmF5IHNvIHRoYXQgdGhlIHNwbGlj
ZXMgZG8gbm90CisgICAgICAgICAgICAgICAgICAgICAgICAvL21lc3MgdXAgdGhlIGl0ZXJhdGlv
bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hSZXZlcnNlKGRlZlF1ZXVlLCBmdW5jdGlv
bihhcmdzLCBpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09
IGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZlF1ZXVlLnNwbGljZShp
LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmRlZlF1ZXVl
TWFwW2lkXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vSG9sZCBvbiB0byBsaXN0ZW5lcnMgaW4gY2FzZSB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL21vZHVsZSB3aWxsIGJlIGF0dGVtcHRlZCB0byBi
ZSByZWxvYWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgYSBkaWZmZXJl
bnQgY29uZmlnLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXZlbnRzLmRl
ZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZFdmVudHNbaWRd
ID0gbW9kLmV2ZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOworICAgICAgICAgICAgfSwKKworICAg
ICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDYWxsZWQgdG8gZW5hYmxlIGEgbW9kdWxlIGlm
IGl0IGlzIHN0aWxsIGluIHRoZSByZWdpc3RyeQorICAgICAgICAgICAgICogYXdhaXRpbmcgZW5h
YmxlbWVudC4gQSBzZWNvbmQgYXJnLCBwYXJlbnQsIHRoZSBwYXJlbnQgbW9kdWxlLAorICAgICAg
ICAgICAgICogaXMgcGFzc2VkIGluIGZvciBjb250ZXh0LCB3aGVuIHRoaXMgbWV0aG9kIGlzIG92
ZXJyaWRkZW4gYnkKKyAgICAgICAgICAgICAqIHRoZSBvcHRpbWl6ZXIuIE5vdCBzaG93biBoZXJl
IHRvIGtlZXAgY29kZSBjb21wYWN0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBlbmFi
bGU6IGZ1bmN0aW9uIChkZXBNYXApIHsKKyAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3du
KHJlZ2lzdHJ5LCBkZXBNYXAuaWQpOworICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZ2V0TW9kdWxlKGRlcE1hcCkuZW5hYmxlKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBJ
bnRlcm5hbCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBh
IGxvYWQgZXZlbnQuCisgICAgICAgICAgICAgKiBBIGxvYWQgZXZlbnQgY291bGQgYmUgYSBzY3Jp
cHQgbG9hZCBvciBqdXN0IGEgbG9hZCBwYXNzIGZyb20gYSBzeW5jaHJvbm91cworICAgICAgICAg
ICAgICogbG9hZCBjYWxsLgorICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5h
bWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KKyAgICAg
ICAgICAgICAqLworICAgICAgICAgICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFt
ZSkgeworICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAorICAgICAgICAgICAg
ICAgICAgICBzaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtb2R1bGVOYW1lKSB8fCB7fSwKKyAg
ICAgICAgICAgICAgICAgICAgc2hFeHBvcnRzID0gc2hpbS5leHBvcnRzOworCisgICAgICAgICAg
ICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVl
dWUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvL0lmIGFscmVhZHkgZm91bmQgYW4gYW5vbnltb3VzIG1vZHVsZSBhbmQgYm91bmQgaXQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29t
ZSBvdGhlciBhbm9uIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZv
ciBpdHMgY29tcGxldGVMb2FkIHRvIGZpcmUuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Zm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0
aGlzIHNjcmlwdCEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJn
cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVN
YXAgPSB7fTsKKworICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2Yg
Y2FsbEdldE1vZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAvL29mIHRo
b3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCisgICAgICAgICAgICAg
ICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBtb2R1bGVOYW1lKTsKKworICAgICAgICAgICAgICAg
IGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFt
b2QuaW5pdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuZW5mb3JjZURlZmlu
ZSAmJiAoIXNoRXhwb3J0cyB8fCAhZ2V0R2xvYmFsKHNoRXhwb3J0cykpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJy
b3IoJ25vZGVmaW5lJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvL0Egc2NyaXB0IHRoYXQgZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBz
aW11bGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCisgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKFttb2R1bGVOYW1lLCAoc2hpbS5kZXBz
IHx8IFtdKSwgc2hpbS5leHBvcnRzRm5dKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CisgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxl
IG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCisgICAgICAgICAgICAg
KiBtb2R1bGVOYW1lIG1heSBhY3R1YWxseSBiZSBqdXN0IGFuIFVSTC4KKyAgICAgICAgICAgICAq
IE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5h
bWUsCisgICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5v
cm1hbGl6ZWQuIFRoaXMgaXMgYW4KKyAgICAgICAgICAgICAqIGludGVybmFsIEFQSSwgbm90IGEg
cHVibGljIG9uZS4gVXNlIHRvVXJsIGZvciB0aGUgcHVibGljIEFQSS4KKyAgICAgICAgICAgICAq
LworICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lw
RXh0KSB7CisgICAgICAgICAgICAgICAgdmFyIHBhdGhzLCBzeW1zLCBpLCBwYXJlbnRNb2R1bGUs
IHVybCwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCwgYnVuZGxlSWQsCisgICAgICAg
ICAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG1vZHVsZU5hbWUpOwor
CisgICAgICAgICAgICAgICAgaWYgKHBrZ01haW4pIHsKKyAgICAgICAgICAgICAgICAgICAgbW9k
dWxlTmFtZSA9IHBrZ01haW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
YnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgbW9kdWxlTmFtZSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoYnVuZGxlSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQu
bmFtZVRvVXJsKGJ1bmRsZUlkLCBleHQsIHNraXBFeHQpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vSWYgYSBjb2xvbiBpcyBpbiB0aGUgVVJMLCBpdCBpbmRpY2F0ZXMg
YSBwcm90b2NvbCBpcyB1c2VkIGFuZCBpdCBpcyBqdXN0CisgICAgICAgICAgICAgICAgLy9hbiBV
UkwgdG8gYSBmaWxlLCBvciBpZiBpdCBzdGFydHMgd2l0aCBhIHNsYXNoLCBjb250YWlucyBhIHF1
ZXJ5IGFyZyAoaS5lLiA/KQorICAgICAgICAgICAgICAgIC8vb3IgZW5kcyB3aXRoIC5qcywgdGhl
biBhc3N1bWUgdGhlIHVzZXIgbWVhbnQgdG8gdXNlIGFuIHVybCBhbmQgbm90IGEgbW9kdWxlIGlk
LgorICAgICAgICAgICAgICAgIC8vVGhlIHNsYXNoIGlzIGltcG9ydGFudCBmb3IgcHJvdG9jb2wt
bGVzcyBVUkxzIGFzIHdlbGwgYXMgZnVsbCBwYXRocy4KKyAgICAgICAgICAgICAgICBpZiAocmVx
LmpzRXh0UmVnRXhwLnRlc3QobW9kdWxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9K
dXN0IGEgcGxhaW4gcGF0aCwgbm90IG1vZHVsZSBuYW1lIGxvb2t1cCwgc28ganVzdCByZXR1cm4g
aXQuCisgICAgICAgICAgICAgICAgICAgIC8vQWRkIGV4dGVuc2lvbiBpZiBpdCBpcyBpbmNsdWRl
ZC4gVGhpcyBpcyBhIGJpdCB3b25reSwgb25seSBub24tLmpzIHRoaW5ncyBwYXNzCisgICAgICAg
ICAgICAgICAgICAgIC8vYW4gZXh0ZW5zaW9uLCB0aGlzIG1ldGhvZCBwcm9iYWJseSBuZWVkcyB0
byBiZSByZXdvcmtlZC4KKyAgICAgICAgICAgICAgICAgICAgdXJsID0gbW9kdWxlTmFtZSArIChl
eHQgfHwgJycpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IC8vQSBtb2R1bGUgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBwYXRoLgorICAgICAg
ICAgICAgICAgICAgICBwYXRocyA9IGNvbmZpZy5wYXRoczsKKworICAgICAgICAgICAgICAgICAg
ICBzeW1zID0gbW9kdWxlTmFtZS5zcGxpdCgnLycpOworICAgICAgICAgICAgICAgICAgICAvL0Zv
ciBlYWNoIG1vZHVsZSBuYW1lIHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKKyAgICAg
ICAgICAgICAgICAgICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNp
ZmljIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgLy9hbmQgd29yayB1cCBmcm9tIGl0LgorICAg
ICAgICAgICAgICAgICAgICBmb3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5q
b2luKCcvJyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24o
cGF0aHMsIHBhcmVudE1vZHVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50
UGF0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYW4gYXJyYXksIGl0IG1l
YW5zIHRoZXJlIGFyZSBhIGZldyBjaG9pY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vQ2hvb3NlIHRoZSBvbmUgdGhhdCBpcyBkZXNpcmVkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzQXJyYXkocGFyZW50UGF0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50UGF0aCA9IHBhcmVudFBhdGhbMF07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGks
IHBhcmVudFBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgLy9Kb2luIHRoZSBwYXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQg
aWYgYmFzZVVybCBpcyBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9p
bignLycpOworICAgICAgICAgICAgICAgICAgICB1cmwgKz0gKGV4dCB8fCAoL15kYXRhXDp8XmJs
b2JcOnxcPy8udGVzdCh1cmwpIHx8IHNraXBFeHQgPyAnJyA6ICcuanMnKSk7CisgICAgICAgICAg
ICAgICAgICAgIHVybCA9ICh1cmwuY2hhckF0KDApID09PSAnLycgfHwgdXJsLm1hdGNoKC9eW1x3
XCtcLlwtXSs6LykgPyAnJyA6IGNvbmZpZy5iYXNlVXJsKSArIHVybDsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybEFyZ3MgJiYgIS9eYmxvYlw6
Ly50ZXN0KHVybCkgPworICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyBjb25maWcudXJsQXJn
cyhtb2R1bGVOYW1lLCB1cmwpIDogdXJsOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
Ly9EZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlv
biB0bworICAgICAgICAgICAgLy9hbGxvdyBvdmVycmlkaW5nIGluIHRoZSBvcHRpbWl6ZXIuCisg
ICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoaWQsIHVybCkgeworICAgICAgICAgICAgICAgIHJl
cS5sb2FkKGNvbnRleHQsIGlkLCB1cmwpOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
LyoqCisgICAgICAgICAgICAgKiBFeGVjdXRlcyBhIG1vZHVsZSBjYWxsYmFjayBmdW5jdGlvbi4g
QnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uCisgICAgICAgICAgICAgKiBzb2xlbHkg
dG8gYWxsb3cgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZXF1ZW5jZSB0aGUgZmlsZXMgaW4gdGhlIGJ1
aWx0CisgICAgICAgICAgICAgKiBsYXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCisgICAgICAg
ICAgICAgKgorICAgICAgICAgICAgICogQHByaXZhdGUKKyAgICAgICAgICAgICAqLworICAgICAg
ICAgICAgZXhlY0NiOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGFyZ3MsIGV4cG9ydHMpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoZXhwb3J0cywgYXJncyk7Cisg
ICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIGNhbGxiYWNr
IGZvciBzY3JpcHQgbG9hZHMsIHVzZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCisgICAg
ICAgICAgICAgKgorICAgICAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0IHRoZSBldmVudCBm
cm9tIHRoZSBicm93c2VyIGZvciB0aGUgc2NyaXB0CisgICAgICAgICAgICAgKiB0aGF0IHdhcyBs
b2FkZWQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG9uU2NyaXB0TG9hZDogZnVuY3Rp
b24gKGV2dCkgeworICAgICAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFk
IG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKKyAgICAgICAgICAgICAgICAv
L2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFz
eSBlbm91Z2gKKyAgICAgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNl
bnNlLgorICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAocmVhZHlSZWdFeHAudGVzdCgoZXZ0LmN1cnJlbnRUYXJnZXQgfHwg
ZXZ0LnNyY0VsZW1lbnQpLnJlYWR5U3RhdGUpKSkgeworICAgICAgICAgICAgICAgICAgICAvL1Jl
c2V0IGludGVyYWN0aXZlIHNjcmlwdCBzbyBhIHNjcmlwdCBub2RlIGlzIG5vdCBoZWxkIG9udG8g
Zm9yCisgICAgICAgICAgICAgICAgICAgIC8vdG8gbG9uZy4KKyAgICAgICAgICAgICAgICAgICAg
aW50ZXJhY3RpdmVTY3JpcHQgPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgIC8vUHVsbCBv
dXQgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQuCisgICAgICAgICAgICAg
ICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LmNvbXBsZXRlTG9hZChkYXRhLmlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENhbGxiYWNrIGZv
ciBzY3JpcHQgZXJyb3JzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBvblNjcmlwdEVy
cm9yOiBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3Jp
cHREYXRhKGV2dCk7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNQYXRoRmFsbGJhY2soZGF0YS5p
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKKyAgICAgICAgICAg
ICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX0ByJykgIT09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0aW9uKGRlcE1h
cCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwTWFwLmlkID09PSBk
YXRhLmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1
c2goa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3Nj
cmlwdGVycm9yJywgJ1NjcmlwdCBlcnJvciBmb3IgIicgKyBkYXRhLmlkICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0aCA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiwgbmVlZGVkIGJ5OiAn
ICsgcGFyZW50cy5qb2luKCcsICcpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICciJyksIGV2dCwgW2RhdGEuaWRdKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGNvbnRleHQucmVxdWlyZSA9IGNv
bnRleHQubWFrZVJlcXVpcmUoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQ7CisgICAgfQorCisg
ICAgLyoqCisgICAgICogTWFpbiBlbnRyeSBwb2ludC4KKyAgICAgKgorICAgICAqIElmIHRoZSBv
bmx5IGFyZ3VtZW50IHRvIHJlcXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0
CisgICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhl
IGFwcHJvcHJpYXRlIGNvbnRleHQuCisgICAgICoKKyAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1l
bnQgaXMgYW4gYXJyYXksIHRoZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5CisgICAg
ICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0
aW9uIGNhbGxiYWNrIGNhbgorICAgICAqIGJlIHNwZWNpZmllZCB0byBleGVjdXRlIHdoZW4gYWxs
IG9mIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlLgorICAgICAqCisgICAgICogTWFr
ZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1l
cyB0aGluZ3MKKyAgICAgKiBvbiBhIHJlcXVpcmUgdGhhdCBhcmUgbm90IHN0YW5kYXJkaXplZCks
IGFuZCB0byBnaXZlIGEgc2hvcnQKKyAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwg
c2NvcGUgdXNlLgorICAgICAqLworICAgIHJlcSA9IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChkZXBz
LCBjYWxsYmFjaywgZXJyYmFjaywgb3B0aW9uYWwpIHsKKworICAgICAgICAvL0ZpbmQgdGhlIHJp
Z2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0CisgICAgICAgIHZhciBjb250ZXh0LCBjb25maWcsCisg
ICAgICAgICAgICBjb250ZXh0TmFtZSA9IGRlZkNvbnRleHROYW1lOworCisgICAgICAgIC8vIERl
dGVybWluZSBpZiBoYXZlIGNvbmZpZyBvYmplY3QgaW4gdGhlIGNhbGwuCisgICAgICAgIGlmICgh
aXNBcnJheShkZXBzKSAmJiB0eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAg
IC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0CisgICAgICAgICAgICBjb25maWcgPSBkZXBzOwor
ICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgLy8g
QWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcworICAgICAgICAgICAgICAgIGRl
cHMgPSBjYWxsYmFjazsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7CisgICAg
ICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBkZXBzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0
TmFtZSA9IGNvbmZpZy5jb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dCA9IGdl
dE93bihjb250ZXh0cywgY29udGV4dE5hbWUpOworICAgICAgICBpZiAoIWNvbnRleHQpIHsKKyAg
ICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250
ZXh0KGNvbnRleHROYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAg
ICAgICAgICAgIGNvbnRleHQuY29uZmlndXJlKGNvbmZpZyk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gY29udGV4dC5yZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKTsKKyAgICB9
OworCisgICAgLyoqCisgICAgICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQg
ZWFzaWVyIHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVyCisgICAgICogQU1EIGxvYWRlcnMgb24gZ2xv
YmFsbHkgYWdyZWVkIG5hbWVzLgorICAgICAqLworICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAo
Y29uZmlnKSB7CisgICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKKyAgICB9OworCisgICAgLyoq
CisgICAgICogRXhlY3V0ZSBzb21ldGhpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgdGljaworICAgICAq
IG9mIHRoZSBldmVudCBsb29wLiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cworICAgICAqIHRoYXQg
aGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCisgICAgICogQHBhcmFtICB7
RnVuY3Rpb259IGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgbGF0ZXIuCisgICAgICovCisgICAgcmVx
Lm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24g
KGZuKSB7CisgICAgICAgIHNldFRpbWVvdXQoZm4sIDQpOworICAgIH0gOiBmdW5jdGlvbiAoZm4p
IHsgZm4oKTsgfTsKKworICAgIC8qKgorICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFs
LCBidXQgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorICAgICAqLworICAgIGlm
ICghcmVxdWlyZSkgeworICAgICAgICByZXF1aXJlID0gcmVxOworICAgIH0KKworICAgIHJlcS52
ZXJzaW9uID0gdmVyc2lvbjsKKworICAgIC8vVXNlZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVuY2ll
cyB0aGF0IGFyZSBhbHJlYWR5IHBhdGhzLgorICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98Onxc
P3xcLmpzJC87CisgICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKKyAgICBzID0gcmVxLnMg
PSB7CisgICAgICAgIGNvbnRleHRzOiBjb250ZXh0cywKKyAgICAgICAgbmV3Q29udGV4dDogbmV3
Q29udGV4dAorICAgIH07CisKKyAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCisgICAgcmVx
KHt9KTsKKworICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24g
Z2xvYmFsIHJlcXVpcmUuCisgICAgZWFjaChbCisgICAgICAgICd0b1VybCcsCisgICAgICAgICd1
bmRlZicsCisgICAgICAgICdkZWZpbmVkJywKKyAgICAgICAgJ3NwZWNpZmllZCcKKyAgICBdLCBm
dW5jdGlvbiAocHJvcCkgeworICAgICAgICAvL1JlZmVyZW5jZSBmcm9tIGNvbnRleHRzIGluc3Rl
YWQgb2YgZWFybHkgYmluZGluZyB0byBkZWZhdWx0IGNvbnRleHQsCisgICAgICAgIC8vc28gdGhh
dCBkdXJpbmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRl
eHQKKyAgICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgorICAgICAgICByZXFbcHJv
cF0gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29u
dGV4dE5hbWVdOworICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0
eCwgYXJndW1lbnRzKTsKKyAgICAgICAgfTsKKyAgICB9KTsKKworICAgIGlmIChpc0Jyb3dzZXIp
IHsKKyAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCdoZWFkJylbMF07CisgICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBw
ZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCisgICAgICAgIC8vV2hlbiB0aGF0IGJyb3dz
ZXIgZGllcywgdGhpcyBjYW4gYmUgcmVtb3ZlZC4gRGV0YWlscyBpbiB0aGlzIGpRdWVyeSBidWc6
CisgICAgICAgIC8vaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5CisgICAgICAgIGJh
c2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKKyAg
ICAgICAgaWYgKGJhc2VFbGVtZW50KSB7CisgICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFz
ZUVsZW1lbnQucGFyZW50Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAq
IEFueSBlcnJvcnMgdGhhdCByZXF1aXJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUgcGFz
c2VkIHRvIHRoaXMKKyAgICAgKiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlv
dSB3YW50IGN1c3RvbSBlcnJvciBoYW5kbGluZy4KKyAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIg
dGhlIGVycm9yIG9iamVjdC4KKyAgICAgKi8KKyAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVy
cm9yOworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29t
bWFuZC4gT25seSB1c2VkIGluIGJyb3dzZXIgZW52cy4KKyAgICAgKi8KKyAgICByZXEuY3JlYXRl
Tm9kZSA9IGZ1bmN0aW9uIChjb25maWcsIG1vZHVsZU5hbWUsIHVybCkgeworICAgICAgICB2YXIg
bm9kZSA9IGNvbmZpZy54aHRtbCA/CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxl
bWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgor
ICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgICAg
ICBub2RlLnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKKyAg
ICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKKyAgICAgICAgbm9kZS5hc3luYyA9IHRydWU7
CisgICAgICAgIHJldHVybiBub2RlOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEb2VzIHRo
ZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCisgICAgICog
TWFrZSB0aGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1lbnRz
CisgICAgICogdG8gb3ZlcnJpZGUgaXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge09iamVjdH0g
Y29udGV4dCB0aGUgcmVxdWlyZSBjb250ZXh0IHRvIGZpbmQgc3RhdGUuCisgICAgICogQHBhcmFt
IHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KKyAgICAgKiBAcGFy
YW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KKyAgICAgKi8KKyAgICByZXEu
bG9hZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKKyAgICAgICAgdmFy
IGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKKyAgICAgICAgICAg
IG5vZGU7CisgICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKKyAgICAgICAgICAgIC8vSW4gdGhlIGJy
b3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZworICAgICAgICAgICAgbm9kZSA9IHJlcS5jcmVhdGVO
b2RlKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKKworICAgICAgICAgICAgbm9kZS5zZXRBdHRy
aWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKKyAgICAg
ICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVOYW1l
KTsKKworICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVu
dCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKKyAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUgaW4g
aXRzIGFkZEV2ZW50TGlzdGVuZXIgYW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncworICAgICAgICAg
ICAgLy90aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJz
IHdpdGgKKyAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJl
IHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKKyAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFmdGVy
IHRoZSBzY3JpcHQgZXhlY3V0aW9uLiBTZWU6CisgICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVj
dC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQt
ZXZlbnQtaXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KKyAg
ICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1
dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAorICAgICAgICAgICAgLy9zY3JpcHQgZXhlY3V0
aW9uIG1vZGUuCisgICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgorICAgICAgICAg
ICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFk
ZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKKyAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVseSBz
dXBwb3J0ZWQgYnkgYnJvd3NlcgorICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9n
aXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzE4NworICAgICAgICAgICAgICAg
ICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1Qg
bmF0aXZlbHkgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgICAgICAvL2luIElFOCwgbm9kZS5h
dHRhY2hFdmVudCBkb2VzIG5vdCBoYXZlIHRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAg
Ly9Ob3RlIHRoZSB0ZXN0IGZvciAiW25hdGl2ZSBjb2RlIiB3aXRoIG5vIGNsb3NpbmcgYnJhY2Us
IHNlZToKKyAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpz
L3JlcXVpcmVqcy9pc3N1ZXMvMjczCisgICAgICAgICAgICAgICAgICAgICEobm9kZS5hdHRhY2hF
dmVudC50b1N0cmluZyAmJiBub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nKCkuaW5kZXhPZignW25h
dGl2ZSBjb2RlJykgPCAwKSAmJgorICAgICAgICAgICAgICAgICAgICAhaXNPcGVyYSkgeworICAg
ICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJl
CisgICAgICAgICAgICAgICAgLy9zY3JpcHQgb25sb2FkIHJpZ2h0IGFmdGVyIGV4ZWN1dGluZyB0
aGUgc2NyaXB0LCBzbworICAgICAgICAgICAgICAgIC8vd2UgY2Fubm90IHRpZSB0aGUgYW5vbnlt
b3VzIGRlZmluZSBjYWxsIHRvIGEgbmFtZS4KKyAgICAgICAgICAgICAgICAvL0hvd2V2ZXIsIElF
IHJlcG9ydHMgdGhlIHNjcmlwdCBhcyBiZWluZyBpbiAnaW50ZXJhY3RpdmUnCisgICAgICAgICAg
ICAgICAgLy9yZWFkeVN0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBkZWZpbmUgY2FsbC4KKyAgICAg
ICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBub2Rl
LmF0dGFjaEV2ZW50KCdvbnJlYWR5c3RhdGVjaGFuZ2UnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCk7
CisgICAgICAgICAgICAgICAgLy9JdCB3b3VsZCBiZSBncmVhdCB0byBhZGQgYW4gZXJyb3IgaGFu
ZGxlciBoZXJlIHRvIGNhdGNoCisgICAgICAgICAgICAgICAgLy80MDRzIGluIElFOSsuIEhvd2V2
ZXIsIG9ucmVhZHlzdGF0ZWNoYW5nZSB3aWxsIGZpcmUgYmVmb3JlCisgICAgICAgICAgICAgICAg
Ly90aGUgZXJyb3IgaGFuZGxlciwgc28gdGhhdCBkb2VzIG5vdCBoZWxwLiBJZiBhZGRFdmVudExp
c3RlbmVyCisgICAgICAgICAgICAgICAgLy9pcyB1c2VkLCB0aGVuIElFIHdpbGwgZmlyZSBlcnJv
ciBiZWZvcmUgbG9hZCwgYnV0IHdlIGNhbm5vdAorICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQg
cGF0aHdheSBnaXZlbiB0aGUgY29ubmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCisgICAgICAgICAg
ICAgICAgLy9tZW50aW9uZWQgYWJvdmUgYWJvdXQgbm90IGRvaW5nIHRoZSAnc2NyaXB0IGV4ZWN1
dGUsCisgICAgICAgICAgICAgICAgLy90aGVuIGZpcmUgdGhlIHNjcmlwdCBsb2FkIGV2ZW50IGxp
c3RlbmVyIGJlZm9yZSBleGVjdXRlCisgICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhh
dCBvdGhlciBicm93c2VycyBkby4KKyAgICAgICAgICAgICAgICAvL0Jlc3QgaG9wZTogSUUxMCBm
aXhlcyB0aGUgaXNzdWVzLAorICAgICAgICAgICAgICAgIC8vYW5kIHRoZW4gZGVzdHJveXMgYWxs
IGluc3RhbGxzIG9mIElFIDYtOS4KKyAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQo
J29uZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb250ZXh0Lm9u
U2NyaXB0TG9hZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5l
cignZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsIGZhbHNlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG5vZGUuc3JjID0gdXJsOworCisgICAgICAgICAgICAvL0NhbGxpbmcgb25O
b2RlQ3JlYXRlZCBhZnRlciBhbGwgcHJvcGVydGllcyBvbiB0aGUgbm9kZSBoYXZlIGJlZW4KKyAg
ICAgICAgICAgIC8vc2V0LCBidXQgYmVmb3JlIGl0IGlzIHBsYWNlZCBpbiB0aGUgRE9NLgorICAg
ICAgICAgICAgaWYgKGNvbmZpZy5vbk5vZGVDcmVhdGVkKSB7CisgICAgICAgICAgICAgICAgY29u
ZmlnLm9uTm9kZUNyZWF0ZWQobm9kZSwgY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvL0ZvciBzb21lIGNhY2hlIGNhc2VzIGluIElFIDYtOCwg
dGhlIHNjcmlwdCBleGVjdXRlcyBiZWZvcmUgdGhlIGVuZAorICAgICAgICAgICAgLy9vZiB0aGUg
YXBwZW5kQ2hpbGQgZXhlY3V0aW9uLCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQorICAg
ICAgICAgICAgLy9jYWxsIHRvIHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRo
ZSBub2RlKSwgaG9sZCBvbgorICAgICAgICAgICAgLy90byBhIHJlZmVyZW5jZSB0byB0aGlzIG5v
ZGUsIGJ1dCBjbGVhciBhZnRlciB0aGUgRE9NIGluc2VydGlvbi4KKyAgICAgICAgICAgIGN1cnJl
bnRseUFkZGluZ1NjcmlwdCA9IG5vZGU7CisgICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsK
KyAgICAgICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShub2RlLCBiYXNlRWxlbWVudCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBu
dWxsOworCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc1dl
YldvcmtlcikgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAvL0luIGEgd2Vi
IHdvcmtlciwgdXNlIGltcG9ydFNjcmlwdHMuIFRoaXMgaXMgbm90IGEgdmVyeQorICAgICAgICAg
ICAgICAgIC8vZWZmaWNpZW50IHVzZSBvZiBpbXBvcnRTY3JpcHRzLCBpbXBvcnRTY3JpcHRzIHdp
bGwgYmxvY2sgdW50aWwKKyAgICAgICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRl
ZCBhbmQgZXZhbHVhdGVkLiBIb3dldmVyLCBpZiB3ZWIgd29ya2VycworICAgICAgICAgICAgICAg
IC8vYXJlIGluIHBsYXksIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGEgYnVpbGQgaGFzIGJlZW4g
ZG9uZSBzbworICAgICAgICAgICAgICAgIC8vdGhhdCBvbmx5IG9uZSBzY3JpcHQgbmVlZHMgdG8g
YmUgbG9hZGVkIGFueXdheS4gVGhpcyBtYXkgbmVlZAorICAgICAgICAgICAgICAgIC8vdG8gYmUg
cmVldmFsdWF0ZWQgaWYgb3RoZXIgdXNlIGNhc2VzIGJlY29tZSBjb21tb24uCisKKyAgICAgICAg
ICAgICAgICAvLyBQb3N0IGEgdGFzayB0byB0aGUgZXZlbnQgbG9vcCB0byB3b3JrIGFyb3VuZCBh
IGJ1ZyBpbiBXZWJLaXQKKyAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgd29ya2VyIGdldHMg
Z2FyYmFnZS1jb2xsZWN0ZWQgYWZ0ZXIgY2FsbGluZworICAgICAgICAgICAgICAgIC8vIGltcG9y
dFNjcmlwdHMoKTogaHR0cHM6Ly93ZWJraXQub3JnL2IvMTUzMzE3CisgICAgICAgICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHt9LCAwKTsKKyAgICAgICAgICAgICAgICBpbXBvcnRTY3Jp
cHRzKHVybCk7CisKKyAgICAgICAgICAgICAgICAvL0FjY291bnQgZm9yIGFub255bW91cyBtb2R1
bGVzCisgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7Cisg
ICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9y
KG1ha2VFcnJvcignaW1wb3J0c2NyaXB0cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgJyBhdCAnICsgdXJsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9k
dWxlTmFtZV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBmdW5j
dGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpIHsKKyAgICAgICAgaWYgKGludGVyYWN0aXZlU2Ny
aXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsK
KyAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKKyAgICAgICAgfQorCisgICAg
ICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgeworICAgICAgICAg
ICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9IHNjcmlwdCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CisgICAgfQor
CisgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3Vs
ZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KKyAgICBpZiAoaXNCcm93c2VyICYmICFjZmcuc2tp
cERhdGFNYWluKSB7CisgICAgICAgIC8vRmlndXJlIG91dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0
aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVpcmUuanMgaW4gaXQuCisgICAgICAgIGVhY2hSZXZlcnNl
KHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgeworICAgICAgICAgICAgLy9TZXQgdGhlICdo
ZWFkJyB3aGVyZSB3ZSBjYW4gYXBwZW5kIGNoaWxkcmVuIGJ5CisgICAgICAgICAgICAvL3VzaW5n
IHRoZSBzY3JpcHQncyBwYXJlbnQuCisgICAgICAgICAgICBpZiAoIWhlYWQpIHsKKyAgICAgICAg
ICAgICAgICBoZWFkID0gc2NyaXB0LnBhcmVudE5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gYXR0cmlidXRlIHRvIHNldCBtYWluIHNjcmlw
dCBmb3IgdGhlIHBhZ2UKKyAgICAgICAgICAgIC8vdG8gbG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRo
ZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNvbWVzIHRoZQorICAgICAgICAgICAgLy9iYXNlVXJsLCBp
ZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCisgICAgICAgICAgICBkYXRhTWFpbiA9IHNjcmlwdC5n
ZXRBdHRyaWJ1dGUoJ2RhdGEtbWFpbicpOworICAgICAgICAgICAgaWYgKGRhdGFNYWluKSB7Cisg
ICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAo
aS5lLiBjb250YWlucyAnPycpCisgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWlu
OworCisgICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3Qg
YWxyZWFkeSBhbiBleHBsaWNpdCBvbmUsCisgICAgICAgICAgICAgICAgLy9idXQgb25seSBkbyBz
byBpZiB0aGUgZGF0YS1tYWluIHZhbHVlIGlzIG5vdCBhIGxvYWRlciBwbHVnaW4KKyAgICAgICAg
ICAgICAgICAvL21vZHVsZSBJRC4KKyAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsICYm
IG1haW5TY3JpcHQuaW5kZXhPZignIScpID09PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAv
L1B1bGwgb2ZmIHRoZSBkaXJlY3Rvcnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhlCisgICAg
ICAgICAgICAgICAgICAgIC8vYmFzZVVybC4KKyAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFp
blNjcmlwdC5zcGxpdCgnLycpOworICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gc3Jj
LnBvcCgpOworICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5q
b2luKCcvJykgICsgJy8nIDogJy4vJzsKKworICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVy
bCA9IHN1YlBhdGg7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9TdHJp
cCBvZmYgYW55IHRyYWlsaW5nIC5qcyBzaW5jZSBtYWluU2NyaXB0IGlzIG5vdworICAgICAgICAg
ICAgICAgIC8vbGlrZSBhIG1vZHVsZSBuYW1lLgorICAgICAgICAgICAgICAgIG1haW5TY3JpcHQg
PSBtYWluU2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKKworICAgICAgICAgICAg
ICAgIC8vSWYgbWFpblNjcmlwdCBpcyBzdGlsbCBhIHBhdGgsIGZhbGwgYmFjayB0byBkYXRhTWFp
bgorICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtYWluU2NyaXB0KSkg
eworICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9QdXQgdGhlIGRhdGEtbWFpbiBzY3JpcHQgaW4g
dGhlIGZpbGVzIHRvIGxvYWQuCisgICAgICAgICAgICAgICAgY2ZnLmRlcHMgPSBjZmcuZGVwcyA/
IGNmZy5kZXBzLmNvbmNhdChtYWluU2NyaXB0KSA6IFttYWluU2NyaXB0XTsKKworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGRlZmluaXRpb25zIG9m
IG1vZHVsZXMuIERpZmZlcnMgZnJvbQorICAgICAqIHJlcXVpcmUoKSBpbiB0aGF0IGEgc3RyaW5n
IGZvciB0aGUgbW9kdWxlIHNob3VsZCBiZSB0aGUgZmlyc3QgYXJndW1lbnQsCisgICAgICogYW5k
IHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkIHNo
b3VsZAorICAgICAqIHJldHVybiBhIHZhbHVlIHRvIGRlZmluZSB0aGUgbW9kdWxlIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIGZpcnN0IGFyZ3VtZW50J3MKKyAgICAgKiBuYW1lLgorICAgICAqLworICAg
IGRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaykgeworICAgICAgICB2YXIg
bm9kZSwgY29udGV4dDsKKworICAgICAgICAvL0FsbG93IGZvciBhbm9ueW1vdXMgbW9kdWxlcwor
ICAgICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAvL0Fk
anVzdCBhcmdzIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwczsKKyAg
ICAgICAgICAgIGRlcHMgPSBuYW1lOworICAgICAgICAgICAgbmFtZSA9IG51bGw7CisgICAgICAg
IH0KKworICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXMKKyAg
ICAgICAgaWYgKCFpc0FycmF5KGRlcHMpKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7
CisgICAgICAgICAgICBkZXBzID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vSWYgbm8g
bmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRoZW4gZmlndXJlIG91dCBpZiBpdCBh
CisgICAgICAgIC8vQ29tbW9uSlMgdGhpbmcgd2l0aCBkZXBlbmRlbmNpZXMuCisgICAgICAgIGlm
ICghZGVwcyAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgeworICAgICAgICAgICAgZGVwcyA9IFtd
OworICAgICAgICAgICAgLy9SZW1vdmUgY29tbWVudHMgZnJvbSB0aGUgY2FsbGJhY2sgc3RyaW5n
LAorICAgICAgICAgICAgLy9sb29rIGZvciByZXF1aXJlIGNhbGxzLCBhbmQgcHVsbCB0aGVtIGlu
dG8gdGhlIGRlcGVuZGVuY2llcywKKyAgICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJl
IGZ1bmN0aW9uIGFyZ3MuCisgICAgICAgICAgICBpZiAoY2FsbGJhY2subGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKKyAg
ICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tbWVudFJlZ0V4cCwgY29tbWVudFJlcGxhY2Up
CisgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNqc1JlcXVpcmVSZWdFeHAsIGZ1bmN0aW9u
IChtYXRjaCwgZGVwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAvL01heSBiZSBhIENv
bW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKKyAgICAg
ICAgICAgICAgICAvL2NvdWxkIHVzZSBleHBvcnRzLCBhbmQgbW9kdWxlLiBBdm9pZCBkb2luZyBl
eHBvcnRzIGFuZCBtb2R1bGUKKyAgICAgICAgICAgICAgICAvL3dvcmsgdGhvdWdoIGlmIGl0IGp1
c3QgbmVlZHMgcmVxdWlyZS4KKyAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5jdGlv
biB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAg
ICAvL29yZGVyIGxpc3RlZCBiZWxvdy4KKyAgICAgICAgICAgICAgICBkZXBzID0gKGNhbGxiYWNr
Lmxlbmd0aCA9PT0gMSA/IFsncmVxdWlyZSddIDogWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9k
dWxlJ10pLmNvbmNhdChkZXBzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRvIHRo
ZSBpbnRlcmFjdGl2ZQorICAgICAgICAvL3dvcmsuCisgICAgICAgIGlmICh1c2VJbnRlcmFjdGl2
ZSkgeworICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJbnRl
cmFjdGl2ZVNjcmlwdCgpOworICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0cmli
dXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgY29udGV4dCA9IGNvbnRleHRzW25vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVj
b250ZXh0JyldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy9BbHdheXMg
c2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQg
aGFuZGxlci4KKyAgICAgICAgLy9UaGlzIGFsbG93cyBtdWx0aXBsZSBtb2R1bGVzIHRvIGJlIGlu
IGEgZmlsZSB3aXRob3V0IHByZW1hdHVyZWx5CisgICAgICAgIC8vdHJhY2luZyBkZXBlbmRlbmNp
ZXMsIGFuZCBhbGxvd3MgZm9yIGFub255bW91cyBtb2R1bGUgc3VwcG9ydCwKKyAgICAgICAgLy93
aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25sb2Fk
IGV2ZW50CisgICAgICAgIC8vb2NjdXJzLiBJZiBubyBjb250ZXh0LCB1c2UgdGhlIGdsb2JhbCBx
dWV1ZSwgYW5kIGdldCBpdCBwcm9jZXNzZWQKKyAgICAgICAgLy9pbiB0aGUgb25zY3JpcHQgbG9h
ZCBjYWxsYmFjay4KKyAgICAgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQu
ZGVmUXVldWUucHVzaChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKKyAgICAgICAgICAgIGNvbnRl
eHQuZGVmUXVldWVNYXBbbmFtZV0gPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZ2xvYmFsRGVmUXVldWUucHVzaChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBkZWZpbmUuYW1kID0geworICAgICAgICBqUXVlcnk6IHRydWUKKyAg
ICB9OworCisgICAgLyoqCisgICAgICogRXhlY3V0ZXMgdGhlIHRleHQuIE5vcm1hbGx5IGp1c3Qg
dXNlcyBldmFsLCBidXQgY2FuIGJlIG1vZGlmaWVkCisgICAgICogdG8gdXNlIGEgYmV0dGVyLCBl
bnZpcm9ubWVudC1zcGVjaWZpYyBjYWxsLiBPbmx5IHVzZWQgZm9yIHRyYW5zcGlsaW5nCisgICAg
ICogbG9hZGVyIHBsdWdpbnMsIG5vdCBmb3IgcGxhaW4gSlMgbW9kdWxlcy4KKyAgICAgKiBAcGFy
YW0ge1N0cmluZ30gdGV4dCB0aGUgdGV4dCB0byBleGVjdXRlL2V2YWx1YXRlLgorICAgICAqLwor
ICAgIHJlcS5leGVjID0gZnVuY3Rpb24gKHRleHQpIHsKKyAgICAgICAgLypqc2xpbnQgZXZpbDog
dHJ1ZSAqLworICAgICAgICByZXR1cm4gZXZhbCh0ZXh0KTsKKyAgICB9OworCisgICAgLy9TZXQg
dXAgd2l0aCBjb25maWcgaW5mby4KKyAgICByZXEoY2ZnKTsKK30odGhpcywgKHR5cGVvZiBzZXRU
aW1lb3V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IHNldFRpbWVvdXQpKSk7CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Rl
cGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAt
Y3NzL2luZGV4LmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2Rv
bXZjLWFwcC1jc3MvaW5kZXguY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3ZWExODAxNjEyMTI2ZjFkYjY1Y2Uw
NTY4ZjJhMDIzNzNiOTNiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2Zs
aWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcwpAQCAtMCwwICsxLDM3
OCBAQAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworfQor
CitidXR0b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjog
MDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6ZTogMTAwJTsKKyAgICB2ZXJ0
aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgICAgZm9u
dC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7CisgICAgLXdlYmtpdC1mb250LXNt
b290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFz
ZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCitib2R5IHsKKyAgICBm
b250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7
CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CisgICAg
Y29sb3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBweDsKKyAgICBtYXgtd2lkdGg6IDU1
MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFu
dGlhbGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIGZv
bnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXdlaWdodDogMzAwOworfQorCiti
dXR0b24sCitpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBvdXRsaW5lOiBub25lOworfQor
CisuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisjdG9kb2FwcCB7CisgICAgYmFj
a2dyb3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBweCAwOworICAgIHBvc2l0aW9u
OiByZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAu
MiksCisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7Cit9
CisKKyN0b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKKyAgICBmb250
LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgICBjb2xvcjogI2U2ZTZl
NjsKK30KKworI3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5
bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2Owor
fQorCisjdG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZvbnQtc3R5bGU6
IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZlNmU2OworfQor
CisjdG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTE1NXB4
OworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAwcHg7CisgICAgZm9udC13ZWln
aHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY29sb3I6IHJnYmEoMTc1LCA0
NywgNDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJp
bGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7CisgICAg
dGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30KKworI25ldy10b2RvLAorLmVk
aXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJnaW46IDA7CisgICAgd2lkdGg6
IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owor
ICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKKyAgICBi
b3JkZXI6IDA7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBw
YWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gtc2hhZG93
OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIGJveC1zaXppbmc6
IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cisg
ICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6
IGFudGlhbGlhc2VkOworfQorCisjbmV3LXRvZG8geworICAgIHBhZGRpbmc6IDE2cHggMTZweCAx
NnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwg
MCwgMC4wMDMpOworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAsMCww
LjAzKTsKK30KKworI21haW4geworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICB6LWluZGV4
OiAyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2OworfQorCitsYWJlbFtmb3I9
J3RvZ2dsZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworI3RvZ2dsZS1hbGwgewor
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01NXB4OworICAgIGxlZnQ6IC0xMnB4
OworICAgIHdpZHRoOiA2MHB4OworICAgIGhlaWdodDogMzRweDsKKyAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2FmYXJpICovCit9CisKKyN0b2dn
bGUtYWxsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7CisgICAgZm9udC1zaXplOiAyMnB4
OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEwcHggMjdweCAxMHB4IDI3cHg7
Cit9CisKKyN0b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAgICBjb2xvcjogIzczNzM3MzsK
K30KKworI3RvZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmc6IDA7CisgICAg
bGlzdC1zdHlsZTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSB7CisgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29s
aWQgI2VkZWRlZDsKK30KKworI3RvZG8tbGlzdCBsaTpsYXN0LWNoaWxkIHsKKyAgICBib3JkZXIt
Ym90dG9tOiBub25lOworfQorCisjdG9kby1saXN0IGxpLmVkaXRpbmcgeworICAgIGJvcmRlci1i
b3R0b206IG5vbmU7CisgICAgcGFkZGluZzogMDsKK30KKworI3RvZG8tbGlzdCBsaS5lZGl0aW5n
IC5lZGl0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogNTA2cHg7CisgICAgcGFk
ZGluZzogMTNweCAxN3B4IDEycHggMTdweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7Cit9CisK
KyN0b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKwor
I3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgd2lk
dGg6IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBkb2Vzbid0
IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJnaW46IGF1
dG8gMDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAtd2Via2l0
LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworI3RvZG8tbGlz
dCBsaSAudG9nZ2xlOmFmdGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3ht
bDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAi
IGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5
PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VkZWRlZCIgc3Ryb2tlLXdpZHRoPSIz
Ii8+PC9zdmc+Jyk7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVyIHsK
KyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9
Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5v
bmUiIHN0cm9rZT0iI2JkZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+PHBhdGggZmlsbD0iIzVkYzJh
ZiIgZD0iTTcyIDI1TDQyIDcxIDI3IDU2bC00IDQgMjAgMjAgMzQtNTJ6Ii8+PC9zdmc+Jyk7Cit9
CisKKyN0b2RvLWxpc3QgbGkgbGFiZWwgeworICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgd29y
ZC1icmVhazogYnJlYWstd29yZDsKKyAgICBwYWRkaW5nOiAxNXB4IDYwcHggMTVweCAxNXB4Owor
ICAgIG1hcmdpbi1sZWZ0OiA0NXB4OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpbmUtaGVp
Z2h0OiAxLjI7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsKK30KKworI3RvZG8tbGlzdCBs
aS5jb21wbGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjZDlkOWQ5OworICAgIHRleHQtZGVjb3Jh
dGlvbjogbGluZS10aHJvdWdoOworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95IHsKKyAgICBk
aXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAg
cmlnaHQ6IDEwcHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRoOiA0MHB4OworICAgIGhlaWdo
dDogNDBweDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250LXNpemU6IDMwcHg7CisgICAg
Y29sb3I6ICNjYzlhOWE7CisgICAgbWFyZ2luLWJvdHRvbTogMTFweDsKKyAgICB0cmFuc2l0aW9u
OiBjb2xvciAwLjJzIGVhc2Utb3V0OworfQorCisjdG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVy
IHsKKyAgICBjb2xvcjogI2FmNWI1ZTsKK30KKworI3RvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRl
ciB7CisgICAgY29udGVudDogJ8OXJzsKK30KKworI3RvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJv
eSB7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0b2RvLWxpc3QgbGkgLmVkaXQgeworICAg
IGRpc3BsYXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkIHsK
KyAgICBtYXJnaW4tYm90dG9tOiAtMXB4OworfQorCisjZm9vdGVyIHsKKyAgICBjb2xvcjogIzc3
NzsKKyAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQt
YWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKwor
I2Zvb3RlcjpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWln
aHQ6IDUwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBib3gtc2hhZG93OiAwIDFweCAx
cHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAgIDAgOHB4IDAgLTNweCAjZjZm
NmY2LAorICAgICAgICAgICAgICAgIDAgOXB4IDFweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwK
KyAgICAgICAgICAgICAgICAwIDE2cHggMCAtNnB4ICNmNmY2ZjYsCisgICAgICAgICAgICAgICAg
MCAxN3B4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKK30KKworI3RvZG8tY291bnQgewor
ICAgIGZsb2F0OiBsZWZ0OworICAgIHRleHQtYWxpZ246IGxlZnQ7Cit9CisKKyN0b2RvLWNvdW50
IHN0cm9uZyB7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKworI2ZpbHRlcnMgeworICAgIG1h
cmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgcG9z
aXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGxlZnQ6IDA7Cit9CisKKyNmaWx0
ZXJzIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKKyNmaWx0ZXJzIGxpIGEgeworICAg
IGNvbG9yOiBpbmhlcml0OworICAgIG1hcmdpbjogM3B4OworICAgIHBhZGRpbmc6IDNweCA3cHg7
CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5z
cGFyZW50OworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKworI2ZpbHRlcnMgbGkgYS5zZWxl
Y3RlZCwKKyNmaWx0ZXJzIGxpIGE6aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUs
IDQ3LCA0NywgMC4xKTsKK30KKworI2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVy
LWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjIpOworfQorCisjY2xlYXItY29tcGxldGVkLAor
aHRtbCAjY2xlYXItY29tcGxldGVkOmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29y
YXRpb246IG5vbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKK30KKworI2NsZWFyLWNvbXBsZXRlZDpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Cit9CisKKyNpbmZvIHsKKyAgICBtYXJnaW46IDY1cHggYXV0byAwOworICAgIGNv
bG9yOiAjYmZiZmJmOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAgICB0ZXh0LXNoYWRvdzogMCAx
cHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwor
fQorCisjaW5mbyBwIHsKKyAgICBsaW5lLWhlaWdodDogMTsKK30KKworI2luZm8gYSB7CisgICAg
Y29sb3I6IGluaGVyaXQ7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGZvbnQtd2Vp
Z2h0OiA0MDA7Cit9CisKKyNpbmZvIGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5k
ZXJsaW5lOworfQorCisvKgorICAgIEhhY2sgdG8gcmVtb3ZlIGJhY2tncm91bmQgZnJvbSBNb2Jp
bGUgU2FmYXJpLgorICAgIENhbid0IHVzZSBpdCBnbG9iYWxseSBzaW5jZSBpdCBkZXN0cm95cyBj
aGVja2JveGVzIGluIEZpcmVmb3gKKyovCitAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4t
ZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAgICAjdG9nZ2xlLWFsbCwKKyAgICAjdG9kby1saXN0
IGxpIC50b2dnbGUgeworICAgICAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIH0KKworICAgICN0
b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGhlaWdodDogNDBweDsKKyAgICB9CisKKyAg
ICAjdG9nZ2xlLWFsbCB7CisgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcp
OworICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7CisgICAgICAgIC13ZWJraXQtYXBw
ZWFyYW5jZTogbm9uZTsKKyAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKKyAgICB9Cit9CisKK0Bt
ZWRpYSAobWF4LXdpZHRoOiA0MzBweCkgeworICAgICNmb290ZXIgeworICAgICAgICBoZWlnaHQ6
IDUwcHg7CisgICAgfQorCisgICAgI2ZpbHRlcnMgeworICAgICAgICBib3R0b206IDEwcHg7Cisg
ICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVz
L3RvZG9tdmMtYXBwLWNzcy9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9u
b2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmMx
ZDBkNTljMGZiMjlhNzgyZGVhMDdhNWMxNTMyNTJkYzE0ZDQxCi0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9wYWNr
YWdlLmpzb24KQEAgLTAsMCArMSwxMDMgQEAKK3sKKyAgIl9hcmdzIjogWworICAgIFsKKyAgICAg
IHsKKyAgICAgICAgInJhdyI6ICJ0b2RvbXZjLWFwcC1jc3NAXjEuMC4wIiwKKyAgICAgICAgInNj
b3BlIjogbnVsbCwKKyAgICAgICAgImVzY2FwZWROYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisg
ICAgICAgICJuYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisgICAgICAgICJyYXdTcGVjIjogIl4x
LjAuMCIsCisgICAgICAgICJzcGVjIjogIj49MS4wLjAgPDIuMC4wIiwKKyAgICAgICAgInR5cGUi
OiAicmFuZ2UiCisgICAgICB9LAorICAgICAgIi9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21l
dGVyLWEvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiCisgICAg
XQorICBdLAorICAiX2Zyb20iOiAidG9kb212Yy1hcHAtY3NzQD49MS4wLjAgPDIuMC4wIiwKKyAg
Il9pZCI6ICJ0b2RvbXZjLWFwcC1jc3NAMS4wLjQiLAorICAiX2luQ2FjaGUiOiB0cnVlLAorICAi
X2xvY2F0aW9uIjogIi90b2RvbXZjLWFwcC1jc3MiLAorICAiX25vZGVWZXJzaW9uIjogIjAuMTIu
MCIsCisgICJfbnBtVXNlciI6IHsKKyAgICAibmFtZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICJl
bWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIgorICB9LAorICAiX25wbVZlcnNpb24iOiAi
Mi41LjEiLAorICAiX3BoYW50b21DaGlsZHJlbiI6IHt9LAorICAiX3JlcXVlc3RlZCI6IHsKKyAg
ICAicmF3IjogInRvZG9tdmMtYXBwLWNzc0BeMS4wLjAiLAorICAgICJzY29wZSI6IG51bGwsCisg
ICAgImVzY2FwZWROYW1lIjogInRvZG9tdmMtYXBwLWNzcyIsCisgICAgIm5hbWUiOiAidG9kb212
Yy1hcHAtY3NzIiwKKyAgICAicmF3U3BlYyI6ICJeMS4wLjAiLAorICAgICJzcGVjIjogIj49MS4w
LjAgPDIuMC4wIiwKKyAgICAidHlwZSI6ICJyYW5nZSIKKyAgfSwKKyAgIl9yZXF1aXJlZEJ5Ijog
WworICAgICIvIgorICBdLAorICAiX3Jlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3RvZG9tdmMtYXBwLWNzcy8tL3RvZG9tdmMtYXBwLWNzcy0xLjAuNC50Z3oiLAorICAiX3No
YXN1bSI6ICJkMjUyOTI3OWE2ZGE1YmVmYjA2YjU1YzBjMzI0YzVmY2ZkOTRkNjU2IiwKKyAgIl9z
aHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVjIjogInRvZG9tdmMtYXBwLWNzc0BeMS4wLjAiLAor
ICAiX3doZXJlIjogIi9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiLAorICAiYXV0aG9yIjogeworICAg
ICJuYW1lIjogIlNpbmRyZSBTb3JodXMiLAorICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21h
aWwuY29tIiwKKyAgICAidXJsIjogInNpbmRyZXNvcmh1cy5jb20iCisgIH0sCisgICJidWdzIjog
eworICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy1hcHAtY3Nz
L2lzc3VlcyIKKyAgfSwKKyAgImRlcGVuZGVuY2llcyI6IHt9LAorICAiZGVzY3JpcHRpb24iOiAi
Q1NTIGZvciBUb2RvTVZDIGFwcHMiLAorICAiZGV2RGVwZW5kZW5jaWVzIjoge30sCisgICJkaXJl
Y3RvcmllcyI6IHt9LAorICAiZGlzdCI6IHsKKyAgICAic2hhc3VtIjogImQyNTI5Mjc5YTZkYTVi
ZWZiMDZiNTVjMGMzMjRjNWZjZmQ5NGQ2NTYiLAorICAgICJ0YXJiYWxsIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL3RvZG9tdmMtYXBwLWNzcy8tL3RvZG9tdmMtYXBwLWNzcy0xLjAuNC50
Z3oiCisgIH0sCisgICJmaWxlcyI6IFsKKyAgICAiaW5kZXguY3NzIgorICBdLAorICAiZ2l0SGVh
ZCI6ICIxZTRlMzg4ODRhMzUxOTNlYWYxODA4YTViYTQ0NDIxODMyODY3MTg0IiwKKyAgImhvbWVw
YWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS90YXN0ZWpzL3RvZG9tdmMtYXBwLWNzcyIsCisgICJr
ZXl3b3JkcyI6IFsKKyAgICAidG9kb212YyIsCisgICAgInRhc3RlanMiLAorICAgICJhcHAiLAor
ICAgICJ0b2RvIiwKKyAgICAidGVtcGxhdGUiLAorICAgICJjc3MiLAorICAgICJzdHlsZSIsCisg
ICAgInN0eWxlc2hlZXQiCisgIF0sCisgICJsaWNlbnNlIjogIkNDLUJZLTQuMCIsCisgICJtYWlu
dGFpbmVycyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJzaW5kcmVzb3JodXMiLAorICAgICAg
ImVtYWlsIjogInNpbmRyZXNvcmh1c0BnbWFpbC5jb20iCisgICAgfSwKKyAgICB7CisgICAgICAi
bmFtZSI6ICJhZGR5b3NtYW5pIiwKKyAgICAgICJlbWFpbCI6ICJhZGR5b3NtYW5pQGdtYWlsLmNv
bSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInBhc3N5IiwKKyAgICAgICJlbWFpbCI6
ICJwaGFydGlnQHJkcmVpLm5ldCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInN0ZXBo
ZW5wbHVzcGx1cyIsCisgICAgICAiZW1haWwiOiAic2F3Y2h1a0BnbWFpbC5jb20iCisgICAgfQor
ICBdLAorICAibmFtZSI6ICJ0b2RvbXZjLWFwcC1jc3MiLAorICAib3B0aW9uYWxEZXBlbmRlbmNp
ZXMiOiB7fSwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIiwKKyAg
InJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImdpdCtodHRw
czovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWFwcC1jc3MuZ2l0IgorICB9LAorICAic2Ny
aXB0cyI6IHt9LAorICAidmVyc2lvbiI6ICIxLjAuNCIKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxl
cy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9yZWFk
bWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmRkYmViZjAyNGMwNGFlYjYwMjBjYWYxMzFhMmVkMDMxODkwODBh
NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy90b2RvbXZjLWFwcC1jc3MvcmVhZG1lLm1kCkBAIC0wLDAgKzEsMjggQEAKKyMgdG9kb212Yy1h
cHAtY3NzCisKKz4gQ1NTIGZvciBUb2RvTVZDIGFwcHMKKworIVtdKHNjcmVlbnNob3QucG5nKQor
CisKKyMjIEluc3RhbGwKKworCitgYGAKKyQgbnBtIGluc3RhbGwgLS1zYXZlIHRvZG9tdmMtYXBw
LWNzcworYGBgCisKKworIyMgR2V0dGluZyBzdGFydGVkCisKK2BgYGh0bWwKKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3Mi
PgorYGBgCisKK1NlZSB0aGUgW1RvZG9NVkMgYXBwIHRlbXBsYXRlXShodHRwczovL2dpdGh1Yi5j
b20vdGFzdGVqcy90b2RvbXZjLWFwcC10ZW1wbGF0ZSkuCisKKworCisjIyBMaWNlbnNlCisKKzxh
IHJlbD0ibGljZW5zZSIgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMv
YnkvNC4wL2RlZWQuZW5fVVMiPjxpbWcgYWx0PSJDcmVhdGl2ZSBDb21tb25zIExpY2Vuc2UiIHN0
eWxlPSJib3JkZXItd2lkdGg6MCIgc3JjPSJodHRwOi8vaS5jcmVhdGl2ZWNvbW1vbnMub3JnL2wv
YnkvNC4wLzgweDE1LnBuZyIgLz48L2E+PGJyIC8+VGhpcyA8c3BhbiB4bWxuczpkY3Q9Imh0dHA6
Ly9wdXJsLm9yZy9kYy90ZXJtcy8iIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9J
bnRlcmFjdGl2ZVJlc291cmNlIiByZWw9ImRjdDp0eXBlIj53b3JrPC9zcGFuPiBieSA8YSB4bWxu
czpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiBocmVmPSJodHRwOi8vc2luZHJl
c29yaHVzLmNvbSIgcHJvcGVydHk9ImNjOmF0dHJpYnV0aW9uTmFtZSIgcmVsPSJjYzphdHRyaWJ1
dGlvblVSTCI+U2luZHJlIFNvcmh1czwvYT4gaXMgbGljZW5zZWQgdW5kZXIgYSA8YSByZWw9Imxp
Y2Vuc2UiIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC9k
ZWVkLmVuX1VTIj5DcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFs
IExpY2Vuc2U8L2E+LgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9t
b2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQv
bm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkMjVkM2M4
NGFjNmM2YWVmMjZiOTY4M2EyYmMxMGM2MWY5NjBjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhh
bXBsZXMvZmxpZ2h0L2ZsaWdodC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MK
QEAgLTAsMCArMSwxNDEgQEAKK2hyIHsKKyAgICBtYXJnaW46IDIwcHggMDsKKyAgICBib3JkZXI6
IDA7CisgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjYzVjNWM1OworICAgIGJvcmRlci1ib3R0
b206IDFweCBkYXNoZWQgI2Y3ZjdmNzsKK30KKworLmxlYXJuIGEgeworICAgIGZvbnQtd2VpZ2h0
OiBub3JtYWw7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGNvbG9yOiAjYjgzZjQ1
OworfQorCisubGVhcm4gYTpob3ZlciB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7
CisgICAgY29sb3I6ICM3ODdlN2U7Cit9CisKKy5sZWFybiBoMywKKy5sZWFybiBoNCwKKy5sZWFy
biBoNSB7CisgICAgbWFyZ2luOiAxMHB4IDA7CisgICAgZm9udC13ZWlnaHQ6IDUwMDsKKyAgICBs
aW5lLWhlaWdodDogMS4yOworICAgIGNvbG9yOiAjMDAwOworfQorCisubGVhcm4gaDMgeworICAg
IGZvbnQtc2l6ZTogMjRweDsKK30KKworLmxlYXJuIGg0IHsKKyAgICBmb250LXNpemU6IDE4cHg7
Cit9CisKKy5sZWFybiBoNSB7CisgICAgbWFyZ2luLWJvdHRvbTogMDsKKyAgICBmb250LXNpemU6
IDE0cHg7Cit9CisKKy5sZWFybiB1bCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAg
MCAzMHB4IDI1cHg7Cit9CisKKy5sZWFybiBsaSB7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7Cit9
CisKKy5sZWFybiBwIHsKKyAgICBmb250LXNpemU6IDE1cHg7CisgICAgZm9udC13ZWlnaHQ6IDMw
MDsKKyAgICBsaW5lLWhlaWdodDogMS4zOworICAgIG1hcmdpbi10b3A6IDA7CisgICAgbWFyZ2lu
LWJvdHRvbTogMDsKK30KKworI2lzc3VlLWNvdW50IHsKKyAgICBkaXNwbGF5OiBub25lOworfQor
CisucXVvdGUgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXJnaW46IDIwcHggMCA2MHB4IDA7
Cit9CisKKy5xdW90ZSBwIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5xdW90ZSBw
OmJlZm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgZm9udC1zaXplOiA1MHB4OworICAg
IG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjBweDsK
KyAgICBsZWZ0OiAzcHg7Cit9CisKKy5xdW90ZSBwOmFmdGVyIHsKKyAgICBjb250ZW50OiAn4oCd
JzsKKyAgICBmb250LXNpemU6IDUwcHg7CisgICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MnB4OworICAgIHJpZ2h0OiAzcHg7Cit9CisKKy5x
dW90ZSBmb290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IC00MHB4
OworICAgIHJpZ2h0OiAwOworfQorCisucXVvdGUgZm9vdGVyIGltZyB7CisgICAgYm9yZGVyLXJh
ZGl1czogM3B4OworfQorCisucXVvdGUgZm9vdGVyIGEgeworICAgIG1hcmdpbi1sZWZ0OiA1cHg7
CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLnNwZWVjaC1idWJibGUgeworICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIGJhY2tncm91bmQ6
IHJnYmEoMCwgMCwgMCwgLjA0KTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7Cit9CisKKy5zcGVl
Y2gtYnViYmxlOmFmdGVyIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgICAgdG9wOiAxMDAlOworICAgIHJpZ2h0OiAzMHB4OworICAgIGJvcmRlcjogMTNweCBz
b2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC4w
NCk7Cit9CisKKy5sZWFybi1iYXIgPiAubGVhcm4geworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICB3aWR0aDogMjcycHg7CisgICAgdG9wOiA4cHg7CisgICAgbGVmdDogLTMwMHB4OworICAg
IHBhZGRpbmc6IDEwcHg7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpOworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6
IGxlZnQ7CisgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogNTAwbXM7Cit9CisKK0BtZWRpYSAobWlu
LXdpZHRoOiA4OTlweCkgeworICAgIC5sZWFybi1iYXIgeworICAgICAgICB3aWR0aDogYXV0bzsK
KyAgICAgICAgcGFkZGluZy1sZWZ0OiAzMDBweDsKKyAgICB9CisKKyAgICAubGVhcm4tYmFyID4g
LmxlYXJuIHsKKyAgICAgICAgbGVmdDogOHB4OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFt
cGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5
LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2Uu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODFlMDA2YmM1MDJkZGM0Yzc0ZjQ3YmQxM2E4MzkyMjc3ZjgzMGRiOAot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90
b2RvbXZjLWNvbW1vbi9iYXNlLmpzCkBAIC0wLDAgKzEsMjQ5IEBACisvKiBnbG9iYWwgXyAqLwor
KGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICAvKiBqc2hpbnQgaWdub3Jl
OnN0YXJ0ICovCisgICAgLy8gVW5kZXJzY29yZSdzIFRlbXBsYXRlIE1vZHVsZQorICAgIC8vIENv
dXJ0ZXN5IG9mIHVuZGVyc2NvcmVqcy5vcmcKKyAgICB2YXIgXyA9IChmdW5jdGlvbiAoXykgewor
ICAgICAgICBfLmRlZmF1bHRzID0gZnVuY3Rpb24gKG9iamVjdCkgeworICAgICAgICAgICAgaWYg
KCFvYmplY3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZm9yICh2YXIgYXJnc0luZGV4ID0gMSwgYXJnc0xlbmd0aCA9IGFyZ3Vt
ZW50cy5sZW5ndGg7IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGg7IGFyZ3NJbmRleCsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGl0ZXJhYmxlID0gYXJndW1lbnRzW2FyZ3NJbmRleF07CisgICAgICAg
ICAgICAgICAgaWYgKGl0ZXJhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtl
eSBpbiBpdGVyYWJsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFtrZXld
ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IGl0
ZXJhYmxlW2tleV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gb2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29y
ZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLCBjaGFuZ2UgdGhlCisgICAgICAg
IC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1p
dGVycy4KKyAgICAgICAgXy50ZW1wbGF0ZVNldHRpbmdzID0geworICAgICAgICAgICAgZXZhbHVh
dGUgICAgOiAvPCUoW1xzXFNdKz8pJT4vZywKKyAgICAgICAgICAgIGludGVycG9sYXRlIDogLzwl
PShbXHNcU10rPyklPi9nLAorICAgICAgICAgICAgZXNjYXBlICAgICAgOiAvPCUtKFtcc1xTXSs/
KSU+L2cKKyAgICAgICAgfTsKKworICAgICAgICAvLyBXaGVuIGN1c3RvbWl6aW5nIGB0ZW1wbGF0
ZVNldHRpbmdzYCwgaWYgeW91IGRvbid0IHdhbnQgdG8gZGVmaW5lIGFuCisgICAgICAgIC8vIGlu
dGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRo
YXQgaXMKKyAgICAgICAgLy8gZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2guCisgICAgICAgIHZhciBu
b01hdGNoID0gLyguKV4vOworCisgICAgICAgIC8vIENlcnRhaW4gY2hhcmFjdGVycyBuZWVkIHRv
IGJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbiBiZSBwdXQgaW50byBhCisgICAgICAgIC8vIHN0
cmluZyBsaXRlcmFsLgorICAgICAgICB2YXIgZXNjYXBlcyA9IHsKKyAgICAgICAgICAgICInIjog
ICAgICAiJyIsCisgICAgICAgICAgICAnXFwnOiAgICAgJ1xcJywKKyAgICAgICAgICAgICdccic6
ICAgICAncicsCisgICAgICAgICAgICAnXG4nOiAgICAgJ24nLAorICAgICAgICAgICAgJ1x0Jzog
ICAgICd0JywKKyAgICAgICAgICAgICdcdTIwMjgnOiAndTIwMjgnLAorICAgICAgICAgICAgJ1x1
MjAyOSc6ICd1MjAyOScKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgZXNjYXBlciA9IC9cXHwn
fFxyfFxufFx0fFx1MjAyOHxcdTIwMjkvZzsKKworICAgICAgICAvLyBKYXZhU2NyaXB0IG1pY3Jv
LXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLgorICAg
ICAgICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVy
cywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCisgICAgICAgIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBl
cyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLgorICAgICAgICBfLnRlbXBsYXRlID0g
ZnVuY3Rpb24odGV4dCwgZGF0YSwgc2V0dGluZ3MpIHsKKyAgICAgICAgICAgIHZhciByZW5kZXI7
CisgICAgICAgICAgICBzZXR0aW5ncyA9IF8uZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfLnRlbXBs
YXRlU2V0dGluZ3MpOworCisgICAgICAgICAgICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBv
bmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KKyAgICAgICAgICAgIHZhciBt
YXRjaGVyID0gbmV3IFJlZ0V4cChbCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmVzY2FwZSB8
fCBub01hdGNoKS5zb3VyY2UsCisgICAgICAgICAgICAgICAgKHNldHRpbmdzLmludGVycG9sYXRl
IHx8IG5vTWF0Y2gpLnNvdXJjZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXZhbHVhdGUg
fHwgbm9NYXRjaCkuc291cmNlCisgICAgICAgICAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7
CisKKyAgICAgICAgICAgIC8vIENvbXBpbGUgdGhlIHRlbXBsYXRlIHNvdXJjZSwgZXNjYXBpbmcg
c3RyaW5nIGxpdGVyYWxzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICB2YXIgaW5kZXggPSAw
OworICAgICAgICAgICAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOworICAgICAgICAgICAgdGV4dC5y
ZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFs
dWF0ZSwgb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5k
ZXgsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoZXNjYXBlciwgZnVuY3Rp
b24obWF0Y2gpIHsgcmV0dXJuICdcXCcgKyBlc2NhcGVzW21hdGNoXTsgfSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJytc
bigoX190PSgiICsgZXNjYXBlICsgIikpPT1udWxsPycnOl8uZXNjYXBlKF9fdCkpK1xuJyI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZSkgeworICAg
ICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsg
IikpPT1udWxsPycnOl9fdCkrXG4nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGV2YWx1YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSAiJztcbiIg
KyBldmFsdWF0ZSArICJcbl9fcCs9JyI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVy
biBtYXRjaDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc291cmNlICs9ICInO1xuIjsK
KworICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBk
YXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS4KKyAgICAgICAgICAgIGlmICghc2V0dGluZ3MudmFy
aWFibGUpIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xuJyArIHNvdXJjZSArICd9XG4nOworCisg
ICAgICAgICAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5q
b2luLCIgKworICAgICAgICAgICAgICAgICJwcmludD1mdW5jdGlvbigpe19fcCs9X19qLmNhbGwo
YXJndW1lbnRzLCcnKTt9O1xuIiArCisgICAgICAgICAgICAgICAgc291cmNlICsgInJldHVybiBf
X3A7XG4iOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlbmRlciA9IG5l
dyBGdW5jdGlvbihzZXR0aW5ncy52YXJpYWJsZSB8fCAnb2JqJywgJ18nLCBzb3VyY2UpOworICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGUuc291cmNlID0gc291cmNl
OworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChkYXRhKSByZXR1cm4gcmVuZGVyKGRhdGEsIF8pOworICAgICAgICAgICAgdmFyIHRlbXBs
YXRlID0gZnVuY3Rpb24oZGF0YSkgeworICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIuY2Fs
bCh0aGlzLCBkYXRhLCBfKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8vIFByb3Zp
ZGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIHNvdXJjZSBhcyBhIGNvbnZlbmllbmNlIGZvciBwcmVj
b21waWxhdGlvbi4KKyAgICAgICAgICAgIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsg
KHNldHRpbmdzLnZhcmlhYmxlIHx8ICdvYmonKSArICcpe1xuJyArIHNvdXJjZSArICd9JzsKKwor
ICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgICAgICB9OworCisgICAgICAgIHJldHVy
biBfOworICAgIH0pKHt9KTsKKworICAgIGlmIChsb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ3RvZG9t
dmMuY29tJykgeworICAgICAgICAoZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5h
bHl0aWNzT2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7CisgICAgICAgIChpW3JdLnE9
aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVh
dGVFbGVtZW50KG8pLAorICAgICAgICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5h
c3luYz0xO2Euc3JjPWc7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG0pCisgICAgICAgIH0p
KHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5j
b20vYW5hbHl0aWNzLmpzJywnZ2EnKTsKKyAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS0zMTA4MTA2
Mi0xJywgJ2F1dG8nKTsKKyAgICAgICAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsKKyAgICB9Cisg
ICAgLyoganNoaW50IGlnbm9yZTplbmQgKi8KKworICAgIGZ1bmN0aW9uIHJlZGlyZWN0KCkgewor
ICAgICAgICBpZiAobG9jYXRpb24uaG9zdG5hbWUgPT09ICd0YXN0ZWpzLmdpdGh1Yi5pbycpIHsK
KyAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ3Rhc3Rl
anMuZ2l0aHViLmlvL3RvZG9tdmMnLCAndG9kb212Yy5jb20nKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbmRSb290KCkgeworICAgICAgICB2YXIgYmFzZSA9IGxvY2F0aW9u
LmhyZWYuaW5kZXhPZignZXhhbXBsZXMvJyk7CisgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVm
LnN1YnN0cigwLCBiYXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRGaWxlKGZpbGUsIGNh
bGxiYWNrKSB7CisgICAgICAgIGlmICghbG9jYXRpb24uaG9zdCkgeworICAgICAgICAgICAgcmV0
dXJuIGNvbnNvbGUuaW5mbygnTWlzcyB0aGUgaW5mbyBiYXI/IFJ1biBUb2RvTVZDIGZyb20gYSBz
ZXJ2ZXIgdG8gYXZvaWQgYSBjcm9zcy1vcmlnaW4gZXJyb3IuJyk7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAgICAgICAgeGhyLm9wZW4o
J0dFVCcsIGZpbmRSb290KCkgKyBmaWxlLCB0cnVlKTsKKyAgICAgICAgeGhyLnNlbmQoKTsKKwor
ICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHhoci5z
dGF0dXMgPT09IDIwMCAmJiBjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHho
ci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAg
IGZ1bmN0aW9uIExlYXJuKGxlYXJuSlNPTiwgY29uZmlnKSB7CisgICAgICAgIGlmICghKHRoaXMg
aW5zdGFuY2VvZiBMZWFybikpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTGVhcm4obGVhcm5K
U09OLCBjb25maWcpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRlbXBsYXRlLCBmcmFtZXdv
cms7CisKKyAgICAgICAgaWYgKHR5cGVvZiBsZWFybkpTT04gIT09ICdvYmplY3QnKSB7CisgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxlYXJuSlNPTiA9IEpTT04ucGFyc2UobGVh
cm5KU09OKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnKSB7Cisg
ICAgICAgICAgICB0ZW1wbGF0ZSA9IGNvbmZpZy50ZW1wbGF0ZTsKKyAgICAgICAgICAgIGZyYW1l
d29yayA9IGNvbmZpZy5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlbXBs
YXRlICYmIGxlYXJuSlNPTi50ZW1wbGF0ZXMpIHsKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGVh
cm5KU09OLnRlbXBsYXRlcy50b2RvbXZjOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmcmFt
ZXdvcmsgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZnJhbWV3b3JrXScpKSB7Cisg
ICAgICAgICAgICBmcmFtZXdvcmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFt
ZXdvcmtdJykuZGF0YXNldC5mcmFtZXdvcms7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnRl
bXBsYXRlID0gdGVtcGxhdGU7CisKKyAgICAgICAgaWYgKGxlYXJuSlNPTi5iYWNrZW5kKSB7Cisg
ICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT04uYmFja2VuZDsKKyAgICAg
ICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAgICAg
ICAgICAgdGhpcy5hcHBlbmQoeworICAgICAgICAgICAgICAgIGJhY2tlbmQ6IHRydWUKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKGxlYXJuSlNPTltmcmFtZXdvcmtdKSB7Cisg
ICAgICAgICAgICB0aGlzLmZyYW1ld29ya0pTT04gPSBsZWFybkpTT05bZnJhbWV3b3JrXTsKKyAg
ICAgICAgICAgIHRoaXMuZnJhbWV3b3JrSlNPTi5pc3N1ZUxhYmVsID0gZnJhbWV3b3JrOworICAg
ICAgICAgICAgdGhpcy5hcHBlbmQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuZmV0Y2hJ
c3N1ZUNvdW50KCk7CisgICAgfQorCisgICAgTGVhcm4ucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0
aW9uIChvcHRzKSB7CisgICAgICAgIHZhciBhc2lkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2FzaWRlJyk7CisgICAgICAgIGFzaWRlLmlubmVySFRNTCA9IF8udGVtcGxhdGUodGhpcy50ZW1w
bGF0ZSwgdGhpcy5mcmFtZXdvcmtKU09OKTsKKyAgICAgICAgYXNpZGUuY2xhc3NOYW1lID0gJ2xl
YXJuJzsKKworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmJhY2tlbmQpIHsKKyAgICAgICAgICAg
IC8vIFJlbW92ZSBkZW1vIGxpbmsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rcyA9IGFzaWRl
LnF1ZXJ5U2VsZWN0b3IoJy5zb3VyY2UtbGlua3MnKTsKKyAgICAgICAgICAgIHZhciBoZWFkaW5n
ID0gc291cmNlTGlua3MuZmlyc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICB2YXIgc291cmNl
TGluayA9IHNvdXJjZUxpbmtzLmxhc3RFbGVtZW50Q2hpbGQ7CisgICAgICAgICAgICAvLyBDb3Jy
ZWN0IGxpbmsgcGF0aAorICAgICAgICAgICAgdmFyIGhyZWYgPSBzb3VyY2VMaW5rLmdldEF0dHJp
YnV0ZSgnaHJlZicpOworICAgICAgICAgICAgc291cmNlTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYn
LCBocmVmLnN1YnN0cihocmVmLmxhc3RJbmRleE9mKCdodHRwJykpKTsKKyAgICAgICAgICAgIHNv
dXJjZUxpbmtzLmlubmVySFRNTCA9IGhlYWRpbmcub3V0ZXJIVE1MICsgc291cmNlTGluay5vdXRl
ckhUTUw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMb2NhbGl6ZSBkZW1vIGxp
bmtzCisgICAgICAgICAgICB2YXIgZGVtb0xpbmtzID0gYXNpZGUucXVlcnlTZWxlY3RvckFsbCgn
LmRlbW8tbGluaycpOworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChk
ZW1vTGlua3MsIGZ1bmN0aW9uIChkZW1vTGluaykgeworICAgICAgICAgICAgICAgIGlmIChkZW1v
TGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zdWJzdHIoMCwgNCkgIT09ICdodHRwJykgeworICAg
ICAgICAgICAgICAgICAgICBkZW1vTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBmaW5kUm9vdCgp
ICsgZGVtb0xpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc05h
bWUgPSAoZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKyAnIGxlYXJuLWJhcicpLnRyaW0oKTsKKyAg
ICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyQmVnaW4nLCBhc2lk
ZS5vdXRlckhUTUwpOworICAgIH07CisKKyAgICBMZWFybi5wcm90b3R5cGUuZmV0Y2hJc3N1ZUNv
dW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaXNzdWVMaW5rID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2lzc3VlLWNvdW50LWxpbmsnKTsKKyAgICAgICAgaWYgKGlzc3VlTGluaykg
eworICAgICAgICAgICAgdmFyIHVybCA9IGlzc3VlTGluay5ocmVmLnJlcGxhY2UoJ2h0dHBzOi8v
Z2l0aHViLmNvbScsICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zJyk7CisgICAgICAgICAg
ICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB4aHIub3Blbign
R0VUJywgdXJsLCB0cnVlKTsKKyAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkg
eworICAgICAgICAgICAgICAgIHZhciBwYXJzZWRSZXNwb25zZSA9IEpTT04ucGFyc2UoZS50YXJn
ZXQucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VkUmVzcG9uc2UgaW5z
dGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZWRS
ZXNwb25zZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCAhPT0gMCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVMaW5rLmlubmVySFRNTCA9ICdUaGlzIGFwcCBo
YXMgJyArIGNvdW50ICsgJyBvcGVuIGlzc3Vlcyc7CisgICAgICAgICAgICAgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNzdWUtY291bnQnKS5zdHlsZS5kaXNwbGF5ID0gJ2lu
bGluZSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgeGhyLnNlbmQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICByZWRpcmVjdCgpOworICAgIGdldEZpbGUoJ2xlYXJuLmpzb24nLCBMZWFybik7Cit9KSgpOwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3RvZG9tdmMt
Y29tbW9uL3BhY2thZ2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxl
cy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODlmOWE4YmRiZDkyMWQ0
MjkyMDcwOWQ5MjdjNmRiY2Q4NWZmMzE4OAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9wYWNrYWdlLmpzb24KQEAg
LTAsMCArMSwxMDQgQEAKK3sKKyAgIl9hcmdzIjogWworICAgIFsKKyAgICAgIHsKKyAgICAgICAg
InJhdyI6ICJ0b2RvbXZjLWNvbW1vbkBeMS4wLjEiLAorICAgICAgICAic2NvcGUiOiBudWxsLAor
ICAgICAgICAiZXNjYXBlZE5hbWUiOiAidG9kb212Yy1jb21tb24iLAorICAgICAgICAibmFtZSI6
ICJ0b2RvbXZjLWNvbW1vbiIsCisgICAgICAgICJyYXdTcGVjIjogIl4xLjAuMSIsCisgICAgICAg
ICJzcGVjIjogIj49MS4wLjEgPDIuMC4wIiwKKyAgICAgICAgInR5cGUiOiAicmFuZ2UiCisgICAg
ICB9LAorICAgICAgIi9Vc2Vycy9hZGR5by9EZXNrdG9wL1NwZWVkb21ldGVyLWEvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQiCisgICAgXQorICBdLAorICAiX2Zy
b20iOiAidG9kb212Yy1jb21tb25APj0xLjAuMSA8Mi4wLjAiLAorICAiX2lkIjogInRvZG9tdmMt
Y29tbW9uQDEuMC4zIiwKKyAgIl9pbkNhY2hlIjogdHJ1ZSwKKyAgIl9sb2NhdGlvbiI6ICIvdG9k
b212Yy1jb21tb24iLAorICAiX25vZGVWZXJzaW9uIjogIjcuMS4wIiwKKyAgIl9ucG1PcGVyYXRp
b25hbEludGVybmFsIjogeworICAgICJob3N0IjogInBhY2thZ2VzLTE4LWVhc3QuaW50ZXJuYWwu
bnBtanMuY29tIiwKKyAgICAidG1wIjogInRtcC90b2RvbXZjLWNvbW1vbi0xLjAuMy50Z3pfMTQ3
OTI3NjM2MTIyN18wLjUxMTI0ODgwMTM2OTIyIgorICB9LAorICAiX25wbVVzZXIiOiB7CisgICAg
Im5hbWUiOiAic2luZHJlc29yaHVzIiwKKyAgICAiZW1haWwiOiAic2luZHJlc29yaHVzQGdtYWls
LmNvbSIKKyAgfSwKKyAgIl9ucG1WZXJzaW9uIjogIjMuMTAuOSIsCisgICJfcGhhbnRvbUNoaWxk
cmVuIjoge30sCisgICJfcmVxdWVzdGVkIjogeworICAgICJyYXciOiAidG9kb212Yy1jb21tb25A
XjEuMC4xIiwKKyAgICAic2NvcGUiOiBudWxsLAorICAgICJlc2NhcGVkTmFtZSI6ICJ0b2RvbXZj
LWNvbW1vbiIsCisgICAgIm5hbWUiOiAidG9kb212Yy1jb21tb24iLAorICAgICJyYXdTcGVjIjog
Il4xLjAuMSIsCisgICAgInNwZWMiOiAiPj0xLjAuMSA8Mi4wLjAiLAorICAgICJ0eXBlIjogInJh
bmdlIgorICB9LAorICAiX3JlcXVpcmVkQnkiOiBbCisgICAgIi8iCisgIF0sCisgICJfcmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9kb212Yy1jb21tb24vLS90b2RvbXZj
LWNvbW1vbi0xLjAuMy50Z3oiLAorICAiX3NoYXN1bSI6ICJjYmExODY4MTA5Y2FhNDAxYjkwOGVi
Zjc3Nzk0Y2MxMDE0Yjc0ODczIiwKKyAgIl9zaHJpbmt3cmFwIjogbnVsbCwKKyAgIl9zcGVjIjog
InRvZG9tdmMtY29tbW9uQF4xLjAuMSIsCisgICJfd2hlcmUiOiAiL1VzZXJzL2FkZHlvL0Rlc2t0
b3AvU3BlZWRvbWV0ZXItYS9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2Zs
aWdodCIsCisgICJhdXRob3IiOiB7CisgICAgIm5hbWUiOiAiVGFzdGVKUyIKKyAgfSwKKyAgImJ1
Z3MiOiB7CisgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWNv
bW1vbi9pc3N1ZXMiCisgIH0sCisgICJkZXBlbmRlbmNpZXMiOiB7fSwKKyAgImRlc2NyaXB0aW9u
IjogIkNvbW1vbiBUb2RvTVZDIHV0aWxpdGllcyB1c2VkIGJ5IG91ciBhcHBzIiwKKyAgImRldkRl
cGVuZGVuY2llcyI6IHt9LAorICAiZGlyZWN0b3JpZXMiOiB7fSwKKyAgImRpc3QiOiB7CisgICAg
InNoYXN1bSI6ICJjYmExODY4MTA5Y2FhNDAxYjkwOGViZjc3Nzk0Y2MxMDE0Yjc0ODczIiwKKyAg
ICAidGFyYmFsbCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWNvbW1vbi8t
L3RvZG9tdmMtY29tbW9uLTEuMC4zLnRneiIKKyAgfSwKKyAgImZpbGVzIjogWworICAgICJiYXNl
LmpzIiwKKyAgICAiYmFzZS5jc3MiCisgIF0sCisgICJnaXRIZWFkIjogImU3NDI1YmFmYjk1NjFk
NzY2Yjc2OTg0NDgxMGUwNDk2NzM0ZmZlOGMiLAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRo
dWIuY29tL3Rhc3RlanMvdG9kb212Yy1jb21tb24jcmVhZG1lIiwKKyAgImtleXdvcmRzIjogWwor
ICAgICJ0b2RvbXZjIiwKKyAgICAidGFzdGVqcyIsCisgICAgInV0aWwiLAorICAgICJ1dGlsaXRp
ZXMiCisgIF0sCisgICJsaWNlbnNlIjogIk1JVCIsCisgICJtYWluIjogImJhc2UuanMiLAorICAi
bWFpbnRhaW5lcnMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAic2luZHJlc29yaHVzIiwKKyAg
ICAgICJlbWFpbCI6ICJzaW5kcmVzb3JodXNAZ21haWwuY29tIgorICAgIH0sCisgICAgeworICAg
ICAgIm5hbWUiOiAiYWRkeW9zbWFuaSIsCisgICAgICAiZW1haWwiOiAiYWRkeW9zbWFuaUBnbWFp
bC5jb20iCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwYXNzeSIsCisgICAgICAiZW1h
aWwiOiAicGhhcnRpZ0ByZHJlaS5uZXQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJz
dGVwaGVucGx1c3BsdXMiLAorICAgICAgImVtYWlsIjogInNhd2NodWtAZ21haWwuY29tIgorICAg
IH0KKyAgXSwKKyAgIm5hbWUiOiAidG9kb212Yy1jb21tb24iLAorICAib3B0aW9uYWxEZXBlbmRl
bmNpZXMiOiB7fSwKKyAgInJlYWRtZSI6ICJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhIiwK
KyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImdpdCto
dHRwczovL2dpdGh1Yi5jb20vdGFzdGVqcy90b2RvbXZjLWNvbW1vbi5naXQiCisgIH0sCisgICJz
Y3JpcHRzIjoge30sCisgICJzdHlsZSI6ICJiYXNlLmNzcyIsCisgICJ2ZXJzaW9uIjogIjEuMC4z
IgorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtY29tbW9uL3JlYWRtZS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvZmxpZ2h0L25vZGVfbW9k
dWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2E1ZGU1MTE4ZjNmYzc3
NThlOGRkYzBhNjg2ODc0OWNlZTljYWY5NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9m
bGlnaHQvZmxpZ2h0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9yZWFkbWUubWQKQEAgLTAs
MCArMSwxNSBAQAorIyB0b2RvbXZjLWNvbW1vbgorCis+IENvbW1vbiBUb2RvTVZDIHV0aWxpdGll
cyB1c2VkIGJ5IG91ciBhcHBzCisKKworIyMgSW5zdGFsbAorCitgYGAKKyQgbnBtIGluc3RhbGwg
LS1zYXZlIHRvZG9tdmMtY29tbW9uCitgYGAKKworCisjIyBMaWNlbnNlCisKK01JVCDCqSBbVGFz
dGVKU10oaHR0cDovL3Rhc3RlanMuY29tKQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9m
bGlnaHQvcGFja2FnZS5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9mbGlnaHQvcGFja2FnZS5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg0Njc4NGRkOWZkMWFiNmM4MjA1YWUxNDZkYzRjZWYyZmZlNjQyYmUKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L2ZsaWdodC9wYWNrYWdlLmpzb24KQEAg
LTAsMCArMSwxMyBAQAoreworCSJwcml2YXRlIjogdHJ1ZSwKKwkiZGVwZW5kZW5jaWVzIjogewor
CQkiZGVwb3QiOiAiXjAuMS42IiwKKwkJImVzNS1zaGltIjogIl4yLjAuMCIsCisJCSJmbGlnaHRq
cyI6ICJmbGlnaHRqcy9mbGlnaHQjdjEuMy4wIiwKKwkJImpxdWVyeSI6ICJeMi4xLjAiLAorCQki
cmVxdWlyZWpzIjogIl4yLjEuMTUiLAorCQkicmVxdWlyZWpzLXRleHQiOiAiXjIuMC4xMiIsCisJ
CSJ0b2RvbXZjLWFwcC1jc3MiOiAiXjEuMC4wIiwKKwkJInRvZG9tdmMtY29tbW9uIjogIl4xLjAu
MSIKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1w
bGVzL2ZsaWdodC9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9pbmRleC5odG1sCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGFjZWVjNjA4ODZlOTUxNjUwYTRlMWYwNDZiMzhm
NzE5YjI1MjdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAg
QEAKLTwhZG9jdHlwZSBodG1sPgotPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJmbGln
aHQiPgotICAgIDxoZWFkPgotICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Ci0gICAgICAg
IDx0aXRsZT5GbGlnaHQg4oCiIFRvZG88L3RpdGxlPgotICAgICAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9ImJvd2VyX2NvbXBvbmVudHMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MiPgot
ICAgIDwvaGVhZD4KLSAgICA8Ym9keT4KLSAgICAgICAgPHNlY3Rpb24gaWQ9InRvZG9hcHAiPgot
ICAgICAgICAgICAgPGhlYWRlciBpZD0iaGVhZGVyIj4KLSAgICAgICAgICAgICAgICA8aDE+dG9k
b3M8L2gxPgotICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ibmV3LXRvZG8iIHBsYWNlaG9sZGVy
PSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+Ci0gICAgICAgICAgICA8L2hlYWRl
cj4KLSAgICAgICAgICAgIDxzZWN0aW9uIGlkPSJtYWluIj4KLSAgICAgICAgICAgICAgICA8aW5w
dXQgaWQ9InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94Ij4KLSAgICAgICAgICAgICAgICA8bGFi
ZWwgZm9yPSJ0b2dnbGUtYWxsIj5NYXJrIGFsbCBhcyBjb21wbGV0ZTwvbGFiZWw+Ci0gICAgICAg
ICAgICAgICAgPHVsIGlkPSJ0b2RvLWxpc3QiPjwvdWw+Ci0gICAgICAgICAgICA8L3NlY3Rpb24+
Ci0gICAgICAgICAgICA8Zm9vdGVyIGlkPSJmb290ZXIiPjwvZm9vdGVyPgotICAgICAgICA8L3Nl
Y3Rpb24+Ci0gICAgICAgIDxmb290ZXIgaWQ9ImluZm8iPgotICAgICAgICAgICAgPHA+RG91Ymxl
LWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgotICAgICAgICAgICAgPHA+Q3JlYXRlZCBieSA8YSBo
cmVmPSJodHRwOi8vZ2l0aHViLmNvbS9ta3VrbGlzIj5NaWNoYWwgS3VrbGlzPC9hPjwvcD4KLSAg
ICAgICAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZD
PC9hPjwvcD4KLSAgICAgICAgPC9mb290ZXI+Ci0gICAgICAgIDxzY3JpcHQgc3JjPSJib3dlcl9j
b21wb25lbnRzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMiPjwvc2NyaXB0PgotICAgICAgICA8c2Ny
aXB0IGRhdGEtbWFpbj0iYXBwL2pzL21haW4iIHNyYz0iYm93ZXJfY29tcG9uZW50cy9yZXF1aXJl
anMvcmVxdWlyZS5qcyI+PC9zY3JpcHQ+Ci0gICAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC9rYXJtYS5jb25mLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9rYXJt
YS5jb25mLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWMyNDJiOTUzNzIyMmFl
M2ExYTI0YzU0NmM1MzQ1NTFmYTNlMDVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQva2FybWEuY29uZi5qcworKysgL2Rldi9u
dWxsCkBAIC0xLDg0ICswLDAgQEAKLS8vIEthcm1hIGNvbmZpZ3VyYXRpb24gZmlsZQotLy8KLS8v
IEZvciBhbGwgYXZhaWxhYmxlIGNvbmZpZyBvcHRpb25zIGFuZCBkZWZhdWx0IHZhbHVlcywgc2Vl
OgotLy8gaHR0cHM6Ly9naXRodWIuY29tL2thcm1hLXJ1bm5lci9rYXJtYS9ibG9iL3N0YWJsZS9s
aWIvY29uZmlnLmpzI0w1NAotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb25maWcpIHsK
LSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICBjb25maWcuc2V0KHsKLSAgICAgICAgLy8gYmFzZSBw
YXRoLCB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXNvbHZlIGZpbGVzIGFuZCBleGNsdWRlCi0gICAg
ICAgIGJhc2VQYXRoOiAnJywKLQotICAgICAgICBmcmFtZXdvcmtzOiBbJ2phc21pbmUnXSwKLQot
ICAgICAgICAvLyBsaXN0IG9mIGZpbGVzIC8gcGF0dGVybnMgdG8gbG9hZCBpbiB0aGUgYnJvd3Nl
cgotICAgICAgICBmaWxlczogWwotICAgICAgICAgICAgLy8gbG9hZGVkIHdpdGhvdXQgcmVxdWly
ZQotICAgICAgICAgICAgJ2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0uanMnLAot
ICAgICAgICAgICAgJ2Jvd2VyX2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0uanMnLAotICAg
ICAgICAgICAgJ2Jvd2VyX2NvbXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5qcycsCi0gICAgICAgICAg
ICAnYm93ZXJfY29tcG9uZW50cy9qYXNtaW5lLWZsaWdodC9saWIvamFzbWluZS1mbGlnaHQuanMn
LAotICAgICAgICAgICAgJ2Jvd2VyX2NvbXBvbmVudHMvamFzbWluZS1qcXVlcnkvbGliL2phc21p
bmUtanF1ZXJ5LmpzJywKLQotICAgICAgICAgICAgLy8gaGFjayB0byBsb2FkIFJlcXVpcmVKUyBh
ZnRlciB0aGUgc2hpbSBsaWJzCi0gICAgICAgICAgICAnbm9kZV9tb2R1bGVzL2thcm1hLXJlcXVp
cmVqcy9saWIvcmVxdWlyZS5qcycsCi0gICAgICAgICAgICAnbm9kZV9tb2R1bGVzL2thcm1hLXJl
cXVpcmVqcy9saWIvYWRhcHRlci5qcycsCi0KLSAgICAgICAgICAgIC8vIGxvYWRlZCB3aXRoIHJl
cXVpcmUKLSAgICAgICAgICAgIHsgcGF0dGVybjogJ2Jvd2VyX2NvbXBvbmVudHMvZmxpZ2h0Lyoq
LyouanMnLCBpbmNsdWRlZDogZmFsc2UgfSwKLSAgICAgICAgICAgIHsgcGF0dGVybjogJ2Jvd2Vy
X2NvbXBvbmVudHMvZGVwb3QvKiovKi5qcycsIGluY2x1ZGVkOiBmYWxzZSB9LAotICAgICAgICAg
ICAgeyBwYXR0ZXJuOiAnYm93ZXJfY29tcG9uZW50cy9yZXF1aXJlanMtdGV4dC90ZXh0LmpzJywg
aW5jbHVkZWQ6IGZhbHNlIH0sCi0gICAgICAgICAgICB7IHBhdHRlcm46ICdhcHAvKiovKi5qcycs
IGluY2x1ZGVkOiBmYWxzZSB9LAotICAgICAgICAgICAgeyBwYXR0ZXJuOiAnYXBwLyoqLyouaHRt
bCcsIGluY2x1ZGVkOiBmYWxzZSB9LAotICAgICAgICAgICAgeyBwYXR0ZXJuOiAndGVzdC9zcGVj
LyoqLypfc3BlYy5qcycsIGluY2x1ZGVkOiBmYWxzZSB9LAotICAgICAgICAgICAgeyBwYXR0ZXJu
OiAndGVzdC9maXh0dXJlLyouaHRtbCcsIGluY2x1ZGVkOiBmYWxzZSB9LAotCi0gICAgICAgICAg
ICAvLyBFbnRyeSBwb2ludCBmb3Iga2FybWEuCi0gICAgICAgICAgICAndGVzdC90ZXN0LW1haW4u
anMnLAotCi0gICAgICAgICAgICB7IHBhdHRlcm46ICd0ZXN0L21vY2svKi5qcycsIGluY2x1ZGVk
OiB0cnVlIH0KLSAgICAgICAgXSwKLQotICAgICAgICAvLyBsaXN0IG9mIGZpbGVzIHRvIGV4Y2x1
ZGUKLSAgICAgICAgZXhjbHVkZTogW10sCi0KLSAgICAgICAgLy8gdXNlIGRvdHMgcmVwb3J0ZXIs
IGFzIHRyYXZpcyB0ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IGVzY2FwaW5nIHNlcXVlbmNlcwot
ICAgICAgICAvLyBwb3NzaWJsZSB2YWx1ZXM6ICdkb3RzJywgJ3Byb2dyZXNzJwotICAgICAgICAv
LyBDTEkgLS1yZXBvcnRlcnMgcHJvZ3Jlc3MKLSAgICAgICAgcmVwb3J0ZXJzOiBbJ2RvdHMnXSwK
LQotICAgICAgICAvLyBlbmFibGUgLyBkaXNhYmxlIHdhdGNoaW5nIGZpbGUgYW5kIGV4ZWN1dGlu
ZyB0ZXN0cyB3aGVuZXZlciBhbnkgZmlsZSBjaGFuZ2VzCi0gICAgICAgIC8vIENMSSAtLWF1dG8t
d2F0Y2ggLS1uby1hdXRvLXdhdGNoCi0gICAgICAgIGF1dG9XYXRjaDogdHJ1ZSwKLQotICAgICAg
ICAvLyBTdGFydCB0aGVzZSBicm93c2VycywgY3VycmVudGx5IGF2YWlsYWJsZToKLSAgICAgICAg
Ly8gLSBDaHJvbWUKLSAgICAgICAgLy8gLSBDaHJvbWVDYW5hcnkKLSAgICAgICAgLy8gLSBGaXJl
Zm94Ci0gICAgICAgIC8vIC0gT3BlcmEKLSAgICAgICAgLy8gLSBTYWZhcmkgKG9ubHkgTWFjKQot
ICAgICAgICAvLyAtIFBoYW50b21KUwotICAgICAgICAvLyAtIElFIChvbmx5IFdpbmRvd3MpCi0g
ICAgICAgIC8vIENMSSAtLWJyb3dzZXJzIENocm9tZSwgRmlyZWZveCwgU2FmYXJpCi0gICAgICAg
IGJyb3dzZXJzOiBbJ0Nocm9tZScsICdGaXJlZm94J10sCi0KLSAgICAgICAgLy8gSWYgYnJvd3Nl
ciBkb2VzIG5vdCBjYXB0dXJlIGluIGdpdmVuIHRpbWVvdXQgW21zXSwga2lsbCBpdAotICAgICAg
ICAvLyBDTEkgLS1jYXB0dXJlLXRpbWVvdXQgNTAwMAotICAgICAgICBjYXB0dXJlVGltZW91dDog
MjAwMDAsCi0KLSAgICAgICAgLy8gQXV0byBydW4gdGVzdHMgb24gc3RhcnQgKHdoZW4gYnJvd3Nl
cnMgYXJlIGNhcHR1cmVkKSBhbmQgZXhpdAotICAgICAgICAvLyBDTEkgLS1zaW5nbGUtcnVuIC0t
bm8tc2luZ2xlLXJ1bgotICAgICAgICBzaW5nbGVSdW46IGZhbHNlLAotCi0gICAgICAgIHBsdWdp
bnM6IFsKLSAgICAgICAgICAgICdrYXJtYS1qYXNtaW5lJywKLSAgICAgICAgICAgICdrYXJtYS1y
ZXF1aXJlanMnLAotICAgICAgICAgICAgJ2thcm1hLWNocm9tZS1sYXVuY2hlcicsCi0gICAgICAg
ICAgICAna2FybWEtZmlyZWZveC1sYXVuY2hlcicsCi0gICAgICAgICAgICAna2FybWEtaWUtbGF1
bmNoZXInLAotICAgICAgICAgICAgJ2thcm1hLXBoYW50b21qcy1sYXVuY2hlcicsCi0gICAgICAg
ICAgICAna2FybWEtc2FmYXJpLWxhdW5jaGVyJwotICAgICAgICBdCi0gICAgfSk7Ci19OwpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9k
ZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0
L3BhY2thZ2UuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxY2Y3MmM4NWQ2
M2U4NzdlMzg5ODY5ZmFkYTYxZTQ0ZTI5NGFjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3BhY2thZ2UuanNvbgorKysgL2Rl
di9udWxsCkBAIC0xLDE3ICswLDAgQEAKLXsKLSAgIm5hbWUiOiAiZmxpZ2h0LXRvZG9tdmMiLAot
ICAidmVyc2lvbiI6ICIwLjAuMCIsCi0gICJkZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgImthcm1h
IjogIn4wLjEwLjEiLAotICAgICJrYXJtYS1qYXNtaW5lIjogIn4wLjEuMCIsCi0gICAgImthcm1h
LXJlcXVpcmVqcyI6ICJ+MC4xLjAiLAotICAgICJrYXJtYS1jaHJvbWUtbGF1bmNoZXIiOiAifjAu
MS4wIiwKLSAgICAia2FybWEtaWUtbGF1bmNoZXIiOiAifjAuMS4xIiwKLSAgICAia2FybWEtZmly
ZWZveC1sYXVuY2hlciI6ICJ+MC4xLjAiLAotICAgICJrYXJtYS1waGFudG9tanMtbGF1bmNoZXIi
OiAifjAuMS4wIiwKLSAgICAia2FybWEtc2FmYXJpLWxhdW5jaGVyIjogIn4wLjEuMSIKLSAgfSwK
LSAgInNjcmlwdHMiOiB7Ci0gICAgInRlc3QiOiAia2FybWEgc3RhcnQgLS1icm93c2VycyBGaXJl
Zm94IC0tc2luZ2xlLXJ1biIKLSAgfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC9y
ZWFkbWUubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3JlYWRtZS5tZApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjFmYTUzNTc5MTMzODdmZTQ0NmY2MGNiOTIzMTMwYjA4Y2ZmOWViYy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxp
Z2h0L3JlYWRtZS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgRmxpZ2h0IFRv
ZG9NVkMgRXhhbXBsZQotCi0+IEZsaWdodCBpcyBhIGxpZ2h0d2VpZ2h0LCBjb21wb25lbnQtYmFz
ZWQgSmF2YVNjcmlwdCBmcmFtZXdvcmsgdGhhdCBtYXBzIGJlaGF2aW9yIHRvIERPTSBub2Rlcy4K
LQotPiBfW0ZsaWdodCAtIGZsaWdodGpzLmdpdGh1Yi5pb10oaHR0cDovL2ZsaWdodGpzLmdpdGh1
Yi5pbylfCi0KLQotIyMgTGVhcm5pbmcgRmxpZ2h0Ci0KLVRoZSBbRmxpZ2h0IHdlYnNpdGVdKGh0
dHA6Ly9mbGlnaHRqcy5naXRodWIuaW8pIGlzIGEgZ3JlYXQgcmVzb3VyY2UgZm9yIGdldHRpbmcg
c3RhcnRlZC4KLQotSGVyZSBhcmUgc29tZSBsaW5rcyB5b3UgbWF5IGZpbmQgaGVscGZ1bDoKLQot
KiBbR2l0SHViXShodHRwczovL2dpdGh1Yi5jb20vZmxpZ2h0anMvZmxpZ2h0KQotKiBbRGVtbyBB
cHBsaWNhdGlvbl0oaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmlvL2ZsaWdodC9kZW1vKQotKiBbSW5z
dGFsbGF0aW9uXShodHRwczovL2dpdGh1Yi5jb20vZmxpZ2h0anMvZmxpZ2h0L2Jsb2IvbWFzdGVy
L1JFQURNRS5tZCNpbnN0YWxsYXRpb24pCi0qIFtGbGlnaHQgb24gVHdpdHRlcl0oaHR0cDovL3R3
aXR0ZXIuY29tL2ZsaWdodCkKLQotX0lmIHlvdSBoYXZlIG90aGVyIGhlbHBmdWwgbGlua3MgdG8g
c2hhcmUsIG9yIGZpbmQgYW55IG9mIHRoZSBsaW5rcyBhYm92ZSBubyBsb25nZXIgd29yaywgcGxl
YXNlIFtsZXQgdXMga25vd10oaHR0cHM6Ly9naXRodWIuY29tL3Rhc3RlanMvdG9kb212Yy9pc3N1
ZXMpLl8KLQotCi0jIyBSdW5uaW5nIHRoZSBUZXN0cwotCi1UbyBydW4gdGhlIHRlc3RzLCB5b3Ug
bmVlZCB0byBpbnN0YWxsIGFkZGl0aW9uYWwgaGVscGVycyB2aWEgYm93ZXIgYW5kIG5wbSBhbmQK
LXJ1biBgbnBtIHRlc3RgIGFmdGVyd2FyZHM6Ci0KLWBgYGJhc2gKLWJvd2VyIGluc3RhbGwgJiBu
cG0gaW5zdGFsbAotbnBtIHRlc3QKLWBgYAotCi1Zb3UgY2FuIGFsc28gcnVuIGBrYXJtYSBzdGFy
dGAgYWZ0ZXIgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkIHRvCi1hdXRvbWF0aWNhbGx5
IHdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZS1ydW4gdGhlIHRlc3Qgc3VpdGUuCmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVu
Y3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvLmpzaGludHJjIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0
Ly5qc2hpbnRyYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkwMjMzY2VlYTcyOTU1
MDYwOWU5OTg1NjgwZTUwNDBjZGE1OTViOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvLmpzaGludHJjCisrKyAvZGV2
L251bGwKQEAgLTEsMzggKzAsMCBAQAotewotCSJub2RlIjogdHJ1ZSwKLQkiYnJvd3NlciI6IHRy
dWUsCi0JImVzbmV4dCI6IHRydWUsCi0JImJpdHdpc2UiOiB0cnVlLAotCSJjYW1lbGNhc2UiOiB0
cnVlLAotCSJjdXJseSI6IHRydWUsCi0JImVxZXFlcSI6IHRydWUsCi0JImltbWVkIjogdHJ1ZSwK
LQkiaW5kZW50IjogNCwKLQkibGF0ZWRlZiI6IHRydWUsCi0JIm5ld2NhcCI6IHRydWUsCi0JIm5v
YXJnIjogdHJ1ZSwKLQkicXVvdG1hcmsiOiAic2luZ2xlIiwKLQkicmVnZXhwIjogdHJ1ZSwKLQki
dW5kZWYiOiB0cnVlLAotCSJ1bnVzZWQiOiB0cnVlLAotCSJzdHJpY3QiOiB0cnVlLAotCSJ0cmFp
bGluZyI6IHRydWUsCi0JInNtYXJ0dGFicyI6IHRydWUsCi0JIndoaXRlIjogdHJ1ZSwKLQkianF1
ZXJ5IjogdHJ1ZSwKLQkiZ2xvYmFscyI6IHsKLQkJInJlcXVpcmVqcyI6IGZhbHNlLAotCQkiZGVz
Y3JpYmUiOiBmYWxzZSwKLQkJImRlc2NyaWJlQ29tcG9uZW50IjogZmFsc2UsCi0JCSJzZXR1cENv
bXBvbmVudCI6IGZhbHNlLAotCQkiaXQiOiBmYWxzZSwKLQkJImV4cGVjdCI6IGZhbHNlLAotCQki
YmVmb3JlRWFjaCI6IGZhbHNlLAotCQkiYWZ0ZXJFYWNoIjogZmFsc2UsCi0JCSJzcHlPbkV2ZW50
IjogZmFsc2UsCi0JCSJtb2NrcyI6IGZhbHNlLAotCQkicmVhZEZpeHR1cmVzIjogZmFsc2UsCi0J
CSJzcHlPbiI6IGZhbHNlCi0JfQotfQotCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rl
c3QvZml4dHVyZS9mb290ZXIuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL2Zv
b3Rlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2E4OTcyZmZiYjhhZGY2
ZmVmMDNmODk0MTgxNjIwMjhkOTUzNmExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL2Zvb3Rlci5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPGZvb3RlciBpZD0iZm9vdGVyIj48L2Zvb3Rl
cj4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL25ld190b2RvLmh0
bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3QvZml4dHVyZS9uZXdfdG9kby5odG1sCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTlmZmQyNWUwYzUxMGI3MjdlZjkyZDY1MjJhOGNlMzgw
MjUzNDBjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL25ld190b2RvLmh0bWwKKysrIC9kZXYvbnVsbApA
QCAtMSArMCwwIEBACi08aW5wdXQgaWQ9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0iV2hhdCBuZWVk
cyB0byBiZSBkb25lPyIgYXV0b2ZvY3VzPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90
ZXN0L2ZpeHR1cmUvdG9nZ2xlX2FsbC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L2ZpeHR1
cmUvdG9nZ2xlX2FsbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWQ1M2Rm
MWY2OWY1MDZmMzQ0OGJiZmE5NmJmODcyZjcyMjM3NjRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9maXh0dXJlL3Rv
Z2dsZV9hbGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTxpbnB1dCBpZD0idG9n
Z2xlLWFsbCIgdHlwZT0iY2hlY2tib3giPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90
ZXN0L21vY2svZGF0YXN0b3JlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L21vY2svZGF0YXN0
b3JlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmU4NmM0NjAxZjRhM2FiYWEy
NGExOGI2NDBmYmIwMDcwODcxOThjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9tb2NrL2RhdGFzdG9yZS5qcworKysg
L2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLShmdW5jdGlvbiAoKSB7Ci0gICAgJ3VzZSBzdHJp
Y3QnOwotCi0gICAgZnVuY3Rpb24gRmFrZURhdGFTdG9yZShkYXRhKSB7Ci0gICAgICAgIHRoaXMu
ZGF0YSA9IGRhdGEgfHwgWwotICAgICAgICAgICAge3RpdGxlOiAnYnV5IHNvbWUgdW5pY29ybnMn
LCBjb21wbGV0ZWQ6IGZhbHNlLCBpZDogJzEwOGU4YzUxLWJiM2YtNjA4ZC0xNWUyLTYxMWNmYzdl
NTgzOCd9LAotICAgICAgICAgICAge3RpdGxlOiAnZ2V0IGEgYmFndWV0dGUgbXVzdGFjaGUnLCBj
b21wbGV0ZWQ6IGZhbHNlLCBpZDogJzZjZGQwYTFmLWI2ZjgtMjFlMS1mMzViLWFhMThhZjk5YWQ5
MSd9LAotICAgICAgICAgICAge3RpdGxlOiAnc2hhdmUgeWFrcycsIGNvbXBsZXRlZDogdHJ1ZSwg
aWQ6ICdhYmU2NzhkZC0zMDg3LTE5OGMtZWVmYS0xODAyNDhjYjNkOGInfQotICAgICAgICBdOwot
ICAgIH0KLQotICAgIEZha2VEYXRhU3RvcmUucHJvdG90eXBlLmFsbCA9IGZ1bmN0aW9uIGFsbCgp
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTsKLSAgICB9OwotCi0gICAgRmFrZURhdGFTdG9y
ZS5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uIHNhdmUoZGF0YSkgewotICAgICAgICB0aGlzLmRh
dGEucHVzaChkYXRhKTsKLSAgICB9OwotCi0gICAgRmFrZURhdGFTdG9yZS5wcm90b3R5cGUuZGVz
dHJveUFsbCA9IGZ1bmN0aW9uIGRlc3Ryb3lBbGwoKSB7Ci0gICAgICAgIC8vIFN0dWIKLSAgICB9
OwotCi0gICAgd2luZG93Lm1vY2tzLkRhdGFTdG9yZSA9IEZha2VEYXRhU3RvcmU7Ci19KCkpOwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvZGF0YS9zdGF0c19zcGVjLmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRl
bmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvZGF0YS9zdGF0c19zcGVjLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjRhNDY1Njg1ZmM4NzQxZjgyZGM4MDdjZDI2YzRlMmY0
ODA3OWEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1l
eGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEvc3RhdHNfc3BlYy5qcworKysgL2Rldi9udWxs
CkBAIC0xLDU3ICswLDAgQEAKLWRlc2NyaWJlQ29tcG9uZW50KCdhcHAvanMvZGF0YS9zdGF0cycs
IGZ1bmN0aW9uICgpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICBkZXNjcmliZSgncmVjb3Vu
dCB3aXRob3V0IGRhdGFzdG9yZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgYmVmb3JlRWFjaChm
dW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBzZXR1cENvbXBvbmVudCh7Ci0gICAgICAgICAgICAg
ICAgZGF0YVN0b3JlOiBuZXcgbW9ja3MuRGF0YVN0b3JlKFtdKQotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3Vs
ZCB0cmlnZ2VyIGEgZGF0YVN0YXRzQ291bnRlZCBldmVudCcsIGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICAgIHNweU9uRXZlbnQoZG9jdW1lbnQsICdkYXRhU3RhdHNDb3VudGVkJyk7Ci0gICAgICAg
ICAgICB0aGlzLmNvbXBvbmVudC5yZWNvdW50KCk7Ci0gICAgICAgICAgICBleHBlY3QoJ2RhdGFT
dGF0c0NvdW50ZWQnKS50b0hhdmVCZWVuVHJpZ2dlcmVkT24oZG9jdW1lbnQpOwotICAgICAgICB9
KTsKLQotICAgICAgICBpdCgnc2hvdWxkIHRyaWdnZXIgZGF0YVN0YXRzQ291bnRlZCB3aGVuIHRv
ZG9zIGFyZSBsb2FkZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBzcHlPbkV2ZW50KGRv
Y3VtZW50LCAnZGF0YVN0YXRzQ291bnRlZCcpOwotICAgICAgICAgICAgJChkb2N1bWVudCkudHJp
Z2dlcignZGF0YVRvZG9zTG9hZGVkJyk7Ci0gICAgICAgICAgICBleHBlY3QoJ2RhdGFTdGF0c0Nv
dW50ZWQnKS50b0hhdmVCZWVuVHJpZ2dlcmVkT24oZG9jdW1lbnQpOwotICAgICAgICB9KTsKLQot
ICAgICAgICBpdCgnc2hvdWxkIHByb3ZpZGUgZW1wdHkgc3RhdHMnLCBmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgICBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVN0YXRzQ291bnRlZCcpOwotICAg
ICAgICAgICAgdGhpcy5jb21wb25lbnQucmVjb3VudCgpOwotICAgICAgICAgICAgZXhwZWN0KCdk
YXRhU3RhdHNDb3VudGVkJykudG9IYXZlQmVlblRyaWdnZXJlZE9uQW5kV2l0aChkb2N1bWVudCwg
ewotICAgICAgICAgICAgICAgIGFsbDogMCwKLSAgICAgICAgICAgICAgICByZW1haW5pbmc6IDAs
Ci0gICAgICAgICAgICAgICAgY29tcGxldGVkOiAwLAotICAgICAgICAgICAgICAgIGZpbHRlcjog
JycKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGRlc2NyaWJl
KCdyZWNvdW50IHdpdGggZGF0YXN0b3JlJywgZnVuY3Rpb24gKCkgewotICAgICAgICBiZWZvcmVF
YWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHNldHVwQ29tcG9uZW50KHsKLSAgICAgICAg
ICAgICAgICBkYXRhU3RvcmU6IG5ldyBtb2Nrcy5EYXRhU3RvcmUoKQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQgcHJvdmlkZSBmdWxsIHN0YXRzJywg
ZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFTdGF0
c0NvdW50ZWQnKTsKLSAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnJlY291bnQoKTsKLSAgICAg
ICAgICAgIGV4cGVjdCgnZGF0YVN0YXRzQ291bnRlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbkFu
ZFdpdGgoZG9jdW1lbnQsIHsKLSAgICAgICAgICAgICAgICBhbGw6IDMsCi0gICAgICAgICAgICAg
ICAgcmVtYWluaW5nOiAyLAotICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogMSwKLSAgICAgICAg
ICAgICAgICBmaWx0ZXI6ICcnCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7
Ci19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEvdG9kb3Nf
c3BlYy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
ZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL2RhdGEvdG9kb3Nfc3BlYy5qcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY2NTJjZWI5NmY0NjAzNDZkMjY2NjUxYjIx
OTBhYzk0ZGFkZjQ0ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2RlcGVu
ZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy9kYXRhL3RvZG9zX3NwZWMuanMKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1kZXNjcmliZUNvbXBvbmVudCgnYXBwL2pzL2RhdGEv
dG9kb3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgZGVzY3JpYmUo
J3dpdGhvdXQgZGF0YXN0b3JlJywgZnVuY3Rpb24gKCkgewotICAgICAgICBiZWZvcmVFYWNoKGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMuZGF0YVN0b3JlID0gbmV3IG1vY2tzLkRhdGFT
dG9yZShbXSk7Ci0gICAgICAgICAgICBzZXR1cENvbXBvbmVudCh7Ci0gICAgICAgICAgICAgICAg
ZGF0YVN0b3JlOiB0aGlzLmRhdGFTdG9yZQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIGl0KCdzaG91bGQgYWRkIGEgbmV3IGVudHJ5JywgZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgdmFyIHRpdGxlID0gJ2J1eSBzb21lIHVuaWNvcm5zJzsKLQotICAgICAgICAgICAg
c3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFUb2RvQWRkZWQnKTsKLSAgICAgICAgICAgIHRoaXMu
Y29tcG9uZW50LnRyaWdnZXIoJ3VpQWRkUmVxdWVzdGVkJywgewotICAgICAgICAgICAgICAgIHRp
dGxlOiB0aXRsZQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGV4cGVjdCgnZGF0YVRv
ZG9BZGRlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7Ci0gICAgICAgICAgICBl
eHBlY3QodGhpcy5kYXRhU3RvcmUuZGF0YS5sZW5ndGgpLnRvQmUoMSk7Ci0gICAgICAgICAgICBl
eHBlY3QodGhpcy5kYXRhU3RvcmUuYWxsKClbMF0udGl0bGUpLnRvQmUodGl0bGUpOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLQotICAgIGRlc2NyaWJlKCd3aXRoIGRhdGFzdG9yZScsIGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICB0aGlz
LmRhdGFTdG9yZSA9IG5ldyBtb2Nrcy5EYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIHNldHVwQ29t
cG9uZW50KHsKLSAgICAgICAgICAgICAgICBkYXRhU3RvcmU6IHRoaXMuZGF0YVN0b3JlCi0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3JlbW92ZXMgY29tcGxldGVk
JywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgc3B5T24odGhpcy5kYXRhU3RvcmUsICdkZXN0
cm95QWxsJyk7Ci0gICAgICAgICAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKCd1aUNsZWFyUmVx
dWVzdGVkJyk7Ci0gICAgICAgICAgICBleHBlY3QodGhpcy5kYXRhU3RvcmUuZGVzdHJveUFsbCku
dG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBjb21wbGV0ZWQ6IHRydWUgfSk7Ci0gICAgICAgIH0pOwot
ICAgIH0pOwotfSk7Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL3Vp
L25ld19pdGVtX3NwZWMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2RlcGVuZGVuY3ktZXhhbXBsZXMvZmxpZ2h0L3Rlc3Qvc3BlYy91aS9uZXdfaXRl
bV9zcGVjLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGQ0MjllOTdiYzc1NDhm
OGJkYzc2OGY2YjNlMTQ4MDFkMmVkYjZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVjL3VpL25ld19pdGVtX3Nw
ZWMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1kZXNjcmliZUNvbXBvbmVudCgn
YXBwL2pzL3VpL25ld19pdGVtJywgZnVuY3Rpb24gKCkgewotICAgICd1c2Ugc3RyaWN0JzsKLQot
ICAgIHZhciBFTlRFUl9LRVkgPSAxMzsKLQotICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewot
ICAgICAgICBzZXR1cENvbXBvbmVudChyZWFkRml4dHVyZXMoJ25ld190b2RvLmh0bWwnKSk7Ci0g
ICAgfSk7Ci0KLSAgICBpdCgndHJpZ2dlcnMgdWlBZGRSZXF1ZXN0ZWQgb24gZW50ZXInLCBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgIHZhciBldmVudCA9ICQuRXZlbnQoJ2tleWRvd24nKTsKLSAgICAg
ICAgZXZlbnQud2hpY2ggPSBFTlRFUl9LRVk7Ci0KLSAgICAgICAgc3B5T25FdmVudChkb2N1bWVu
dCwgJ3VpQWRkUmVxdWVzdGVkJyk7Ci0gICAgICAgIHRoaXMuY29tcG9uZW50LiRub2RlLnZhbCgn
c2hhdmUgbW9hciB5YWtzJyk7Ci0KLSAgICAgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcihldmVu
dCk7Ci0KLSAgICAgICAgZXhwZWN0KCd1aUFkZFJlcXVlc3RlZCcpLnRvSGF2ZUJlZW5UcmlnZ2Vy
ZWRPbkFuZFdpdGgoZG9jdW1lbnQsIHsKLSAgICAgICAgICAgIHRpdGxlOiAnc2hhdmUgbW9hciB5
YWtzJwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGl0KCd0cmltcyB2YWx1ZXMnLCBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgIHZhciBldmVudCA9ICQuRXZlbnQoJ2tleWRvd24nKTsKLSAgICAg
ICAgZXZlbnQud2hpY2ggPSBFTlRFUl9LRVk7Ci0KLSAgICAgICAgc3B5T25FdmVudChkb2N1bWVu
dCwgJ3VpQWRkUmVxdWVzdGVkJyk7Ci0gICAgICAgIHRoaXMuY29tcG9uZW50LiRub2RlLnZhbCgn
ICB0cmltIGlucHV0cyAnKTsKLQotICAgICAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKGV2ZW50
KTsKLQotICAgICAgICBleHBlY3QoJ3VpQWRkUmVxdWVzdGVkJykudG9IYXZlQmVlblRyaWdnZXJl
ZE9uQW5kV2l0aChkb2N1bWVudCwgewotICAgICAgICAgICAgdGl0bGU6ICd0cmltIGlucHV0cycK
LSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnaWdub3JlIGVtcHR5IHZhbHVlcycsIGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGV2ZW50ID0gJC5FdmVudCgna2V5ZG93bicpOwotICAg
ICAgICBldmVudC53aGljaCA9IEVOVEVSX0tFWTsKLQotICAgICAgICBzcHlPbkV2ZW50KGRvY3Vt
ZW50LCAndWlBZGRSZXF1ZXN0ZWQnKTsKLQotICAgICAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2Vy
KGV2ZW50KTsKLQotICAgICAgICBleHBlY3QoJ3VpQWRkUmVxdWVzdGVkJykubm90LnRvSGF2ZUJl
ZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7Ci0gICAgfSk7Ci19KTsKLQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4
YW1wbGVzL2ZsaWdodC90ZXN0L3NwZWMvdWkvc3RhdHNfc3BlYy5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGln
aHQvdGVzdC9zcGVjL3VpL3N0YXRzX3NwZWMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkxYzg4ZDM5NTljMGM4OWI0ZDJlYTViNTdiZTEzY2MyMjkyNjE5MGYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0
L3NwZWMvdWkvc3RhdHNfc3BlYy5qcworKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLWRl
c2NyaWJlQ29tcG9uZW50KCdhcHAvanMvdWkvc3RhdHMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgJ3Vz
ZSBzdHJpY3QnOwotCi0gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHNldHVw
Q29tcG9uZW50KHJlYWRGaXh0dXJlcygnZm9vdGVyLmh0bWwnKSk7Ci0gICAgfSk7Ci0KLSAgICBp
dCgncmVuZGVycyB3aGVuIHN0YXRzIGNoYW5nZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFy
IGRhdGEgPSB7Ci0gICAgICAgICAgICBhbGw6IDMsCi0gICAgICAgICAgICByZW1haW5pbmc6IDIs
Ci0gICAgICAgICAgICBjb21wbGV0ZWQ6IDEsCi0gICAgICAgICAgICBmaWx0ZXI6ICcnCi0gICAg
ICAgIH07Ci0gICAgICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC4kbm9kZSkudG9CZUVtcHR5KCk7
Ci0gICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2RhdGFTdGF0c0NvdW50ZWQnLCBkYXRhKTsK
LSAgICAgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LiRub2RlKS5ub3QudG9CZUVtcHR5KCk7Ci0g
ICAgICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC4kbm9kZSkudG9CZVZpc2libGUoKTsKLSAgICB9
KTsKLQotICAgIGl0KCdpcyBoaWRkZW4gd2hlbiBkYXRhIGlzIGVtcHR5JywgZnVuY3Rpb24gKCkg
ewotICAgICAgICB2YXIgZGF0YSA9IHsKLSAgICAgICAgICAgIGFsbDogMCwKLSAgICAgICAgICAg
IHJlbWFpbmluZzogMCwKLSAgICAgICAgICAgIGNvbXBsZXRlZDogMCwKLSAgICAgICAgICAgIGZp
bHRlcjogJycKLSAgICAgICAgfTsKLSAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcignZGF0YVN0
YXRzQ291bnRlZCcsIGRhdGEpOwotICAgICAgICBleHBlY3QodGhpcy5jb21wb25lbnQuJG5vZGUp
LnRvQmVIaWRkZW4oKTsKLSAgICB9KTsKLQotICAgIGl0KCdoaWRlcyBjbGVhci1jb21wbGV0ZWQg
d2l0aCBubyBjb21wbGV0ZWQgaXRlbXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBkYXRh
ID0gewotICAgICAgICAgICAgYWxsOiAyLAotICAgICAgICAgICAgcmVtYWluaW5nOiAyLAotICAg
ICAgICAgICAgY29tcGxldGVkOiAwLAotICAgICAgICAgICAgZmlsdGVyOiAnJwotICAgICAgICB9
OwotICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXIobnVsbCwgZGF0YSk7Ci0gICAgICAgIGV4
cGVjdCh0aGlzLmNvbXBvbmVudC5zZWxlY3QoJ2NsZWFyQ29tcGxldGVkU2VsZWN0b3InKS5sZW5n
dGgpLnRvQmUoMCk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvd3MgY2xlYXItY29tcGxldGVkIHdp
dGggY29tcGxldGVkIGl0ZW1zJywgZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgZGF0YSA9IHsK
LSAgICAgICAgICAgIGFsbDogMiwKLSAgICAgICAgICAgIHJlbWFpbmluZzogMSwKLSAgICAgICAg
ICAgIGNvbXBsZXRlZDogMSwKLSAgICAgICAgICAgIGZpbHRlcjogJycKLSAgICAgICAgfTsKLSAg
ICAgICAgdGhpcy5jb21wb25lbnQucmVuZGVyKG51bGwsIGRhdGEpOwotICAgICAgICBleHBlY3Qo
dGhpcy5jb21wb25lbnQuc2VsZWN0KCdjbGVhckNvbXBsZXRlZFNlbGVjdG9yJykubGVuZ3RoKS50
b0JlKDEpOwotICAgIH0pOwotCi0gICAgaXQoJ3RyaWdnZXJzIHVpQ2xlYXJSZXF1ZXN0ZWQgb24g
Y2xpY2snLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAg
YWxsOiAyLAotICAgICAgICAgICAgcmVtYWluaW5nOiAxLAotICAgICAgICAgICAgY29tcGxldGVk
OiAxLAotICAgICAgICAgICAgZmlsdGVyOiAnJwotICAgICAgICB9OwotICAgICAgICBzcHlPbkV2
ZW50KGRvY3VtZW50LCAndWlDbGVhclJlcXVlc3RlZCcpOwotICAgICAgICB0aGlzLmNvbXBvbmVu
dC5yZW5kZXIobnVsbCwgZGF0YSk7Ci0gICAgICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIodGhp
cy5jb21wb25lbnQuYXR0ci5jbGVhckNvbXBsZXRlZFNlbGVjdG9yLCAnY2xpY2snKTsKLSAgICAg
ICAgZXhwZWN0KCd1aUNsZWFyUmVxdWVzdGVkJykudG9IYXZlQmVlblRyaWdnZXJlZE9uKHRoaXMu
Y29tcG9uZW50KTsKLSAgICB9KTsKLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90
ZXN0L3NwZWMvdWkvdG9nZ2xlX2FsbF9zcGVjLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Nw
ZWMvdWkvdG9nZ2xlX2FsbF9zcGVjLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
MjZmYWYxODc1MDkxMTU5M2M5YjRmZDdmNjIxMTMzM2YzNjhhYWI4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5jeS1leGFtcGxlcy9mbGlnaHQvdGVzdC9zcGVj
L3VpL3RvZ2dsZV9hbGxfc3BlYy5qcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLWRl
c2NyaWJlQ29tcG9uZW50KCdhcHAvanMvdWkvdG9nZ2xlX2FsbCcsIGZ1bmN0aW9uICgpIHsKLSAg
ICAndXNlIHN0cmljdCc7Ci0KLSAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
c2V0dXBDb21wb25lbnQocmVhZEZpeHR1cmVzKCd0b2dnbGVfYWxsLmh0bWwnKSk7Ci0gICAgfSk7
Ci0KLSAgICBpdCgnY2hlY2sgdGhlIGNoZWNrYm94IHcvbyByZW1haW5pbmcnLCBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIHZhciBkYXRhID0gewotICAgICAgICAgICAgYWxsOiAyLAotICAgICAgICAg
ICAgcmVtYWluaW5nOiAwLAotICAgICAgICAgICAgY29tcGxldGVkOiAyLAotICAgICAgICAgICAg
ZmlsdGVyOiAnJwotICAgICAgICB9OwotICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdkYXRh
U3RhdHNDb3VudGVkJywgZGF0YSk7Ci0gICAgICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC4kbm9k
ZSkudG9CZUNoZWNrZWQoKTsKLSAgICB9KTsKLQotICAgIGl0KCd1bmNoZWNrIHRoZSBjaGVja2Jv
eCB3LyByZW1haW5pbmcnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZhciBkYXRhID0gewotICAg
ICAgICAgICAgYWxsOiAyLAotICAgICAgICAgICAgcmVtYWluaW5nOiAxLAotICAgICAgICAgICAg
Y29tcGxldGVkOiAxLAotICAgICAgICAgICAgZmlsdGVyOiAnJwotICAgICAgICB9OwotICAgICAg
ICAkKGRvY3VtZW50KS50cmlnZ2VyKCdkYXRhU3RhdHNDb3VudGVkJywgZGF0YSk7Ci0gICAgICAg
IGV4cGVjdCh0aGlzLmNvbXBvbmVudC4kbm9kZSkubm90LnRvQmVDaGVja2VkKCk7Ci0gICAgfSk7
Ci19KTsKLQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdodC90ZXN0L3Rlc3QtbWFpbi5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvZGVwZW5kZW5j
eS1leGFtcGxlcy9mbGlnaHQvdGVzdC90ZXN0LW1haW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE3MjY0Y2Y3MGE4YTQ5MWIyMmY3ODY1MjUzNWVlOWE4Y2Q0ZDdiOWIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9kZXBlbmRlbmN5LWV4YW1wbGVzL2ZsaWdo
dC90ZXN0L3Rlc3QtbWFpbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qanNo
aW50IGNhbWVsY2FzZTpmYWxzZSovCi0vKmdsb2JhbCBqYXNtaW5lKi8KLSd1c2Ugc3RyaWN0JzsK
LQotdmFyIHRlc3RzID0gT2JqZWN0LmtleXMod2luZG93Ll9fa2FybWFfXy5maWxlcykuZmlsdGVy
KGZ1bmN0aW9uIChmaWxlKSB7Ci0gICAgcmV0dXJuICgvX3NwZWNcLmpzJC8udGVzdChmaWxlKSk7
Ci19KTsKLQotd2luZG93Lm1vY2tzID0ge307Ci0KLXJlcXVpcmVqcy5jb25maWcoewotICAgIC8v
IEthcm1hIHNlcnZlcyBmaWxlcyBmcm9tICcvYmFzZScKLSAgICBiYXNlVXJsOiAnL2Jhc2UnLAot
Ci0gICAgcGF0aHM6IHsKLSAgICAgICAgZmxpZ2h0OiAnYm93ZXJfY29tcG9uZW50cy9mbGlnaHQn
LAotICAgICAgICBkZXBvdDogJ2Jvd2VyX2NvbXBvbmVudHMvZGVwb3QvZGVwb3QnLAotICAgICAg
ICB0ZXh0OiAnYm93ZXJfY29tcG9uZW50cy9yZXF1aXJlanMtdGV4dC90ZXh0JwotICAgIH0sCi0K
LSAgICAvLyBhc2sgUmVxdWlyZS5qcyB0byBsb2FkIHRoZXNlIGZpbGVzIChhbGwgb3VyIHRlc3Rz
KQotICAgIGRlcHM6IHRlc3RzLAotCi0gICAgLy8gc3RhcnQgdGVzdCBydW4sIG9uY2UgUmVxdWly
ZS5qcyBpcyBkb25lCi0gICAgY2FsbGJhY2s6IHdpbmRvdy5fX2thcm1hX18uc3RhcnQKLX0pOwot
Ci1qYXNtaW5lLmdldEZpeHR1cmVzKCkuZml4dHVyZXNQYXRoID0gJy9iYXNlL3Rlc3QvZml4dHVy
ZSc7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>